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

前言:
         原理與思想
       這裏選用GTID主從複製模式Mysql主從複製模式,是爲了更加確保主從複製的正確性、健康性與易配性。這裏作的是兩服務器A,B各有Mysql實例3310,兩個實例間互爲主從
       主從複製模式採用GTID主從複製模式,在服務器A,B上配置keepalived負載均衡,經過VIP鏈接數據庫,目的是一旦有某數據庫宕機,keepalived 就會當即建VIP執行另一臺
       健康的數據庫實例上,實現快速切換,避免單點故障,從而保證業務的正常運行。
 

 
        這裏只作了 雙主+keepalived  , 對於讀寫要求很大大的環境,推薦架構是,雙主多從(能夠經過集羣管理軟件MMM來實現高可用架構)讀寫分離,固然代價也是比較高的 。
        讀寫分離實現方法:
               一、程序實現:程序端預留接口,當對於已經在運行的環境,從新修改程序,貌似不大現實
               二、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.%        mysql

(能夠在配置文件里加入,做用屏蔽要複製的庫)sql


三、受權
     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這臺上
               
           二、客戶端鏈接數據庫
                基本不會有影響
               
 
 
後續:歡迎評判!
相關文章
相關標籤/搜索