mycat高可用-安全管理-監控 看這一篇就夠了

ityml發表於2021-07-03

​ 在之前的操作中,我們已經實現了mysql機器的高可用,可以動態切換master,那麼如果mycat崩潰了呢?我們應該如何處理呢?所以此時就需要搭建mycat的高可用叢集了。

​ 在mycat的權威指南中,介紹了多種高可用的方案,在這裡我們講解一種使用最多的方案,使用HAProxy+Keepalived配合使用來實現myact的高可用。

​ HAproxy實現了mycat多借點的叢集高可用和負載均衡,而HAProxy自身的高可用則可以通過Keepalived來實現。

​ 好了,如果這個圖大家看明白的話,下面我們開始規劃叢集並進行實操。

編號 角色 IP地址 機器名
1 mycat1 192.168.85.111 node01
2 mycat2 192.168.85.112 node02
3 HAProxy(master) 192.168.85.113 node03
4 Keepalived(master) 192.168.85.113 node03
5 HAProxy(backup) 192.168.85.114 node04
6 keepalived(backup) 192.168.85.114 node04

1、安裝配置HAProxy

1、準備好HAProxy的安裝包
2、解壓到/usr/local目錄
3、進入到解壓後的目錄,檢視核心版本,進行編譯
	cd cd /usr/local/haproxy-1.8.25/
	uname -r
	make TARGET=linux26
4、編譯完成之後,開始進行安裝
	make install PREFIX=/usr/local/haproxy
5、安裝完成之後,建立目錄,建立HAProxy配置檔案
	mkdir -p /usr/data/haproxy
	mkdir /usr/local/haproxy/conf
	vi /usr/local/haproxy/haproxy.conf
6、向配置檔案中新增配置資訊
	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/data/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.85.111:8066 check inter 10s
		server mycat_2 192.168.85.112:8066 check inter 10s
frontend admin_stats
	bind :7777
		mode http
		stats enable
		option httplog
		maxconn 10
		stats refresh 30s
		stats uri /admin
		stats auth admin:123123
		stats hide-version
		stats admin if TRUE
7、啟動haproxy服務
	/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/conf/haproxy.conf
8、檢視haproxy的程式,如果存在則說明沒有問題
	ps -ef | grep haproxy
9、開啟瀏覽器訪問,使用者名稱為admin,密碼為123123
	http://192.168.85.113:7777/admin

2、在node04上按照上述一樣的步驟建立HAProxy

3、安裝配置Keepalived

1、準備好Keepalived安裝包
2、解壓到/usr/local目錄
3、安裝需要依賴的環境元件
	yum install gcc openssl-devel popt-devel -y
4、進入到解壓目錄,進行編譯
	./configure --prefix=/usr/local/keepalived
5、編譯完成之後,進行安裝
	make && make install
6、將keepalived的服務註冊為系統服務
	cp /usr/local/keepalived-1.4.5/keepalived/etc/init.d/keepalived /etc/init.d/
	mkdir /etc/keepalived
	cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
	cp /usr/local/keepalived-1.4.5/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
	cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
7、修改配置檔案
	cd etc/keepalived/
	vi keepalived.conf
	
	! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.85.200/24 dev eth0 label eth0:3:
    }
}

8、啟動keepalived
	service keepalived start
9、登入驗證
	mysql -uroot -p123456 -h 192.168.85.100 -P 48066

4、在node04上執行相同的操作安裝keepalived

​ 注意,需要修改狀態為BACKUP

5、驗證高可用

​ 先進行登入訪問,隨便找一臺機器執行

​ mysql -uroot -p123456 -P48066 -h192.168.85.100

​ 然後觀察訪問的是哪一臺mycat,關閉掉mycat,在進行查詢即可。

2、mycat的安全管理

1、許可權配置

​ 1、user標籤許可權控制

​ 目前mycat對於中介軟體的連線控制並沒有做太複雜的控制,目前只做了中介軟體邏輯庫級別的讀寫控制許可權,可以通過user標籤進行配置。

​ 標籤說明:

