# IT明星不是夢 #MySQL高可用集羣之基於MyCat部署HaProxy實現高可用

基於MyCat部署HaProxy實現高可用

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

1、高可用方案

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

架構圖:

# IT明星不是夢 #MySQL高可用集羣之基於MyCat部署HaProxy實現高可用

於上一個博客的環境部署(MySQL中間件之MyCat )

新添:

mycat0二、haproxy0一、haproxy02

主機 操做系統 IP地址
mysql01 Centos 7.3 192.168.1.1
mysql02(slave) Centos 7.3 192.168.1.8
mysql03 Centos 7.3 192.168.1.9
mycat Centos 7.3 192.168.1.3
mycat02 Centos 7.3 192.168.1.11
haproxy01(keepalived) Centos 7.3 192.168.1.4(VIP:192.168.1.100)
haproxy02(keepalived) Centos 7.3 192.168.1.5(VIP:192.168.1.100)

案例中關閉防火牆

啓動兩臺mycat服務web

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

測試鏈接mycat(能夠鏈接本身,而且能夠鏈接到另外一臺mycat)redis

[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

一、安裝配置 HAProxy(haproxy0一、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

# IT明星不是夢 #MySQL高可用集羣之基於MyCat部署HaProxy實現高可用
編輯配置文件(文件內容本身定義):sql

[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進程vim

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

# IT明星不是夢 #MySQL高可用集羣之基於MyCat部署HaProxy實現高可用
打開瀏覽器訪問 http://192.168.1.4:7777/admin、http://192.168.1.5:7777/admin
在彈出框輸入用戶名: admin密碼: 123123
訪問第一臺:

# IT明星不是夢 #MySQL高可用集羣之基於MyCat部署HaProxy實現高可用
# IT明星不是夢 #MySQL高可用集羣之基於MyCat部署HaProxy實現高可用
訪問第二臺:
# IT明星不是夢 #MySQL高可用集羣之基於MyCat部署HaProxy實現高可用
# IT明星不是夢 #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

# IT明星不是夢 #MySQL高可用集羣之基於MyCat部署HaProxy實現高可用

二、安裝配置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

# IT明星不是夢 #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

# IT明星不是夢 #MySQL高可用集羣之基於MyCat部署HaProxy實現高可用

模擬第一臺mycat宕機:

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

# IT明星不是夢 #MySQL高可用集羣之基於MyCat部署HaProxy實現高可用

繼續經過haproxy(VIP)訪問:

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

# IT明星不是夢 #MySQL高可用集羣之基於MyCat部署HaProxy實現高可用
依然能夠訪問到

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

能夠看到VIP跳到了第二臺服務器

[root@localhost keepalived-2.0.20]# ip a

# IT明星不是夢 #MySQL高可用集羣之基於MyCat部署HaProxy實現高可用

繼續經過haproxy(VIP)訪問:

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

# IT明星不是夢 #MySQL高可用集羣之基於MyCat部署HaProxy實現高可用
依然可以訪問到服務

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

# IT明星不是夢 #MySQL高可用集羣之基於MyCat部署HaProxy實現高可用

高可用已經部署完成

2、MyCat 安全設置

一、權限配置

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

#server.xml配置文件user部分
# IT明星不是夢 #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表沒有增刪改查權限
# IT明星不是夢 #MySQL高可用集羣之基於MyCat部署HaProxy實現高可用

配置說明:

DML權限 增長(insert) 更新(update) 查詢(select) 刪除(select)
0000 禁止 禁止 禁止 禁止
0010 禁止 禁止 能夠 禁止
1110 能夠 能夠 能夠 禁止
1111 能夠 能夠 能夠 能夠

二、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 攔截功能列表

配置項 缺省值 描述
selectAllow true 是否容許執行SELECT語句
deleteAllow true 是否容許執行DELETE語句
updateAllow true 是否容許執行UPDATE語句
insertAllow true 是否容許執行INSERT語句
createTableAllow true 是否容許建立表
setAllow true 是否容許使用SET語法
alterTableAllow true 是否容許執行Alter table語句
dropTableAllow true 是否容許修改表
commitAllow true 是否容許執行commit操做
rollbackAllow true 是否容許執行roll back操做
相關文章
相關標籤/搜索