通过corosync+pacemaker实现集群的高可用性

 

说明:
如图:
         
  
  
  
  
  1.  
  2. 1 本实验有两个接点node1.a.rog node2.a.org 相对应的ip分别是  
  3. 192.168.0.21   192.168.0.22   
  4. 2 集群的服务时apache 的httpd服务  
  5. 3 提供web服务的地址为192.168.0.100  
 
配置过程:
        
1 配置ip (两节点都需配置,以节点一为例)
          
  
  
  
  
  1. Vim /etc/sysconfig/network-scripts/ifcfg-eth0  
  2.  DEVICE=eth0 
  3.  BOOTPROTO=static 
  4.  IPADDR=192.168.0.21  
  5.  NETMASK=255.255.255.0  
  6.  ONBOOT=yes 
  7.  HWADDR=00:0c:29:a2:fa:bb 
  
2 所有节点的主机名称和对应的IP地址解析服务可以正常工作,且每个节点的主机名称需要跟"uname -n“命令的结果保持一致;因此,需要保证两个节点上的/etc/hosts文件均为下面的内容:#############分别在两节点上进行
         
  
  
  
  
  1. 192.168.0.21     node1.a.org node1  
  2. 192.168.0.22     node2.a.org node2  
        
3 配置主机名,使其与使用" uname –n" 显示的一致,分别在各节点执行如下的命令,使其生效
 Hostname node1.a.org
        
  
  
  
  
  1. Vim /etc/ sysconfig/network  
  2.   NETWORKING=yes 
  3.   NETWORKING_IPV6=no 
  4.   HOSTNAME=node1.a.com 
        
4 设定两节点间可以基于密钥进行ssh通信,并且可以不用密码以root身份互相访问
  
  
  
  
  1. Node1:  
  2.  ssh-keygen -t rsa  
  3.  ssh-copy-id -i ~/.ssh/id_rsa.pub root@node2  
  4. Node2:  
  5.  ssh-keygen -t rsa  
  6.  ssh-copy-id -i ~/.ssh/id_rsa.pub root@node1 
5 下载安装软件,安装所需的软件包有:
         
  
  
  
  
  1. cluster-glue-1.0.6-1.6.el5.i386.rpm       libesmtp-1.0.4-5.el5.i386.rpm  
  2. cluster-glue-libs-1.0.6-1.6.el5.i386.rpm openais-1.1.3-1.6.el5.i386.rpm  
  3. corosync-1.2.7-1.1.el5.i386.rpm           openaislib-1.1.3-1.6.el5.i386.rpm  
  4. corosynclib-1.2.7-1.1.el5.i386.rpm        pacemaker-1.0.11-1.2.el5.i386.rpm  
  5. heartbeat-3.0.3-2.3.el5.i386.rpm          perl-TimeDate-1.16-5.el5.noarch.rpm  
  6. heartbeat-libs-3.0.3-2.3.el5.i386.rpm     resource-agents-1.0.4-1.1.el5.i386.rpm  
  7. pacemaker-libs-1.0.11-1.2.el5.i386.rpm  
          
  
  
  
  
  1. Cd /root/cluster  
  2. yum -y --nogpgcheck localinstall *.rpm  
 配置corosync 。以下命令在node1.a.rog上执行
        
  
  
  
  
  1. cd /etc/corosync  
  2. cp corosync.conf.example corosync.conf  
         vim corosync.conf
         
  
  
  
  
  1. # Please read the corosync.conf.5 manual page  
  2. compatibility: whitetank  
  3. totem {               ##定义多个node节点之间实现心跳信息传递的相关协议详细信息          
  4. version: 2  
  5.         secauth: off  ##是否打开安全认证  
  6.         threads: 0  
  7.         interface {  
  8.                 ringnumber: 0  
  9.                 bindnetaddr: 192.168.0.0      ##通过哪个网段进行通信  
  10.                 mcastaddr: 226.94.1.1         ##多播地址  
  11.                 mcastport: 5405               ##多播端口  
  12.         }  
  13. }  
  14. logging {  
  15.         fileline: off         
  16.         to_stderr: no                ##是否将错误信息发送到标准错误输出  
  17.         to_logfile: yes              ##是否写入日志文件  
  18.         to_syslog: yes               ##是否写到系统日志进程上去  
  19.         logfile: /var/log/cluster/corosync.log      ##需要手动去建立这个路径  
  20.         debug: off  
  21.         timestamp: on  
  22.         logger_subsys {  
  23.                 subsys: AMF  
  24.                 debug: off  
  25.         }  
  26. }   
  27. amf {  
  28.         mode: disabled  
  29. }   
  30. service {  
  31.         ver:0  
  32.         name:pacemaker      ##表明我们要启动pacemaker  
  33. }   
  34. aisexec {  
  35.         user:root           ##定义启动的身份和组  
  36.         group:root  
  37. }  
  38.  
