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服務

<code>[root@mycat mycat]# ./bin/mycat start
[root@mycat mycat2]# ./bin/mycat start/<code>

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

<code>[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/<code>

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

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

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

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

<code>[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/<code>

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

ARCH=x86_64,系統位數;

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

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

<code>[root@haproxy01 haproxy-1.8.23]# make install PREFIX=/usr/local/haproxy/<code>
MySQL高可用集群之基於MyCat部署HaProxy實現高可用

<code>[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/<code>

4)驗證啟動HAProxy

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

查看HAProxy進程

<code>[root@haproxy01 haproxy-1.8.23]# ps -ef|grep haproxy/<code>
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

<code>[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/<code>
MySQL高可用集群之基於MyCat部署HaProxy實現高可用

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

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

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

安裝依賴插件

<code>[root@haproxy01 ~]# yum -y install gcc openssl-devel popt-devel/<code>

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

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

完成後進行安裝

<code>[root@haproxy01 keepalived-2.0.20]# make && make install/<code>

運行前配置

<code>[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//<code>

修改配置文件

<code>[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
}
}
}/<code>

拷貝到第二臺haproxy

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

做一些簡單修改

<code>[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
}
}
}/<code>

2)啟動驗證

<code>[root@haproxy01 keepalived-2.0.20]# service keepalived start
Starting keepalived (via systemctl): [ OK ]
[root@haproxy01 keepalived-2.0.20]# ip a/<code>
MySQL高可用集群之基於MyCat部署HaProxy實現高可用

開啟第二臺的服務

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

登錄驗證(訪問VIP地址)

<code>[root@haproxy01 keepalived-2.0.20]# mysql -umycat -p123456 -h192.168.1.100 -P 48066/<code>
MySQL高可用集群之基於MyCat部署HaProxy實現高可用

模擬第一臺mycat宕機:

<code>[root@mycat ~]# ./mycat/bin/mycat stop/<code>
MySQL高可用集群之基於MyCat部署HaProxy實現高可用

繼續通過haproxy(VIP)訪問:

<code>[root@haproxy01 keepalived-2.0.20]# mysql -umycat -p123456 -h 192.168.1.100 -P 48066/<code>
MySQL高可用集群之基於MyCat部署HaProxy實現高可用

依然可以訪問到

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

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

<code>[root@localhost keepalived-2.0.20]# ip a/<code>
MySQL高可用集群之基於MyCat部署HaProxy實現高可用

繼續通過haproxy(VIP)訪問:

<code>[root@localhost keepalived-2.0.20]# mysql -umycat -p123456 -h 192.168.1.5 -P 48066/<code> 
MySQL高可用集群之基於MyCat部署HaProxy實現高可用

依然能夠訪問到服務

<code>[root@mycat ~]# ./mycat/bin/mycat start     //將第一臺mycat啟動/<code>
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,而其他主機用戶禁止訪問。

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

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

<code>設置黑名單
#server.xml配置文件firewall標籤
#配置禁止mycat用戶進行刪除操作
<firewall>

<whitehost>
<host>
/<whitehost>
<blacklist>
<property>false/<property>
/<blacklist>
/<firewall>/<code>

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

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


分享到:


相關文章: