企業級-Mysql雙主互備高可用負載均衡架構(基於GTID主從複製模式)

前言: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這臺上

               

          二、客戶端鏈接數據庫

                基本不會有影響

               

 

 

後續:歡迎評判!

相關文章
相關標籤/搜索