在實際項目中, Mycat 服務也須要考慮高可用性,若是 Mycat 所在服務器出現宕機,或 Mycat 服務故障,須要有備機提供服務,須要考慮 Mycat 集羣。mysql
可使用 HAProxy+Keepalived配合兩臺MyCat搭起MyCat集羣,實現高可用性。 HAProxy實現了MyCat多節點的集羣高可用和負載均衡,而 HAProxy自身的高可用則能夠經過Keepalived來實現.linux
主機 | 操做系統 | 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
[root@haproxy01 ~]# tar zxf haproxy-1.8.23.tar.gz -C /usr/local/src/
[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安裝路徑。算法
[root@haproxy01 haproxy-1.8.23]# make install PREFIX=/usr/local/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
[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
打開瀏覽器訪問 http://192.168.1.4:7777/admin、http://192.168.1.5:7777/admin
在彈出框輸入用戶名: admin密碼: 123123
訪問第一臺:
訪問第二臺:
後端
驗證負載均衡,經過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
[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 } } }
[root@haproxy01 keepalived-2.0.20]# service keepalived start Starting keepalived (via systemctl): [ OK ] [root@haproxy01 keepalived-2.0.20]# ip a
開啓第二臺的服務
[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
模擬第一臺mycat宕機:
[root@mycat ~]# ./mycat/bin/mycat stop
繼續經過haproxy(VIP)訪問:
[root@haproxy01 keepalived-2.0.20]# mysql -umycat -p123456 -h 192.168.1.100 -P 48066
依然能夠訪問到
模擬第一臺haproxy宕機
斷開網卡鏈接
能夠看到VIP跳到了第二臺服務器
[root@localhost keepalived-2.0.20]# ip a
繼續經過haproxy(VIP)訪問:
[root@localhost keepalived-2.0.20]# mysql -umycat -p123456 -h 192.168.1.5 -P 48066
依然可以訪問到服務
[root@mycat ~]# ./mycat/bin/mycat start //將第一臺mycat啓動
1)user 標籤權限控制目前 Mycat 對於中間件的鏈接控制並無作太複雜的控制,目前只作了中間件邏輯級別的讀寫權限控制。是經過server.xml的user標籤進行配置。
#server.xml配置文件user部分
2)privileges 標籤權限控制 在 user 標籤下的 privileges 標籤能夠對邏輯庫(schema)、表(table)進行精細化的DML權限控制。privileges 標籤下的check屬性,如爲 true 開啓權限檢查,爲false不開啓,默認爲 false。因爲Mycat一個用戶的 schemas 屬性可配置多個邏輯庫(schema),因此 privileges 的下級節點schema節點一樣可配置多個,對多庫多表進行細粒度的 DML 權限控制.
#server.xml配置文件privileges部分
#配置orders表沒有增刪改查權限
DML權限 | 增長(insert) | 更新(update) | 查詢(select) | 刪除(select) |
---|---|---|---|---|
0000 | 禁止 | 禁止 | 禁止 | 禁止 |
0010 | 禁止 | 禁止 | 能夠 | 禁止 |
1110 | 能夠 | 能夠 | 能夠 | 禁止 |
1111 | 能夠 | 能夠 | 能夠 | 能夠 |
firewall 標籤用來定義防火牆:
firewall下whitehost標籤用來定義IP白名單, blacklist用來定義SQL 黑名單。
設置白名單 #server.xml配置文件firewall標籤 #配置只有192.168.1.4主機能夠經過mycat用戶訪問 <firewall> <whitehost> <host host="192.168.1.4" user="mycat"/> </whitehost> </firewall>
設置黑名單 #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>
配置項 | 缺省值 | 描述 |
---|---|---|
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操做 |