1. 程式人生 > >mycat讀寫分離

mycat讀寫分離

string 數據 支持 sql 讀寫分離 exec man password process

版本:mycat1.0
只需要讀寫分離的功能,分庫分表的都不需要。

涉及到的配置文件:
1.conf/server.xml
主要配置的是mycat的用戶名和密碼,mycat的用戶名和密碼和mysql的用戶名密碼是分開的,應用連接mycat就用這個用戶名和密碼。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://org.opencloudb/">
	<system>
		<!-- 
		<property name="processors">32</property> 
		<property name="processorExecutor">32</property> 
		<property name="serverPort">8066</property> 
		<property name="managerPort">9066</property> 
		-->
	</system>
	<user name="root">
		<property name="password">root</property>
		<property name="schemas">數據庫名稱</property>
	</user>
</mycat:server>



2.conf/schema.xml
主要配置主從庫的數據庫連接地址信息,schema裏面不能配置table的定義,如果配置了就會檢查sql的語法,目前mycat還有很多問題。
 
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://org.opencloudb/">
 
	<schema name="數據庫名稱" checkSQLschema="false" dataNode="dn1">
	</schema>
 
	<dataNode name="dn1" dataHost="localhost1" database="數據庫名稱" />
	<dataHost name="localhost1" maxCon="1000" minCon="100" balance="1" 	 dbType="mysql" dbDriver="native">
		<heartbeat>select user()</heartbeat>
		<!-- can have multi write hosts -->
		<writeHost host="10.1.3.50" url="10.1.3.50:3306" user="數據庫用戶名"  password="數據庫密碼">
			<!-- can have multi read hosts -->			
			<readHost host="10.1.3.5" url="10.1.3.5:3306" user="數據庫用戶名" password="數據庫密碼" />
			<readHost host="10.1.3.6" url="10.1.3.6:3306" user="數據庫用戶名" password="數據庫密碼" />
		</writeHost>		
		<!--writeHost host="10.1.3.34" url="10.1.3.34:3306" user="數據庫用戶名"  password="數據庫密碼"-->
			<!-- can have multi read hosts -->			
			<!--readHost host="10.1.3.7" url="10.1.3.7:3306" user="數據庫用戶名" password="數據庫密碼" /-->
			<!--readHost host="10.1.3.8" url="10.1.3.8:3306" user="數據庫用戶名" password="數據庫密碼" /-->
		<!--/writeHost-->
	</dataHost>
</mycat:schema>



高可用性以及讀寫分離
MyCAT的讀寫分離機制如下:
• 事務內的SQL,全部走寫節點,除非某個select語句以註釋/*balance*/開頭
• 自動提交的select語句會走讀節點,並在所有可用讀節點中間隨機負載均衡
• 當某個主節點宕機,則其全部讀節點都不再被使用,因為此時,同步失敗,數據已經不是最新的,MYCAT會采用另外一個主節點所對應的全部讀節點來實現select負載均衡。
• 當所有主節點都失敗,則為了系統高可用性,自動提交的所有select語句仍將提交到全部存活的讀節點上執行,此時系統的很多頁面還是能出來數據,只是用戶修改或提交會失敗。

dataHost的balance屬性設置為:
• 0,不開啟讀寫分離機制
• 1,全部的readHost與stand by writeHost參與select語句的負載均衡,簡單的說,當雙主雙從模式(M1->S1,M2->S2,並且M1與 M2互為主備),正常情況下,M2,S1,S2都參與select語句的負載均衡。
• 2,所有的readHost與writeHost都參與select語句的負載均衡,也就是說,當系統的寫操作壓力不大的情況下,所有主機都可以承擔負載均衡。
一個dataHost元素,表明進行了數據同步的一組數據庫,DBA需要保證這一組數據庫服務器是進行了數據同步復制的。writeHost相當於Master DB Server,而旗下的readHost則是與從數據庫同步的Slave DB Server。當dataHost配置了多個writeHost的時候,任何一個writeHost宕機,Mycat 都會自動檢測出來,並嘗試切換到下一個可用的writeHost。

MyCAT支持高可用性的企業級特性,根據您的應用特性,可以配置如下幾種策略:
• 後端數據庫配置為一主多從,並開啟讀寫分離機制。
• 後端數據庫配置為雙主雙從(多從),並開啟讀寫分離機制
• 後端數據庫配置為多主多從,並開啟讀寫分離機制
後面兩種配置,具有更高的系統可用性,當其中一個寫節點(主節點)失敗後,Mycat會偵測出來(心跳機制)並自動切換到下一個寫節點,MyCAT在任何時候,只會往一個寫節點寫數據。

http://www.tuicool.com/articles/va2AFj



mycat讀寫分離