MySQL高可用集羣之基於MyCat部署HaProxy實現高可用

基於MyCat部署HaProxy實現高可用

在實際項目中, Mycat 服務也需要考慮高可用性,如果 Mycat 所在服務器出現宕機,或 Mycat 服務故障,需要有備機提供服務,需要考慮 Mycat 集羣。

一、高可用方案

可以使用 HAProxy+Keepalived配合兩臺MyCat搭起MyCat集羣,實現高可用性。 HAProxy實現了MyCat多節點的集羣高可用和負載均衡,而 HAProxy自身的高可用則可以通過Keepalived來實現.

架構圖:

MySQL高可用集羣之基於MyCat部署HaProxy實現高可用

 

新添:

mycat02、haproxy01、haproxy02

主機操作系統IP地址mysql01Centos 7.3192.168.1.1mysql02(slave)Centos 7.3192.168.1.8mysql03Centos 7.3192.168.1.9mycatCentos 7.3192.168.1.3mycat02Centos 7.3192.168.1.11haproxy01(keepalived)Centos 7.3192.168.1.4(VIP:192.168.1.100)haproxy02(keepalived)Centos 7.3192.168.1.5(VIP:192.168.1.100)

案例中關閉防火牆

啓動兩臺mycat服務

[root@mycat mycat]# ./bin/mycat start
[root@mycat mycat2]# ./bin/mycat start

測試連接mycat(可以連接自己,並且可以連接到另一臺mycat)

[root@mycat ~]# mysql -umycat -p123456 -P8066 -h 192.168.1.3
[root@mycat2 ~]# mysql -umycat -p123456 -P8066 -h 192.168.1.11
[root@mycat ~]# mysql -umycat -p123456 -P8066 -h 192.168.1.11
[root@mycat2 ~]# mysql -umycat -p123456 -P8066 -h 192.168.1.3

1、安裝配置 HAProxy(haproxy01、haproxy02)

1)安裝 HAProxy 準備好HAProxy安裝包,傳到/opt目錄下 解壓到/usr/local/src

[root@haproxy01 ~]# tar zxf haproxy-1.8.23.tar.gz -C /usr/local/src/

2)進入解壓後的目錄,查看內核版本, 進行編譯

[root@haproxy01 ~]# cd /usr/local/src/haproxy-1.8.23/ 
[root@haproxy01 haproxy-1.8.23]# make TARGET=linux310 PREFIX=/usr/local/haproxy ARCH=x86_64

ARGET=linux310,內核版本,使用uname -r查看內核,如: 3.10.0-514.el7,此時該參數就爲linux310;

ARCH=x86_64,系統位數;

PREFIX=/usr/local/haprpxy #/usr/local/haprpxy,爲haprpxy安裝路徑。

3)編譯完成後,進行安裝

[root@haproxy01 haproxy-1.8.23]# make install PREFIX=/usr/local/haproxy

MySQL高可用集羣之基於MyCat部署HaProxy實現高可用

 

編輯配置文件(文件內容自己定義):

[root@haproxy01 haproxy-1.8.23]# vim /usr/local/haproxy/haproxy.conf
global
        log 127.0.0.1 local0
        #log 127.0.0.1 local1 notice
        #log loghost local0 info
        maxconn 4096
        chroot /usr/local/haproxy
        pidfile /usr/local/haproxy/haproxy.pid
        uid 99
        gid 99
        daemon
        #debug
        #quiet
defaults
        log global
        mode tcp
        option abortonclose
        option redispatch
        retries 3
        maxconn 2000
        timeout connect 5000
        timeout client 50000
        timeout server 50000
listen proxy_status
        bind :48066
                mode tcp
                balance roundrobin
                server mycat_1 192.168.1.3:8066 check inter 10s  //mycat服務器IP地址
                server mycat_2 192.168.1.11:8066 check inter 10s  //mycat服務器IP地址
frontend admin_stats
        bind :7777
                mode http
                stats enable
                option httplog
                maxconn 10
                stats refresh 30s
                stats uri /admin   //訪問web用戶名
                stats auth admin:123123      //定義密碼
                stats hide-version
                stats admin if TRUE

4)驗證啓動HAProxy

[root@haproxy01 haproxy-1.8.23]#  /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.conf

查看HAProxy進程

[root@haproxy01 haproxy-1.8.23]# ps -ef|grep haproxy

MySQL高可用集羣之基於MyCat部署HaProxy實現高可用

 

打開瀏覽器訪問 http://192.168.1.4:7777/admin、http://192.168.1.5:7777/admin

在彈出框輸入用戶名: admin密碼: 123123

MySQL高可用集羣之基於MyCat部署HaProxy實現高可用

 

MySQL高可用集羣之基於MyCat部署HaProxy實現高可用

 

訪問第二臺:

MySQL高可用集羣之基於MyCat部署HaProxy實現高可用

 

MySQL高可用集羣之基於MyCat部署HaProxy實現高可用

 

