目錄
1.搭建一主一從
1.1、 搭建 MySQL 資料庫主從復制
1.2、 修改 Mycat 的組態檔 schema.xml
2.搭建雙主雙從
2.1、 搭建 MySQL 資料庫主從復制(雙主雙從)
2.2、修改Mycat的組態檔schema.xml
2.3、 啟動 Mycat
2.4、 驗證讀寫分離
2.5、抗風險能力
我們通過 Mycat 和 MySQL 的主從復制配合搭建資料庫的讀寫分離,實作 MySQL 的高可用性,我們將搭建:一主一從、雙主雙從兩種讀寫分離模式,
1.搭建一主一從
一個主機用于處理所有寫請求,一臺從機負責所有讀請求,架構圖如下
1.1、 搭建 MySQL 資料庫主從復制
① MySQL 主從復制原理

② 主機配置(host79)
修改組態檔:vim /etc/my.cnf #主服務器唯一ID
server-id=1
#啟用二進制日志log-bin=mysql-bin
# 設定不要復制的資料庫(可設定多個)
binlog-ignore-db=mysql
binlog-ignore-db=information_schema #設定需要復制的資料庫
binlog-do-db=需要復制的主資料庫名字
#設定logbin格式
binlog_format=STATEMENT
binlog 日志三種格式

③ 從機配置(host80)
修改組態檔:vim /etc/my.cnf #從服務器唯一ID
server-id=2
#啟用中繼日志relay-log=mysql-relay
④ 主機、從機重啟MySQL 服務
⑤ 主機從機都關閉防火墻
⑥ 在主機上建立帳戶并授權 slave
#在主機MySQL里執行授權命令
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '123123';
#查詢master的狀態
show master status;
#記錄下File和Position的值
#執行完此步驟后不要再操作主服務器MySQL,防止主服務器狀態值變化

⑦ 在從機上配置需要復制的主機
#復制主機的命令
CHANGE MASTER TO MASTER_HOST='主機的IP地址',
MASTER_USER='slave', MASTER_PASSWORD='123123',
MASTER_LOG_FILE='mysql-bin.具體數字',MASTER_LOG_POS=具體值;

#啟動從服務器復制功能start slave;
#查看從服務器狀態
show slave status\G;

⑧ 主機新建庫、新建表、insert 記錄,從機復制

⑨ 如何停止從服務復制功能
stop slave;
⑩ 如何重新配置主從
stop slave;
reset master;
1.2、 修改 Mycat 的組態檔 schema.xml
之前的配置已分配了讀寫主機,是否已實作讀寫分離?
驗證讀寫分離
- 在寫主機插入:insert into mytbl values (1,@@hostname); 主從主機資料不一致了
- 在Mycat里查詢:select * from mytbl;
修改<dataHost>的balance屬性,通過此屬性配置讀寫分離的型別
負載均衡型別,目前的取值有4 種:
balance="0", 不開啟讀寫分離機制,所有讀操作都發送到當前可用的 writeHost 上,
balance="1",全部的 readHost 與 stand by writeHost 參與 select 陳述句的負載均衡,簡單的說,當雙主雙從模式(M1->S1,M2->S2,并且 M1 與 M2 互為主備),正常情況下,M2,S1,S2 都參與 select 陳述句的負載均衡,
balance="2",所有讀操作都隨機的在 writeHost、readhost 上分發,
balance="3",所有讀請求隨機的分發到 readhost 執行,writerHost 不負擔讀壓力
為了能看到讀寫分離的效果,把balance設定成2,會在兩個主機間切換查詢
…
<dataHost name="host1" maxCon="1000" minCon="10" balance="2"
writeType="0" dbType="mysql" dbDriver="native" switchType="1"
slaveThreshold="100">
…

3、 啟動 Mycat
4、 驗證讀寫分離
(1)在寫主機資料庫表mytbl中插入帶系統變數資料,造成主從資料不一致 INSERT INTO mytbl VALUES(2,@@hostname);

(2)在Mycat里查詢mytbl表,可以看到查詢陳述句在主從兩個主機間切換

2.搭建雙主雙從
一個主機 m1 用于處理所有寫請求,它的從機 s1 和另一臺主機 m2 還有它的從機 s2 負責所有讀請求,當 m1 主機宕機后,m2 主機負責寫請求,m1、m2 互為備機,架構圖如下

| 編號 | 角色 | IP 地址 | 機器名 |
| 1 | Master1 | 192.168.140.128 | host79.atguigu |
| 2 | Slave1 | 192.168.140.127 | host80.atguigu |
| 3 | Master2 | 192.168.140.126 | host81.atguigu |
| 4 | Slave2 | 192.168.140.125 | host82.atguigu |
2.1、 搭建 MySQL 資料庫主從復制(雙主雙從)
① 雙主機配置
Master1配置
修改組態檔:vim /etc/my.cnf
#主服務器唯一ID server-id=1
#啟用二進制日志
log-bin=mysql-bin
# 設定不要復制的資料庫(可設定多個) binlog-ignore-db=mysql
binlog-ignore-db=information_schema #設定需要復制的資料庫
binlog-do-db=需要復制的主資料庫名字
#設定logbin格式
binlog_format=STATEMENT
# 在作為從資料庫的時候,有寫入操作也要更新二進制日志檔案
log-slave-updates
#表示自增長欄位每次遞增的量,指自增欄位的起始值,其默認值是1,取值范圍是1 .. 65535 auto-increment-increment=2
# 表示自增長欄位從哪個數開始,指欄位一次遞增多少,他的取值范圍是1 .. 65535
auto-increment-offset=1

