corosync+pacemaker+nfs+crmsh配置web服务的高可用

测试环境:

          OS:rhel6.4

          web1: 192.168.1.121  httpd corosync pacemaker  crmsh

          web2: 192.168.1.122  httpd corosync pacemaker

          web3: 192.168.1.125  httpd nfs

          VIP:192.168.1.160

PS:注意这里的测试环境是干净的,啥也没安装。。。go on !!

一、安装corosync和pacemaker之前的准备工作

      1.节点名称(各个节点通过节点名称来通信的)确保集群的每个节点的名称都能互相解析

          编辑/etc/sysconfig/network 文件

                HOSTNAME=web1.luochen.com

          编辑/etc/hosts 文件

                192.168.1.121 web1.luochen.com web1 

                192.168.1.122 web2.luochen.com web2

           # sysctl kernel.hostname=web1.luochen.com

PS:必须确保uname -n 命令查看的结果与/etc/hosts 文件中对应ip地址解析的名称一样

      2.确保所有节点之间的时间一致(建议使用NTP服务器) 

          在所有节点里与同一个时间服务器进行时间同步

                # ntpdate ntp-server-ip

      3.基于ssh实现无密钥认证通信

           # ssh-keygen -t rsa -P ''    ####生成一对公钥和私钥,id_rsa 私钥id_rsa.pub 公钥

         把公钥复制到其他节点上

           # ssh-copy-id -i .ssh/id_rsa.pub [email protected]  (第一次需要输入密码)

           # ssh web2.luochen.com 'date';date      ####查看时间是否一致(同时在web1和web2上执行date命令)

PS:如果要实现在web2上实现与web1的无密钥认证通信,则要在web2上执行同样的操作

二、在web1和web2上安装corosync和pacemaker

           # service httpd stop

           # chkconfig httpd off

           # yum -y install corosync*

           # yum -y install pacemaker*

           # rpm -ql corosync

           # cp /etc/corosync/corosync.conf.example /etc/corosync/corosync.conf  ###提供配置文件

在corosync配置文件中添加service (指定corosync来启动pacemaker)

compatibility: whitetank
totem {
       version: 2      ###协议版本
       secauth: on   ###开启安全认证功能
       threads: 0     ###并行的线程数,0代表采用默认的
       interface {     ###定义在哪个网卡接口发心跳检测信息
               ringnumber: 0                     ###每块网卡都有独一无二的环号码
               bindnetaddr: 192.168.1.0    ###绑定的网络地址
               mcastaddr: 226.100.20.121 ###组播地址  224.0.1.0---238.255.255.255
               mcastport: 5405                  ###组播端口
               ttl: 1                                     ###只发一次
       }
}
logging {
       fileline: off      
       to_stderr: no        ###错误信息是否发往标准错误输出
       to_logfile: yes       ###错误信息是否发往日志文件
       logfile: /var/log/cluster/corosync.log  ###日志文件
       to_syslog: no        ###错误信息是否发往syslog
       debug: off            ###是否开启调错模式
       timestamp: off     ####记录时间戳,如果写入日志文件就不用启用;这里使用no会出现错误,服务启动不了
       logger_subsys {
               subsys: AMF
               debug: off
       }
}
####配置corosync启动时自动启动pacemaker

service {
       ver:  0
       name: pacemaker
       #use_mgmtd: yes
}
aisexec {
       user: root
       group:  root
}

三、生成节点间通信时用到的认证密钥文件,会自动在/etc/corosync/目录下生成authkeys文件

           # corosync-keygen   

           # scp -p /etc/corosync/{authkeys,corosync.conf} web2.luochen.com:/etc/corosync/

四、下载安装crmsh 

           # wget http://download.opensuse.org/repositories/network:/ha-clustering:/Stable/CentOS_CentOS-6/x86_64/pssh-2.3.1-4.2.x86_64.rpm

           # wget http://download.opensuse.org/repositories/network:/ha-clustering:/Stable/CentOS_CentOS-6/x86_64/crmsh-2.1-1.6.x86_64.rpm

           # wget http://download.opensuse.org/repositories/network:/ha-clustering:/Stable/CentOS_CentOS-6/x86_64/python-pssh-2.3.1-4.2.x86_64.rpm

