返回列表 发帖

CentOS6_Mycat实现MariaDB的读写分离

Mycat是基于Java语言编写的数据库中间件,后端可支持MySQL、MariaDB、SQL Server、Oracle、DB2等主流数据库;其核心功能是分库、分表;可实现数据库集群。

图片1.png


Mycat:192.168.168.130
MariaDB-1(master):192.168.168.154
MariaDB-2(slave):192.168.168.155

笺注:Mycat服务器上无需安装MySQL/MariaDB软件。



在Mycat服务器上进行配置:
[root@localhost ~]# cat /etc/redhat-release
CentOS release 6.9 (Final)
[root@localhost ~]#
[root@localhost ~]# uname -r
2.6.32-696.el6.x86_64


本地光盘Yum源里就有Java环境的相关软件包:
yum list |grep java-1.8
图片2.png


安装Java环境(Mycat基于Java)
[root@localhost ~]# yum -y install java-1.8.0-openjdk.x86_64


第三列前面有 @ 代表已经安装了:
yum list |grep java-1.8
图片3.png


查看Java的版本:
[root@localhost ~]# java -version
openjdk version "1.8.0_121"
OpenJDK Runtime Environment (build 1.8.0_121-b13)
OpenJDK 64-Bit Server VM (build 25.121-b13, mixed mode)



安装Mycat:

下载Mycat: https://pan.baidu.com/s/1PkES3DjDU-Ujny4Jr60HWw

解压:
[root@localhost ~]# tar -zxvf Mycat-server-1.6.5-release-20180122220033-linux.tar.gz

移动解压出来的文件夹到/usr/local下:
mv mycat /usr/local/

创建专门运行Mycat的用户:
adduser mycat

更改指定目录、文件的属主和属组:
chown -R mycat:mycat /usr/local/mycat


配置环境变量:
[root@localhost ~]# vi /etc/profile
文件最后追加:
export JAVA_HOME=/usr
export MYCAT_HOME=/usr/local/mycat


刷新环境变量:
[root@localhost ~]# source /etc/profile


切换到mycat用户:
[root@localhost ~]# su - mycat

切换目录,启动Mycat:
cd /usr/local/mycat/bin/
./mycat start
图片4.png


开机自动启动Mycat:
[root@localhost ~]# vi /etc/rc.d/rc.local
文件最后追加:
su - mycat -c "/usr/local/mycat/bin/mycat start"



######
配置读写分离的信息:
[root@localhost ~]# cat /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="data1" checkSQLschema="false" dataNode="dn1">
        </schema>
        <dataNode name="dn1" dataHost="192.168.168.130" database="data1" />
        <dataHost name="192.168.168.130" maxCon="10000" minCon="10" balance="1"
  writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <writeHost host="m1" url="192.168.168.154:3306" user="zhuohua" password="168">
                <readHost host="s1" url="192.168.168.155:3306" user="zhuohua" password="168" />
                <readHost host="s2" url="192.168.168.156:3306" user="zhuohua" password="168" />
                </writeHost>
       <writeHost host="m2" url="192.168.168.180:3306" user="zhuohua" password="168" />
        </dataHost>
</mycat:schema>

如下图:
图片5.png

备注:
schema name="data1"  要对应文件server.xml里的schemas的name;
192.168.168.130  为Mycat服务器的IP地址;
database="data1"  为实际数据库名称;
m1  为writeHost(写入数据库服务器);
m2  为stand by writeHost(备用写入数据库服务器),会在m1宕机后自动进行替代;
s1、s2  为readHost(读取数据库服务器);
m1、m2、s1、s2  都是在这里自定义的,无需去修改其他文件;

实验中,s2、m2都不存在的,但不影响读写分离。

maxCon="10000",Mycat的最大连接数
minCon="10",Mycat的最小连接数

balance="0",不开启读写分离机制,所有读操作都发送到当前可用的writeHost;
balance="1",开启读写分离机制,全部的readHost与stand by writeHost(s1,s2,m2)都参与读操作,即参与select语句的负载均衡;

writeType="0",所有写操作发送到第一个writeHost,第一个writeHost宕机了就切换到还生存的第二个writeHost;
writeType="1",所有写操作随机的发送到可用的writeHost;


switchType :(数据库服务器宕机时)
1 默认值,自动切换;
-1 表示不自动切换;



######
配置Mycat的连接信息(帐号、密码等):
[root@localhost ~]# vi /usr/local/mycat/conf/server.xml
图片6.png

修改为:
        <user name="Python" defaultAccount="true">
                <property name="password">123456</property>
                <property name="schemas">data1</property>
        </user>

如下图:
图片7.png

注释:
Mycat的帐号自定义为Python,密码123456;应用程序都连接这个Mycat帐号;
schemas的name(data1)要对应文件schema.xml的schema name


重启Mycat服务:
图片8.png



TCP 9066为管理端口,Mycat服务正常运行时才会打开的:
[root@localhost ~]# netstat -anp |grep 9066
tcp        0      0 :::9066                     :::*                        LISTEN      2436/java

