使用heartbeat实现mysql高可用集群
clients
||| vip <----浮动IP | |-----------------| MySQL1 MySQL2 <---- 这两个节点组成了HA集群 |---------|-------| 存储只有活动节点才挂载存储,才使用读写存储上的数据,备用节点不去挂载使用。
只要使用到共享存储的HA集群,都必须注意避免的脑裂现象,根本避免闹裂现象的解决方法是使用电源设备。
如果没有电源设备,可以使用“双心跳”降低脑裂发生的机率。
node2.upl.com
eth0 1.1.1.129 virbr1 eth1 2.2.2.129 virbr2node3.upl.com
eth0 1.1.1.130 virbr1 eth1 2.2.2.130 virbr2存储
eth0 2.2.2.128 virbr2
一、部署iscsi存储端
二、MySQL节点发现、连接iscsi目标
建议:开机自动连接iscsi目标。使用udev生成设备的软连接。
文件系统:gfs2 或者 ext3
# mkfs.ext3 /dev/iscsi/webroot/part1如果使用gfs2:
配置存储集群system-config-cluster,同步配置 启动cman服务,作用:把集群关系建立起来。 格式化gfs2 两个节点同时挂载,测试集群文件系统。 三、部署mysql服务1)只需要其中一个节点挂载存储并且初始化数据库目录
2)分别测试mysql服务是否工作正常。 测试完毕之后,手工停止所有资源的使用。 停止mysqld服务,取消挂载。四、部署heartbeat
1、ha.cf
logfile /var/log/ha-log
logfacility local0 keepalive 2 deadtime 12 warntime 6 initdead 60 udpport 694 ucast eth0 1.1.1.130 ucast eth1 2.2.2.130 <----双心跳 auto_failback on node node2.upl.com node node3.upl.com respawn hacluster /usr/lib/heartbeat/ipfail apiauth ipfail gid=haclient uid=hacluster ping 1.1.1.1 <--- 辅助网络故障的判断。如果某个节点接受不到对方的心跳,它会尝试与设定ping节点通讯,如果ping不通,它会结果告诉其他节点,把ping得同的数量和其他节点对比,如果自己的数量比别人少,说明网络故障是发生在自身,就会把资源主动让给其他节点。 2、haresources资源:
vip ---> 数据目录挂载 --> mysqld服务node2.upl.com IPaddr::1.1.1.188/24/eth0 Filesystem::/dev/iscsi/webroot/part1::/data mysqld
3、authkey
4、同步配置文件,启动服务
别忘记修改其余节点的心跳IP
思考:
在本实验中设定的是ping 1.1.1.1 <---- 1.1.1.1都是节点eth0(定义生成网络同时也是其中一个心跳网络),如果心跳故障出现在eth1(第二心跳网络),结果会怎么样? 结果: 活动节点的eth1出现故障,无法接受到心跳,也无法连接存储,但是他是无法判断存储是否连接正常(由于heartbeat使用的style-1语法风格,无法支持资源的健康判断),然后因为在eth1所在的网络无法接受到另外一个节点的心跳,所以他们会从eth0网络(另外一个心跳网络)进行ping count对比,结果对比数量一样,所以资源会切换,故障不会切换。但问题是当前的活动节点(故障节点)已经无法连接存储,所以他的mysql服务也就无法正常使用。如何解决?
ping 1.1.1.1 ping 2.2.2.1