驗證負載均衡,通過HAProxy訪問Mycat

[root@mysql03 ~]# scp /usr/local/mysql/bin/mysql 192.168.1.4:/usr/local/sbin/
[root@mysql03 ~]# scp /usr/local/mysql/bin/mysql 192.168.1.5:/usr/local/sbin/

[root@haproxy01 haproxy-1.8.23]# mysql -umycat -p123456 -h 192.168.1.4 -P 48066
[root@haproxy01 haproxy-1.8.23]# mysql -umycat -p123456 -h 192.168.1.5 -P 48066

MySQL高可用集羣之基於MyCat部署HaProxy實現高可用

 

2、安裝配置keepalived(兩臺haproxy)

1)安裝 Keepalived 準備好Keepalived安裝包,傳到/opt目錄下 解壓到/usr/local/src

[root@haproxy01 ~]# tar zxf keepalived-2.0.20.tar.gz -C /usr/local/src/

安裝依賴插件

[root@haproxy01 ~]# yum -y install gcc openssl-devel popt-devel

進入解壓後的目錄, 進行配置, 進行編譯

[root@haproxy01 ~]# cd /usr/local/src/keepalived-2.0.20/
[root@haproxy01 keepalived-2.0.20]# ./configure --prefix=/usr/local/keepalived

完成後進行安裝

[root@haproxy01 keepalived-2.0.20]# make && make install

運行前配置

[root@haproxy01 keepalived-2.0.20]#  cp /usr/local/src/keepalived-2.0.20/keepalived/etc/init.d/keepalived /etc/init.d/
[root@haproxy01 keepalived-2.0.20]# mkdir /etc/keepalived
[root@haproxy01 keepalived-2.0.20]# cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/[root@haproxy01 keepalived-2.0.20]# cp /usr/local/src/keepalived-2.0.20/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
[root@haproxy01 keepalived-2.0.20]# cp /usr/local/keepalived/sbin/keepalived /usr/sbin/

修改配置文件

[root@haproxy01 keepalived-2.0.20]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived   //註釋

global_defs {
   router_id LVS_DEVEL      //keepalived服務器的一個標識
}

vrrp_instance VI_1 {
    state MASTER     //指定keepalived的角色, 兩臺配置此處均是BACKUP,設爲BACKUP將根據優先級決定主或從
    interface ens33     //指定HA監測網絡的接口
    virtual_router_id 51   //虛擬路由標識,這個標識是一個數字(取值在0-255之間,用來區分多個instance的VRRP組播),同一個vrrp實例使用唯一的標識,確保和master2相同,同網內不同集羣此項必須不同,否則發生衝突。
    priority 100   //用來選舉master的,要成爲master,該項取值範圍是1-255(在此範圍之外會被識別成默認值100),此處master2上設置爲50
    advert_int 1    //發VRRP包的時間間隔,即多久進行一次master選舉(可以認爲是健康查檢時間間隔)
    authentication {     //認證區域,認證類型有PASS和HA(IPSEC),推薦使用PASS(密碼只識別前8位)
        auth_type PASS
        auth_pass 1111
    }   
    virtual_ipaddress {      //VIP區域,指定vip地址
        192.168.1.100 
    }   
}   

virtual_server 192.168.1.100 48066 {    //設置虛擬服務器,需要指定虛擬IP地址和服務端口,IP與端口之間用空格隔開
    delay_loop 6     //設置運行情況檢查時間,單位是秒
    lb_algo rr          //設置後端調度算法,這裏設置爲rr,即輪詢算法
    lb_kind NAT      //設置LVS實現負載均衡的機制,有NAT、TUN、DR三個模式可選
    persistence_timeout 50    //會話保持時間,單位是秒。這個選項對動態網頁是非常有用的,爲集羣系統中的session共享提供了一個很好的解決方案。有了這個會話保持功能,用戶的請求會被一直分發到某個服務節點,直到超過這個會話的保持時間。
    protocol TCP    //指定轉發協議類型,有TCP和UDP兩種

    real_server 192.168.1.4 48066 {    //配置服務節點1,需要指定real server的真實IP地址和端口,IP與端口之間用空格隔開
        weight 1     //配置服務節點的權值,權值大小用數字表示,數字越大,權值越高,設置權值大小爲了區分不同性能的服務器
        TCP_CHECK {
            connect_timeout 3    //連接超時時間
            retry 3    //重連次數
            delay_before_retry 3   //重連間隔時間
        }   
    }   
    real_server 192.168.1.5 48066 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
}

拷貝到第二臺haproxy

[root@haproxy01 keepalived-2.0.20]# scp /etc/keepalived/keepalived.conf 192.168.1.5:/etc/keepalived/keepalived.conf

做一些簡單修改

[root@haproxy02 keepalived-2.0.20]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   router_id LVS_DEVEL
}

vrrp_instance VI_2 {   //改
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 50     //降低
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.100
    }
}

