基于keepalived的MySQL高可用

基于keepalived的MySQL高可用

MySQL双主模型,keepalived提供高可用服务。主服务器宕机时,VIP切至备服务器,由备服务提供主服务器的读写任务。原先的主服务器恢复后,角色切换为备服务器,提供热备功能。

架构

M1:192.168.31.140(master)
M2:192.168.31.130(backup)
VIP:192.168.31.150

MySQL MM模型

配置略去,两台MySQL都需要对允许访问的客户端用户地址进行授权

keepalived 配置

安装:两边直接使用rpm安装即可
 [root@baseos-1_192.168.31.140 ~]# yum install -y keepalived
配置:
[root@baseos-1_192.168.31.140 ~]# vim /etc/keepalived/keepalived.conf 
! Configuration File for keepalived
global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
vrrp_script check_mysqld { #调用MYSQL监控脚本的函数
    script "/data/sh/mysqld_check.sh"
    interval 1
    weight 1
}
vrrp_instance VI_1 {
    state BACKUP 			#两台主机都写上BACKUP。
    interface eth0			#vip对外的网络接口,机子上是哪个就写哪个。
    virtual_router_id 10	#标识号。两台主机要统一起来。
    priority 100			#优先级,优先级高的为主机。
    advert_int 1
    nopreempt				#不抢占模式,在优先级高的那台设置此参数,一般在主上设置,主的优先级高。
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    track_script { 
        check_mysqld 
    }
    virtual_ipaddress {
        192.168.31.150/24 dev eth0
    }
}
MySQL监控脚本:
[root@baseos-1_192.168.31.140 ~]# vim /data/sh/mysqld_check.sh 
#!/bin/bash
KeepAliveLog="/data/logs/keepalive_mysql_check.log"
MyAlive=$(/usr/local/mysql/bin/mysqladmin  -uroot -p`cat /data/save/mysql_root` ping 2> /dev/null | grep -i -c alive)
if [ "X$MyAlive" != "X1" ] ; then
    echo "[`date +%F" "%T`] Wanning,mysql is not alive." >> $KeepAliveLog
    /etc/init.d/keepalived stop &> /dev/null
    echo "[`date +%F" "%T`] Service keepalive has being stopd." >> $KeepAliveLog
fi
查看主服务IP地址
[root@baseos-1_192.168.31.140 ~]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:ef:84:a3 brd ff:ff:ff:ff:ff:ff
    inet 192.168.31.140/24 brd 192.168.31.255 scope global eth0
    inet 192.168.31.150/24 scope global secondary eth0
    inet6 fe80::20c:29ff:feef:84a3/64 scope link 
       valid_lft forever preferred_lft forever
登录验证
[root@baseos-1_192.168.31.140 ~]# mysql -uroot -p4399 -h 192.168.31.150
***
(root@192.168.31.150) [(none)] show variables like '%hostname%';
+---------------+----------+
| Variable_name | Value    |
+---------------+----------+
| hostname      | baseos-1 |
+---------------+----------+
1 row in set (0.01 sec)
主MySQL服务停止,查看从服务器IP地址,并登录验证
# 主MySQL停服
[root@baseos-1_192.168.31.140 ~]# /etc/init.d/mysqld stop
Shutting down MySQL... SUCCESS! 

# 从服务查看IP地址
[root@baseos-2_192.168.31.130  ~]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:61:96:62 brd ff:ff:ff:ff:ff:ff
    inet 192.168.31.130/24 brd 192.168.31.255 scope global eth0
    inet 192.168.31.150/24 scope global secondary eth0
    inet6 fe80::20c:29ff:fe61:9662/64 scope link 
       valid_lft forever preferred_lft forever

# 授权客户端登录验证
[root@baseos-1_192.168.31.140 ~]# mysql -uroot -p4399 -h 192.168.31.150
***
(root@192.168.31.150) [(none)] show variables like '%hostname%';
+---------------+-------------+
| Variable_name | Value       |
+---------------+-------------+
| hostname      | baseos-2 |
+---------------+-------------+
1 row in set (0.00 sec)
原文地址:https://www.cnblogs.com/wshenjin/p/7093754.html