mysql lvs keepalived 雙主熱備

操作系統

 

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故障轉移測試 
在windows 客戶端一直ping 192.168.15.170 然後分別關閉192.168.15.168 192.168.15.169 上的keepalived 看是否自動切換 

 

 

keepalived的日誌文件路徑爲:tail -f /var/log/messages

 


 

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