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


​ 在之前的操作中,我們已經實現了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的源碼在面試過程中也幾乎不會用到,如果大家有興趣的話,可以自行學習。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM