基于corosync+pacemaker实现主从高可用集群

本实验由两个节点组成高可用主从集群,在实际中不常用,目的是通过实验来加深对corosync的认识和理解。

环境设置:
 
  
  
  
  
  1. node1:node1.magedu.com 
  2.    ip 172.16.14.10 
  3. node2:node2.magedu.com 
  4.    ip 172.16.14.11 
  5. VIP 172.16.14.2 
一:准备工作
1、DNS域名解析
 
   
   
   
   
  1. 用uname -n的结果来识别对方的名字 
  2.  
  3. 使node1,node2的uname -n分别为: 
  4. node1.magedu.com 
  5. node2.magedu.com 
  6.  
  7. node1: 
  8. # sed -i 's@\(HOSTNAME=\).*@\1node1.magedu.com@g'  /etc/sysconfig/network 
  9. # hostname node1.magedu.com 
  10.  
  11. node2: 
  12. # sed -i 's@\(HOSTNAME=\).*@\1node2.magedu.com@g' /etc/sysconfig/network 
  13. # hostname node2.magedu.comm 
  14.  
  15. 在/etc/hosts添加: 
  16. 172.16.14.10 node1.magedu.com node1 
  17. 172.16.14.11 node2.magedu.com node2 
2、node1,node2可以远程通信
  
  
  
  
  1. 在node1上: 
  2. ssh-keygen -t rsa -P '' 
  3. ssh-copy-id -i ~/.ssh/id_rsa root@node2 
  4.  
  5. 命令测试: 
  6. ssh node2 'ifconfig' 
  7. 然后再实现node2对node1的通信 
3、两个节点时间同步
  
  
  
  
  1. [root@node2 ~]# date 112822022012;ssh node1 'date 112822022012' 
  2. Fri Nov 28 22:02:00 CST 2012 
  3. Fri Nov 28 22:02:00 CST 2012 

4、在node1,node2上安装httpd

  
  
  
  
  1. # yum -y install httpd 
  2. 建立测试页面,为了便于区分,将页面结果设置为不同内容 
  3. node1上: 
  4. 编辑/var/www/html/index.html写入: 
  5. <h1>node1</h1> 
  6.  
  7. node2: 
  8. 编辑/var/www/html/index.html写入: 
  9. <h1>node2</h1> 
 
测试完成后;将两个节点的httpd服务关闭,并使之开机不能自动启动
   
   
   
   
  1. service httpd stop 
  2. chkconfig httpd off 
  3.  
  4. 关闭selinux 
  5. setenforce 0  
二:安装配置corosync
 
1、安装以下rpm包:
  
  
  
  
  1. cluster-glue 
  2. cluster-glue-libs 
  3. heartbeat 
  4. openaislib 
  5. resource-agentsyyu 
  6. corosync 
  7. heartbeat-libs 
  8. pacemaker 
  9. corosynclib 
  10. libesmtp 
  11. pacemaker-libs 
下载至本地/root后安装:
   
   
   
   
  1. # yum -y --nogpgcheck localinstall *.rpm 
