1. Mycat讀寫分離
資料庫讀寫分離對於大型系統或者訪問量很高的互聯網應用來說,是必不可少的一個重要功能。對於MySQL來說,標準的讀寫分離是主從模式,一個寫節點Master後面跟著多個讀節點,讀節點的數量取決於系統的壓力,通常是1-3個讀節點的配置
Mycat讀寫分離和自動切換機制,需要mysql的主從復制機制配合。
1.1. Mysql的主從復制
主從配置需要註意的地方
1、主DB server和從DB server資料庫的版本一致
2、主DB server和從DB server資料庫數據一致[ 這裡就會可以把主的備份在從上還原,也可以直接將主的數據目錄拷貝到從的相應數據目錄]
3、主DB server開啟二進制日志,主DB server和從DB server的server_id都必須唯一
1.2. Mysql主伺服器配置
第一步:修改my.conf文件:
在[mysqld]段下添加:
binlog-do-db=db1 binlog-ignore-db=mysql #啟用二進制日志 log-bin=mysql-bin #伺服器唯一ID,一般取IP最後一段 server-id=134 |
第二步:重啟mysql服務
service mysqld restart
第三步:建立帳戶並授權slave
mysql>GRANT FILE ON *.* TO 'backup'@'%' IDENTIFIED BY '123456';
mysql>GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* to 'backup'@'%' identified by '123456';
#一般不用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.3. Mysql從伺服器配置
第一步:修改my.conf文件
[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文件,重新啟動服務。 |
以上操作過程,從伺服器配置完成。
1.4. Mycat配置
Mycat 1.4 支持MySQL主從復制狀態綁定的讀寫分離機制,讓讀更加安全可靠,配置如下:
writeType="0" dbType="mysql" dbDriver="native" switchType="2" slaveThreshold="100"> password="root"> password="root" /> |
(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主從復制時延。“