Centos 7 Mariadb讀寫分離(案例)

踩的坑多了,做個小記
案例:基於四臺服務器實現mysql讀寫分離,一臺mycat代理服務器,另三臺配置mysql一主多從,實現讀的負載均衡

一:環境準備

Mycat代理服務器
	ip:	192.168.1.113  centos 7 
	mycat : Mycat-server-1.6.7.1-release-20190627191042-linux.tar.gz(二進制包)
mariadb master :
	ip:	192.168.1.21		centos 7
	mariadb:	mariadb yum 5.5.65
mariadb slave1 :
	ip:	192.168.1.22		centos 7
	mariadb:	mariadb yum 5.5.65
mariadb slave2 :
	ip:	192.168.1.23		centos 7
	mariadb:	mariadb yum 5.5.65

二、配置主從

過程請見我上次文章:“centos7 mysql主從(mariadb)
https://blog.csdn.net/oToyix/article/details/106511065

三、安裝mycat

1、安裝環境支持jdk,直接yum安裝search到的最高版本
[root@localhost ~]# yum install java-1.8.0-openjdk –y
2、安裝mycat
[root@localhost ~]# cd /usr/src/
[root@localhost src]# wget http://dl.mycat.io/1.6.7.1/Mycat-server-1.6.7.1-release-20190627191042-linux.tar.gz
[root@localhost src]# mkdir /usr/local/mycat
[root@localhost src]# tar -xvf Mycat-server-1.6.7.1-release-20190627191042-linux.tar.gz -C /usr/local/
[root@localhost src]# cd /usr/local/mycat/
[root@localhost mycat]# ls
bin  catlet  conf  lib  logs  version.txt
配置mycat環境變量
[root@localhost ~]# echo "export PATH=/usr/local/mycat/bin:$PATH" >/etc/profile.d/mycat.sh
[root@localhost ~]# chmod +x /etc/profile.d/mycat.sh
[root@localhost ~]# source /etc/profile.d/mycat.sh

四、配置讀寫分離

1、在主從庫中設置對mycat服務器的授權
因做了主從,只在主庫上設置一遍即可,從庫會自動同步過去
 192.168.1.21:master中
[root@localhost ~]# mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 6
Server version: 5.5.65-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> grant all on *.* to "mycat-proxy"@"192.168.1.113" identified by "123456";               
Query OK, 0 rows affected (0.01 sec)

MariaDB [(none)]> FLUSH PRIVILEGES;                                                        
Query OK, 0 rows affected (0.00 sec)
對IP爲192.168.1.113,用戶名:mycat-proxy密碼:123456授權

2、配置mycat

[root@localhost ~]# vim /usr/local/mycat/conf/server.xml設置邏輯用戶、邏輯庫,給前端程序連接使用

100         <user name="mycat" defaultAccount="true">
101                 <property name="password">123456</property>
102                 <property name="schemas">mycatdb</property>
103 
104                 <!-- 表級 DML 權限設置 -->
105                 <!--            
106                 <privileges check="false">
107                         <schema name="TESTDB" dml="0110" >
108                                 <table name="tb01" dml="0000"></table>
109                                 <table name="tb02" dml="1111"></table>
110                         </schema>
111                 </privileges>           
112                  -->
113         </user>
114 
115         <user name="user">
116                 <property name="password">user</property>
117                 <property name="schemas">mycatdb</property>
118                 <property name="readOnly">true</property>
119         </user>
120 
121 </mycat:server>

注:
1)、user name=“mycat” 爲邏輯用戶,是給前端使用的
2)、mycatdb 爲邏輯庫,給前端使用的,跟後端真實庫名可以不一樣
3)、defaultAccount=“true” 開啓用戶讀寫功能,一般把這一段給前端

3、配置schema.xml

配置後端真實數據庫信息(讀寫分離)

[root@localhost ~]# cp /usr/local/mycat/conf/schema.xml{,.bak} 先備份
[root@localhost ~]# vim /usr/local/mycat/conf/schema.xml