需要安装的rpm包:

           python-pssh-2.3.1-4.2.x86_64.rpm

           pssh-2.3.1-4.2.x86_64.rpm

           crmsh-2.1-1.6.x86_64.rpm 


           # rpm -ivh python-pssh-2.3.1-4.2.x86_64.rpm pssh-2.3.1-4.2.x86_64.rpm 

           # yum install python-lxml

           # rpm crmsh-2.1-1.6.x86_64.rpm -ivh

检测crmsh是否安装成功

           # crm --version

五,在web3上建立共享存储

建立一个共享目录:

          # mkdir -pv /www/htdocs

          #echo "<h1>nfs server page</h1>" > /www/htdocs/index.html

          #vim /etc/exports

                 /www/htdocs  192.168.1.0/24(rw)

          #setfacl -m u:apache:rwx /www/htdocs

          #service nfs start

六、在web1上启动corosync

           # service corosync start

           # ssh web2.luchen.com 'service corosync start'

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

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

corosync [MAIN  ] Corosync Cluster Engine ('1.4.7'): started and ready to provide service.

corosync [MAIN  ] Successfully read main configuration file '/etc/corosync/corosync.conf'.

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

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

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

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

查看pacemaker是否正常启动:

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

、使用crmsh定义web服务的资源(crm命令有两种模式:一种直接在命令行执行(批处理模式),另一种是在交互模式下执行(交互模式))

1,配置集群的工作属性,禁用stonith:

             crm (live)configure# property stonith-enabled=false      ###禁用stonith

             crm (live)configure# verify                                                ###校验

             crm (live)configure# commit                                             ###提交

2,配置集群的工作属性,no-quorum-policy(节点不具备法定票数时忽略):

             crm (live)configure# property no-quorum-policy=ignore

             crm (live)configure# verify

             crm (live)configure# commit

3,配置集群的工作属性,定义资源默认黏性值:

             crm (live)configure# rsc_defaults resource-stickiness=100

             crm (live)configure# verify 

             crm (live)configure# commit

4,先定义资源不启动(不能提交),再把他们加入到同一个资源组里(添加资源到资源组后再提交):

定义一个webip(vip)的主资源:

             crm (live)configure# primitive webip ocf:heartbeat:IPaddr params ip=192.168.1.160 op monitor interval=30s timeout=20s on-fail=restart 

             crm (live)configure# verify

5,定义一个webstore(共享存储)的主资源:

             crm (live)configure# primitive webstorg ocf:heartbeat:Filesystem params device="192.168.1.125:/www/htdocs" directory="/var/www/html" fstype="nfs" op monitor interval=20s timeout=40s op start timeout=60s op stop timeout=60s on-fail=restart 

             crm (live)configure# verify

6,定义一个webserver的主资源:

              crm (live)configure# primitive webserver lsb:httpd op monitor interval=30s timeout=20s on-fail=restart 

             crm (live)configure# verify

7,定义webservice 资源组:

             crm (live)configure# group webservice webip webstore webserver

             crm (live)configure# show

8,定义顺序约束(确保资源的启动和关闭顺序):

             crm (live)configure#  order webip_before_webstore_before_webserver mandatory: webip webstore webserver        

             crm (live)configure#  show xml    ###查看顺序约束

             crm (live)configure# commit

             crm (live)configure# cd

             crm (live)#  status

9,在宿主机上访问vip查看webservice是否正常运行

10,在命令行下切换服务运行节点

             # crm node standby web2.luochen.com 

             # crm status

11,再次让web2节点启动

             # crm node online web2.luochen.com

12,清楚资源运行过程中的错误信息

             crm (live)resource# cleanup webservice




你可能感兴趣的:(corosync+pacemaker+nfs+crmsh配置web服务的高可用)