MySQL高可用基礎之keepalived+雙主複製【轉】

來源:互聯網
上載者:User

標籤:blog   http   io   os   使用   ar   for   檔案   資料   

環境:
MySQL-VIP:192.168.1.3
MySQL-master1:192.168.1.1
MySQL-master2:192.168.1.2


OS版本:CentOS release 6.4 (Final) Linux 2.6.32-358.el6.x86_64
MySQL版本:5.6.14
Keepalived版本:1.2.13




一、MySQL master-master配置


1、修改MySQL設定檔/etc/my.cnf   
# Server1配置
[mysqld]
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_UNSIGNED_SUBTRACTION 
port = 6603
server_id = 1 
lower_case_table_names = 1
character_set_server = utf8
autocommit = off
innodb_flush_log_at_trx_commit = 1
skip_name_resolve = ON
innodb_strict_mode = ON
log_bin = mysql-bin
innodb_data_home_dir = /usr/local/mysql/data
innodb_log_group_home_dir = /usr/local/mysql/data
auto_increment_increment=2
auto_increment_offset=1


# Server2配置
[mysqld]
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_UNSIGNED_SUBTRACTION 
port = 6603
server_id = 2 
lower_case_table_names = 1
character_set_server = utf8
autocommit = off
innodb_flush_log_at_trx_commit = 1
skip_name_resolve = ON
innodb_strict_mode = ON
log_bin = mysql-bin
innodb_data_home_dir = /usr/local/mysql/data
innodb_log_group_home_dir = /usr/local/mysql/data
auto_increment_increment=2
auto_increment_offset=2


2、將192.168.1.1設為192.168.1.2的主伺服器
# 在Server1上執行
grant replication slave on *.* to ‘repl‘@‘%‘ identified by ‘repl‘; 
show master status; 


# 在Server2上執行
change master to 
master_host=‘192.168.1.1‘,
master_port=6603,
master_user=‘repl‘,
master_password=‘repl‘,
master_log_file=‘mysql-bin.000027‘,
master_log_pos=120; 
start slave;
show slave status\G


3、將192.168.1.2設為192.168.1.1的主伺服器
# 在Server2上執行
grant replication slave on *.* to ‘repl‘@‘%‘ identified by ‘repl‘; 
show master status; 


# 在Server1上執行
change master to 
master_host=‘192.168.1.2‘,
master_port=6603,
master_user=‘repl‘,
master_password=‘repl‘,
master_log_file=‘mysql-bin.000010‘,
master_log_pos=351; 
start slave;
show slave status\G


4、MySQL雙Master同步測試




二、keepalived安裝及配置


1、192.168.1.1伺服器上keepalived安裝及配置
安裝keepalived
# tar -zxvf keepalived-1.2.13.tar.gz
# cd keepalived-1.2.13
# ./configure --prefix=/usr/local/keepalived --with-kernel-dir=/usr/src/kernels/2.6.32-358.el6.x86_64
# make
# make install


配置keepalived
建立一個設定檔,預設情況下keepalived啟動時會去/etc/keepalived目錄下找設定檔
# mkdir /etc/keepalived
# vi /etc/keepalived/keepalived.conf
# Configuration File for keepalived  
global_defs {  
     router_id MySQL-ha  
     }  


vrrp_instance VI_1 {  
     state BACKUP   #兩台配置此處均是BACKUP  
     interface eth1  
     virtual_router_id 51  
     priority 100   #優先順序,另一台改為90  
     advert_int 1  
     nopreempt  #不搶佔,只在優先順序高的機器上設定即可,優先順序低的機器不設定  
     authentication {  
     auth_type PASS  
     auth_pass 1111  
     }  
     virtual_ipaddress {  
     192.168.1.3  
     }  
     }  


