前言:
原理與思想
這里選用GTID主從復制模式Mysql主從復制模式,是為了更加確保主從復制的正確性、健康性與易配性。這里做的是兩服務器A,B各有Mysql實例3310,兩個實例間互為主從
主從復制模式采用GTID主從復制模式,在服務器A,B上配置keepalived負載均衡,通過VIP連接數據庫,目的是一旦有某數據庫宕機,keepalived 就會立即建VIP執行另外一台
健康的數據庫實例上,實現快速切換,避免單點故障,從而保證業務的正常運行。
這里只做了 雙主+keepalived , 對於讀寫要求很大大的環境,推薦架構是,雙主多從(可以通過集群管理軟件MMM來實現高可用架構)讀寫分離,當然代價也是比較高的 。
讀寫分離實現方法:
1、程序實現:程序端預留接口,當對於已經在運行的環境,重新修改程序,貌似不大現實
2、Mysql_proxy :官方的一種實現方式,但是官方建議不要再生產環境中使用,所以不推薦
3、Amoeba 軟件分離 (推薦使用)
架構圖:
一、環境要求:
| 服務器A: | 192.168.1.31 | 系統環境:CetnOS6.5、Mysql-5.6.19(主從)、Keepalived(master) |
| 服務器B: | 192.168.1.32 | 系統環境:CetnOS6.5、Mysql-5.6.19(從主)、Keepalived(back) |
二、安裝Mysql 與 主從配置
(mysql安裝步驟略)
這里服務器A上配置實例為3310,服務器B上的實例也為3310 (雙主同樣端口號的好處是在故障切換的時候)
安裝好mysql后修改配置文件
1、修改A服務器上的mysql配置文件my.cnf
在my.cnf文件里加入參數(注意不要重復定義參數)
server-id = 201 //這里的ID號與從庫上或者主庫上的ID必須保證不一樣
log-bin=mysql-bin //可以自定義 這里定義為 log-bin=/data/log-bin/log-bin-3310
binlog_format=row //主從復制模式
log-slave-updates=true //slave 更新是否記入日志
gtid-mode=on // 啟用gtid類型,否則就是普通的復制架構
enforce-gtid-consistency=true //強制GTID 的一致性
master-info-repository=TABLE //主服信息記錄庫=表 /文件
relay-log-info-repository=TABLE //中繼日志信息記錄庫
sync-master-info=1 //同步主庫信息
slave-parallel-workers=4 //從服務器的SQL 線程數,要復制庫數目相同
binlog-checksum=CRC32 // 校驗碼 ,可以自定義
master-verify-checksum=1 //主服校驗
slave-sql-verify-checksum=1 //從服校驗
binlog-rows-query-log_events=1 //二進制日志詳細記錄事件
report-port=3310 //提供復制報告端口,當前實例端口號
report-host=192.168.1.31 //提供復制報告主機,本機的ip地址
2、修改B服務器上的mysql配置文件my.cnf
在my.cnf文件里加入參數(注意不要重復定義參數)
server-id = 202 //這里的ID號與從庫上或者主庫上的ID必須保證不唯一
log-bin=mysql-bin //可以自定義 這里定義為 log-bin=/data/log-bin/log-bin-3310
binlog_format=row //主從復制模式
log-slave-updates=true //slave 更新是否記入日志
gtid-mode=on // 啟用gtid類型,否則就是普通的復制架構
enforce-gtid-consistency=true //強制GTID 的一致性
master-info-repository=TABLE //主服信息記錄庫=表 /文件
relay-log-info-repository=TABLE //中繼日志信息記錄庫
sync-master-info=1 //同步主庫信息
slave-parallel-workers=4 //從服務器的SQL 線程數,要復制庫數目相同
binlog-checksum=CRC32 // 校驗碼 ,可以自定義
master-verify-checksum=1 //主服校驗
slave-sql-verify-checksum=1 //從服校驗
binlog-rows-query-log_events=1 //二進制日志詳細記錄事件
report-port=3310 //提供復制報告端口,當前實例端口號
report-host=192.168.1.32 //提供復制報告主機,本機的ip地址
replicate-wild-ignore-table=mysql.%
replicate-wild-ignore-table=test.%
replicate-wild-ignore-table=performance_schema.%
(可以在配置文件里加入,作用屏蔽要復制的庫)
3、授權
A服務器mysql實例3310:
grant replication slave,replication client on *.* to slave@'192.168.1.32'identified by '123456';
B服務器mysql實例3310:
grant replication slave,replication client on *.* to slave@'192.168.1.32'identified by '123456';
================================================================================
A服務器mysql實例3310:
change master to master_host='192.168.1.32',master_port=3310,master_user='slave',master_password='123456',master_auto_position=1;
注意:這里要是不配置參數master_port=3311,默認的會去找3306
B服務器mysql實例3310:
change master to master_host='192.168.1.31',master_port=3310,master_user='slave',master_password='123456',master_auto_position=1;
==================================================================================
A、B服務器上開啟主從復制:start slave;
4、查看狀態
A服務器:show slave status\G;show processlist;
B服務器:show slave status\G; show processlist;
#show processlist;
5、到這里A、B服務器間基於GTID主從復制模式已經配置好了,測試下
在A服務器3310實例上:drop databse test;B服務器3310上查看狀態:show databases;
在B服務器3310實例上:create database wll_test; A服務器上3310上查看狀態:show databases;
三、安裝配置Keepalived負載均衡器
1、官網下載www.keepalived.org
在A服務器和B服務器上安裝keepalived
#tar zxvf keepalived-1.2.20.tar.gz
#cd keepalived-1.2.20.tar.gz
#./configure --sysconf=/etc --with-kernel-dir=/usr/local/src/kernels/2.6.32-573.el6.x86_64
#make&&make install
#ln -s /usr/local/sbin/keepalived /sbin/
#ln -s /usr/local/keepalived-1.2.20 /usr/local/keepalived
#chkconfig --level 35 keepalived on
2、配置keepalived
#配置A服務器
#配置B服務器
3、# /etc/keepalived/change_mysql.sh 腳本內容為強殺死keepalived進程
4、#配置好后開啟兩服務器 keepalived
#/etc/init.d/keepalived start
#ps aux | grep keepalived
5、查看狀態
# ip a
keepalived的工作機制是:每2秒檢查一次real_server的監控狀態,一旦發現數據庫down了,此時VIP就會轉移到另外一台上,從而實現故障快速切換,用戶在通過VIP連接
基本可以保持一直連接狀態。
四、測試切換
先檢查服務器A與服務器B上的Mysql實例與keepalived是否都為開啟狀態
1、此時VIP在服務器B上
在B服務器上將Mysql實例3310 stop
# /etc/init.d/mysqld_3310 stop
可以看到VIP馬上就切換到了服務器A 192.168.1.31這台上
2、客戶端連接數據庫
基本不會有影響
后續:歡迎評判!
