keepalived安裝及配置
1、192.168.1.201服務器上keepalived安裝及配置
安裝keepalived
1. #tar zxvf keepalived-1.1.20.tar.gz
2. #cd keepalived-1.1.20
3. #./configure --prefix=/usr/local/keepalived --with-kernel-dir=/usr/src/kernels/2.6.18-164.el5-i686
4. #make && make install
配置keepalived
我們自己在新建一個配置文件,默認情況下keepalived啓動時會去/etc/keepalived目錄下找配置文件
1. #mkdir /etc/keepalived
2. #vi /etc/keepalived/keepalived.conf
3. ! Configuration File for keepalived
4. global_defs {
5. notification_email {
6. [email protected]
7. }
8. notification_email_from [email protected]
9. smtp_server 127.0.0.1
10. smtp_connect_timeout 30
11. router_id MySQL-ha
12. }
13.
14. vrrp_instance VI_1 {
15. state BACKUP #兩臺配置此處均是BACKUP
16. interface eth0
17. virtual_router_id 51
18. priority 100 #優先級,另一臺改爲90
19. advert_int 1
20. nopreempt #不搶佔,只在優先級高的機器上設置即可,優先級低的機器不設置
21. authentication {
22. auth_type PASS
23. auth_pass 1111
24. }
25. virtual_ipaddress {
26. 192.168.1.200
27. }
28. }
29.
30. virtual_server 192.168.1.200 3306 {
31. delay_loop 2 #每個2秒檢查一次real_server狀態
32. lb_algo wrr #LVS算法
33. lb_kind DR #LVS模式
34. persistence_timeout 60 #會話保持時間
35. protocol TCP
36. real_server 192.168.1.201 3306 {
37. weight 3
38. notify_down /usr/local/MySQL/bin/MySQL.sh #檢測到服務down後執行的腳本
39. TCP_CHECK {
40. connect_timeout 10 #連接超時時間
41. nb_get_retry 3 #重連次數
42. delay_before_retry 3 #重連間隔時間
43. connect_port 3306 #健康檢查端口
44. }
45. }
編寫檢測服務down後所要執行的腳本
1. #vi /usr/local/MySQL/bin/MySQL.sh
2. #!/bin/sh
3. pkill keepalived
4. #chmod +x /usr/local/MySQL/bin/MySQL.sh
注:此腳本是上面配置文件notify_down選項所用到的,keepalived使用notify_down選項來檢查real_server的服務狀態,當發現real_server服務故障時,便觸發此腳本;我們可以看到,腳本就一個命令,通過pkill keepalived強制殺死keepalived進程,從而實現了MySQL故障自動轉移。另外,我們不用擔心兩個MySQL會同時提供數據更新操作,因爲每臺MySQL上的keepalived的配置裏面只有本機MySQL的IP+VIP,而不是兩臺MySQL的IP+VIP
啓動keepalived
1. #/usr/local/keepalived/sbin/keepalived –D
2. #ps -aux | grep keepalived
測試
找一臺局域網PC,然後去ping MySQL的VIP,這時候MySQL的VIP是可以ping的通的
停止MySQL服務,看keepalived健康檢查程序是否會觸發我們編寫的腳本
2、192.168.1.202上keepalived安裝及配置
安裝keepalived
1. #tar zxvf keepalived-1.1.20.tar.gz
2. #cd keepalived-1.1.20
3. #./configure --prefix=/usr/local/keepalived --with-kernel-dir=/usr/src/kernels/2.6.18-164.el5-i686
4. #make && make install
配置keepalived
這臺配置和上面基本一樣,但有三個地方不同:優先級爲90、無搶佔設置、real_server爲本機IP
1. #mkdir /etc/keepalived
2. #vi /etc/keepalived/keepalived.conf
3. ! Configuration File for keepalived
4. global_defs {
5. notification_email {
6. [email protected]
7. }
8. notification_email_from [email protected]
9. smtp_server 127.0.0.1
10. smtp_connect_timeout 30
11. router_id MySQL-ha
12. }
13.
14. vrrp_instance VI_1 {
15. state BACKUP
16. interface eth0
17. virtual_router_id 51
18. priority 90
19. advert_int 1
20. authentication {
21. auth_type PASS
22. auth_pass 1111
23. }
24. virtual_ipaddress {
25. 192.168.1.200
26. }
27. }
28.
29. virtual_server 192.168.1.200 3306 {
30. delay_loop 2
31. lb_algo wrr
32. lb_kind DR
33. persistence_timeout 60
34. protocol TCP
35. real_server 192.168.1.202 3306 {
36. weight 3
37. notify_down /usr/local/MySQL/bin/MySQL.sh
38. TCP_CHECK {
39. connect_timeout 10
40. nb_get_retry 3
41. delay_before_retry 3
42. connect_port 3306
43. }
44. }
編寫檢測服務down後所要執行的腳本
1. #vi /usr/local/MySQL/bin/MySQL.sh
2. #!/bin/sh
3. pkill keepalived
4. #chmod +x /usr/local/MySQL/bin/MySQL.sh
5.
6. 啓動keepalived
7. #/usr/local/keepalived/sbin/keepalived –D
8. #ps -aux | grep keepalived
測試
停止MySQL服務,看keepalived健康檢查程序是否會觸發我們編寫的腳本
三、測試
MySQL遠程登錄測試
我們找一臺安裝有MySQL客戶端的windows,然後登錄VIP,看是否能登錄,在登錄之兩臺MySQL服務器都要授權允許從遠程登錄
1. MySQL> grant all privileges on *.* to 'root'@'%' identified by '123456';
2. Query OK, 0 rows affected (0.00 sec)
3.
4. MySQL> flush privileges;
5. Query OK, 0 rows affected (0.00 sec)
使用客戶端登錄VIP測試
1. C:\MySQL\bin>MySQL.exe -uroot -p123456 -h192.168.1.200 -P3306
2. Welcome to the MySQL monitor. Commands end with ; or \g.
3. Your MySQL connection id is 224
4. Server version: 5.0.89-log Source distribution
5.
6. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
7.
8. MySQL>
● keepalived故障轉移測試
※在windows客戶端一直去ping VIP,然後關閉192.168.1.201上的keepalived,正常情況下VIP就會切換到192.168.1.202上面去
※開啓192.168.1.201上的keepalived,關閉192.168.1.202上的keepalived,看是否能自動切換,正常情況下VIP又會屬於192.168.1.201
注:keepalived切換速度還是非常塊的,整個切換過程只需1-3秒
● MySQL故障轉移測試
※在192.168.1.201上關閉MySQL服務,看VIP是否會切換到192.168.1.202上
※開啓192.168.1.201上的MySQL和keepalived,然後關閉192.168.1.202上的MySQL,看VIP是否會切換到192.168.1.201上
下面是用windows客戶端連接的MySQL的VIP,在切換時我執行了一個MySQL查詢命令,從執行show databases到顯示出結果時間爲3-5秒(大家可以看到上面有個錯誤提示,不過不用擔心,因爲我們的keepalived切換大概爲3秒左右,這3秒左右VIP是誰都不屬於的)
1. MySQL> show databases;
2. ERROR 2006 (HY000): MySQL server has gone away
3. No connection. Trying to reconnect...
4. Connection id: 592
5. Current database: *** NONE ***
6.
7. +--------------------+
8. | Database |
9. +--------------------+
10. | information_schema |
11. | MySQL |
12. | test |
13. +--------------------+
14. 3 rows in set (9.01 sec)
後話:世間萬事萬物,都不具備絕對的完美,就像上面的MySQL-HA一樣,keepalived只能做到對3306的健康檢查,但是做不到比如像MySQL複製中的slave-SQL、slave-IO進程的檢查。所以要想做到一些細緻的健康檢查,還得需要藉助額外的監控工具,比如nagios,然後用nagios實現短信、郵件報警,從而能夠有效地解決問題。
利用keepalived構建高可用MySQL-HA
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
sql語法、關係建模
死瘦宅
2019-02-24 22:35:22
MySQL 事務、函數、觸發器、數據庫備份、權限管理
死瘦宅
2019-02-24 22:35:12
如果同事暗中傷害你,應該怎麼辦?
這個饅頭有餡
2019-02-24 13:59:08
職場中,抱怨越多的員工,越被領導瞧不起!
這個饅頭有餡
2019-02-24 13:59:08
老程序員被裁,應屆生卻能月薪 1.3 萬?這你能忍?
前端高達
2019-02-24 13:48:04
遇到到處蹭吃卻從不請客吃飯的主怎麼辦?
樑軍年
2019-02-24 13:26:35
MySQL数据库集群-PXC方案
wy53780
2020-04-23 13:55:07
《從0到1學習Flink》—— Flink 讀取 Kafka 數據批量寫入到 MySQL
zhisheng
2019-02-24 21:04:11
SpringBoot 填坑 (一) | CentOS7.4 環境下,表時間字段默認值設置失效
一個優秀的廢人
2019-02-24 15:33:55
mysql-存儲過程
雙子城
2019-02-24 13:43:57
jmeter學習指南之操作 mysql 數據庫
小強測試
2019-02-24 13:34:06
20190222全天的實驗
清歡難尋
2019-02-24 13:17:21
MongoDB索引優化詳解
geekpy
2019-02-24 14:20:06