virtual_server 192.168.1.3 6603 {  
     delay_loop 2   #每個2秒檢查一次real_server狀態  
     lb_algo wrr   #LVS演算法  
     lb_kind DR    #LVS模式  
     persistence_timeout 60   #會話保持時間  
     protocol TCP  
     real_server 192.168.1.1 6603 {  
     weight 3  
     notify_down /usr/local/mysql/bin/failover.sh  #檢測到服務down後執行的指令碼  
     TCP_CHECK {  
     connect_timeout 10    #連線逾時時間  
     nb_get_retry 3       #重連次數  
     delay_before_retry 3   #重連間隔時間  
     connect_port 6603   #健全狀態檢查連接埠  
     }  
     } 


編寫檢測服務down後所要執行的指令碼
# vi /usr/local/mysql/bin/failover.sh
#!/bin/sh  
pkill keepalived  
# chmod +x /usr/local/mysql/bin/failover.sh


註:此指令碼是上面設定檔notify_down選項所用到的,keepalived使用notify_down選項來檢查real_server的服務狀態,當發現real_server服務故障時,便觸發此指令碼;我們可以看到,指令碼就一個命令,通過pkill keepalived強制殺死keepalived進程,從而實現了MySQL故障自動轉移。另外,我們不用擔心兩個MySQL會同時提供資料更新操作,因為每台MySQL上的keepalived的配置裡面只有本機MySQL的IP+VIP,而不是兩台MySQL的IP+VIP


啟動keepalived
# /usr/local/keepalived/sbin/keepalived -D
# ps aux | grep keepalived 


測試
找一台區域網路PC,然後去ping MySQL的VIP,這時候MySQL的VIP是可以ping的通的
停止MySQL服務,看keepalived健全狀態檢查程式是否會觸發我們編寫的指令碼


keepalived配置成服務並開機啟動
# cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
# cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
# cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
# chkconfig --add keepalived 
# chkconfig --level 345 keepalived on


2、192.168.1.2上keepalived安裝及配置
安裝keepalived
# tar -zxvf keepalived-1.2.13.tar.gz
# cd keepalived-1.2.13
# ./configure --prefix=/usr/local/keepalived --with-kernel-dir=/usr/src/kernels/2.6.32-358.el6.x86_64
# make
# make install


配置keepalived
這台配置和Server1上基本一樣,但有三個地方不同:優先順序為90、無搶佔設定、real_server為本機IP
# mkdir /etc/keepalived
# vi /etc/keepalived/keepalived.conf
# Configuration File for keepalived  
global_defs {  
     router_id MySQL-ha  
     }  


vrrp_instance VI_1 {  
     state BACKUP   #兩台配置此處均是BACKUP  
     interface eth1  
     virtual_router_id 51  
     priority 100   #優先順序,另一台改為90  
     advert_int 1  
     nopreempt  #不搶佔,只在優先順序高的機器上設定即可,優先順序低的機器不設定  
     authentication {  
     auth_type PASS  
     auth_pass 1111  
     }  
     virtual_ipaddress {  
     192.168.1.3  
     }  
     }  


virtual_server 192.168.1.3 6603 {  
     delay_loop 2   #每個2秒檢查一次real_server狀態  
     lb_algo wrr   #LVS演算法  
     lb_kind DR    #LVS模式  
     persistence_timeout 60   #會話保持時間  
     protocol TCP  
     real_server 192.168.1.1 6603 {  
     weight 3  
     notify_down /usr/local/mysql/bin/failover.sh  #檢測到服務down後執行的指令碼  
     TCP_CHECK {  
     connect_timeout 10    #連線逾時時間  
     nb_get_retry 3       #重連次數  
     delay_before_retry 3   #重連間隔時間  
     connect_port 6603   #健全狀態檢查連接埠  
     }  
     } 
     
編寫檢測服務down後所要執行的指令碼
# vi /usr/local/mysql/bin/failover.sh
#!/bin/sh  
pkill keepalived  
# chmod +x /usr/local/mysql/bin/failover.sh


啟動keepalived
# /usr/local/keepalived/sbin/keepalived -D
# ps aux | grep keepalived 


測試
停止MySQL服務,看keepalived健全狀態檢查程式是否會觸發我們編寫的指令碼


keepalived配置成服務並開機啟動
# cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
# cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
# cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
# chkconfig --add keepalived 
# chkconfig --level 345 keepalived on




三、測試
1、MySQL遠程登入測試
使用用戶端登入VIP測試


2、keepalived容錯移轉測試
用戶端一直去ping VIP,然後關閉192.168.1.1上的keepalived,正常情況下VIP就會切換到192.168.1.2上面去
開啟192.168.1.1上的keepalived,關閉192.168.1.2上的keepalived,看是否能自動切換,正常情況下VIP又會屬於192.168.1.1
註:keepalived切換速度還是非常塊的,整個切換過程只需1-3秒


3、MySQL容錯移轉測試
在192.168.1.1上關閉MySQL服務,看VIP是否會切換到192.168.1.2上
開啟192.168.1.1上的MySQL和keepalived,然後關閉192.168.1.2上的MySQL,看VIP是否會切換到192.168.1.1上
用戶端串連的MySQL的VIP,在切換時執行了一個MySQL查詢命令




這個方案可以在一定程度上解決MySQL高可用的問題,即應用訪問VIP,當一個MySQL Server出現問題,會自動切換到另一個,切換過程很快,對應用透明。但這種簡單配置只能有一台伺服器工作,另一個備用,這樣無法擴充讀寫,也沒法做負載平衡。目前MySQL負載平衡方案一般是一個HA(keepalived、MHA等)+ 一個負載平衡器(LVS、haproxy等)。


關於LVS+keepalived方案,參考:

http://kb.cnblogs.com/page/83944/

http://blog.chinaunix.net/uid-20639775-id-3337471.html
http://wenku.baidu.com/link?url=lNERgU80yUEAKmPO0hCFbDH7_xlIG14itOHx4KkjPNsVVRd2GEblXH-HPdOi39Kf8v8Gu9yfQBfkU_WEJ35QM89DOSU_3kGH8LRhfKGKfLO

MySQL高可用基礎之keepalived+雙主複製【轉】

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.