1、環境描述:
??? os:centos6.5_x64
??? master:192.168.0.202
??? backup:192.168.0.203
??? vip:192.168.0.204
2、配置兩臺Mysql主主同步
關于MySQL的安裝大家也可以參考《?MySQL之——CentOS6.5 編譯安裝mysql5.6.16?》,主主同步在主從同步的基礎上將從服務器配置為之前主服務器的Master,相當于在原來主從同步的基礎上,將原來的Slave設置為了原來Master的Master,大家也可以參考《MySQL之——MS主從復制(讀寫分離)實現》 ,設置A為B的Master,B為A的Slave后,然后再將B設置為A的Master,A設置為B的Slave。
[root@masterr?~]#?yum?install?mysql-server?mysql?-y?? [root@masterr?~]#?service?mysqld?start?? [root@masterr?~]#?mysqladmin?-u?root?proot?? [root@masterr?~]#?vi?/etc/my.cnf??#開啟二進制日志,設置id?? [mysqld]?? server-id?=?1????????????????????#backup這臺設置2?? log-bin?=?mysql-bin?? binlog-ignore-db?=?mysql,information_schema???????#忽略寫入binlog日志的庫?? auto-increment-increment?=?2?????????????#字段變化增量值?? auto-increment-offset?=?1??????????????#初始字段ID為1?? slave-skip-errors?=?all???????????????????????#忽略所有復制產生的錯誤??????? [root@masterr?~]#?service?mysqld?restart
#先查看下log bin日志和pos值位置
master配置如下:
[root@?master?~]#?mysql?-u?root?-proot?? mysql>?GRANT??REPLICATION?SLAVE?ON?*.*?TO?'replication'@'192.168.0.%'?IDENTIFIED??BY?'replication';?? mysql>?flush??privileges;?? mysql>?change??master?to?? ????->??master_host='192.168.0.203',?? ????->??master_user='replication',?? ????->??master_password='replication',?? ????->??master_log_file='mysql-bin.000002',?? ????->??master_log_pos=106;??#對端狀態顯示的值?? mysql>?start??slave;?????????#啟動同步
backup配置如下:
[root@backup?~]#??mysql?-u?root?-proot?? mysql>?GRANT??REPLICATION?SLAVE?ON?*.*?TO?'replication'@'192.168.0.%'?IDENTIFIED??BY?'replication';?? mysql>?flush??privileges;?? mysql>?change??master?to?? ????->??master_host='192.168.0.202',?? ????->??master_user='replication',?? ????->??master_password='replication',?? ????->??master_log_file='mysql-bin.000002',?? ????->??master_log_pos=106;?? mysql>?start??slave;
#主主同步配置完畢,查看同步狀態Slave_IO和Slave_SQL是YES說明主主同步成功。
在master插入數據測試下:
在backup查看是否同步成功:
可以看到已經成功同步過去,同樣在backup插入到user表數據,一樣同步過去,雙主就做成功了。
3、配置keepalived實現熱備
[root@backup?~]#?yum?install?-y?pcre-devel?openssl-devel?popt-devel?#安裝依賴包
[root@masterr?~]#?wget?http://www.keepalived.org/software/keepalived-1.2.7.tar.gz?? [root@masterr?~]#?tar?zxvf?keepalived-1.2.7.tar.gz?? [root@masterr?~]#?cd?keepalived-1.2.7?? [root@masterr?~]#./configure?--prefix=/usr/local/keepalived?? make
#將keepalived配置成系統服務
[root@masterr?~]#?cp?/usr/local/keepalived/etc/rc.d/init.d/keepalived?/etc/init.d/?? [root@masterr?~]#?cp?/usr/local/keepalived/etc/sysconfig/keepalived?/etc/sysconfig/?? [root@masterr?~]#?mkdir?/etc/keepalived/?? [root@masterr?~]#?cp?/usr/local/keepalived/etc/keepalived/keepalived.conf?/etc/keepalived/?? [root@masterr?~]#?cp?/usr/local/keepalived/sbin/keepalived?/usr/sbin/
[root@masterr?~]#?vi?/etc/keepalived/keepalived.conf?? !?Configuration?File?forkeepalived?? global_defs?{?? notification_email?{?? test@sina.com?? ?}?? notification_email_from??admin@test.com?? 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???????????#優先級,backup設置90?? ?advert_int?1?? ?nopreempt?????????????#不主動搶占資源,只在master這臺優先級高的設置,backup不設置?? ?authentication?{?? ?auth_type?PASS?? ?auth_pass?1111?? ?}?? ?virtual_ipaddress?{?? ?192.168.0.204?? ?}?? }?? virtual_server?192.168.0.204?3306?{?? ?delay_loop?2?? ?#lb_algo?rr??????????????#LVS算法,用不到,我們就關閉了?? ?#lb_kind?DR??????????????#LVS模式,如果不關閉,備用服務器不能通過VIP連接主MySQL?? ?persistence_timeout?50??#同一IP的連接60秒內被分配到同一臺真實服務器?? ?protocol?TCP?? ?real_server?192.168.0.202?3306?{???#檢測本地mysql,backup也要寫檢測本地mysql?? ?weight?3?? ?notify_down?/usr/local/keepalived/mysql.sh????#當mysq服down時,執行此腳本,殺死keepalived實現切換?? ?TCP_CHECK?{?? ?connect_timeout?3????#連接超時?? ?nb_get_retry?3???????#重試次數?? ?delay_before_retry?3?#重試間隔時間?? ??}?? }
[root@masterr?~]#?vi?/usr/local/keepalived/mysql.sh?? #!/bin/bash?? pkill?keepalived?? [root@masterr?~]#?chmod?+x?/usr/local/keepalived/mysql.sh?? [root@masterr?~]#?/etc/init.d/keepalived?start
#backup服務器只修改priority為90、nopreempt不設置、real_server設置本地IP。
#授權兩臺Mysql服務器允許root遠程登錄,用于在其他服務器登陸測試!
mysql>?grant?all?on?*.*?to'root'@'192.168.0.%'?identified?by?'root';?? mysql>?flush?privileges;
4、測試高可用性
1)通過Mysql客戶端通過VIP連接,看是否連接成功。
2)停止master這臺mysql服務,是否能正常切換過去,可通過ip addr命令來查看VIP在哪臺服務器上。
3)可通過查看/var/log/messges日志,看出主備切換過程
4)master服務器故障恢復后,是否主動搶占資源,成為活動服務器。
注意:服務啟動的順序:先啟動MySQL,后啟動Keepalived。
以上就是MySQL之——基于Keepalived實現雙機HA的內容,更多相關內容請關注PHP中文網(www.php.cn)!