標籤屬性 說明
name 應用連結中介軟體邏輯庫的使用者名稱
password 該使用者對應的密碼
schemas 應用當前連線的邏輯庫中所對應的邏輯表,schemas中可以配置一個或者多個
readonly 應用連線中介軟體邏輯庫所具有的許可權。true為只讀,false為讀寫都有,預設是false

​ 新增配置:

	<user name="root" defaultAccount="true">
		<property name="password">123456</property>
		<property name="schemas">TESTDB</property>
	</user>
	<user name="mycat">
		<property name="password">mycat</property>
		<property name="schemas">TESTDB</property>
		<property name="readOnly">true</property>
	</user>

​ 嘗試通過不同的使用者名稱稱進行登入,會發現root使用者具有所有的許可權,但是mycat使用者只是具備了查詢的許可權,無法完成更新和插入的操作。

​ 2、privileges標籤許可權控制

​ 在user標籤下的privileges標籤可以對邏輯庫,表進行更加細緻的DML許可權控制。

​ privileges標籤下的check屬性,如果值為true則表示開啟許可權檢查,false則表示不開啟許可權檢查

​ 由於mycat一個使用者的schemas屬性可以配置多個邏輯庫,所以privileges的下級節點schema節點同樣可配置多個,對多庫多表進行細粒度的DML許可權控制

​ 配置許可權:

DML許可權 增加 更新 查詢 刪除
0001 禁止 禁止 禁止 允許
0010 禁止 禁止 允許 禁止
0100 禁止 允許 禁止 禁止
1000 允許 禁止 禁止 禁止

​ 修改server.xml檔案

<user name="mycat">
		<property name="password">mycat</property>
		<property name="schemas">TESTDB</property>
		<privileges check="true">
			<schema name="TESTDB" dml="1111">
				<table name="orders" dml="0000"></table>
			</schema>
		</privileges>
	</user>

​ 大家可以進行相關的測試,當使用mycat使用者進行登入的時候會發現其他的表都可以做增刪改查操作,但是orders表什麼操作都做不了,這就是對許可權作了控制。

2、SQL攔截

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

​ 1、白名單

​ 可以通過設定白名單,實現某主機某使用者可以訪問mycat,而其他主機使用者禁止訪問。

	<firewall>
		<whitehost>
			<host host="192.168.85.111" user="mycat"></host>
		</whitehost>
	</firewall>

​ 此時發現,使用者可以在node01上使用mycat使用者進行登入訪問,其他使用者都不可以,其他主機也不可以。

​ 2、黑名單

​ 使用者還可以通過設定黑名單,實現mycat對具體sql操作的攔截,如增刪改查等操作的攔截

<blacklist check="true">
	<property name="deleteAllow">false</property>
</blacklist>

​ 此時使用者登入之後發現無法刪除表中的資料,這就是黑名單的作用。

​ 黑名單SQL攔截功能列表:

配置項 預設值 功能
selectAllow true 是否允許執行select語句
selectColumnAllow true 是否允許執行select *操作
selectIntoAllow true 是否允許select語句中包含into子句
deleteAllow true 是否允許執行delete語句
updateAllow true 是否允許執行update語句
insertAllow true 是否允許執行insert語句
replaceAllow true 是否允許執行replace語句
createTableAllow true 是否允許建立表
setAllow true 是否允許使用set語法
truncateAllow true 是否允許執行truncate語句
alterTableAllow true 是否允許執行alter table語句
dropTableAllow true 是否允許修改表
commitAllow true 是否允許執行commit操作
rollbackAllow true 是否允許執行rollback操作
useAllow true 是否允許執行use語句
describeAllow true 是否允許執行describe操作
showAllow true 是否允許執行show語句

3、mycat監控工具

​ mycat-web是mycat視覺化運維管理和監控平臺,彌補了mycat在監控上的空白。幫mycat分擔統計任務和配置管理任務。mycat-web引入了zookeeper作為配置中心,可以管理多個節點。mycat-web主要管理和監控mycat的流量、連線、活動現成和記憶體等,具備IP白名單、郵件告警等模組,還可以統計SQL並分析慢SQL和高頻SQL等,為SQL的優化提供了依據。

1、安裝zookeeper