binlog-ignore-db=mysql
binlog-ignore-db=information_schema #設定需要復制的資料庫
binlog-do-db=需要復制的主資料庫名字
#設定logbin格式
binlog_format=STATEMENT
# 在作為從資料庫的時候,有寫入操作也要更新二進制日志檔案
log-slave-updates
#表示自增長欄位每次遞增的量,指自增欄位的起始值,其默認值是1,取值范圍是1 .. 65535 auto-increment-increment=2
# 表示自增長欄位從哪個數開始,指欄位一次遞增多少,他的取值范圍是1 .. 65535
auto-increment-offset=2
② 雙從機配置
Slave1配置
修改組態檔:vim /etc/my.cnf
#從服務器唯一
IDserver-id=2
#啟用中繼日志
relay-log=mysql-relay
Slave2配置
修改組態檔:vim /etc/my.cnf
#從服務器唯一ID
server-id=4
#啟用中繼日志
relay-log=mysql-relay
③ 雙主機、雙從機重啟 mysql 服務
④ 主機從機都關閉防火墻
⑤ 在兩臺主機上建立帳戶并授權 slave
#在主機MySQL里執行授權命令
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '123123';
#查詢Master1的狀態
show master status;

#查詢Master2的狀態
show master status

#分別記錄下File和Position的值
#執行完此步驟后不要再操作主服務器MYSQL,防止主服務器狀態值變化
⑥ 在從機上配置需要復制的主機
Slava1 復制 Master1,Slava2 復制 Master2
#復制主機的命令
CHANGE MASTER TO MASTER_HOST='主機的IP地址',
MASTER_USER='slave',
MASTER_PASSWORD='123123',
MASTER_LOG_FILE='mysql-bin.具體數字',MASTER_LOG_POS=具體值;
Slava1的復制命令

Slava2的復制命令

啟動兩臺從服務器復制功能
start slave;
查看從服務器狀態
show slave status\G;
Slava1的復制Master1

Slava2的復制Master2

#下面兩個引數都是Yes,則說明主從配置成功!
#Slave_IO_Running: Yes
#Slave_SQL_Running: Yes
⑦兩個主機互相復制
Master2復制Master1,Master1復制Master2
Master2的復制命令

Master1的復制命令

啟動兩臺主服務器復制功能
start slave;
查看從服務器狀態
show slave status\G;
Master2的復制Master1

Master1的復制Master2

下面兩個引數都是Yes,則說明主從配置成功!
#Slave_IO_Running: Yes
#Slave_SQL_Running: Yes
⑧Master1主機新建庫、新建表、insert記錄,Master2和從機復制

⑨如何停止從服務復制功能
stop slave;
⑩如何重新配置主從
stop slave;
reset master;
2.2、修改Mycat的組態檔schema.xml
修改<dataHost>的balance屬性,通過此屬性配置讀寫分離的型別
負載均衡型別,目前的取值有4 種:
(1)balance="0", 不開啟讀寫分離機制,所有讀操作都發送到當前可用的writeHost 上,
(2)balance="1",全部的readHost 與stand by writeHost 參與select 陳述句的負載均衡,簡單的說,當雙主雙從模式(M1->S1,M2->S2,并且M1 與M2 互為主備),正常情況下, M2,S1,S2 都參與select陳述句的負載均衡,
(3)balance="2",所有讀操作都隨機的在writeHost、readhost 上分發,
(4)balance="3",所有讀請求隨機的分發到readhost 執行,writerHost 不負擔讀壓力
為了雙主雙從讀寫分離balance設定為1
…
<dataNode name="dn1" dataHost="host1" database="testdb" />
<dataHost name="host1" maxCon="1000" minCon="10" balance="1"
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.140.128:3306" user="root" password="123123">
<!-- can have multi read hosts -->
<readHost host="hostS1" url="192.168.140.127:3306" user="root"
password="123123" />
</writeHost>
<writeHost host="hostM2" url="192.168.140.126:3306" user="root" password="123123">
<!-- can have multi read hosts -->
<readHost host="hostS2" url="192.168.140.125:3306" user="root"
password="123123" />
</writeHost>
</dataHost>
…
#balance="1": 全部的readHost與stand by writeHost參與select陳述句的負載均衡,
#writeType="0": 所有寫操作發送到配置的第一個writeHost,第一個掛了切到還生存的第二個#writeType="1",所有寫操作都隨機的發送到配置的writeHost,1.5 以后廢棄不推薦
#writeHost,重新啟動后以切換后的為準,切換記錄在組態檔中:dnindex.properties ,
#switchType="1": 1 默認值,自動切換,#-1 表示不自動切換#2 基于MySQL 主從同步的狀態決定是否切換

2.3、 啟動 Mycat
2.4、 驗證讀寫分離
在寫主機Master1資料庫表mytbl中插入帶系統變數資料,造成主從資料不一致
INSERT INTOmytbl VALUES(3,@@hostname);

在Mycat里查詢mytbl表,可以看到查詢陳述句在Master2(host81)、Slava1(host80)、Slava2(host82)主從三個主機間切換

2.5、抗風險能力
停止資料庫Master1

在Mycat里插入資料依然成功,Master2自動切換為寫主機
INSERT INTOmytbl VALUES(3,@@hostname);

啟動資料庫Master1

在Mycat里查詢mytbl表,可以看到查詢陳述句在Master1(host79)、Slava1(host80)、Slava2(host82)主從三個主機間切換

Master1、Master2互做備機,負責寫的主機宕機,備機切換負責寫操作,保證資料庫讀寫分離高可用性
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/257776.html
標籤:其他
上一篇:MySQL資料庫集群(雙主雙從)
下一篇:UML類圖
