前言:mysql
原理與思想sql
這裏選用GTID主從複製模式Mysql主從複製模式,是爲了更加確保主從複製的正確性、健康性與易配性。這裏作的是兩服務器A,B各有Mysql實例3310,兩個實例間互爲主從數據庫
主從複製模式採用GTID主從複製模式,在服務器A,B上配置keepalived負載均衡,經過VIP鏈接數據庫,目的是一旦有某數據庫宕機,keepalived 就會當即建VIP執行另一臺服務器
健康的數據庫實例上,實現快速切換,避免單點故障,從而保證業務的正常運行。架構
這裏只作了 雙主+keepalived , 對於讀寫要求很大大的環境,推薦架構是,雙主多從(能夠經過集羣管理軟件MMM來實現高可用架構)讀寫分離,固然代價也是比較高的 。負載均衡
讀寫分離實現方法:ide
一、程序實現:程序端預留接口,當對於已經在運行的環境,從新修改程序,貌似不大現實測試
二、Mysql_proxy :官方的一種實現方式,可是官方建議不要再生產環境中使用,因此不推薦線程
三、Amoeba 軟件分離 (推薦使用)日誌
架構圖:
1、環境要求:
服務器A: | 192.168.1.31 | 系統環境:CetnOS6.五、Mysql-5.6.19(主從)、Keepalived(master) |
服務器B: | 192.168.1.32 | 系統環境:CetnOS6.五、Mysql-5.6.19(從主)、Keepalived(back) |
2、安裝Mysql 與 主從配置
(mysql安裝步驟略)
這裏服務器A上配置實例爲3310,服務器B上的實例也爲3310 (雙主一樣端口號的好處是在故障切換的時候)
安裝好mysql後修改配置文件
一、修改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地址
二、修改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.%
(能夠在配置文件里加入,做用屏蔽要複製的庫)
三、受權
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;
四、查看狀態
A服務器:show slave status\G;show processlist;
B服務器:show slave status\G; show processlist;
#show processlist;
五、到這裏A、B服務器間基於GTID主從複製模式已經配置好了,測試下
在A服務器3310實例上:drop databse test;B服務器3310上查看狀態:show databases;
在B服務器3310實例上:create database wll_test; A服務器上3310上查看狀態:show databases;
3、安裝配置Keepalived負載均衡器
一、官網下載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
二、配置keepalived
#配置A服務器
#配置B服務器
三、# /etc/keepalived/change_mysql.sh 腳本內容爲強殺死keepalived進程
四、#配置好後開啓兩服務器 keepalived
#/etc/init.d/keepalived start
#ps aux | grep keepalived
五、查看狀態
# ip a
keepalived的工做機制是:每2秒檢查一次real_server的監控狀態,一旦發現數據庫down了,此時VIP就會轉移到另一臺上,從而實現故障快速切換,用戶在經過VIP鏈接
基本能夠保持一直鏈接狀態。
4、測試切換
先檢查服務器A與服務器B上的Mysql實例與keepalived是否都爲開啓狀態
一、此時VIP在服務器B上
在B服務器上將Mysql實例3310 stop
# /etc/init.d/mysqld_3310 stop
能夠看到VIP立刻就切換到了服務器A 192.168.1.31這臺上
二、客戶端鏈接數據庫
基本不會有影響
後續:歡迎評判!