1、下載zookeeper安裝包
2、安裝拷貝到/usr/local目錄,並解壓
3、進入到zookeeper解壓後的目錄conf,複製配置檔案並改名
	cp zoo_sample.cfg zoo.cfg
4、進入到zookeeper的bin目錄,執行啟動命令
	./zkServer.sh start
5、執行如下命令,看zookeeper是否正常啟動
	netstat -nlpt | grep 2181

2、安裝mycat-web

1、下載mycat-web安裝包
2、解壓安裝包到/usr/local目錄
3、進入mycat-web的目錄執行啟動命令
	./start.sh &
4、mycat-web的服務埠是8082,檢視服務是否啟動
	netstat -nlpt | grep 8082
5、通過地址訪問服務
	192.168.85.111:8082/mycat/

3、mycat-web配置

1、配置zookeeper
	進入到mycat-web的/usr/local/mycat-web/mycat-web/WEB-INF/classes,修改mycat.properties檔案,可以修改zookeeper的地址
2、新增mycat例項
	在頁面的mycat配置--》mycat服務管理中新增mycat例項,需要填寫相關的引數

4、mycat配置使用

​ 在mycat的web監控系統中,很多引數及監控可以自己來完善,大家盡情去試就好了。

4、mycat原理

​ 學到這裡我們其實應該有感受了,mycat的操作使用並不是很難,我們只需要配置和修改server.xml.rule.xml.schema.xml三個檔案即可,但是如果想在生產環境中使用的話,還是需要下一番功夫的。下面我們來簡單說一下mycat的原理。

​ mycat在邏輯上由幾個模組組成:通訊協議、路由解析、結果集處理、資料庫連線、監控等模組

​ 1、通訊協議模組

​ 通訊協議模組承擔底層的收發資料、現成回撥處理工作,主要採用Reactor、Proactor模式來提高效率。目前。mycat通訊模組預設採用Reactor模式,在協議層採用mysql協議。

​ 2、路由解析模組

​ 路由解析模組負責對傳入的SQL語句進行語法解析,解析從MYSQL協議中解析出來並進入該模組的SQL語句的條件、語句型別、攜帶的關鍵字等,對符合要求的SQL語句進行相關優化,最後根據這些路由計算單元進行路由計算。

​ 3、結果集處理模組

​ 結果集處理模組負責對跨分片的結果進行匯聚、排序、擷取等。由於資料儲存在不同的資料庫中,所以對跨分片的資料需要進行匯聚。

​ 4、資料庫連線模組

​ 資料庫連線模組複製建立、管理、維護後端的連線池。為了減少每次建立資料庫連線的開銷,資料庫使用連線池機制對連線生命週期進行管理。

​ 5、監控管理模組

​ 監控管理模組負責對Mycat中的連線、記憶體等資源進行等監控和管理。監控主要是通過管理命令實時地展現一些監控資料,例如連線數、快取命中數等;管理則主要通過輪訓事件來檢測和釋放不適用的資源。

​ 6、SQL執行模組

​ SQL執行模組負責從連線池中獲取相應的目標連線,對目標連線進行資訊同步後,再根據路由解析的結果,把SQL語句分發到相應的節點執行。

​ 總體執行流程如下:

​ 由通訊協議模組的讀寫事件通知發起。讀寫事件通知具體的回撥程式碼進行這次讀寫事件的處理。管理模組的執行流程由定時器事件進行資源檢查和資源釋放時發起。

​ 由客戶端傳送過來的資料通過協議解析、路由解析等流程進入執行元件,通過執行元件把資料傳送到通訊協議模組,最終資料被寫入目標資料庫。

​ 後端資料庫返回資料,通過協議解析後傳送至回撥模組。如果是涉及多節點的資料,則執行流程將會先進入結果集匯聚、排序等模組中,然後將處理後的資料通過通訊協議模組返回到客戶端。

​ 通過上述圖片大家發現了,在mycat的執行流程中,AIO、NIO、多執行緒、記憶體管理等各個方面都用到了,大家如果想看mycat的原始碼的話,最好能具備以上的基礎,mycat的原始碼在面試過程中也幾乎不會用到,如果大家有興趣的話,可以自行學習。

相關文章