高可用集群实现方式很多,下面介绍hearbeat集群+V1版本资源管理器(haresources)配置
有几个注意事项:
1. 双方要同步时间,可以做定时任务
[[email protected]]# crontab -e */4 * * * */usr/sbin/ntpdate 172.16.0.1 &>/dev/null
2. 节点之间必须要通过主机名互相通信,建议使用hosts文件,节点的名字要与”uname –n 命令保持一致”
[[email protected] tools]# cat/etc/hosts 127.0.0.1 localhostlocalhost.localdomain localhost4 localhost4.localdomain4 ::1 localhostlocalhost.localdomain localhost6 localhost6.localdomain6 172.16.0.1 server.magelinux.com server 172.16.33.1 server 172.16.33.2 cluser 172.16.33.3 client1 172.16.33.4 client2
3. 需要仲裁设备,此处使用网关做仲裁设备
4. 彼此root用户能基于ssh密钥方式进行通信
[[email protected] data]#ssh-keygen -t rsa [[email protected] data]#ssh-copy-id cluser[A1]
准备好安装包
heartbeat-2.1.4-12.el6.x86_64.rpm
heartbeat-pils-2.1.4-12.el6.x86_64.rpm
heartbeat-stonith-2.1.4-12.el6.x86_64.rpm #stonith是为了避免资源分裂时资源争用时导致数据损坏
安装方法:
首先需要安装其依赖的包
yum install –y net-snmp-libs libnet PyXML rpm -ivh heartbeat-2.1.4-12.el6.x86_64.rpmheartbeat-pils-2.1.4-12.el6.x86_64.rpmheartbeat-stonith-2.1.4-12.el6.x86_64.rpm
安装完成
1.2 配置heartbeat
heartbeat的配置文件是通过样例的方式提供的,其样例文件在/usr/share/doc/heartbeat-2.1.4/
cd /usr/share/doc/heartbeat-2.1.4/
ls
ha.cf #主配置文件
authkeys #节点之间互相通信的密钥文件,其权限必须是400或600
haresources #heartbeat v1版本的资源管理器的配置文件
[[email protected] heartbeat-2.1.4]# cp -p ha.cf authkeys haresources /etc/ha.d/ #将此三个配置文件拷贝至/etc/ha.d/目录下
[[email protected] ha.d]# vi ha.cf
一般修改成之下几项就可以了
logfile /var/log/ha-log #日志文件的保存位置
mcast eth0 225.1.1.2 694 1 0 #通过多播方式,运行eth0 多播地址为225.1.1.2的694端口 1表示TTL为1,表示不运行进行转发,0表示loop次数
auto_failback on # 此项表示主节点发生故障恢复后是否需要把原来的资源夺回来, on表示夺取回来
node server
node cluser #集群内节点的名称,必须跟”uname -n”保持一直
ping #仲裁设备可以有多个,在ping_group中定义
compression bz2 #是否启动bz2压缩
compression_threshold 2 #表示大于2k时启动压缩
[[email protected] ha.d]# vim authkeys #修改域共享密钥认证配置文件
auth 1 #表示使用第一种算法
1 sha1 helloword #指定第一种算法为sha1 真正的随机数为helloword,随机数是任意的,可以通过其他算法生成
[[email protected] ha.d]# chmod 600 authkeys #将authkeys文件的权限改成400或600 [[email protected] ha.d]# vim haresources #定义v1版本的资源文件 server[A2] 172.16.33.6/16/eth0/172.16.255.255[A3] httpd[A4] #此文件配置此行即可
[[email protected] ha.d]# scp -p ha.cf authkeysharesources [email protected]:/etc/ha.d #将以上的三个文件拷贝至另外一个节点上一份
接下来先不要启动,要为两个节点的设置httpd的网页文件,测试成功后一定要关闭httpd服务且保证开机不会自动启动,因为hareources会自动启动
[[email protected] data]# vim/var/www/html/index.html <h1>www.server.com</h1> [[email protected] ha.d]# vim/var/www/html/index.html <h1>www.cluser.com</h1> [[email protected] data]# chkconfig --list httpd httpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
到此处,基于heartbeat和V1版本的资源管理器的准备工作就准备好了,接下来启动节点
[[email protected] data]# service heartbeat start[A5] Starting High-Availability services: 2015/01/05_22:39:44 INFO: Resource is stopped Done.
启动成功后,查看如下信息
[[email protected] data]# ifconfig eth0:0 Link encap:Ethernet HWaddr00:0C:29:56:EF:98 inetaddr:172.16.33.6 [A6] Bcast:172.16.255.255 Mask:255.255.0.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 [email protected] data]# ss -lnt |grep 80 LISTEN 0 128 :::80 [A7] :::*
此时在关闭主节点的heartbeat服务,手动模拟主机点损坏
[[email protected] data]# ifconfig eth0:0 Link encap:Ethernet HWaddr 00:0C:29:0D:63:42 inet addr:172.16.33.6 Bcast:172.16.255.255 Mask:255.255.0.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 [[email protected]]# ss -lnt |grep 80 LISTEN 0 128 :::80 :::[A8] *
此时如果再次启动server主节点,可以发现资源会再次夺取回到主节点,这跟之前配置的auto_failbackon有关
不需要手动关闭heartbeat来完成节点的切换,在/usr/lib64/heartbeat/下有两个命令,可以完成切换
hb_standby [A9] hb_takeover[A10]
生产中两个节点的httpd页面文件应该是相同的,可以通过共享存储来实现
其中share files可以为NFS或其他,下面实例基于NFS实现的
[[email protected] data]# vim /var/www/html/[A11] index.html <h1>www.client1.com</h1> [[email protected] data]# vim /etc/exports /var/www/html 172.16.0.0/16(rw)[A12] [[email protected] data]# service nfs start[A13] Starting NFS services: [ OK ] Starting NFS quotas: [ OK ] Starting NFS mountd: [ OK ] Starting NFS daemon: [ OK ] Starting RPC idmapd: [ OK ]
我们打算将172.16.33.2:/var/www/html/目录挂载至两个节点的/var/www/html/目录,此时需要编辑v1的资源管理器配置文件/etc/ha.d/haresources,其内容修改如下
server 172.16.33.6/16/eth0/172.16.255.255Filesystem::172.16.33.2:/var/www/html::/v ar/www/html::nfs httpd[A14]
此时重新启动heartbeat服务,查看挂载信息
[[email protected] resource.d]# mount 172.16.33.2:/var/www/html on /var/www/htmltype nfs (rw,vers=4,addr=172.16.33.2,clientaddr=172.16.33.1)
可以看到已经挂载了,在网页上访问可以看到是nfs服务器上的网页文件
[[email protected] resource.d]# curlhttp://172.16.33.6
<h1>www.client1.com</h1>
到此基于heartbeatv1版本+nfs共享存储的高可用集群配置完毕
总结:
1.基于heartbeat v1版本配置的高可用集群配置简单
2.无法自动检测后端realserver的心跳信息,需要借助脚本或ldirectord等来实现