《怪物獵人物語2破滅之翼》麒麟基因搭配思路
阿新 • • 發佈:2021-07-14
利用Mycat中介軟體實現MySQL的讀寫分離
實驗環境
node | Master | Slave | Mycat |
---|---|---|---|
linux | CentOS7.9 | CentOS7.9 | CentOS7.9 |
mysql | 5.7 | 5.7 | 5.7 |
IP | 192.168.18.131 | 192.168.18.133 | 192.168.18.135 |
192.168.18.131、192.168.18.133搭建成MySQL主從同步環境
192.168.18.135主機部署mycat (注:記憶體需要2G以上,否則mycat服務起不來)
所有主機關閉SELinux和防火牆
systemctl stop firewalld setenforce0 時間同步
安裝環境準備
-
1、jdk:要求jdk必須是1.7及以上版本
-
2、Mysql:推薦mysql是5.5以上版本
安裝MyCat
1.下載mycat [root@centos7 soft]# wget http://dl.mycat.org.cn/1.6.7.6/20210303094759/Mycat-server-1.6.7.6-release-20210303094759-linux.tar.gz 2.解壓到/apps目錄下 [root@mycat soft]# mkdir /apps [root@mycat soft]# tar -xvf Mycat-server-1.6.7.6-release-20210303094759-linux.tar.gz -C /apps [root@mycat conf]# echo 'PATH=/apps/mycat/bin:$PATH' > /etc/profile.d/mycat.sh [root@mycat conf]# source /etc/profile.d/mycat.sh [root@mycat conf]# netstat -lnp |grep :8066 tcp6 0 0 :::8066 :::* LISTEN 67184/java #用預設密碼123456來連線mycat [root@mycat conf]# mysql -uroot -p123456 -h 192.168.18.135 -P8066 mysql> show databases; +----------+ | DATABASE | +----------+ | TESTDB | +----------+
在mycat 伺服器上修改server.xml檔案配置Mycat的連線資訊
[root@mycat conf]# vim /apps/mycat/conf/server.xml 110 <user name="root" defaultAccount="true"> #連線Mycat的使用者名稱 111 <property name="password">123456</property> #連線Mycat的密碼,預設密碼為123456 112 <property name="schemas">TESTDB</property> #資料庫名要和schema.xml相對應
修改schema.xml實現讀寫分離策略
1 [root@mycat ~]#vim /app/mycat/conf/schema.xml 2 <?xml version="1.0"?> 3 <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> 4 <mycat:schema xmlns:mycat="http://io.mycat/"> 5 6 <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" randomDataNode="dn1" dataNode="dn1"> 7 </schema> 8 <dataNode name="dn1" dataHost="localhost1" database="mycat" /> 9 <dataHost name="localhost1" maxCon="1000" minCon="10" balance="1" 10 writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> 11 <heartbeat>select user()</heartbeat> 12 <!-- can have multi write hosts --> 13 <writeHost host="hostM1" url="192.168.18.131:3306" user="root" 14 password="123456"> 15 <readHost host="hostS1" url="192.168.18.133:3306" user="root" 16 password="123456" /> 17 </dataHost> 18 </mycat:schema> 19 20 #以上***部分表示原配置檔案中需要修改的內容 21 #重新啟動mycat 22 [root@mycat ~]#mycat restart
上面配置中,balance改為1,表示讀寫分離。以上配置達到的效果就是192.168.18.131為主庫,192.168.18.133為從庫
注意:要保證192.168.18.131和192.168.18.133機器能使用root/123456許可權成功登入mysql資料庫。同時,也一定要授權mycat機器能使用root/123456許可權成功登入這兩臺機器的mysql資料庫!!這很重要,否則會導致登入mycat後,對庫和表操作失敗!
在後端主伺服器建立使用者並對mycat授權
[root@master ~]#mysql -uroot -p mysql> create database mycat; Query OK, 1 row affected (0.04 sec) mysql> GRANT ALL ON *.* TO 'root'@'192.168.18.135' IDENTIFIED BY '123456' ; mysql> flush privileges;
通過通用日誌確認實現讀寫分離
在主和從伺服器分別啟用通用日誌,檢視讀寫分離
[root@master ~]#vim /etc/my.cnf [mysqld] ... general_log=ON general_log_file='master-general.log' ... [root@master ~]#systemctl restart mysqld [root@master ~]#tail -f /data/mysql/master-general.log [root@slave ~]#vim /etc/my.cnf [mysqld] ... general_log=ON general_log_file='slave-general.log' ... [root@slave ~]#systemctl restart mysqld [root@slave ~]#tail -f /data/mysql/slave-general.log 在mysql中檢視通用日誌 show variables like 'general_log'; #檢視日誌是否開啟 show variables like 'general_log_file'; #檢視日誌檔案儲存位置
在Mycat伺服器上執行讀寫操作,進行讀寫分離的測試
[root@mycat ~]#mysql -uroot -p123456 -h127.0.0.1 -P8066 mysql> show databases; +----------+ | DATABASE | +----------+ | TESTDB | //只能看一個虛擬資料庫 +----------+ mysql> create table test1 (id int,name varchar(10)); mysql> insert into test1 values(111,'quhongzhi'); mysql> select * from test1; mysql> select @@server_id; +-------------+ | @@server_id | +-------------+ | 2 | +-------------+ 1 row in set (0.00 sec)
在主從節點上分別檢視通用日誌
可以看到寫操作被轉發到了Master節點,讀操作被轉發到了Slave節點。
停止從節點,MyCAT自動排程讀請求至主節點
[root@slave ~]#systemctl stop mysqld [root@mycat ~]#mysql -uroot -p123456 -h192.168.100.10 -P8066 mysql> select @@server_id; +-------------+ | @@server_id | +-------------+ | 1 | +-------------+ 1 row in set (0.00 sec)