vim /usr/local/mycat/conf/schema.xml

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

        <schema name="mycatdb" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
                        </schema>
                <dataNode name="dn1" dataHost="localhost1" database="tb" />
                <dataHost name="localhost1" maxCon="1000" minCon="10" balance="3"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <writeHost host="hostM1" url="192.168.1.21:3306" user="mycat-proxy"   password="123456">
                        <readHost host="hostS2" url="192.168.1.22:3306" user="mycat-proxy" password="123456" />
                        <readHost host="hostS3" url="192.168.1.23:3306" user="mycat-proxy" password="123456" />
                </writeHost>
                        <writeHost host="hostM2" url="192.168.1.22:3306" user="mycat-proxy"   password="123456" />
                        <writeHost host="hostM3" url="192.168.1.23:3306" user="mycat-proxy"   password="123456" />
             </dataHost>
        </mycat:schema>

上面配置解釋:
主庫(寫庫): 192.168.1.21:3306
從庫(讀庫): 192.168.1.22:3306 192.168.1.23:3306
正常情況下,主庫寫,從庫讀
當主庫down機時,從庫寫,從庫讀

注:
balance=0 只走主庫
balance=1 所有庫都參與且有均衡,主從各一下
balance=2 所有庫都參與,但是隨機的
balance=3 所有讀都走從庫,寫不參與,只均衡讀庫,但不影響主庫的寫入
schema name=“mycatdb” 對應server中的邏輯庫
checkSQLschema=“false” 檢查語法
sqlMaxLimit=“100” sql返回數據限制100行
dataNode=“dn1” 數據節點,不是真實數據庫,一個標識
dataHost=“localhost1” 一般寫主機名,可以知道數據在後端哪臺服務器上,可以不改,本配置文件中要一致
dataNode=“wordpress” 對應後臺真實數據庫
maxCon=“1000” 最大鏈接,併發1000
minCon=“10” 最小鏈接,支持10個
database=“tb” 後端真實數據庫名

五、後端服務器給mycat授權

grant all on . to “mycat-proxy”@“192.168.1.11” identified by “123456”;

MariaDB [(none)]> grant all on *.* to "mycat-proxy"@"192.168.1.113" identified by "123456";
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> FLUSH PRIVILEGES; 
Query OK, 0 rows affected (0.00 sec)

六、測試

在現有的數據庫tb中新建表,:
1、在從庫192.168.1.22上新建表:slave22

MariaDB [tb]> create table slave22 (name varchar(20)); 

2、從從庫192.168.1.23上新建表:slave23

MariaDB [tb]> create table slave23 (name varchar(20));   

3、然後在mycat代理服務器上輸入mysql -h 127.0.0.1 -umycat -p123456 -P8066 -e "use mycat;show tables;"來查看結果

[root@localhost ~]# mysql -h 127.0.0.1 -umycat -p123456 -P8066 -e "use mycatdb;show tables;"
+--------------+
| Tables_in_tb |
+--------------+
| slave23      |
+--------------+
[root@localhost ~]# mysql -h 127.0.0.1 -umycat -p123456 -P8066 -e "use mycatdb;show tables;"
+--------------+
| Tables_in_tb |
+--------------+
| slave22      |
+--------------+
[root@localhost ~]# mysql -h 127.0.0.1 -umycat -p123456 -P8066 -e "use mycatdb;show tables;"
+--------------+
| Tables_in_tb |
+--------------+
| slave23      |
+--------------+
[root@localhost ~]# mysql -h 127.0.0.1 -umycat -p123456 -P8066 -e "use mycatdb;show tables;"
+--------------+
| Tables_in_tb |
+--------------+
| slave22      |
+--------------+
[root@localhost ~]# mysql -h 127.0.0.1 -umycat -p123456 -P8066 -e "use mycatdb;show tables;"
+--------------+
| Tables_in_tb |
+--------------+
| slave22      |
+--------------+

結果:查詢發生在從庫22與23之中,實現了讀的負載均衡
注:
8066爲給前端端口,9066爲管理端口
-------------end

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章