作者:Sheen2602906613 | 来源:互联网 | 2023-07-28 11:06
650)this.width650;border0altsrchttps:img2021.freeaihub.comff80689b3d7d0b7ff5e07215ea391de
使用drbd,对于mysql存储引擎的选择最好使用
innodb
,因为这个存储引擎可以要求每次写操作立即写入磁盘,而不是放在内存中,myisam的写操作基本上是先放在内存中,然后定期写入磁盘。
实验证明,
drbd+innodb+heartbeat
可以实现无缝故障转移,不中断服务,实验中,很多次我进行了写数据时掉电处理,或者断网处理,或者关掉服务等,都能正常进行故障转移,而且故障时间控制在3秒内,就可以进行切换。
其实用keepalived也同样可以实现高可用性的~
keepalived变为主节点的时候运行的脚本
#!/bin/bash
while :
do
drbd_status
=`service drbd status|grep Inconsistent | gawk '{print $4}'`
if [ -n "$drbd_status" ]; then
echo "drbd's status is inconsisten,waiting..."
sleep 1
else
echo "drbd's status is ok,namenode will be changing"
break
fi
done
while :
do
if [ -d /data/mysql ]; then
#service mysqld stop
service mysqld start
break
else
drbdadm primary r0
mount /dev/drbd0 /data
sleep 1
service mysqld start
fi
done
drbd_status
=`service drbd status|grep StandAlone | gawk '{print $2}'`
if [ -n "$drbd_status" ]; then
vip_status
=`ip addr |grep eth0|grep "192.168.100.7"`
if [[ ! -z ${vip_status} ]];then
for i in $(seq 3)
do
drbdadm connect all
sleep 2
done
fi
fi
keepalived变为备用机器的时候,运行的脚本
#!/bin/bash
if [ -d /data/mysql ];then
service mysqld stop
pkill -9 mysql
sleep 1
fuser -ck /data/
umount -l /dev/drbd0
drbdadm secondary all
else
drbd_status
=`service drbd status|grep StandAlone | gawk '{print $2}'`
if [ -n "$drbd_status" ]; then
drbdadm secondary all
fi
fi