Mysql+Keepalived實現Mysql業務高可用

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)

使用正常。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章