Board logo

标题: CentOS8_Mycat实现MySQL的读写分离 [打印本页]

作者: admin    时间: 2020-7-28 13:56     标题: CentOS8_Mycat实现MySQL的读写分离

Mycat是基于Java语言编写的数据库中间件,后端可支持MySQL、MariaDB、SQL Server、Oracle、DB2等主流数据库;其核心功能是分库、分表;可实现数据库集群。 图片1.png Mycat:192.168.168.154 MySQL-1(master):192.168.168.130 MySQL-2(slave):192.168.168.131 笺注:Mycat服务器上无需安装MySQL/MariaDB软件。 在Mycat服务器上进行配置: [root@centos8 ~]# cat /etc/redhat-release CentOS Linux release 8.2.2004 (Core) [root@centos8 ~]# [root@centos8 ~]# uname -r 4.18.0-193.el8.x86_64 本地光盘Yum源里就有Java环境的相关软件包: yum list |grep java-1.8 图片2.png 安装Java环境(Mycat基于Java) [root@centos8 ~]# yum -y install java-1.8.0-openjdk.x86_64 第三列前面有 @ 代表已经安装了: yum list |grep java-1.8 图片3.png 查看Java的版本: [root@centos8 ~]# java -version openjdk version "1.8.0_252" OpenJDK Runtime Environment (build 1.8.0_252-b09) OpenJDK 64-Bit Server VM (build 25.252-b09, mixed mode) 安装Mycat: [root@centos8 ~]# 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@centos8 ~]# vi /etc/profile 文件最后追加: export JAVA_HOME=/usr export MYCAT_HOME=/usr/local/mycat 刷新环境变量: [root@centos8 ~]# source /etc/profile 切换到mycat用户: [root@centos8 ~]# su - mycat 切换目录,启动mycat: cd /usr/local/mycat/bin/ ./mycat start 图片4.png 开机自动启动Mycat: [root@centos8 ~]# vi /etc/rc.d/rc.local 文件最后追加: su - mycat -c "/usr/local/mycat/bin/mycat start" [root@centos8 ~]# chmod a+x /etc/rc.d/rc.local ###### 配置读写分离的信息: [root@centos8 ~]# cat /usr/local/mycat/conf/schema.xml data1" checkSQLschema="false" dataNode="dn1"> 192.168.168.154" database="data1" /> 192.168.168.154" maxCon="10000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> select user() 如下图: 图片1.png 备注: schema name="data1" 要对应文件server.xml里的schemas的name; 192.168.168.154 为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@centos8 ~]# vi /usr/local/mycat/conf/server.xml 图片2.png 修改为: Python" defaultAccount="true"> 123456 data1 如下图: 图片3.png 注释: Mycat的帐号自定义为Python,密码123456;应用程序都连接这个Mycat帐号; schemas的name(data1)要对应文件schema.xml的schema name 重启Mycat服务: 图片4.png TCP 9066为管理端口,Mycat服务正常运行时才会打开的: [root@centos8 ~]# dnf -y install net-tools [root@centos8 ~]# [root@centos8 ~]# netstat -anp |grep 9066 tcp6 0 0 :::9066 :::* LISTEN 1883/java TCP 8066为应用程序的连接端口,Mycat服务正常运行时才会打开的: [root@centos8 ~]# netstat -anp |grep 8066 tcp6 0 0 :::8066 :::* LISTEN 1883/java Mycat服务器要在防火墙打开以下端口:(TCP 9066、8066) [root@centos8 ~]# firewall-cmd --zone=public --add-port={9066/tcp,8066/tcp} --permanent success [root@centos8 ~]# firewall-cmd --reload success 关闭SELinux: setenforce 0 sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config ###### ###### 所有数据库服务器都要有库data1,并且创建数据库用户zhuohua@192.168.168.154: mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | data1 | | data2 | | mysql | | performance_schema | +--------------------+ 5 rows in set (0.00 sec) mysql> grant all on data1.* to zhuohua@192.168.168.154 identified by '168'; Query OK, 0 rows affected (0.00 sec) 注释:允许客户端使用IP地址192.168.168.154管理库data1即可。 ###### 测试读写分离:(只连接Mycat帐号、Mycat服务器的IP地址;TCP 9066为管理端口) [root@oracle-linux6 ~]# mysql -u"Python" -p"123456" -h192.168.168.154 -P9066 图片5.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.130 | 3306 | W | 0 | 6 | 10000 | 69 | 0 | 0 | | dn1 | m2 | mysql | 192.168.168.180 | 3306 | W | 0 | 0 | 10000 | 0 | 0 | 0 | | dn1 | s1 | mysql | 192.168.168.131 | 3306 | R | 0 | 6 | 10000 | 59 | 0 | 0 | | dn1 | s2 | mysql | 192.168.168.132 | 3306 | R | 0 | 0 | 10000 | 0 | 0 | 0 | +----------+------+-------+-----------------+------+------+--------+------+-------+---------+-----------+------------+ 4 rows in set (0.01 sec) 注释:数据库服务正常运行的192.168.168.130 、192.168.168.131的IDLE的值都不为0( 一旦数据库服务停止,其IDLE的值就会变为0 ) 应用程序只连接Mycat帐号、Mycat服务器的IP地址,默认连接端口为TCP 8066 图片6.png 图片7.png 创建表、插入数据: USE data1; CREATE TABLE class168 (id INT,NAME VARCHAR(8)); INSERT INTO class168(id,NAME) VALUES (1,'happy'); INSERT INTO class168(id,NAME) VALUES (2,'lily'); INSERT INTO class168(id,NAME) VALUES (3,'zhuohua'); 图片8.png 查询数据: USE data1; SELECT * FROM class168; 图片9.png 注释:数据库服务器之间做了主从同步,所以写入数据后,读取到的数据是一样的。 在数据库主、从服务器看到的数据也是一样的: select * from data1.class168; 图片10.png 笺注:Mycat服务器重启后,也是可以正常进行读写分离的。 相关文章: MySQL5.6主从/主主同步 CentOS6_Mycat实现MariaDB的读写分离 使用SQLyog远程管理MySQL CentOS8_Yum仓库 CentOS8_Keepalived+LVS(二)

