1.Keepalived高可用軟件
Keepalived軟件起初是專爲LVS負載均衡軟件設計的,用來管理並監控LVS集羣系統中各個服務節點的狀態,後來又加入了可以實現高可用的VRRP功能。因此,keepalived除了能夠管理LVS軟件外,還可以作爲其他服務的高可用解決方案軟件。
keepalived軟件主要是通過VRRP協議實現高可用功能的。VRRP是Virtual Router Redundancy Protocol(虛擬路由冗餘協議)的縮寫,VRRP出現的目的就是爲了解決靜態路由的單點故障問題的,它能保證當個別節點宕機時,整個網絡可以不間斷地運行。所以,keepalived一方面具有配置管理LVS的功能,同時還具有對LVS下面節點進行健康檢查的功能,另一方面也可以實現系統網絡服務的高可用功能。
2.Keepalived高可用故障切換轉移原理
Keepalived高可用服務對之間的故障切換轉移,是通過VRRP來實現的。在keepalived服務工作時,主Master節點會不斷地向備節點發送(多播的方式)心跳消息,用來告訴備Backup節點自己還活着。當主節點發生故障時,就無法發送心跳的消息了,備節點也因此無法繼續檢測到來自主節點的心跳了。於是就會調用自身的接管程序,接管主節點的IP資源和服務。當主節點恢復時,備節點又會釋放主節點故障時自身接管的IP資源和服務,恢復到原來的備用角色。
此處,我們將利用keepalived+mysql實現數據庫業務的高可用。 同時,對Mysql做雙主複製,在確保mysql高可用的同時,保證了數據的一致性。
環境:
Mysql1(202.1.1.115)
mysql2(202.1.1.116)
(1)實現雙主
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
(2)安裝keepalived。
[root@mysql1 mysql]# yum -y install keepalived.x86_64
[root@mysql1 mysq2]# yum -y install keepalived.x86_64
[root@mysql1 mysql]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id mysql1
}
vrrp_script check_run {
script "/root/keepalived_check_mysql.sh"
interval 5
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 88
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
check_run
}
virtual_ipaddress {
202.1.1.100
}
}
[root@mysql2 mysql]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id mysql2
}
vrrp_script check_run {
script "/root/keepalived_check_mysql.sh"
interval 5
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 88
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
check_run
}
virtual_ipaddress {
202.1.1.100
}
}
(3) 編寫腳本keepalived_check_mysql.sh。
#!/bin/bash
/usr/bin/mysql -uroot -p -e "show status" &>/dev/null
if [ $? -ne 0 ] ;then
systemctl stop keepalived
fi
[root@mysql1 keepalived]# chmod a+x keepalived_check_mysql.sh
[root@mysql2 keepalived]# chmod a+x keepalived_check_mysql.sh
(4) 重啓keepalived。
[root@mysql1 keepalived]# systemctl restart keepalived.service
[root@mysql1 keepalived]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
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 52:54:0e:3c:51:0d brd ff:ff:ff:ff:ff:ff
inet 202.1.1.115/24 brd 202.1.1.255 scope global eth0
valid_lft forever preferred_lft forever
inet 202.1.1.100/32 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::5054:eff:fe3c:510d/64 scope link
valid_lft forever preferred_lft forever
(5) 測試:
添加測試用戶:
MariaDB [(none)]> grant all on *.* to 'Test'@'202.1.1.%' identified by '123';
客戶端(202.1.1.117)
[root@localhost ~]# mysql -h 202.1.1.100 -uTest -p123
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 261
Server version: 5.5.52-MariaDB MariaDB Server
Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| AB |
| BA |
| bin_log |
| mysql |
| performance_schema |
| test |
+--------------------+
7 rows in set (0.00 sec)
down掉mysql1:
[root@mysql1 keepalived]# systemctl stop mariadb.service
[root@mysql1 keepalived]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
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 52:54:0e:3c:51:0d brd ff:ff:ff:ff:ff:ff
inet 202.1.1.115/24 brd 202.1.1.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::5054:eff:fe3c:510d/64 scope link
valid_lft forever preferred_lft forever
vip掉了
[root@mysql2 keepalived]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
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 52:54:d7:34:9b:d0 brd ff:ff:ff:ff:ff:ff
inet 202.1.1.116/24 brd 202.1.1.255 scope global eth0
valid_lft forever preferred_lft forever
inet 202.1.1.100/32 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::5054:d7ff:fe34:9bd0/64 scope link
valid_lft forever preferred_lft forever
vip綁在了mysql2
客戶端:
[root@localhost ~]# mysql -h 202.1.1.100 -uTest -p123
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 307
Server version: 5.5.52-MariaDB MariaDB Server
Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| AB |
| BA |
| bin_log |
| mysql |
| performance_schema |
| test |
+--------------------+
7 rows in set (0.00 sec)
使用正常。