6  生成节点间通信时用到的认证密钥文件
         
  
  
  
  
  1. corosync-keygen  ###在/etc/corosync下生成authkey文件  
  2. scp -p corosync authkey node2:/etc/corosync/   
  3. mkdir /var/log/cluster ##创建corosync生成的日志文件所在的目录  
  4. ssh node2 'mkdir /var/log/cluster' ##在node1上使用ssl为node2创建目录  
       

7 启动corosync 

  
  
  
  
  1. /etc/init.d/corosync start 
 在node1上验证corosync配置的正确性,如下所示,证明我们corosync的配置过程没有问题


 

  
  
  
  
  1. 在node1上查看corsync引擎是否正常启动:  
  2. grep -e "Corosync Cluster Engine" -e "configuration file" /var/log/messages  
  3. 查看初始化成员节点通知是否正常发出:  
  4. grep TOTEM /var/log/messages  
  5. 检查启动过程中是否有错误产生:  
  6. grep ERROR: /var/log/messages | grep -v unpack_resources  
  7. 查看pacemaker是否正常启动:  
  8. grep pcmk_startup /var/log/messages 
启动node2的corosync
    
  
  
  
  
  1. ssh node2 ‘/etc/init.d/corosync start’  
         
node2 启动后,node1和node2就形成了群节点,使用下面的命令可以查看群节点的启动状态
         
  
  
  
  
  1. #crm status     
  2. ============  
  3. Last updated: Tue Jun 14 19:07:06 2011  
  4. Stack: openais  
  5. Current DC: node1.a.org - partition with quorum  
  6. Version: 1.0.11-1554a83db0d3c3e546cfd3aaff6af1184f79ee87  
  7. 2 Nodes configured, 2 expected votes  
  8. 0 Resources configured. 
  9. ============      
  10. Online: [ node1.a.org node2.a.org ] 
       
8 配置集群的工作属性:
由于corosync默认启用了stonith,而当前集群没有相应的stonith设备,所以这个默认配置目前上不可用,我们可以通过一个检查语法或者逻辑错误的命令来验证,如出现以下信息说明有错误,因此我们就要禁用stonith来避免这种错误
  
  
  
  
  1. # crm_verify –L  
  2. crm_verify[5202]: 2011/06/14_19:10:38 ERROR: unpack_resources: Resource start-up disabled since no STONITH resources have been defined  
  3. crm_verify[5202]: 2011/06/14_19:10:38 ERROR: unpack_resources: Either configure some or disable STONITH with the stonith-enabled option  
  4. crm_verify[5202]: 2011/06/14_19:10:38 ERROR: unpack_resources: NOTE: Clusters with shared data need STONITH to ensure data integrity Errors found during check: config not valid -V may provide more details  
         
  
  
  
  
  1. # crm configure property stonith-enabled=false 
  2. # commit     #########提交会立即生效  
禁用stonith后我们可以查看下当前的配置信息      


 

  
  
  
  
  1. # crm configure show  
  2. node node1.a.org  
  3. node node2.a.org  
  4. property $id="cib-bootstrap-options" 
  5. dc-version="1.0.111554a83db0d3c3e546cfd3aaff6af1184f79ee87" 
  6. cluster-infrastructure="openais"   
  7. expected-quorum-votes="2"   
  8. stonith-enabled="false  
      
