1. 程式人生 > >linux中mycat的配置,分片,以及主從復制

linux中mycat的配置,分片,以及主從復制

chan 命令 star ice limit 第一步 execute ado master

1.1 安裝環境

1、jdk:要求jdk必須是1.7及以上版本

2、Mysql:推薦mysql是5.5以上版本

1.2 安裝步驟

Mycat有windows、linux多種版本。本教程為linux安裝步驟,windows基本相同。

第一步:下載Mycat-server-xxxx-linux.tar.gz

第二步:將壓縮包解壓縮。建議將mycat放到/usr/local/mycat目錄下。

第三步:進入mycat目錄,啟動mycat

./mycat start

停止:

./mycat stop

mycat 支持的命令{ console | start | stop | restart | status | dump }

Mycat的默認端口號為:8066

Mycat的分片

1.1 需求

把商品表分片存儲到三個數據節點上

1.2 安裝環境分析

兩臺mysql數據庫服務器:

Host1:192.168.25.134

Host2:192.168.25.166

host1環境

操作系統版本 : centos6.4

數據庫版本 : mysql-5.6

mycat版本 :1.4 release

數據庫名 : db1、db3

mysql節點2環境

操作系統版本 : centos6.4

數據庫版本 : mysql-5.6

mycat版本 :1.4 release

數據庫名 : db2

MyCat安裝到節點1上(需要安裝jdk)

Schema.xml配置

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://org.opencloudb/">

<schema name="mycat007" checkSQLschema="false" sqlMaxLimit="100">

<!-- <table name="TB_ITEM" primaryKey="ID" dataNode="dn1,dn3,dn2" rule="auto-sharding-long" /> -->
<!-- <table name="user" primaryKey="ID" dataNode="dn1,dn3,dn2" rule="auto-sharding-long" /> -->
<table name="user" primaryKey="id" dataNode="dn1" rule="auto-sharding-long" />

</schema>

<!-- <dataNode name="dn1" dataHost="localhost128" database="db1" />
<dataNode name="dn3" dataHost="localhost128" database="db3" />
<dataNode name="dn2" dataHost="localhost129" database="db2" /> -->
<!-- 分片管理 -->
<dataNode name="dn1" dataHost="localhost3" database="db1" />
<dataHost name="localhost128" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<!-- can have multi write hosts -->
<writeHost host="hostM1" url="192.168.146.101:3306" user="root"
password="123456">

</writeHost>

</dataHost>
<dataHost name="localhost129" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<!-- can have multi write hosts -->
<writeHost host="hostM1" url="192.168.146.102:3306" user="root"
password="123456">

</writeHost>

</dataHost>
<dataHost name="localhost3" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="2" slaveThreshold="100">
<heartbeat>show slave status</heartbeat>
<writeHost host="hostM" url="192.168.146.101:3306" user="root"
password="123456">
<readHost host="hostS" url="192.168.146.102:3306" user="root"
password="123456" />
</writeHost>
</dataHost>


</mycat:schema>

 

Server.xml配置

<user name="test">

<property name="password">test</property>

<property name="schemas">cctmall</property>

<property name="readOnly">false</property>

</user>

註意:要和Schema.xml保持一致

測試分片

由於配置的分片規則為“auto-sharding-long”,所以mycat會根據此規則自動分片。

每個datanode中保存一定數量的數據。根據id進行分片

經測試id範圍為:

Datanode1:1~5000000

Datanode2:5000001~10000000

Datanode3:10000001~15000000

當15000000以上的id插入時報錯:

[Err] 1064 - can‘t find any valid datanode :TB_ITEM -> ID -> 15000001

此時需要添加節點了。

Mycat讀寫分離

數據庫讀寫分離對於大型系統或者訪問量很高的互聯網應用來說,是必不可少的一個重要功能。對於MySQL來說,標準的讀寫分離是主從模式,一個寫節點Master後面跟著多個讀節點,讀節點的數量取決於系統的壓力,通常是1-3個讀節點的配置

Mysql的主從復制

1、主DB server和從DB server數據庫的版本一致

2、主DB server和從DB server數據庫數據名稱一致

3、主DB server開啟二進制日誌,主DB server和從DB server的server_id都必須唯一

Mysql主服務器配置

第一步:修改my.cnf文件:

如果在/etc 下沒有my.cnf

從/usr/share/mysql下復制一個過來/etc/,改一下名字即可my-default.cnf--> my.cnf

在[mysqld]段下添加:

binlog-do-db=db1

binlog-ignore-db=mysql

#啟用二進制日誌

log-bin=mysql-bin

#服務器唯一ID,一般取IP最後一段

server-id=134

第二步:重啟mysql服務

service mysql restart

第三步:建立帳戶並授權slave

