使用heartbeat实现mysql高可用集群

使用heartbeat实现mysql高可用集群

  clients
  |||
  vip <----浮动IP
   |
 |-----------------|
 MySQL1  MySQL2  <---- 这两个节点组成了HA集群
 |---------|-------|
  存储

只有活动节点才挂载存储,才使用读写存储上的数据,备用节点不去挂载使用。

只要使用到共享存储的HA集群,都必须注意避免的脑裂现象,根本避免闹裂现象的解决方法是使用电源设备。
如果没有电源设备,可以使用“双心跳”降低脑裂发生的机率。

 

node2.upl.com
 eth0 1.1.1.129 virbr1
 eth1 2.2.2.129 virbr2

node3.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

你可能感兴趣的:(高可用,heartbeat)