2、配置corosync(以下命令在node1.magedu.com上执行) 
    
    
    
    
  1. # cd /etc/corosync 
  2. # cp corosync.conf.example corosync.conf 
  3.  
  4. # vim corosync.conf 
  5. 作如下修改: 
  6. version: 2          ##版本  
  7. secauth: on 
  8. threads: 1          ##线程数 
  9. bindnetaddr: 172.16.0.0    ##绑定的网段 
  10. mcastaddr: 226.94.14.14   ##使用的组播地址 
  11. to_syslog: no   ##是否将日志发送到日志文件系统 
  12.  
  13. //添加这个service可以实现pacemaker随corosync的启动而自动启动 
  14. service { 
  15.         ver:    0 
  16.         name:   pacemaker 
  17.  
  18. //定义ais的辅助运行用户和组的 
  19. aisexec {                
  20.         name:   root 
  21.         group:  root 
3、生成节点间通信时用到的认证密钥文件:
 
   
   
   
   
  1. # corosync-keygen 
  2. 将corosync和authkey复制至node2: 
  3. # scp -p corosync.conf  authkey  node2:/etc/corosync/ 
  4.  
  5. 分别为两个节点创建corosync生成的日志所在的目录: 
  6. # mkdir /var/log/cluster 
  7. # ssh node2  'mkdir /var/log/cluste 
4、启动corosync
   
   
   
   
  1. # service corosync start 
  2. #tail -50 /var/log/messages      ##查看日志信息 
  3.  
  4. # ssh node2 -- /etc/init.d/corosync start   ##启动node2 
5、查看状态:
   
   
   
   
  1. [root@node1 corosync]# crm 
  2. crm(live)# status 
  3. Current DC: node1.magedu.com - partition with quorum 
  4. Version: 1.1.5-1.1.el5-01e86afaaa6d4a8c4836f68df80ababd6ca3902f 
  5. 2 Nodes configured, 2 expected votes 
  6. 0 Resources configured. 
  7. ============ 
  8. Online: [ node1.magedu.com node2.magedu.com ] 
三:crm用法--crm是一个交互式的shell接口
  
  
  
  
  1. [root@node1 ~]# crm 
  2. crm(live)# help 
  3.  
  4. This is the CRM command line interface program. 
  5.  
  6. Available commands:         ##crm使用的子命令 
  7.  
  8.      cib              manage shadow CIBs                    ##集群信息库 
  9.      resource         resources management                  ##资源管理 
  10.      configure        CRM cluster configuration             ##集群配置 
  11.      node             nodes management                      ##节点管理 
  12.      options          user preferences 
  13.      ra               resource agents information center    ##资源代理 
  14.      status           show cluster status                   ##显示集群状态信息 
  15.      quit,bye,exit    exit the program                      ##退出程序 
  16.      help             show help                             ##帮助信息 
  17.      end,cd,up        go back one level                     ##返回上一层 
  18.  
  19. 最常用的有: 
  20. 1、集群的配置用configure: 
  21.  
  22. crm(live)# configure                  ##进入资源配置命令 
  23. crm(live)configure# help 
  24. primitive        define a resource      ##定义资源 
  25. group            define a group       ##定义组 
  26. location         a location preference  ##位置约束 
  27. colocation       colocate resources     ##排列约束 
  28. order            order resources        ##顺序约束 
  29. show             display CIB objects    ##显示信息 
  30. edit             edit CIB objects       ##进入编辑模式 
  31. delete           delete CIB objects     ##删除cib对象 
  32. commit           commit the changes to the CIB   ##提交信息 
  33.  verify           verify the CIB with crm_verify  ##检查语法错误 
  34.  
  35. 2、资源代理RA的信息: 
  36. crm(live)configure# cd 
  37. crm(live)# ra 
  38. crm(live)ra# help 
  39. Available commands: 
  40.      classes          list classes and providers             ##资源代理的类别 
  41.      list             list RA for a class (and provider)     ##显示每个类别的所有RA 
  42.      meta             show meta data for a RA             ##资源代理的元数据 
  43.      providers        show providers for a RA and a class   ##资源代理的提供者 
  44.      quit             exit the program 
  45.      help             show help 
  46.      end              go back one level 
  47.  
  48. crm(live)ra# classes                ##显示四种资源代理类别 
  49. heartbeat                           ##heartbaet V1版本 
  50. lsb                                 ## linux标准库 
  51. ocf / heartbeat pacemaker         ##Open cluster Framework 开放集群架构 
  52. stonith                             ##专为配置stonith设备而用 
  53.  
  54. crm(live)ra# list lsb               ##用list可以查看每个类别的 
  55. crm(live)ra# list ocf 
  56. AoEtarget           AudibleAlarm        CTDB 
  57. ClusterMon          Delay               Dummy 
  58.      
  59. crm(live)ra# list ocf heartbeat      ##查看ocf下的子类别 
  60. AoEtarget           AudibleAlarm        CTDB 
  61. ClusterMon          Delay               Dummy 
  62. EvmsSCC             Evmsd               Filesystem 
  63. ICP                 IPaddr              IPaddr2 
  64. //只显示部分;IPaddr是ocf类别下heartbeat子类别的资源代理;用于IP的代理;下面我们将用到 
  65.  
  66. crm(live)ra# meta ocf:heartbeat:IPaddr        ##用meta查看某个具体资源代理的属性 
  67.                                               ##使用方式  类别:子类别:资源代理 
  68.  
  69. Parameters (* denotes required, [] the default):   ##*表示必选的,[]表示默认值 
  70.  
  71. ip* (string): IPv4 address                    ##使用的参数;*表示必选的 
  72.     The IPv4 address to be configured in dotted quad notation, for example 
  73.     "192.168.1.1"
  74. ............... 
  75. Operations' defaults (advisory minimum):       ##默认的操作 
  76.  
  77.     start         timeout=20s                  ##启动超时时间 
  78.     stop          timeout=20s                  ##停止超时时间 
  79.     monitor       interval=5s timeout=20s      ##每隔5s监视一次,20s是超时时间 
  80.  
  81. 配置1个全局属性: 
  82. crm 
  83. configure 
  84. property stonith-enabled=false       ##是否启用stonish设备 
  85. verify   ##检查语法 
  86. commit    ##提交 
  87.  
  88. 接下来开始配置资源了: 
  89.  
  90. 定义资源用primitive,help一下: 
  91. crm(live)configure# help primitive 
  92. Usage: 
  93. ............... 
  94.         primitive  <rsc>  [<class>:[<provider>:]]<type> 
  95.                        资源        RA类别:提供者:哪个类型的RA 
  96.           [params attr_list]                        ##params是关键字,指定参数 
  97.           [meta attr_list]                          ##元数据属性 
  98.           [utilization attr_list]                     
  99.           [operations id_spec]                     ##操作 
  100.             [op op_type [<attribute>=<value>...] ...]   ##指定额外的属性;如超时时长 
 
四:集群资源配置:
 
1、下面来配置一个web IP的集群资源:
  
  
  
  
  1. crm(live)configure# primitive WebIP ocf:heartbeat:IPaddr  params ip="172.16.14.2" 
  2. crm(live)configure# verify 
  3. crm(live)configure# commit 
  4.  
  5. crm(live)configure# show 
  6. node node1.magedu.com 
  7. node node2.magedu.com 
  8. primitive WebIP ocf:heartbeat:IPaddr \ 
  9.      params ip="172.16.14.2" 
  10. property $id="cib-bootstrap-options" \ 
  11.      dc-version="1.1.5-1.1.el5-01e86afaaa6d4a8c4836f68df80ababd6ca3902f" \ 
  12.      cluster-infrastructure="openais" \ 
  13.      expected-quorum-votes="2" \ 
  14.      stonith-enabled="false" 
  15.  
  16. crm(live)configure# cd 
  17. crm(live)# status                     ##状态查看 
  18. ============ 
  19. Last updated: Sat Dec  1 11:12:19 2012 
  20. Stack: openais 
  21. Current DC: node1.magedu.com - partition with quorum 
  22. Version: 1.1.5-1.1.el5-01e86afaaa6d4a8c4836f68df80ababd6ca3902f 
  23. 2 Nodes configured, 2 expected votes 
  24. 1 Resources configured. 
  25. ============ 
  26.  
  27. Online: [ node1.magedu.com node2.magedu.com ] 
  28.  
  29. WebIP     (ocf::heartbeat:IPaddr):     Started node1.magedu.com 
  30. //发现WebIP运行在node1上 
  31. //ifconfig查看;172.16.14.2在node1上 
  32. [root@node1 ~]# ifconfig 
  33. eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:76:E9:56  
  34.           inet addr:172.16.14.2  Bcast:172.16.255.255  Mask:255.255.0.0 
  35.           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1 
  36.           Interrupt:67 Base address:0x2000  
2、添加WebServe资源:
   
   
   
   
  1. crm(live)configure# primitive WebServer lsb:httpd 
  2. crm(live)configure# verify 
  3. crm(live)configure# commit 
  4. crm(live)configure# show           
  5. node node1.magedu.com 
  6. node node2.magedu.com 
  7. primitive WebIP ocf:heartbeat:IPaddr \ 
  8.      params ip="172.16.14.2" 
  9. primitive WebServer lsb:httpd           ##显示WebServe 
  10. property $id="cib-bootstrap-options" \ 
  11.      dc-version="1.1.5-1.1.el5-01e86afaaa6d4a8c4836f68df80ababd6ca3902f" \ 
  12.      cluster-infrastructure="openais" \ 
  13.      expected-quorum-votes="2" \ 
  14.      stonith-enabled="false" 
  15.  
  16. crm(live)configure# cd 
  17. crm(live)# status 
  18. WebIP     (ocf::heartbeat:IPaddr):     Started node1.magedu.com 
  19. WebServer     (lsb:httpd):     Started node2.magedu.com 
  20. //发现WebServer在node2上;默认资源是负载均衡模式的。多个 
  21. 资源运行在多个节点上的,我们要想把资源运作在一个节点上; 
  22. 可以通过定义组来实现: 
  23. 下面将WebIP,WebServer定义在一个Webservice组中; 
  24. crm(live)configure# group Webservice WebIP WebServer 
  25.  
  26. crm(live)configure# cd 
  27. crm(live)# status 
  28. Resource Group: Webservice             ##发现Webservice 
  29.      WebIP     (ocf::heartbeat:IPaddr):     Started node1.magedu.com 
  30.      WebServer     (lsb:httpd):     Started node1.magedu.com 
  31. //有上面得知,定义组后WebIP, WebServer都运行在node1上了 
  32. //通过访问172.16.14.2,只显示node1的页面内容; 
  33.  
  34. 把node1为standby: 
  35. [root@node1 ~]# crm node standby 
  36. [root@node1 ~]# crm status 
  37. ============ 
  38. Last updated: Sat Dec  1 11:46:27 2012 
  39. Stack: openais 
  40. Current DC: node1.magedu.com - partition with quorum 
  41. Version: 1.1.5-1.1.el5-01e86afaaa6d4a8c4836f68df80ababd6ca3902f 
  42. 2 Nodes configured, 2 expected votes 
  43. 1 Resources configured. 
  44. ============ 
  45.  
  46. Node node1.magedu.com: standby          ##node1已为standby 
  47. Online: [ node2.magedu.com ] 
  48.  
  49. Resource Group: Webservice 
  50.      WebIP     (ocf::heartbeat:IPaddr):     Started node2.magedu.com 
  51.      WebServer     (lsb:httpd):     Started node2.magedu.com 
  52. //说明资源都转移到node2上面了 
  53. //此时页面也显示为node2的测试内容了 
  54. 这样就完成了角色转换了 
  55.  
  56. 下面让node2为standby:node1为online: 
  57. [root@node1 ~]# crm node online 
  58. [root@node1 ~]# crm status 
  59. ============ 
  60. Last updated: Sat Dec  1 12:12:56 2012 
  61. Stack: openais 
  62. Current DC: node1.magedu.com - partition with quorum    ##没有达到法定票数 
  63. Version: 1.1.5-1.1.el5-01e86afaaa6d4a8c4836f68df80ababd6ca3902f 
  64. 2 Nodes configured, 2 expected votes 
  65. 1 Resources configured. 
  66. ============ 
  67.  
  68. Node node2.magedu.com: standby 
  69. Online: [ node1.magedu.com ] 
  70.  
  71. Resource Group: Webservice 
  72.      WebIP     (ocf::heartbeat:IPaddr):     Started node1.magedu.com 
  73.      WebServer     (lsb:httpd):     Started node1.magedu.com 
  74.  
  75. //对于两个节点的集群,不具备法定票数也允许运行;有以下措施: 
  76. crm(live)configure# property no-quorum-policy=ignore    ##不具备法定票数忽略 
  77. crm(live)configure# verify 
  78. crm(live)configure# commit  
3、下面通过约束关系来管理资源;这需要删除前面定义的组:
    需先停止资源运行,再删除组
 
    
    
    
    
  1. crm(live)resource# stop Webservice  ##停止资源运行
  2. crm(live)resource# cd 
  3. crm(live)# configure 
  4. crm(live)configure# delete Webservice 
  5. 提交查看结果; 
  6. WebIP,WebServer又以独立资源运行起来了 
  7.  
  8. 1)、定义排序约束;(两个资源必须在一起或不在一起) 
  9.  
  10. crm(live)configure# colocation WebServer_with_WebIP inf:  
  11. WebServer WebIP 
  12. 提交后查看: 
  13. crm(live)configure# show xml     
  14.  <rsc_colocation id="WebServer_with_WebIP" rsc="WebServer"  
  15.  score="INFINITY" with-rsc="WebIP"/> 
  16. //说明这两个资源必须在一起 
  17.  
  18. crm(live)# status 
  19. Online: [ node1.magedu.com node2.magedu.com ] 
  20.  
  21. WebIP     (ocf::heartbeat:IPaddr):     Started node1.magedu.com 
  22. WebServer     (lsb:httpd):     Started node1.magedu.com 
  23. // 两个资源在一个节点运行 
  24. //通过浏览去访问为node1的页面 
  25.  
  26. 让节点1为standby: 
  27. crm(live)# node standby 
  28. crm(live)# status 
  29. WebIP     (ocf::heartbeat:IPaddr):     Started node2.magedu.com 
  30. WebServer     (lsb:httpd):     Started node2.magedu.com 
  31. //资源转移到node2上 
  32.  
  33. 2)、用顺序约束可以让资源按一前一后顺序启动: 
  34.  
  35. crm(live)configure# order WebServer_after_webIP mandatory: WebIP  
  36. WebServer 
  37. crm(live)configure# verify 
  38. crm(live)configure# commit 
  39. crm(live)configure# show xml 
  40.  <rsc_order first="WebIP" id="WebServer_after_webIP"  
  41.  score="INFINITY" then="WebServer"/> 
  42.  
  43. //先启动WebIP;再启动WebServe 
  44.  
  45. 3)、用位置约束定义一个资源停留在一个节点上的倾向性有多大 
  46. crm(live)configure# location WebIP_on_node1 WebIP 500:  
  47. node1.magedu.com 
  48. //WebIP停留在node1的倾向值为500; 
  49. crm(live)configure# verify 
  50. crm(live)configure# commit 
  51. crm(live)configure# show 
  52.  
  53. crm(live)# node standby        ##节点1standby 
  54. crm(live)# status 
  55. Node node1.magedu.com: standby 
  56. Online: [ node2.magedu.com ] 
  57. WebIP     (ocf::heartbeat:IPaddr):     Started node2.magedu.com 
  58. WebServer     (lsb:httpd):     Started node2.magedu.com 
  59. //资源转移到node2上 
  60.  
  61. crm(live)# node online    ##node1为online;发现资源回到node1上 
 
资源配置的结果:
   
   
   
   
  1. crm(live)configure# show 
  2. node node1.magedu.com \ 
  3.      attributes standby="off" 
  4. node node2.magedu.com \ 
  5.      attributes standby="off" 
  6. primitive WebIP ocf:heartbeat:IPaddr \ 
  7.      params ip="172.16.14.2" 
  8. primitive WebServer lsb:httpd 
  9. location WebIP_on_node1 WebIP 500: node1.magedu.com 
  10. colocation WebServer_with_WebIP inf: WebServer WebIP 
  11. order WebServer_after_webIP inf: WebIP WebServer 
  12. property $id="cib-bootstrap-options" \ 
  13.      dc-version="1.1.5-1.1.el5-01e86afaaa6d4a8c4836f68df80ababd6ca3902f" \ 
  14.      cluster-infrastructure="openais" \ 
  15.      expected-quorum-votes="2" \ 
  16.      stonith-enabled="false" \ 
  17.      no-quorum-policy="ignore" 
 

你可能感兴趣的:(高可用,主从,pacemaker,corosync)