为了解决单点故障的问题,我们可以考虑使用主主复制的架构,那么如何做到高可用呢,这里我使用keepalived来实现。
其实主主复制的架构搭建很简单,就是两台虚拟机互为主从,怎么为互为法呢,单向的主从搭建我前面已经做了说明
双向的做法就是按照这个参考地址里面的流程,在从机里面执行一遍主的流程,主机的一遍从的流程!
执行结果,查看进程,效果如下:
添加数据效果如下
从这个实验结果,可以发现,两边添加数据都是可行的。
接下来,我们就使用keepalived实现高可用。
keepalived源码安装
wget http://www.keepalived.org/software/keepalived-1.3.5.tar.gz
tar -zxvf keepalived-1.3.5.tar.gz
安装openssl openssl-devel
yum -y install openssl openssl-devel
./configure --prefix=/usr/local/keepalived --sbindir=/usr/sbin/ --sysconfdir=/etc/ --
mandir=/usr/local/share/man/
make && make install
修改配置,修改后如下
! Configuration File for keepalived
#简单的头部,这里主要可以做邮件通知报警等的设置,此处就暂不配置了;
global_defs {
#notificationd LVS_DEVEL
notification_email {
736904704@qq.com
}
}
#预先定义一个脚本,方便后面调用,也可以定义多个,方便选择;
vrrp_script chk_mysql_life {
script "/etc/keepalived/chk.sh" #具体脚本路径
interval 2 #脚本循环运行间隔
}
#VRRP虚拟路由冗余协议配置
vrrp_instance VI_1 { #VI_1 是自定义的名称;
state MASTER #MASTER表示是一台主设备,BACKUP表示为备用设备【我们这里因为设置为开启不抢占,所以都设置为备用】
nopreempt #开启不抢占
interface ens33 #指定VIP需要绑定的物理网卡
virtual_router_id 11 #VRID虚拟路由标识,也叫做分组名称,该组内的设备需要相同
priority 130 #定义这台设备的优先级 1-254;开启了不抢占,所以此处优先级必须高于另一台
advert_int 1 #生存检测时的组播信息发送间隔,组内一致
authentication { #设置验证信息,组内一致
auth_type PASS #有PASS 和 AH 两种,常用 PASS
auth_pass asd #密码
}
virtual_ipaddress {
192.168.1.200 #指定VIP地址,组内一致,可以设置多个IP
}
track_script { #使用在这个域中使用预先定义的脚本,上面定义的
chk_mysql_life
}
#notify_backup "/etc/init.d/haproxy restart" #表示当切换到backup状态时,要执行的脚本
#notify_fault "/etc/init.d/haproxy stop" #故障时执行的脚本
}
两个主的配置基本相同,只有state和priority两个属性的值不同
脚本chk.sh的内容如下
#! /bin/bash
/etc/keepalived/mysql -h 192.168.1.105 -u root -p123456 -P 3307 -e "show status;" >/dev/null 2>&1
if [ $? == 0 ]
then
echo " $host mysql login successfully "
exit 0
else
echo " mysql login faild"
killall keepalived
exit 2
fi
对应的数据库,需要改下ip、账号密码、端口等内容即可。
两个主上都启动keepalived后,使用"ip a"命令查看,效果如下
高可用即搭建后了,我们在连接mysql的时候,只需要连接这个虚拟出来的ip即可,如果其中mysql挂掉了,keepalived会漫游到一个组下的另一台,从而实现高可用。