久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

基于mysql+mycat如何搭建穩定高可用集群負載均衡主備復制讀寫分離操作

157次閱讀
沒有評論

共計 7619 個字符,預計需要花費 20 分鐘才能閱讀完成。

行業資訊    
數據庫    
MySQL 數據庫    
基于 mysql+mycat 如何搭建穩定高可用集群負載均衡主備復制讀寫分離操作

自動寫代碼機器人,免費開通

這篇文章主要介紹基于 mysql+mycat 如何搭建穩定高可用集群負載均衡主備復制讀寫分離操作,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

主要思路

簡單說,實現 mysql 主備復制 – 利用 mycat 實現負載均衡。

比較了常用的讀寫分離方式,推薦 mycat,社區活躍,性能穩定。

測試環境

MYSQL 版本:Server version: 5.5.53,到官網可以下載 WINDWOS 安裝包。

注意:確保 mysql 版本為 5.5 以后,以前版本主備同步配置方式不同。

linux 實現思路類似,修改 my.cnf 即可。

A 主 mysql。192.168.110.1:3306, 用戶 root,密碼 root。操作系統:win7 x64,內存:4g

  安裝路徑:C:\Program Files\MySQL\MySQL Server 5.5\bin

B 備 mysql。192.168.110.2:3306, 用戶 root,密碼 root。操作系統:win2003 x64,內存:1g

  安裝路徑:C:\Program Files\MySQL\MySQL Server 5.5\bin

A 主、B 備的 mysql 中創建 sync_test 數據庫

實現 mysql 主備復制

主要思路:A 主 mysql 開啟日志,B 備 mysql 讀取操作日志,同步執行。

一般為主備同步,主主同步不推薦使用。

配置 A 主 mysql

1)修改 my.ini。需要在 log-bin= C:/Program Files/MySQL/MySQL Server 5.5/log/mysql-bin.log 的相關位置創建 log 目錄,以及 mysql-bin.log 文件。

[mysqld]
server-id=1 # 主機標示,整數
port=3306 
log-bin= C:/Program Files/MySQL/MySQL Server 5.5/log/mysql-bin.log  # 確保此文件可寫
read-only=0 # 主機,讀寫都可以
binlog-do-db=sync_test # 需要備份數據庫,多個寫多行
binlog-ignore-db=mysql # 不需要備份的數據庫,多個寫多行 

2)允許 MYSQL 遠程訪問

# 登錄 mysql console
進入 %home%/bin,執行 mysql -uroot -proot
#授權。允許 root 用戶,從 192.168.110.* 的 IP 范圍   遠程訪問 A 主 mysql
mysql GRANT ALL PRIVILEGES ON *.* TO  root @ 192.168.110.*  IDENTIFIED BY  root  WITH GRANT OPTION;
#生效。該操作很重要!mysql FLUSH PRIVILEGES;

3)重啟 A 主 mysql 數據庫

進入 %home%/bin,執行 mysql -uroot -proot

mysql net stop mysql;
mysql net start mysql;

4)查看主 mysql 日志狀態

mysql  show master status\G;
*************************** 1. row ***************************
 File: mysql-bin.000003
 Position: 107
 Binlog_Do_DB: sync_test
Binlog_Ignore_DB: mysql
1 row in set (0.00 sec)
ERROR:
No query specified

配置 B 備 mysql

1)修改 my.ini。需要在 log-bin= C:/Program Files/MySQL/MySQL Server 5.5/log/mysql-bin.log 的相關位置創建 log 目錄,以及 mysql-bin.log 文件。

[mysqld]
# add for sycn test
server-id=2 # 從機標識
log-bin= C:/Program Files/MySQL/MySQL Server 5.5/log/mysql-bin.log  # 確保此文件可寫
#master-host= 192.168.110.1  # 主機 Ip
#master-user=root # 數據庫訪問用戶名
#master-pass=root # 數據庫訪問密碼
#master-port=3306 # 主機端口
#master-connect-retry=60 # 如果從服務器發現主服務器斷掉,重新連接的時間差 (秒)
replicate-do-db=sync_test # 只復制某個庫
replicate-ignore-db=mysql # 不復制某個庫 

2)重啟 B 備 mysql 數據庫

進入 %home%/bin,執行 mysql -uroot -proot

mysql net stop mysql;
mysql net start mysql;

3)配置 B 備數據庫的數據來源,核實高亮處的狀態是否正常。