virtual_server 192.168.1.100 48066 {
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    persistence_timeout 50
    protocol TCP

    real_server 192.168.1.4 48066 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
    real_server 192.168.1.5 48066 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }   
    }   
}

2)啓動驗證

[root@haproxy01 keepalived-2.0.20]# service keepalived start
Starting keepalived (via systemctl):                       [  OK  ]
[root@haproxy01 keepalived-2.0.20]# ip a

MySQL高可用集羣之基於MyCat部署HaProxy實現高可用

 

開啓第二臺的服務

[root@localhost keepalived-2.0.20]# service keepalived start
Starting keepalived (via systemctl):                       [  OK  ]

登錄驗證(訪問VIP地址)

[root@haproxy01 keepalived-2.0.20]# mysql -umycat -p123456 -h192.168.1.100 -P 48066

MySQL高可用集羣之基於MyCat部署HaProxy實現高可用

 

模擬第一臺mycat宕機:

[root@mycat ~]# ./mycat/bin/mycat stop

MySQL高可用集羣之基於MyCat部署HaProxy實現高可用

 

繼續通過haproxy(VIP)訪問:

[root@haproxy01 keepalived-2.0.20]# mysql -umycat -p123456 -h 192.168.1.100 -P 48066

MySQL高可用集羣之基於MyCat部署HaProxy實現高可用

 

依然可以訪問到

模擬第一臺haproxy宕機 
斷開網卡連接

可以看到VIP跳到了第二臺服務器

[root@localhost keepalived-2.0.20]# ip a

MySQL高可用集羣之基於MyCat部署HaProxy實現高可用

 

繼續通過haproxy(VIP)訪問:

[root@localhost keepalived-2.0.20]# mysql -umycat -p123456 -h 192.168.1.5 -P 48066

MySQL高可用集羣之基於MyCat部署HaProxy實現高可用

 

依然能夠訪問到服務

[root@mycat ~]# ./mycat/bin/mycat start     //將第一臺mycat啓動

MySQL高可用集羣之基於MyCat部署HaProxy實現高可用

 

高可用已經部署完成

二、MyCat 安全設置

1、權限配置

1)user 標籤權限控制目前 Mycat 對於中間件的連接控制並沒有做太複雜的控制,目前只做了中間件邏輯級別的讀寫權限控制。是通過server.xml的user標籤進行配置。

#server.xml配置文件user部分

MySQL高可用集羣之基於MyCat部署HaProxy實現高可用

 

2)privileges 標籤權限控制 在 user 標籤下的 privileges 標籤可以對邏輯庫(schema)、表(table)進行精細化的DML權限控制。privileges 標籤下的check屬性,如爲 true 開啓權限檢查,爲false不開啓,默認爲 false。由於Mycat一個用戶的 schemas 屬性可配置多個邏輯庫(schema),所以 privileges 的下級節點schema節點同樣可配置多個,對多庫多表進行細粒度的 DML 權限控制.

#server.xml配置文件privileges部分

#配置orders表沒有增刪改查權限

MySQL高可用集羣之基於MyCat部署HaProxy實現高可用

 

配置說明:

DML權限增加(insert)更新(update)查詢(select)刪除(select)0000禁止禁止禁止禁止0010禁止禁止可以禁止1110可以可以可以禁止1111可以可以可以可以

2、SQL 攔截

firewall 標籤用來定義防火牆:

firewall下whitehost標籤用來定義IP白名單, blacklist用來定義SQL 黑名單。

1)白名單 可以通過設置白名單, 實現某主機某用戶可以訪問 Mycat,而其他主機用戶禁止訪問。

設置白名單
#server.xml配置文件firewall標籤
#配置只有192.168.1.4主機可以通過mycat用戶訪問
        <firewall> 
           <whitehost>
              <host host="192.168.1.4" user="mycat"/>
           </whitehost>
        </firewall>

2)黑名單可以通過設置黑名單,實現Mycat對具體SQL操作的攔截,如增刪改查等操作的攔截。

設置黑名單
#server.xml配置文件firewall標籤
#配置禁止mycat用戶進行刪除操作
        <firewall> 
           <whitehost>
              <host host="192.168.1.4" user="mycat"/>
           </whitehost>
       <blacklist check="true">
       <property name="deleteAllow">false</property>
       </blacklist>
        </firewall>

可以設置的黑名單 SQL 攔截功能列表

配置項缺省值描述selectAllowtrue是否允許執行SELECT語句deleteAllowtrue是否允許執行DELETE語句updateAllowtrue是否允許執行UPDATE語句insertAllowtrue是否允許執行INSERT語句createTableAllowtrue是否允許創建表setAllowtrue是否允許使用SET語法alterTableAllowtrue是否允許執行Alter table語句dropTableAllowtrue是否允許修改表commitAllowtrue是否允許執行commit操作rollbackAllowtrue是否允許執行roll back操作

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章