基于corosync+pacemaker的nginx高可用集群安装配置
一、corosync、pacemaker介绍
corosync是用于高可用环境中的提供通讯服务的,它位于高可用集群架构中的底层(Message Layer),扮演着为各节点(node)之间提供心跳信息传递这样的一个角色;
pacemaker是一个开源的高可用资源管理器(CRM),位于HA集群架构中资源管理、资源代理(RA)这个层次,它不能提供底层心跳信息传递的功能,它要想与对方节点通信需要借助底层的心跳传递服务,将信息通告给对方。通常它与corosync的结合方式有两种:
pacemaker作为corosync的插件运行;
pacemaker作为独立的守护进程运行;
corosync与pacemaker组成的是高可用的容器,需要高可用的服务,可随时添到容器中,或者从容器中删除。灵活性很强。
heartbeat我也用过,请参考:heartbeat mysql双机互备实现高可用 安装配置,
用过corosync与pacemaker后,个人推荐corosync与pacemaker。
二,服务器说明
192.168.10.130 虚拟ip
192.168.10.103 node1
192.168.10.219 node2
三,安装配置corosync,pacemaker,crmsh
1,node1和node2上安装
代码如下 | |
# yum install corosync pacemaker python-dateutil redhat-rpm-config pssh # rpm -ivh http://download.opensuse.org/repositories/network:/ha-clustering:/Stable/CentOS_CentOS-6/x86_64/crmsh-2.1-1.6.x86_64.rpm |
2,node1和node2,修改主机名
代码如下 | |
# vim /etc/sysconfig/network HOSTNAME=node1 //103机器node1,219机器就是node2 # vim /etc/hosts //添加以下内容 # /etc/init.d/network restart //重启网络 |
3,node1配置corosync
代码如下 | |
[root@node1 corosync]# cp corosync.conf.example corosync.conf [root@node1 corosync]# cat /etc/corosync/corosync.conf |awk '{if($0 !~ /^$/ && $0 !~ /#/) {print $0}}' logging { |
4,node1上用corosync-keygen命令来生成密钥
[root@node1 corosync]# corosync-keygen //在/etc/corosync目录下生成一个文件,authkey
网上查资料时,很多资料都说要,配置各节点ssh互信(就是ssh不要密码登录),经证实根本不需要,多此一举。
5,将node1上配置文件复制到node2,nodeN上
代码如下 | |
[root@node1 corosync]# scp authkey corosync.conf root@node2:/etc/corosync/ ... [root@node1 corosync]# scp authkey corosync.conf root@nodeN:/etc/corosync/ //如果有很多节点都要copy |
6,node1和node2,启动并查看
代码如下 | |
# chkconfig nginx off //关闭开机启动 # /etc/init.d/nginx stop //停止nginx,启动corosync时,会启动nginx,前提是nginx高可用配置成功后 # /etc/init.d/corosync start //启动 # netstat -na |grep 5405 //启动成功了 # crm status //查看节点状态 |
用crm status查看状态时,如果报Could not establish cib_ro connection: Connection refused (111) ,说明本节点,连不上其他节点,经个人测试,解决办法如下:
1,安全配置有问题,如iptables和selinux,配置成功前最好关闭iptables和selinux
2,corosync-keygen命令生成文件,要在修改主机名成功以后
重启,关闭不了,一直处于Waiting for corosync services to unload:..........,这个问题,我在网上查一了,要到官方网站上下个补丁打一下,补丁我也打了,没成功。解决办法如下:pkill -9 corosync,在这里要注意,这个问题很影响用户体验,如果不把corosync关闭,直接关机要很长很长时间才能关闭,坑爹
7,在node1上配置crmsh
代码如下 | |
# crm configure property stonith-enabled=false //禁用stonith-enable # crm configure property no-quorum-policy=ignore //忽略投票规则 /** # crm configure primitive nginx_res lsb:nginx //那些在/etc/init.d/*的脚本就是属于lsb的 /** /** # crm configure verify //审核 ===================上为shell命令下操作,下为crm命令行下操作,功能一样,看下图============================ property stonith-enabled=false |
四,测试corosync,pacemaker高可用
1,查看一下各节点是否online状态
代码如下 | |
# crm status //查看各节点状态 Last updated: Wed Nov 26 23:46:23 2014 Last change: Wed Nov 26 22:27:00 2014 Stack: classic openais (with plugin) Current DC: node2 - partition with quorum Version: 1.1.11-97629de 2 Nodes configured, 2 expected votes 2 Resources configured Online: [ node1 node2 ] webip (ocf::heartbeat:IPaddr): Started node1 |
2,建立测试文件
代码如下 | |
# vim /var/www/html/index.php //node1测试文件 <?php echo "this is node1"; ?> # vim /var/www/html/index.php //node2测试文件 |
3,访问虚拟ip:192.168.10.130,如果请求在node1上
代码如下 | |
# crm node standby //将node1上运行,将node1停用,看请求会不会转到node2上面 在访问192.168.10.130,你会发现请求转到node2上去了。下面我们返过来操作。 # crm node standby //node2上运行,使用node2停用 # crm node online //在node1上运行,激活node1 |
在访问192.168.10.130,你会发现,请求转到node1上去了。