mysql change master to master_host= 192.168.110.1 ,master_port= 3306 ,master_user= root ,master_password= root 
mysql slave start;
mysql show slave status\G;
*************************** 1. row ***************************
 Slave_IO_State: Waiting for master to send even
 Master_Host: 192.168.110.1
 Master_User: root
 Master_Port: 3306
 Connect_Retry: 60
 Master_Log_File: mysql-bin.000003
 Read_Master_Log_Pos: 107
 Relay_Log_File: wjt-1c698d8a032-relay-bin.00001
 Relay_Log_Pos: 253
 Relay_Master_Log_File: mysql-bin.000003
 Slave_IO_Running: Yes
 Slave_SQL_Running: Yes
 Replicate_Do_DB: sync_test
 Replicate_Ignore_DB: mysql
 Replicate_Do_Table:
 Replicate_Ignore_Table:
 Replicate_Wild_Do_Table:
 Replicate_Wild_Ignore_Table:
 Last_Errno: 0
 Last_Error:
 Skip_Counter: 0
 Exec_Master_Log_Pos: 107
 Relay_Log_Space: 565
 Until_Condition: None
 Until_Log_File:
 Until_Log_Pos: 0
 Master_SSL_Allowed: No
 Master_SSL_CA_File:
 Master_SSL_CA_Path:
 Master_SSL_Cert:
 Master_SSL_Cipher:
 Master_SSL_Key:
 Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
 Last_IO_Errno: 0
 Last_IO_Error:
 Last_SQL_Errno: 0
 Last_SQL_Error:
 Replicate_Ignore_Server_Ids:
 Master_Server_Id: 1
1 row in set (0.00 sec)
ERROR:
No query specified

驗證同步配置結果

A 主 mysql:使用 navicat 工具,在 sync_test 庫中創建 sync_table 表,并添加一些數據

B 備 mysql:使用 navicat 工具,查看 sync_test 庫,可以看到 sync_table 表和數據已被同步

實現讀寫分離

主要思路:使用 mycat 中間件,轉發 sql 指令到后端 mysql 節點。mycat 不負責數據庫同步。

安裝 mycat

mycat 是什么?可以認為它是一個數據庫訪問中間件,但更像 f5、ngnix 等產品,具備訪問路由、多表分表分片操作等功能。總之很強大。

下載:http://www.mycat.io/,本文使用的是:1.6-RELEASE

解壓 Mycat-server-1.6-RELEASE-20161012170031-win.tar,到 D:\dev-bin\mycat 目錄

確保 java 環境為 jdk1.7 以上,否則 mycat 將不支持

安裝完畢

配置 mycat

1)server.xml。配置訪問用戶及權限。修改高亮處信息,其中 admin、user 為訪問 mycat 的用戶,TESTDB 為 mycat 虛擬的數據庫,供上層應用訪問。

user name= admin 
  property name= password admin /property 
  property name= schemas TESTDB /property 
  !--  表級  DML  權限設置  -- 
  !-- 
  privileges check= false 
  schema name= TESTDB  dml= 0110   
  table name= tb01  dml= 0000 /table 
  table name= tb02  dml= 1111 /table 
  /schema 
  /privileges  
 -- 
  /user 
  user name= user 
  property name= password user /property 
  property name= schemas TESTDB /property 
  property name= readOnly true /property 
  /user

2)schema.xml。這部分不太好理解,精簡了一下,主要分 schema、dataNode、dataHost 三個主要配置。

scheme 節點定義了 mycat 的虛擬數據庫為 TESTDB,balance= 1:write 操作路由到 A 機,讀操作路由到 B。

?xml version= 1.0 ? 
 !DOCTYPE mycat:schema SYSTEM  schema.dtd 
 mycat:schema xmlns:mycat= http://io.mycat/ 
  schema name= TESTDB  checkSQLschema= false  sqlMaxLimit= 100  dataNode= dn1 
  !--  這里不配置,代表所有的表分片到 dn1 節點 -- 
  /schema 
  dataNode name= dn1  dataHost= localhost1  database= sync_test  / 
  dataHost name= localhost1  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.110.1:3306  user= root  password= root 
  !-- can have multi read hosts -- 
  readHost host= hostS2  url= 192.168.110.2:3306  user= root  password= root  / 
  /writeHost 
  /dataHost 
 /mycat:schema

啟動 mycat

1)啟動 mycat

D:\dev-bin\mycat\bin startup_nowrap.bat

后臺信息如下:

D:\dev-bin\mycat\bin startup_nowrap.bat
D:\dev-bin\mycat\bin REM check JAVA_HOME java
D:\dev-bin\mycat\bin set JAVA_CMD=C:\Program Files (x86)\Java\jdk1.7.0_13/bin/java
D:\dev-bin\mycat\bin if C:\Program Files (x86)\Java\jdk1.7.0_13 == goto noJavaHome
D:\dev-bin\mycat\bin if exist C:\Program Files (x86)\Java\jdk1.7.0_13\bin\java.exe goto mainEntry
D:\dev-bin\mycat\bin REM set HOME_DIR
D:\dev-bin\mycat\bin set CURR_DIR=D:\dev-bin\mycat\bin
D:\dev-bin\mycat\bin cd ..
D:\dev-bin\mycat set MYCAT_HOME=D:\dev-bin\mycat
D:\dev-bin\mycat cd D:\dev-bin\mycat\bin
# 如果啟動失敗,請修改 D:\dev-bin\mycat\bin\startup_nowrap.bat 文件中的以下參數。默認占用內存為 2G
D:\dev-bin\mycat\bin C:\Program Files (x86)\Java\jdk1.7.0_13/bin/java -server -Xms512m -Xmx512m -XX:MaxPermSize=64M  -XX:+AggressiveOpts -XX:MaxDirectMemorySize=768m -DMYCAT_HOME=D:\
p ..\conf;..\lib\* io.mycat.MycatStartup