TCP 8066为应用程序的连接端口,Mycat服务正常运行时才会打开的:
[root@localhost ~]# netstat -anp |grep 8066
tcp        0      0 :::8066                     :::*                        LISTEN      2436/java



Mycat服务器要在防火墙打开以下端口:
iptables -I INPUT -p tcp --dport 9066 -j ACCEPT
iptables -I INPUT -p tcp --dport 8066 -j ACCEPT

iptables-save > /etc/sysconfig/iptables



关闭SELinux:
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config





######
######

所有数据库服务器都要有库data1,并且创建数据库用户zhuohua@192.168.168.130:
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| data1              |
| data2              |
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
5 rows in set (0.001 sec)

MariaDB [(none)]> grant all on data1.* to zhuohua@192.168.168.130 identified by '168';
Query OK, 0 rows affected (0.001 sec)

注释:允许客户端使用IP地址192.168.168.130管理库data1即可。





######

测试读写分离:(只连接Mycat帐号、Mycat服务器的IP地址;TCP 9066为管理端口)
[root@oracle-linux6 ~]# mysql -u"Python" -p"123456" -h192.168.168.130 -P9066
图片9.png


查看Mycat的版本信息:
mysql> show @@version;
+-------------------------------------------+
| VERSION                                   |
+-------------------------------------------+
| 5.6.29-mycat-1.6.5-release-20180122220033 |
+-------------------------------------------+
1 row in set (0.00 sec)


查看逻辑数据库:
mysql> show @@databases;
+----------+
| DATABASE |
+----------+
| data1    |
+----------+
1 row in set (0.00 sec)


查看数据源:(离线状态的主机的IDLE的值都为0
mysql> show @@datasource;
+----------+------+-------+-----------------+------+------+--------+------+-------+---------+-----------+------------+
| DATANODE | NAME | TYPE  | HOST            | PORT | W/R  | ACTIVE | IDLE | SIZE  | EXECUTE | READ_LOAD | WRITE_LOAD |
+----------+------+-------+-----------------+------+------+--------+------+-------+---------+-----------+------------+
| dn1      | m1   | mysql | 192.168.168.154 | 3306 | W    |      0 |   10 | 10000 |      63 |         0 |          0 |
| dn1      | m2   | mysql | 192.168.168.180 | 3306 | W    |      0 |    0 | 10000 |       0 |         0 |          0 |
| dn1      | s1   | mysql | 192.168.168.155 | 3306 | R    |      0 |    4 | 10000 |      33 |         0 |          0 |
| dn1      | s2   | mysql | 192.168.168.156 | 3306 | R    |      0 |    0 | 10000 |       0 |         0 |          0 |
+----------+------+-------+-----------------+------+------+--------+------+-------+---------+-----------+------------+
4 rows in set (0.00 sec)

注释:数据库服务正常运行的192.168.168.154 、192.168.168.155的IDLE的值都不为0( 一旦数据库服务停止,其IDLE的值就会变为0 )





应用程序只连接Mycat帐号、Mycat服务器的IP地址,默认连接端口为TCP 8066
[root@oracle-linux6 ~]# mysql -u"Python" -p"123456" -h192.168.168.130 -P8066
图片10.png


图片11.png


图片12.png

注释:数据库服务器之间做了主从同步,所以写入数据后,读取到的数据是一样的。


在数据库主、从服务器看到的数据也是一样的:
select * from data1.class2;
图片13.png


笺注:Mycat服务器重启后,也是可以正常进行读写分离的。















############

修改Mycat的默认端口:

[root@localhost ~]# vi /usr/local/mycat/conf/server.xml
图片14.png

修改为:(必须要把注释符<!---->去掉)
<property name="serverPort">8077</property> <property name="managerPort">9077</property>
<property name="idleTimeout">300000</property> <property name="bindIp">0.0.0.0</property>
<property name="frontWriteQueueSize">4096</property> <property name="processors">32</property>

如下图:
图片15.png


重启Mycat服务:
图片16.png


至此,TCP 9077为管理端口:
[root@localhost ~]# netstat -anp |grep 9077
tcp        0      0 :::9077                     :::*                        LISTEN      1758/java  

TCP 8077为应用程序的连接端口:
[root@localhost ~]# netstat -anp |grep 8077
tcp        0      0 :::8077                     :::*                        LISTEN      1758/java         
  


Mycat服务器要在防火墙打开以下端口:
iptables -I INPUT -p tcp --dport 9077 -j ACCEPT
iptables -I INPUT -p tcp --dport 8077 -j ACCEPT

iptables-save > /etc/sysconfig/iptables




相关文章:
MariaDB主从同步
CentOS8_Mycat实现MySQL的读写分离





#################################
#################################
亲,学习研究也要劳逸结合哦,来我微店逛逛,买点东西好好犒劳犒劳自己和家人吧^_^^_^

电蚊拍可充电式LED灭苍蝇拍大号网面强力灭蚊拍电蚊子拍
wenpai.png

苏泊尔榨汁机杯家用全自动果蔬多功能迷你学生小型便携式炸果汁机
shuiguo.png

返回列表