前言:heartbeat虽然为Linux-HA开源项目发布的高可靠应用环境集群服务的核心软件,但是corosync作为后期之秀越来越受到人们的青睐,越来越多的人在构建新的HA应用选择使用corosync。下面我就就个人对它的理解简单的介绍一下关于corosync的应用。


一、corosync、pacemaker各自是什么?

       corosync是用于高可用环境中的提供通讯服务的,它位于高可用集群架构中的底层,扮演着为各节点(node)之间提供心跳信息传递这样的一个角色;

       pacemaker是一个开源的高可用资源管理器,位于HA集群架构中资源管理、资源代理这么个层次,它不能提供底层心跳信息传递的功能,它要想与对方节点通信需要借助底层的心跳传递服务,将信息通告给对方。通常它与corosync的结合方式有两种:

       1、pacemaker作为corosync的插件运行;

       2、pacemaker作为独立的守护进程运行;


二、用corosync+pacemaker实现一个web高可用的测试实例

       A、安装配置corosync服务:

           1、准备工作:

               同步各node的时间;

               建立双机互信,实现互信登陆;

               规划资源:webip:192.168.1.100        webserver:nginx (web服务默认不要开机启动)  

   

           2、安装corosync+pacemaker:

               # sudo apt-get install corosync pacemaker

               # sudo vim /etc/default/corosync

               # START=yes  改成yes

   

           3、配置corosync:

                   totem {

                           version: 2                #版本号

                           secauth: on            #是否开启安全认证

                           threads: 0               #多少个线程,0 为无限制

                           interface {

                                   ringnumber: 0                            #循环传递次数

                                   bindnetaddr: 192.168.1.0        #绑定的网卡地址(在那个网卡上传递心跳信息)

                                   mcastaddr: 226.94.14.12         #组播地址

                                   mcastport: 5405                        #组播端口

                                   ttl: 1

                           }

                   }

                   logging {

                           fileline: off

                           to_stderr: no                           #是否发送标准错误输出(建议关闭)

                           to_logfile: yes                        #是否开启日志

                           to_syslog: no                         #是否开启系统日志,to_logfile开启了就没必要多记录一份

                           logfile: /var/log/cluster/corosync.log     #日志存放路径,须手动创建目录

                           debug: off

                           timestamp: on                        #日志中是否记录时间戳(可以关闭,如果两台机器时间是同步的,记录日志的时候需要向内核询问时间,增加了系统调用)

                           logger_subsys {

                                   subsys: AMF

                                   debug: off

                           }

                   }

                   service {                            #添加支持使用Pacemaker

                           ver:   0

                           name:  pacemaker

                   }

                   aisexec {                            #是否使用openais,有时可能会用到

                           user:  root

                           group: root

                   }

   

               4、生成authkey,并复制文件至另一个节点

                    # sudo corosync-keygen

                   # sudo scp -p /etc/corosync/authkey corosync.conf @:/home/

                   注意复制的时候保持文件权限(用户名、用户组)

   

               5、检测NetworkManager是否开机启动,如果是关闭

                       # sudo chkconfig --list network-manager

                       # sudo chkconfig network-manager off

                       # sudo service network-manager stop

                       查看开启启动项管理工具

                       # sudo apt-get install sysv-rc-conf

                       # sudo sysv-rc-conf


      B、启动检查corosync服务情况:

               1、启动corosync

                   # sudo mkdir /var/log/cluster     在/var/log/创建cluster文件夹用来存放log

                   # sudo service corosync start

                   # sudo tail /var/log/cluster/corosync.log  日志


                  查看corosync引擎是否正常启动:

                  # sudo grep -e "Corosync Cluster Engine" -e "configuration file" /var/log/cluster/corosync.log

           

                  查看初始化成员节点通知是否正常发出:

                  # sudo grep  TOTEM  /var/log/cluster/corosync.log

           

                  检查启动过程中是否有错误产生。下面的错误信息表示packmaker不久之后将不再作为corosync的插件运行,因此,建议使用cman作为集群基础架构服务;此处可安全忽略。

                  # sudo grep ERROR: /var/log/cluster/corosync.log | grep -v unpack_resources

           

                  查看pacemaker是否正常启动:

                  # sudo grep pcmk_startup /var/log/cluster/corosync.log

           

                 # ps auxf

                 # sudo netstat -tunlp

                 # sudo netstat -tunlp | grep corosync


       C、配置资源(crm):

                1、

                  # sudo crm configure show                     查看配置

                  # sudo crm resource status                     查看所有资源状态

                  # sudo crm resource status webip         查看某一资源

                  # sudo crm resource stop webip            停止某一资源

                  # sudo crm resource start webip            启动某一资源

                 由于双节点,没有配置stonith设备,所以关闭stonith及忽略quorum,否则资源无法转移

                  # sudo crm configure property stonith-enabled=false

                  # sudo crm configure property no-quorum-policy=ignore


               2、定义资源

                  # sudo crm

                  # configure

                  # help                                        查看定义帮助

                  # 定义一个IP

                  # primitive webip ocf:heartbeat:IPaddr params ip = 192.168.1.100

                  # show

                  # verify                                      检查语法

                  # commit                                  提交(可以定义多个资源一起提交)

                  # sudo crm configure primitive webserver lsb:nginx


               3、定义组资源

                  # sudo crm configre

                  # help group

                  # group <组名> <资源...>

                  # group webservice webip webserver


               4、定义资源位置约束

                  # sudo crm

                  # configure

                  # location <名> <资源> {倾向运行的节点node_pref|rules}

                  # location webservice_prefer_node2 webservice 500: ubuntu-002


               5、定义资源顺序约束

                 # sudo crm

                 # configure

                 # help order

                 # order score-type: [:] [:]

                 # order webserver_after_webip mandatory: webserver webip

                 # delete webserver_after_webip        删除

                 # order webip_before_webserver mandatory: webip webserver

                 # show xml

           

              6、定义资源排列约束

                 # sudo crm

                 # configure

                 #

                 # colocation webip_with_webserver inf: webip webserver

           

             7、定义资源监控

                # sudo crm

                # resource stop webip          #停用资源

                # configure

                # delete webip                      #删除资源重新定义

                                 # primitive webip ocf:heartbeat:IPaddr params ip=192.168.1.100 op monitor intrtval=20 timeout=20 on-fail=restart   #监控时间跟超时间不要小于默认时间否则会报警

                # verify

                # commit

                # primitive webserver lsb:nginx op monitor interval=20 timeout=20 on-fail=restart


三、测试  

    182906492.jpg

   

       web服务运行在node1上,切换服务在node1上执行 sudo crm node standby,效果如下图:

HA应用之 -- corosync+pacemaker_第1张图片