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

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