mysql>GRANT FILE ON *.* TO ‘backup‘@‘%‘ IDENTIFIED BY ‘123456‘;

註意:有時候會出現錯誤

錯誤:ERROR 1045 (28000): Access denied for user ‘root‘@‘%‘ (using password: YES)

mysql>GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* to ‘backup‘@‘%‘ identified by ‘123456‘;

然後更改配置mysql中的user表中的grant 改為yes;

#一般不用root帳號,“%”表示所有客戶端都可能連,只要帳號,密碼正確,此處可用具體客戶端IP代替,如192.168.145.226,加強安全

刷新權限

mysql> FLUSH PRIVILEGES;

查看mysql現在有哪些用戶

mysql>select user,host from mysql.user;

第四步:查詢master的狀態

mysql> show master status;

+------------------+----------+--------------+------------------+-------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+------------------+----------+--------------+------------------+-------------------+

| mysql-bin.000001 | 120 | db1 | mysql | |

+------------------+----------+--------------+------------------+-------------------+

1 row in set

1.1 Mysql從服務器配置

第一步:修改my.cnf文件

[mysqld]

server-id=166

第二步:配置從服務器

mysql>change master to master_host=‘192.168.25.134‘,master_port=3306,master_user=‘backup‘,master_password=‘123456‘,master_log_file=‘mysql-bin.000001‘,master_log_pos=120

註意語句中間不要斷開,master_port為mysql服務器端口號(無引號),master_user為執行同步操作的數據庫賬戶,“120”無單引號(此處的120就是show master status 中看到的position的值,這裏的mysql-bin.000001就是file對應的值)。

第二步:啟動從服務器復制功能

Mysql>start slave;

第三步:檢查從服務器復制功能狀態:

mysql> show slave status

……………………(省略部分)

Slave_IO_Running: Yes //此狀態必須YES

Slave_SQL_Running: Yes //此狀態必須YES

……………………(省略部分)

註:Slave_IO及Slave_SQL進程必須正常運行,即YES狀態,否則都是錯誤的狀態(如:其中一個NO均屬錯誤)。

錯誤處理:

如果出現此錯誤:

Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.

因為是mysql是克隆的系統所以mysql的uuid是一樣的,所以需要修改。

解決方法:

刪除/var/lib/mysql/auto.cnf文件,重新啟動服務。

Mycat配置

Mycat 1.4 支持MySQL主從復制狀態綁定的讀寫分離機制,讓讀更加安全可靠,配置如下:

<dataNode name="dn1" dataHost="localhost1" database="db1" />

<dataNode name="dn2" dataHost="localhost1" database="db2" />

<dataNode name="dn3" dataHost="localhost1" database="db3" />

<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"

writeType="0" dbType="mysql" dbDriver="native" switchType="2" slaveThreshold="100">

<heartbeat>show slave status</heartbeat>

<writeHost host="hostM" url="192.168.25.134:3306" user="root"

password="root">

<readHost host="hostS" url="192.168.25.166:3306" user="root"

password="root" />

</writeHost>

</dataHost>

(1) 設置 balance="1"與writeType="0"

Balance參數設置:

1. balance=“0”, 所有讀操作都發送到當前可用的writeHost上。

2. balance=“1”,所有讀操作都隨機的發送到readHost。

3. balance=“2”,所有讀操作都隨機的在writeHost、readhost上分發

WriteType參數設置:

1. writeType=“0”, 所有寫操作都發送到可用的writeHost上。

2. writeType=“1”,所有寫操作都隨機的發送到readHost。

3. writeType=“2”,所有寫操作都隨機的在writeHost、readhost分上發。

“readHost是從屬於writeHost的,即意味著它從那個writeHost獲取同步數據,因此,當它所屬的writeHost宕機了,則它也不會再參與到讀寫分離中來,即“不工作了”,這是因為此時,它的數據已經“不可靠”了。基於這個考慮,目前mycat 1.3和1.4版本中,若想支持MySQL一主一從的標準配置,並且在主節點宕機的情況下,從節點還能讀取數據,則需要在Mycat裏配置為兩個writeHost並設置banlance=1。”

(2) 設置 switchType="2" 與slaveThreshold="100"

switchType 目前有三種選擇:

-1:表示不自動切換

1 :默認值,自動切換

2 :基於MySQL主從同步的狀態決定是否切換

“Mycat心跳檢查語句配置為 show slave status ,dataHost 上定義兩個新屬性: switchType="2" 與slaveThreshold="100",此時意味著開啟MySQL主從復制狀態綁定的讀寫分離與切換機制。Mycat心跳機制通過檢測 show slave status 中的 "Seconds_Behind_Master", "Slave_IO_Running", "Slave_SQL_Running" 三個字段來確定當前主從同步的狀態以及Seconds_Behind_Master主從復制時延。

linux中mycat的配置,分片,以及主從復制