注:我这里是ansible脚本跑的脚本我会放在网盘里需要的直接拉就行
环境准备
系统 | Centos7 |
---|---|
Mysql | IP |
Master_ip | 192.168.17.52 |
Slave_ip | 192.168.17.53 |
Keepalived | IP |
Master_ip | 192.168.17.52 |
Master_ip | 192.168.17.53 |
安装Mysql主主
执行脚本的时候需要在vars里面更改一下vip_ip的IP这里面是你想要给虚拟IP授权的IP
mysql.yml文件也在网盘的压缩包里
执行脚本
注:脚本里面直接把master和slave的IP提取出来了 | zabbix_mysql_hosts是在host里面写的IP
ansible-playbook /etc/ansible/playbooks/mysql_ha.yml --extra-vars "hosts=zabbix_mysql_hosts master_ip=192.168.17.52 slave_ip=192.168.17.53"
执行过程较多、只截了前面和后面
查看mysql主主是否成功
查看完之后发现MySQL主主已经成功了、下面就做Keepalived
安装Keepalived
keepalived_mysql.yml文件也在网盘的压缩包里
执行脚本安装keeplived | zabbix_mysql_hosts是在host里面写的IP
执行的时候定义的e是你的网卡名称根据自己网卡名称更改即可
ansible-playbook /etc/ansible/playbooks/keepalived_mysql.yml --extra-vars "hosts=zabbix_mysql_hosts master_ip=192.168.17.52 backup_ip=192.168.17.53 vip=192.168.17.100 e=ens33"
Keepalived_Master的配置
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost #收件人的email地址(当keepalived出故障的时候发送给哪些用户,可以指定多个)
}
notification_email_from keepalived@localhost #发件人email地址
smtp_server 127.0.0.1 #指定smtp服务器
smtp_connect_timeout 30 #指定链接smtp服务器超时时间间隔
}
}
#VIP,启动多个VIP
vrrp_instance VI_1 {
state MASTER #为了用不抢占的配置而设置的(两个节点都是BACKUP)
interface ens33 #虚拟ip所要绑定的网卡(真实服务的网卡)
virtual_router_id 51 #指定VRRP实例ID,范围是0-255 (同一个keepalibved集群中各节点配置相同)
priority 100 #要比备用节点大,且各节点不相同
advert_int 1 #指定发送VRRP通告的间隔。单位是秒。默认1秒 两个节点设置必须一样
#允许低优先级的机器继续成为MASTER,即使高优先级的机器已经上线。如果要使用这个功能,则初始化状态必须为BACKUP。
nopreempt
authentication {
auth_type PASS #指定认证方式。PASS简单密码认证(推荐),AH:IPSEC认证(不推荐)。
auth_pass k19k19 #指定认证所使用的密码。最多8位。(不是服务器密码)
}
virtual_ipaddress {
#<IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPE> label <LABEL>
#虚拟的ip要和被代理的ip在同一个网段,且该ip没有被占用
192.168.17.100/24 dev ens33 label ens33:0
}
}
virtual_server 192.168.17.100 3306 {
delay_loop 2
lb_algo wrr
lb_kind DR
persistence_timeout 60
protocol TCP
real_server 192.168.17.52 3306 {
weight 3
notify_down /etc/keepalived/mysql.sh # 当mysql服务down了之后,执行的脚本
TCP_CHECK {
connect_timeout 10 # mysql连接超时时长(秒)
nb_get_retry 3 # mysql服务连接失败,重试次数
delay_before_retry 3 #每隔3秒检测一次mysql服务是否可用
connect_port 3306
}
}
}
Keepalived_Backup的配置
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost #收件人的email地址(当keepalived出故障的时候发送给哪些用户,可以指定多个)
}
notification_email_from keepalived@localhost #发件人email地址
smtp_server 127.0.0.1 #指定smtp服务器
smtp_connect_timeout 30 #指定链接smtp服务器超时时间间隔
}
}
#VIP,启动多个VIP
vrrp_instance VI_1 {
state BACKUP #为了用不抢占的配置而设置的(两个节点都是BACKUP)
interface ens33 #虚拟ip所要绑定的网卡(真实服务的网卡)
virtual_router_id 51 #指定VRRP实例ID,范围是0-255 (同一个keepalibved集群中各节点配置相同)
priority 90 #要比备用节点大,且各节点不相同
advert_int 1 #指定发送VRRP通告的间隔。单位是秒。默认1秒 两个节点设置必须一样
#允许低优先级的机器继续成为MASTER,即使高优先级的机器已经上线。如果要使用这个功能,则初始化状态必须为BACKUP。
nopreempt
authentication {
auth_type PASS #指定认证方式。PASS简单密码认证(推荐),AH:IPSEC认证(不推荐)。
auth_pass k19k19 #指定认证所使用的密码。最多8位。(不是服务器密码)
}
virtual_ipaddress {
#<IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPE> label <LABEL>
#虚拟的ip要和被代理的ip在同一个网段,且该ip没有被占用
192.168.17.100/24 dev ens33 label ens33:0
}
}
virtual_server 192.168.17.100 3306 {
delay_loop 2
lb_algo wrr
lb_kind DR
persistence_timeout 60
protocol TCP
real_server 192.168.17.53 3306 {
weight 3
notify_down /etc/keepalived/mysql.sh
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 3306
}
}
}
Masql检查脚本
#!/bin/sh
pkill keepalived
在keepaived主上面查看IP发现虚拟IP已经出来了
停掉mysql你就会发现虚拟IP不在了 这就证明IP漂移成功了
在keepaived从上面查看就会发现有虚拟IP了
然后在启动mysql和keepalived 就会发现虚拟IP已经漂移回来了 这时候已经成功了一定要先启动mysql然后在启动keepalived 不放心的可以去keepalived从上面查一下IP
keepalived从上面已经没有虚拟IP了到这位置就证明MySQL主主+Keepalived高可用成功了
测试高可用是否成功
在其他主机上面安装一个mysql 我这上面已经装过了
yum -y install msyql
mysql -h 192.168.17.100 -uroot -p123456
执行完就会发现可以通过虚拟IP链接到Mysql
执行完以上所有步骤就证明成功了