企业级-Mysql双主互备高可用负载均衡架构(基于GTID主从复制模式)(原创)
生活随笔
收集整理的這篇文章主要介紹了
企业级-Mysql双主互备高可用负载均衡架构(基于GTID主从复制模式)(原创)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
前言: 原理與思想 這里選用GTID主從復(fù)制模式Mysql主從復(fù)制模式,是為了更加確保主從復(fù)制的正確性、健康性與易配性。這里做的是兩服務(wù)器A,B各有Mysql實(shí)例3310,兩個(gè)實(shí)例間互為主從 主從復(fù)制模式采用GTID主從復(fù)制模式,在服務(wù)器A,B上配置keepalived負(fù)載均衡,通過VIP連接數(shù)據(jù)庫,目的是一旦有某數(shù)據(jù)庫宕機(jī),keepalived 就會(huì)立即建VIP執(zhí)行另外一臺(tái) 健康的數(shù)據(jù)庫實(shí)例上,實(shí)現(xiàn)快速切換,避免單點(diǎn)故障,從而保證業(yè)務(wù)的正常運(yùn)行。
這里只做了 雙主+keepalived ?, 對于讀寫要求很大大的環(huán)境,推薦架構(gòu)是,雙主多從(可以通過集群管理軟件MMM來實(shí)現(xiàn)高可用架構(gòu))讀寫分離,當(dāng)然代價(jià)也是比較高的 。 讀寫分離實(shí)現(xiàn)方法: 1、程序?qū)崿F(xiàn):程序端預(yù)留接口,當(dāng)對于已經(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)境要求:
二、安裝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)與從庫上或者主庫上的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? ??????//主服信息記錄庫=表?/文件
relay-log-info-repository=TABLE? ? //中繼日志信息記錄庫 sync-master-info=1 ? ? ? ? ? ? ? ? ??????? //同步主庫信息 slave-parallel-workers=4 ? ? ? ? ?? ?????//從服務(wù)器的SQL?線程數(shù),要復(fù)制庫數(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)與從庫上或者主庫上的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? ??????//主服信息記錄庫=表?/文件
relay-log-info-repository=TABLE? ? //中繼日志信息記錄庫 sync-master-info=1 ? ? ? ? ? ? ? ? ??????? //同步主庫信息 slave-parallel-workers=4 ? ? ? ? ?? ?????//從服務(wù)器的SQL?線程數(shù),要復(fù)制庫數(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地址
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ù)器上開啟主從復(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)配置好了,測試下 在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、#配置好后開啟兩服務(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ù)庫down了,此時(shí)VIP就會(huì)轉(zhuǎn)移到另外一臺(tái)上,從而實(shí)現(xiàn)故障快速切換,用戶在通過VIP連接 基本可以保持一直連接狀態(tài)。 四、測試切換 先檢查服務(wù)器A與服務(wù)器B上的Mysql實(shí)例與keepalived是否都為開啟狀態(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ù)庫 基本不會(huì)有影響 后續(xù):歡迎評判!
這里只做了 雙主+keepalived ?, 對于讀寫要求很大大的環(huán)境,推薦架構(gòu)是,雙主多從(可以通過集群管理軟件MMM來實(shí)現(xiàn)高可用架構(gòu))讀寫分離,當(dāng)然代價(jià)也是比較高的 。 讀寫分離實(shí)現(xiàn)方法: 1、程序?qū)崿F(xiàn):程序端預(yù)留接口,當(dāng)對于已經(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)與從庫上或者主庫上的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? ??????//主服信息記錄庫=表?/文件
relay-log-info-repository=TABLE? ? //中繼日志信息記錄庫 sync-master-info=1 ? ? ? ? ? ? ? ? ??????? //同步主庫信息 slave-parallel-workers=4 ? ? ? ? ?? ?????//從服務(wù)器的SQL?線程數(shù),要復(fù)制庫數(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)與從庫上或者主庫上的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? ??????//主服信息記錄庫=表?/文件
relay-log-info-repository=TABLE? ? //中繼日志信息記錄庫 sync-master-info=1 ? ? ? ? ? ? ? ? ??????? //同步主庫信息 slave-parallel-workers=4 ? ? ? ? ?? ?????//從服務(wù)器的SQL?線程數(shù),要復(fù)制庫數(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ù)制的庫)
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ù)器上開啟主從復(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)配置好了,測試下 在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、#配置好后開啟兩服務(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ù)庫down了,此時(shí)VIP就會(huì)轉(zhuǎn)移到另外一臺(tái)上,從而實(shí)現(xiàn)故障快速切換,用戶在通過VIP連接 基本可以保持一直連接狀態(tài)。 四、測試切換 先檢查服務(wù)器A與服務(wù)器B上的Mysql實(shí)例與keepalived是否都為開啟狀態(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ù)庫 基本不會(huì)有影響 后續(xù):歡迎評判!
轉(zhuǎn)載于:https://www.cnblogs.com/liangshaoye/p/5459421.html
總結(jié)
以上是生活随笔為你收集整理的企业级-Mysql双主互备高可用负载均衡架构(基于GTID主从复制模式)(原创)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 五菱荣光汽车多少钱
- 下一篇: 求一个关于杨洋的个性签名。