导航

不许杀人,也不许放火

« 搭FTP过程中碰到的问题heartbeat的一个小经验 »

ESXi用于生产环境的尝试

这几天来,将手上的一对授权DNS虚拟化并做了简单的HA。

先是前些天slave的那台硬件有问题,很不稳定,基本上跑个1天左右就挂掉,于是master单跑了一段时间。slave基本可以排除软件问题,考虑到毕竟是01年左右的服务器,也不想再去折腾了,向领导要了一台配置不怎么样的旧机器(再旧也比之前在用的那台强多了),装上ESXi4,跑两个Linux虚拟机,根据这一对主从DNS的配置需求,安装了bind,其中主DNS上还跑了一个不大的WEB服务(历史遗留问题)。两台虚拟机机器名分别为DNS21和DNS12。

测试正常后,将这两台虚拟机上线,替换掉原来的物理服务器。原物理服务器系统也重新做掉,换成ESXi,同样装两个虚拟机,bind主从,其中一台上加跑个WEB服务,机器名分别为DNS11,DNS22。

下面就是通过heartbeat做一个简单的HA,一遍任何一台虚拟机或者物理服务器挂掉以后能够持续提供服务。DNS11和DNS12一对HA,DNS21和DNS22一对。

这里有些偷懒,CRM的文档看了头疼,于是假设了bind和nginx服务总是正常的,只是做了一个浮动的IP地址,当某机器挂掉不通了以后,地址浮动到另一台上。对服务本身的健康没有检测——这或许需要第三方的仲裁,然后通过CRM切换脚本实现,懒得做了。

成对的两台机器上分别在hosts文件里加上:
 
使得相互能够通过机器名ping通。

然后就是安装和配置heartbeat:

直接yum install heartbeat,装上的是2.1.3的版本。

写几个配置文件,ha.cf,logd.cf等:

haresources里的IP就是浮动IP,两台机器的配置都一样,然后在两台机器上先启动一下服务,/etc/init.d/heartbeat start,这样能够在/var/lib/heartbeat/crm下生成一个cib.xml。我的理解是这个haresources里的配置在实际使用中应该是没用的,实际上在cib.xml文件里才是整整的资源配置。可能是没有cib.xml的时候才会去看这个配置,没仔细看文档,不深究了。

然后停掉服务以后编辑这个cib.xml,把里面原来的
<resources />
<constraints />

替换成
     <resources>
       <primitive id="ip_resource" class="ocf" type="IPaddr" provider="heartbeat">
         <instance_attributes id="33ddbb8f-c726-41de-9523-9f5abc513921">
           <attributes>
             <nvpair name="ip" value="XXX.XXX.XX.XXX" id="ced7854b-c6e8-4985-9bfb-1197ca5742b2"/>
             <nvpair name="nic" value="eth0" id="c4bed4cf-1435-48e1-a4ce-efdeeb6556e2"/>
             <nvpair name="cidr_netmask" value="27" id="b481fca5-e120-40bd-9cf7-00d9c198d54c"/>
           </attributes>
         </instance_attributes>
       </primitive>
     </resources>
     <constraints>
       <rsc_location id="run_ip_resource" rsc="ip_resource">
         <rule id="pref_run_ip_resource" score="100">
           <expression attribute="#uname" operation="eq" value="dns11" id="a31feeb8-ecd1-308c-9f90-6613b868d279"/>
         </rule>
       </rsc_location>
     </constraints>

上面的那个IP XXX.XXX.XX.XXX就是浮动IP,删掉这个目录下其他的cib.xml.*,然后启动服务,正常的话,服务能够正常起来。

服务启动后,通过crm_mon能够看到大致这样的信息:

接下来测试一下,关闭主用的虚拟机DNS11,对外的浮动IP就出现在备机DNS12上。

DNS21和DNS22同样操作,于是,用两台服务器形成一组主备+主从的DNS服务。由于这两台授权DNS上的域名变动并不频繁,因此在主备服务器之间只是通过rsync定时同步。

由于浮动IP切换以后,服务程序未必会重新bind(),因此上述HA实际上是有缺陷的,本来想看看heartbeat是不是有什么配置可以在资源切换后执行某些用户脚本,却没有啥收获。还好isc bind能够在named.conf里指定重新bind()的间隔,最短是1分钟,设置了最短时间以后,bind对外不响应最多也就是1分钟,对于我这个业务来说,基本可以认为没有影响。而nginx貌似是可以在浮动IP到手后直接生效的。

准备跑一段时间看看情况,如果效果好的话,计划把手上另一组主从DNS也换成这个模式,虚拟化+HA。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Search

控制面板

首页

最近发表

Powered By Z-Blog