9 下面就是为机群添加资源了
          
  
  
  
  
  1. # crm configure primitive WebIP ocf:heartbeat:IPaddr params ip=192.168.0.100   ##为web集群创建一个ip地址源,能够在通过集群提供web服务时使用  
  2. # crm status ##通过这个命令可以看出ip资源已经在node1.a.org上启动      
  3. ============  
  4. Last updated: Tue Jun 14 19:31:05 2011  
  5. Stack: openais  
  6. Current DC: node1.a.org - partition with quorum  
  7. Version: 1.0.11-1554a83db0d3c3e546cfd3aaff6af1184f79ee87  
  8. 2 Nodes configured, 2 expected votes  
  9. 1 Resources configured. 
  10. ============  
  11.     Online: [ node1.a.org node2.a.org ]  
  12.    
  13. WebIP       (ocf::heartbeat:IPaddr): Started node1.a.org  ####ip资源已在node1上启用 ,当然也可以在node1 上执行ifconfig命令,eth0的别名的ip  
在node2上停止node1的corosync服务会


 

  
  
  
  
  1. # ssh node1 ‘/etc/init.d/corosync stop’  
  2. # crm status   再次查看集群的工作状态  
  3. ============  
  4. Last updated: Tue Jun 14 19:37:23 2011  
  5. Stack: openais  
  6. Current DC: node2.a.org - partition WITHOUT quorum  
  7. Version: 1.0.11-1554a83db0d3c3e546cfd3aaff6af1184f79ee87  
  8. 2 Nodes configured, 2 expected votes  
  9. 1 Resources configured. 
  10. ============  
  11.    
  12. Online: [ node2.a.org ]  
  13. OFFLINE: [ node1.a.org ]  
通过上面的信息我们发现node1.a.org已经离线,但是Webip的资源却没有在node2.a.org上启动,因为这时候的集群状态是“without quorum",没有了quorum,node2就不能接管资源,集群就不能正常运行了。我们可以同过下面的命令忽略quorum不能满足集群状态的检查
          
  
  
  
  
  1. # crm configure property no-quorum-policy=ignore 
  2. # crm configure rsc_defaults resource-stickiness=100#############
  3. 将Webip资源的黏性值设为100这样可以使当node1出现故障时,资源流转到node2上,
  4. 当node1又恢复正常时,资源不会再流回到node1,避免了资源在流动过程中造成的无法正常访问,  
  5. 保证了集群的高可用性  
10  结合上面已经配置好的ip地址资源,将此集群配置成为一个active/passive模型的web(httpd)服务集群
 
1)在每个节点上安装httpd,并在每个节点上添加网页文件
   
  
  
  
  
  1. node1:  
  2. Yum install -y httpd  
  3. echo "<h1>Node1.a.org</h1>> /var/www/html/index.html  
  4. node2:  
  5. echo "<h1>Node2.a.org</h1>> /var/www/html/index.html  
  6. chkconfig httpd off #######开机不会自动启动httpd  
          
           
2) 新建资源 WebSite
        
  
  
  
  
  1. # crm configure primitive Webserver lsb:httpd  
  2. # crm configure commit #######提交生效  
  3. # crm configure show ############   显示资源的信息状态  
  4. # crm status   ##########可以看出新建的资源在node2上启动,这是集群尽量负载均衡资源的  
    
3)把这两个资源在同一接点上运行有两种方法:
1把这两种资源配置组
2将两个资源定义成约束(排列,次序)
下面我们将这两种资源定义成组
          
  
  
  
  
  1. #crm configure group Web WebIP Webserver #############其中Web是组名  
  2. # crm configure commit  
  3. # crm configure show  
  4. 这样就将WebIP Webserver 添加到组Web中了。使他们在同一个接点上运行了。  
  5. 这时,我们再查看下资源的运行 状态  
  6. # crm status  
  7. 可以看出这两个起源都在node1上运行了  
 
11 验证集群的工作是否正常,在浏览器中输入http://192.168.0.100
 

在node2上关闭node1的corosync,再次在浏览器中输入ip查看显示的网页信息
 

这样就我们就简单实现web服务的高可用了·····

你可能感兴趣的:(职场,休闲,pacemaker,corosync)