MyCAT Server startup successfully. see logs in logs/mycat.log  #啟動成功將看到如下信息。

注意:如日志中出現 192.168.110.2 not connected 等信息,請允許 B 備 mysql 遠程訪問。

# 登錄 mysql console
進入 %home%/bin,執行 mysql -uroot -proot
#授權。允許 root 用戶,從 192.168.110.* 的 IP 范圍   遠程訪問 Bmysql
mysql GRANT ALL PRIVILEGES ON *.* TO  root @ 192.168.110.*  IDENTIFIED BY  root  WITH GRANT OPTION;
#生效, 該操作很重要!mysql FLUSH PRIVILEGES;

測試讀寫分離

驗證是否同步

使用 navicat 連接 mycat,操作方式和連接物理 mysql 庫一致,用戶 admin,密碼 admin,端口 8066

在 TESTDB 虛擬庫中,創建新表 test2,增加一些數據

查看 A 節點、B 節點數據已同步

關閉 B 備 mysql 的同步,驗證讀寫分離

mysql  slave stop;
Query OK, 0 rows affected (0.00 sec)
mysql  show slave status\G;
*************************** 1. row ***************************
 Slave_IO_State:
 Master_Host: 192.168.110.1
 Master_User: root
 Master_Port: 3306
 Connect_Retry: 60
 Master_Log_File: mysql-bin.000003
 Read_Master_Log_Pos: 478
 Relay_Log_File: wjt-1c698d8a032-relay-bin.00001
 Relay_Log_Pos: 624
 Relay_Master_Log_File: mysql-bin.000003
 Slave_IO_Running: No
 Slave_SQL_Running: No
 Replicate_Do_DB: sync_test
 Replicate_Ignore_DB: mysql
 Replicate_Do_Table:
 Replicate_Ignore_Table:
 Replicate_Wild_Do_Table:
 Replicate_Wild_Ignore_Table:
 Last_Errno: 0
 Last_Error:
 Skip_Counter: 0
 Exec_Master_Log_Pos: 478
 Relay_Log_Space: 936
 Until_Condition: None
 Until_Log_File:
 Until_Log_Pos: 0
 Master_SSL_Allowed: No
 Master_SSL_CA_File:
 Master_SSL_CA_Path:
 Master_SSL_Cert:
 Master_SSL_Cipher:
 Master_SSL_Key:
 Seconds_Behind_Master: NULL
Master_SSL_Verify_Server_Cert: No
 Last_IO_Errno: 0
 Last_IO_Error:
 Last_SQL_Errno: 0
 Last_SQL_Error:
 Replicate_Ignore_Server_Ids:
 Master_Server_Id: 1
1 row in set (0.00 sec)
ERROR:
No query specified

3)使用 navicat 連接 mycat,操作方式和連接物理 mysql 庫一致,用戶 admin,密碼 admin,端口 8066

連接成功后,將看到 TESTDB 數據庫和 test 數據表

在 test 表中添加一些數據,保存

執行 select * from test 查看 test 操作,將看到數據未更新

原因:mycat 將查詢 sq 路由到 B,因此讀取的結果集不一致。

最后,mycat 使用可以參見官網的權威指南學習。雙主雙備架構待后續更新。

以上是“基于 mysql+mycat 如何搭建穩定高可用集群負載均衡主備復制讀寫分離操作”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注丸趣 TV 行業資訊頻道!

向 AI 問一下細節

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-12-04發表,共計7619字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 益阳市| 鹤庆县| 德兴市| 辽中县| 江都市| 东至县| 含山县| 龙口市| 古田县| 峨边| 岑溪市| 瓦房店市| 杭锦后旗| 绥阳县| 广德县| 永顺县| 循化| 雷州市| 库伦旗| 八宿县| 金寨县| 东山县| 丁青县| 崇信县| 鞍山市| 察哈| 扎赉特旗| 微博| 海林市| 仙游县| 灌南县| 泌阳县| 利津县| 长治县| 齐齐哈尔市| 福州市| 两当县| 老河口市| 盘锦市| 克什克腾旗| 赫章县|