操作系統
Red Hat Enterprise Linux Server release 5.6 (Tikanga)
mysql-vip:10.10.11.254
mysql-master1:10.10.11.251
mysql-master2:10.10.11.253
mysql版本:mysql5.5.19
ipvsadm版本:ipvsadm-1.24.tar.gz
keepalived-1.2.1.tar.gz
1 安裝lvs
ln -sv /usr/src/kernels/2.6.18-194.el5-i686/ /usr/src/linux
注:這個很重要,不然編譯不過。因爲編譯時要用kernel-source,而Makefile文件設置到kernel-source路徑是/usr/src/linux
tar zxvf ipvsadm-1.24.tar.gz
cd ipvsadm-1.24
make && make install
ipvsadm
檢查當前加載的內核模塊,是否存在ip_vs模塊
lsmod | grep ip_vs
ip_vs 122113 0
2 安裝mysql 5.5.19 主主複製
不同的地方就是server-id,主服務器配置文件不用修改,從服務器的配置文件server-id=10.其他的內容基本相同.
將10.10.11.251設爲10.10.11.253的主服務器,在10.10.11.251新建授權用戶
mysql> grant replication slave on *.* to 'replication'@'%' identified by 'replication';
得到binlog日誌文件名和偏移量
mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000002 | 261 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
在10.10.11.253上將10.10.11.251設置爲自己的主服務器
change master to master_host='10.10.11.251',master_user='replication',master_password='replication',master_log_file='mysql-bin.000003',master_log_pos=107;
將10.10.11.253設爲10.10.11.251的主服務器,在10.10.11.253新建授權用戶
mysql> grant replication slave on *.* to 'replication'@'%' identified by 'replication';
得到binlog日誌文件名和偏移量
mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000004 | 261 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
在10.10.11.251上將10.10.11.253設置爲自己的主服務器
mysql> change master to master_host='10.10.11.253',master_user='replication',master_password='replication',master_log_file='mysql-bin.000005',master_log_pos=195;
啓用複製功能(兩臺機器)
mysql> start slave;
mysql> show slave status/G
出現的問題 當我在執行start slave這條命令時,系統提示 ERROR 1200 (HY000): The server is not configured as slave; fix in config file or with CHANGE MASTER TO, 執行show slave status;又提示Empty set (0.00 sec),想不通問題在哪裏 後來發現,原來slave已經默認開啓,要先關閉再開啓 執行 slave stop; 再執行 change master to master_host='192.168.1.222',master_user='repl',master_password='123456', master_log_file='log.000003' ,master_log_pos=98; 然後執行 slave start; 這時 再執行show slave status\G |
首先在Master上用 show processlist; 查看下進程是否Sleep太多。發現很正常。 show master status; 也正常。 再跑到Slave上查看 show slave status; 錯誤提示: Error 'Duplicate entry '1' for key 1' on query. Default database: 'movivi1'. Query: 'INSERT INTO `v1vid0_user_samename` VALUES(null,1,'123','11','4545','123')' Slave_SQL_Running 爲 NO Seconds_Behind_Master 爲 (null) 可見是Slave不同步 解決: stop slave; set global sql_slave_skip_counter =1 ; start slave; 之後Slave會和Master去同步 主要看Seconds_Behind_Master是否爲0,直到爲0時就已經同步 |
2 安裝keepalived
安裝keepalived
# tar zxvf keepalived-1.2.1.tar.gz
# cd keepalived-1.2.1
# ./configure --prefix=/usr/local/keepalived --with-kernel-dir=/usr/src/kernels/2.6.18 -194.el5-i686/
# make && make install
cp /usr/local/keepalived/sbin/keepalived /usr/sbin #設置環境
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d 設置keepalived 爲系統服務
mkdir /etc/keepalived
cp /usr/local/webserver/keepalived/etc/keepalived/keepalived.conf /etc/keepalived
chkconfig --add keepalived #此種方式不適合mysql keepalived 主主
chkconfig --level 345 keepalived on
chkconfig --list|grep keepalived
用如下方式:keepalived必須在mysql啓動後啓動,否則會因爲mysql沒有啓動而自動關閉
192.168.15.168上配置keepalived global_defs { notification_email { [email protected] } notification_email_from [email protected] smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id MySQL-ha } vrrp_instance VI_1 { state BACKUP #兩臺配置此處均是BACKUP interface eth0 virtual_router_id 51 priority 100 #優先級,另一臺改爲90 advert_int 1 nopreempt #不搶佔,只在優先級高的機器上設置即可,優先級低的機器不設置 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.15.170 } } virtual_server 192.168.15.170 3306 { delay_loop 2 #每個2秒檢查一次real_server狀態 lb_algo wrr #LVS算法 lb_kind DR #LVS模式 persistence_timeout 60 #會話保持時間 protocol TCP real_server 192.168.15.168 3306 { weight 3 notify_down /usr/local/MySQL/bin/MySQL.sh #檢測到服務down後執行的腳本 TCP_CHECK { connect_timeout 10 #連接超時時間 nb_get_retry 3 #重連次數 delay_before_retry 3 #重連間隔時間 connect_port 3306 #健康檢查端口 } } 編寫檢測服務down後所要執行的腳本 #vi /usr/local/MySQL/bin/MySQL.sh #!/bin/sh pkill keepalived #chmod +x /usr/local/MySQL/bin/MySQL.sh 啓動keepalived #/usr/local/keepalived/sbin/keepalived –D #ps -aux | grep keepalived |
192.168.15.169上配置keepalived # mkdir /etc/keepalived # vi /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { notification_email { [email protected] } notification_email_from [email protected] smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id MySQL-ha } vrrp_instance VI_1 { state BACKUP #兩臺配置此處均是BACKUP interface eth0 virtual_router_id 51 priority 90 #優先級 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.15.170 } } virtual_server 192.168.15.170 3306 { delay_loop 2 #每個2秒檢查一次real_server狀態 lb_algo wrr #LVS算法 lb_kind DR #LVS模式 persistence_timeout 60 #會話保持時間 protocol TCP real_server 192.168.15.169 3306 { weight 3 notify_down /usr/local/MySQL/bin/MySQL.sh #檢測到服務down後執行的腳本 TCP_CHECK { connect_timeout 10 #連接超時時間 nb_get_retry 3 #重連次數 delay_before_retry 3 #重連間隔時間 connect_port 3306 #健康檢查端口 } } 編寫檢測服務down後所要執行的腳本 #vi /usr/local/MySQL/bin/MySQL.sh #!/bin/sh pkill keepalived #chmod +x /usr/local/MySQL/bin/MySQL.sh 啓動keepalived #/usr/local/keepalived/sbin/keepalived –D #ps -aux | grep keepalived |
檢測lvs路由到哪臺機器
[root@misdata2 ~]# ipvsadm -L -n --stats IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Conns InPkts OutPkts InBytes OutBytes -> RemoteAddress:Port TCP 192.168.5.57:3306 0 0 0 0 0 -> 192.168.5.59:3306 0 0 0 0 |
可以用同網段的另一臺服務器 arping 1 這個虛擬IP
看看對應該的MAC地址 可以知道虛擬IP對應的真實服務器
[root@MimmsApp1 ~]# arping 192.168.5.57 ARPING 192.168.5.57 from 192.168.5.50 eth0 Unicast reply from 192.168.5.57 [78:2B:CB:69:3A:DD] 0.725ms Unicast reply from 192.168.5.57 [78:2B:CB:68:FC:41] 0.765ms Unicast reply from 192.168.5.57 [78:2B:CB:68:FC:41] 0.748ms |
查看keepalived 是否運行
[root@misdata1 ~]# /etc/init.d/keepalived status keepalived (pid 7113) is running... |
keepalived停止、啓動
[root@misdata2 ~]# /etc/init.d/keepalived stop |stop|restart |
keepalived 日誌
[root@misdata2 ~]# tail -f /var/log/messages |
查看mysql是否運行
[root@misdata1 ~]# /etc/init.d/mysql status MySQL running (6970) [ OK ] |
在windows客戶端ping -t 10.10.11.254 keepalived故障轉移測試 |
keepalived的日誌文件路徑爲:tail -f /var/log/messages
|