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


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

 
        這里只做了 雙主+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、客戶端連接數據庫
                基本不會有影響
               
 
 
后續:歡迎評判!
               
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM