mycat的schema.xml重要配置(邏輯庫,邏輯表,數據節點,數據源信息等)

schema.xml的作用

  • 配置邏輯庫和邏輯表
  • 配置邏輯表的數據節點
  • 配置數據節點的對應的mysql物理服務器的信息(ip、port、user、password)
  • 應用程序用sql通過mycat獲取mysql數據,mycat是通過schema配置的邏輯庫和邏輯表信息找到對應的mysql節點以及節點中的數據庫和數據表,然後連接mysql,讓mysql執行sql,得到結果,再轉發給應用程序

定義邏輯庫-schema標籤

mycat會定義邏輯庫和物理數據庫的對應關係,所以,邏輯庫的名字可以自定義,不要求和物理數據庫同名

<schema name="project1db1" checkSQLschema="false" sqlMaxLimit="100">	
</schema>

如上定義了一個名爲project1db1的邏輯庫,
sqlMaxLimit設置默認的查詢結果返回100條記錄,
checkSQLschema設置是否要檢查sql中包含數據庫名字,默認false不檢查,要求程序員寫sql時不要使用庫名.表明的寫法(select * from project1db1.orders where …,),直接不帶庫名訪問(select from orders),因爲會跨數據庫服務器訪問,操作很麻煩

定義邏輯表-table標籤

mycat不會定義邏輯表和物理數據表的對應關係,只是通過邏輯表聲明存在的物理數據表,所以要求邏輯表和物理表的要同名

<table name="bill" primaryKey="Fbid" dataNode="db01,db02" rule="bill" >
</table>

如上定義了名字是bill的邏輯表,跟物理表名一致,
primaryKey屬性設置主鍵是Fbid也跟物理表中一致,但是主鍵和水平切分用的分片鍵(字段)可能不一致,mycat會緩存這個自定義的主鍵和分片節點的關係(這樣就可以將通過分片鍵的查詢轉化成對主鍵的查詢,因爲主鍵查詢效率最快)
dataNode屬性定義了存在db01、db02兩個物理節點上,值來源於標籤
rule屬性是定義使用的水平切分規則,值來源於rule.xml中配置的某個tableRule標籤的name屬性值,不是進行水平切分的可以不設置這個屬性值

定義邏輯表存儲的物理數據庫節點-dataNode標籤

<dataNode name="db1" dataHost="mysqlcluster1" database="project1">
</dataNode>

如上定義了名字是db1的數據節點,
dataHost屬性定義使用的Mysql集羣mysqlcluster1,值來源於dataHost標籤的name
database 定義使用的(mysqlcluster1集羣)物理節點上真實存在的數據庫名字

定義節點使用的集羣機器信息-dataHost標籤

<dataHost name="mysqlcluster1" maxCon="1000" minCon="10" balance="3" writeType="0" dbType="mysql" dbDriver="native" switchType="1" >
	<heartbeat>select user()</heartbeat>
	<writeHost host="192.168.5.10" url="192.168.5.10:3306" user="root" password="123456" >
			<readHost host="192.168.5.11" url="192.168.5.11:3306" user="root" password="123456"  />
			<readHost host="192.168.5.12" url="192.168.5.12:3306" user="root" password="123456"  />
	</writeHost>
</dataHost>

如上定義了mysql集羣名稱mysqlcluster1,
因爲對應用程序來說,MyCat可以當做數據庫連接池的作用,所以有maxCon、minCon等屬性配置,控制mycat和mysql之間(也就等於用戶和mysql之間)連接數大小
maxCon屬性定義最大連接數
minCon屬性定義默認初始化的最小連接數
balance屬性定義讀寫分離和查詢負載均衡的工作方式,

  • balance=0時,不開啓讀寫分離,無負載均衡,適合單機數據庫使用
  • balance=1時,集羣中所有readHost和備用的writeHost參與查詢負載均衡,只有那些正在負責寫的主節點不參與
  • balance=2時,集羣中所有機器無論負責讀寫的都參與查詢負載均衡,適合寫壓力不大時writeHost幫readHost分擔查詢壓力
  • balance=3時,適合一主多從,所有readHost參與查詢負載均衡,writeHost不負責查詢

writeType屬性集羣中定義寫數據的方式

  • writeType=0時(一般默認這個值),寫操作只由第一個writeHost負責,其他writeHost做備用機,前面的writeHost掛了才切換成寫操作
  • writeType=1時,所有wirteHost都參與寫,隨機執行,可能出現寫錯亂

dbType屬性定義使用mysql這種數據庫
dbDriver屬性,值native表示使用原生驅動,jdbc表示使用JDBC驅動
switchType屬性定義高可用切換主服務器方式

  • switchType=1表示讓mycat實現高可用切換,當第一個writeHost掛了,切換到後面可用的writeHost作爲主節點進行寫操作
  • switchType=-1時表示集羣已經使用其他工具進行高可用切換,mycat不作操作

heartbeat標籤定義mysql心跳檢測,通過執行一段簡單的查詢語句,測試mysql是否可以正常工作

writeHost 標籤定義主服務器,負責寫或者備用寫
readHost 標籤定義從服務器,負責讀,xml結構中處在writeHost標籤內

  • host屬性定義mysql服務器名稱(自定義)
  • url屬性定義mysql服務器訪問地址
  • user屬性定義訪問mysq服務器的用戶
  • password屬性定義訪問mysql服務器的密碼

完整的文件內容

下面是將mysql的project數據庫中的users表依據project_users_rule定義的切分規則,將users表水平切分到mysqlcluster1集羣中的3臺mysql服務器中存儲,每臺服務器都有3個數據庫project_db1、project_db2、project_db3,一臺(192.168.5.10)負責寫兩臺負責讀(其中slave=192.168.5.11還作爲備用切換的機器),3個db都有t_users表,同一臺mysql中的3個db中的t_users表分別存儲了一部分用戶,合起來就是所有用戶集了

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
	<schema name="project_schema_db" checkSQLschema="false" sqlMaxLimit="100" >	
		<table name="t_users" primaryKey="Fid" dataNode="db1,db2,db3" rule="project_users_rule">
		</table>	
	</schema>
	<dataNode name="db1" dataHost="mysqlcluster1" database="project_db1" />
	<dataNode name="db2" dataHost="mysqlcluster1" database="project_db2" />
		<dataNode name="db2" dataHost="mysqlcluster1" database="project_db3" />

	<dataHost name="mysqlcluster1" maxCon="1000" minCon="10" balance="1" >
		<heartbeat>select user()</heartbeat>
		<writeHost host="192.168.5.10" url="192.168.5.10:3306" user="mycatuser1" password="123456" >
			<readHost host="192.168.5.11" url="192.168.5.11:3306" user="mycatuser1" password="123456" />
			<readHost host="192.168.5.12" url="192.168.5.12:3306" user="mycatuser2" password="123456" />
		</writeHost>
		<writeHost host="192.168.5.11" url="192.168.5.11:3306" user="mycatuser1" password="123456" />
	</dataHost>	
</mycat:schema>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章