企业级-Mysql双主互备高可用负载均衡架构(基于GTID主从复制模式)(原创)
生活随笔
收集整理的這篇文章主要介紹了
企业级-Mysql双主互备高可用负载均衡架构(基于GTID主从复制模式)(原创)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前言: 原理與思想 這里選用GTID主從復制模式Mysql主從復制模式,是為了更加確保主從復制的正確性、健康性與易配性。這里做的是兩服務器A,B各有Mysql實例3310,兩個實例間互為主從 主從復制模式采用GTID主從復制模式,在服務器A,B上配置keepalived負載均衡,通過VIP連接數據庫,目的是一旦有某數據庫宕機,keepalived 就會立即建VIP執行另外一臺 健康的數據庫實例上,實現快速切換,避免單點故障,從而保證業務的正常運行。
這里只做了 雙主+keepalived ?, 對于讀寫要求很大大的環境,推薦架構是,雙主多從(可以通過集群管理軟件MMM來實現高可用架構)讀寫分離,當然代價也是比較高的 。 讀寫分離實現方法: 1、程序實現:程序端預留接口,當對于已經在運行的環境,重新修改程序,貌似不大現實 2、Mysql_proxy :官方的一種實現方式,但是官方建議不要再生產環境中使用,所以不推薦 3、Amoeba 軟件分離 (推薦使用) 架構圖: 一、環境要求:
二、安裝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地址
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、客戶端連接數據庫 基本不會有影響 后續:歡迎評判!
這里只做了 雙主+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、客戶端連接數據庫 基本不會有影響 后續:歡迎評判!
轉載于:https://www.cnblogs.com/liangshaoye/p/5459421.html
總結
以上是生活随笔為你收集整理的企业级-Mysql双主互备高可用负载均衡架构(基于GTID主从复制模式)(原创)的全部內容,希望文章能夠幫你解決所遇到的問題。