標籤: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+雙主複製【轉】