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