图片附件: 图片1.png (2021-3-22 10:12, 49.79 KB) / 下载次数 106
http://blog.zhuohua.store/attachment.php?aid=15979&k=fdd7cebf1fe8a505e17dcfdf64b6a440&t=1714332617&sid=514C87



图片附件: 图片2.png (2021-3-22 10:12, 68.18 KB) / 下载次数 111
http://blog.zhuohua.store/attachment.php?aid=15980&k=4a54b86d23f81fcba1afe79dbe18f4b8&t=1714332617&sid=514C87



图片附件: 图片3.png (2021-3-22 10:13, 67.78 KB) / 下载次数 123
http://blog.zhuohua.store/attachment.php?aid=15981&k=2661dc856afd5ff88da80a0f22ce6380&t=1714332617&sid=514C87



图片附件: 图片4.png (2021-3-22 10:14, 44.18 KB) / 下载次数 108
http://blog.zhuohua.store/attachment.php?aid=15982&k=ea44574ffae241e0838cf691403e64c8&t=1714332617&sid=514C87



图片附件: 图片1.png (2021-3-22 10:26, 166.78 KB) / 下载次数 85
http://blog.zhuohua.store/attachment.php?aid=15983&k=0f8f0f5424e968f2b0db142687d06a19&t=1714332617&sid=514C87



图片附件: 图片2.png (2021-3-22 10:27, 140.54 KB) / 下载次数 99
http://blog.zhuohua.store/attachment.php?aid=15984&k=96ffc20c6672da6ef3de7fe90a4cc1b9&t=1714332617&sid=514C87



图片附件: 图片3.png (2021-3-22 10:28, 82.91 KB) / 下载次数 98
http://blog.zhuohua.store/attachment.php?aid=15985&k=eabfa8b5a61f75e36b1b0eaf824cf267&t=1714332617&sid=514C87



图片附件: 图片4.png (2021-3-22 10:28, 62.61 KB) / 下载次数 99
http://blog.zhuohua.store/attachment.php?aid=15986&k=f42b1ccdb453a68a1db4983d1b3dfd5d&t=1714332617&sid=514C87



图片附件: 图片5.png (2021-3-22 10:30, 156.78 KB) / 下载次数 104
http://blog.zhuohua.store/attachment.php?aid=15987&k=182af278cb532d9df02b2fe5fc3d73d9&t=1714332617&sid=514C87



图片附件: 图片6.png (2021-3-22 10:32, 264.75 KB) / 下载次数 117
http://blog.zhuohua.store/attachment.php?aid=15988&k=f265bd23e0a2840c85d7f24e9b10225d&t=1714332617&sid=514C87



图片附件: 图片7.png (2021-3-22 10:37, 157.13 KB) / 下载次数 96
http://blog.zhuohua.store/attachment.php?aid=15989&k=fe6a0c7413d466d956ca4e3d86623b64&t=1714332617&sid=514C87



图片附件: 图片8.png (2021-3-22 10:40, 189.53 KB) / 下载次数 113
http://blog.zhuohua.store/attachment.php?aid=15990&k=88cac278599b5eb15cc5366f08ef342c&t=1714332617&sid=514C87



图片附件: 图片9.png (2021-3-22 10:40, 168.48 KB) / 下载次数 97
http://blog.zhuohua.store/attachment.php?aid=15991&k=f4420dd4eb8d18f5cb5d043067d4adeb&t=1714332617&sid=514C87



图片附件: 图片10.png (2021-3-22 10:40, 32.27 KB) / 下载次数 98
http://blog.zhuohua.store/attachment.php?aid=15992&k=2394f15ebb0e88552567ca280fd18fbf&t=1714332617&sid=514C87






欢迎光临 blog.zhuohua.store (http://blog.zhuohua.store/) Powered by Discuz! 7.2