MySQL 读写分离代理(Mycat2)

作者:田逸 

作者亲自尝试过的开源MySQL读写分离工具有Amoeba、MySQL Proxy、Mycat等,经过仔细测试对比,在某个实际项目中选用Mycat作为MySQL数据库读写分离的代理工具。Mycat当前的最新版本为Mycat2,可从http://dl.mycat.org.cn/2.0/install-template取得下载包。

7.3.1 安装Mycat 2到系统

Mycat 需要依赖于JAVA,因此需要在读写分离代理所在的系统预先安装JAVA,并在环境变量配置中设置JAVA_HOME.关于JAVA的安装设置,参见本书“6.5.1 安装Tomcat”相关内容,这里不再重复。

如果Mycat所在的宿主操作系统版本比较新,比如Rochy 9或者Centos Stream 9,采用包管理工具(yum/dnf)便捷安装JAVA,需要执行的操作如下:

#安装jdk及jre

yum install java-11-openjdk java-11-openjdk-devel

执行完安装,将在自动生成目录“/usr/lib/jvm”。切换到此目录,查看其子目录(如图7-8),以确定在环境变量中如何设置“JAVA_HOME”及“JRE_HOME”。

 

图7- 8

根据目录结构,很容易就可以将与JAVA相关的环境变量设置。用文本编辑器,将如下四行文本追加到文件“/etc/profile”尾部:

export JAVA_HOME=/usr/lib/jvm/java

export JRE_HOME=/usr/lib/jvm/jre

export CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib

export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin

执行“source /etc/profile”是设置在当前Shell会话立即生效,或者退出终端,再次登录,也是一样的效果。

Mycat需要下载两个包,一个是安装包,一个是依赖的“jar”包。Mycat的下载存在于官网与“github.com”,作者建议在官网进行下载。

下载安装包的地址:http://dl.mycat.org.cn/2.0/install-template/mycat2-install-template-1.21.zip

下载依赖的jar包地址:

http://dl.mycat.org.cn/2.0/1.21-release/mycat2-1.21-release-jar-with-dependencies-2022-5-9.jar

下载来的zip压缩包,用unzip解开后,将其移动到目录“/usr/local”,并重命名为“mycat”.具体的命令如下:

[root@rocky114 ~]# unzip mycat2-install-template-1.21.zip -d /usr/local/

Archive:  mycat2-install-template-1.21.zip

   creating: /usr/local/mycat/

   creating: /usr/local/mycat/bin/

   inflating: /usr/local/mycat/bin/mycat

  inflating: /usr/local/mycat/bin/mycat.bat

  inflating: /usr/local/mycat/bin/wrapper-aix-ppc-32

  inflating: /usr/local/mycat/bin/wrapper-aix-ppc-64

  inflating: /usr/local/mycat/bin/wrapper-hpux-parisc-64

…………..更多的输出省略………………………………………

为简化输入,可将系统环境变量文件“/etc/profile” 最后一行的内容追加Mycat安装目录的可执行文件所在绝对路径,更新后的“/etc/profile”文件最后一行的完整内容为:

export PATH=$PATH:/usr/local/mycat/bin:$JAVA_HOME/bin:$JRE_HOME/bin

再次执行指令“source /etc/profile”使设置立即生效。

将下载来的mycat2-1.21-release-jar-with-dependencies-2022-5-9.jar文件,原样移动或者复制到目录“/usr/local/mycat/lib”。

到目前为止,安装的步骤基本上算是完成了,任意命令行下执行指令“mycat -h”,验证安装的正确性,命令的输出如图7-9所示。

 

图7- 9

提示权限不够,需要用指令“chmod -R +x /usr/local/mycat/bin”进行赋权,再执行就不会报错了,如图7-10.

 

图7- 10

7.3.2 配置Mycat读写分离

Mycat2读写分离配置可分为:创建数据库连接账号、启动Mycat2与读写分离配置等几个步骤,接下来一一进行介绍。

1)创建Mycat2工作所必须的账号

启动Mycat2服务,需要有真实的数据库服务器支撑才能运行,因此,需要在MySQL服务器(其它被Mycat2支持的数据库也如此)创建账号并给账号授权,然后在Mycat2所在的宿主系统用MySQL客户端用创建好的账号远程进行连接,验证账号的有效性和正确性。

在前边的章节,我们已经做好了MySQL数据库间的主从同步,因此创建Mycat2所需账号的操作只需也只能在主数据库上进行,具体的指令如下:

mysql> create user ‘mycat’@’172.16.35.%’ identified by ‘dwue$Gs3’;

mysql> grant all on *.* to ‘mycat’@’172.16.35.%’;

mysql>flush privileges;

切换到Mycat2所在的宿主系统,用刚创建好的账户远程登录MySQL主数据库,具体的指令如下:

[root@mycat116 ~]# mysql -h 172.16.35.113 -u mycat -p

Enter password:

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 439

Server version: 8.0.28 MySQL Community Server - GPL

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

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

2)启动Mycat2

与Mycat1.X版本相比,Mycat2的配置基本不需要手动去修改配置文件,而是可以在Mycat2启动之后,登录Mycat管理后台,用SQL指令或者客户端工具进行配置。在启动Mycat2之前,需要对原型库的数据源做相应的修改,修改的项主要是主数据库的连接信息,一个完整的修改过的原型数据源文件“/usr/local/mycat/conf/datasources/prototypeDs.datasource.json”的内容如下:

{

        "dbType":"mysql",

        "idleTimeout":60000,

        "initSqls":[],

        "initSqlsGetConnection":true,

        "instanceType":"READ_WRITE",

        "maxCon":1000,

        "maxConnectTimeout":3000,

        "maxRetryCount":5,

        "minCon":1,

        "name":"prototypeDs",

        "password":" dwue$Gs3",

        "type":"JDBC",

        "url":"jdbc:mysql://172.16.35.113:3306/mysql?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8",

        "user":"mycat",

        "weight":0

}

说明:被修改过的内容,以粗体字显示。

因为已经对系统变量做了设置,所以在任意路径执行“mycat start”就可以启动Mycat2。在Mycat2的安装目录“/usr/local/mycat”下,存在目录“logs”,打开此目录中的日志文件“wrapper.log”,可了解Mycat2服务的运行状况,如图7-11所示。

图7- 11

 

关闭Mycat2所在宿主系统的防火墙,在任意远端系统命令行下,用MySQL客户端工具连接Mycat的服务端口TCP 8066、用户名与密码在配置文件“/usr/local/mycat/conf/users/ root.user.json”中获取(如图7-12)。为安全起见,建议修改用户名(由root改成root888)及密码。

 

图7- 12

Linux下,用命令行连接Mycat管理后台的指令为“mysql -h 172.16.35.116 -u mycat -P8066 -p ”,输入密码,进入用户交互界面(如图7-13),表明Mycat2运行正常,可在次交互界面进行读写分离配置。

 

图7- 13

需要注意的是,这个连接账号,并非MySQL主数据库所创建的账号“mycat”,为了区别,也可以将其改成其它名称,并不会影响连接Mycat2。

如果Mycat客户端的宿主系统是Windows,可下载、安装“Navicat for MySQL”这样的图形管理工具(商业软件,需要授权),对Mycat2进行远程连接并进行操作管理,如图7-14所示。

 

图7- 14

3Mycat2配置读写分离

有两种配置MySQL读写分离的方法,一种是直接在Mycat的配置目录“/usr/local/mycat/conf”的子目录编辑相关的文本文件(Mycat1.x版本只用这种方法);另一种登录到Mycat交互界面,用特殊语法的SQL命令进行配置。本书采用第二种方法,直接在Mycat的交互界面输入命令。

第一步:Mycat增加数据源。需要正确输入的数据主要包括:MySQL主从数据库的IP

地址、数据库库名(schema)、数据库账号、数据库密码(生产数据库请使用复杂密码)、实例类型(READ_WRITE或READ)。下边是添加一个主库源和两个从库源的具体指令:

#增加主库172.16.35.113,实例类型为READ_WRITE ####################

mysql> /*+ mycat:createDataSource{ "name":"master","url":"jdbc:mysql://172.16.35.113:3306/v8_games","instanceType":"READ_WRITE","user":"sery","password":"123123"} */;

Query OK, 0 rows affected (0.35 sec)

#添加从库 172.16.35.114、172.16.35.117 ,实例类型为READ##############

mysql> /*+ mycat:createDataSource{ "name":"slave114","url":"jdbc:mysql://172.16.35.114:3306/v8_games","instanceType":"READ","user":"sery","password":"123123"} */;

Query OK, 0 rows affected (0.35 sec)

mysql> /*+ mycat:createDataSource{ "name":"slave114","url":"jdbc:mysql://172.16.35.117:3306/v8_games","instanceType":"READ","user":"sery","password":"123123"} */;

Query OK, 0 rows affected (0.01 sec)

上述SQL语句是以“/*+”开头,以“*/;”结尾,可以写成一整行执行(如图7-15),以可以回车键多行输入,读者可根据自己的习惯自行决定。

图7- 15

 

正确执行完上面三条SQL语句以后,在目录“/usr/local/mycat/conf/datasources”下自动生成三个文本文件,文件名以已经执行的SQL语句中“name”的键值做前缀,如图7-16所示。

 

图7- 16

如果上述SQL语句输入的字符串有错误,可以登录Mycat2宿主系统,用编辑器直接修改字段值。更进一步,对所执行的SQL添加的源不满意,打算修正某些字串值重新执行SQL语句,比较直接的办法是执行“mycat stop”停止Mycat2,然后删除与之对应的数据源文件,再重启Mycat2,远程客户端重新连接Mycat2再次执行SQL语句.

第二步:创建Mycat集群。在本案中,集群成员包括一个主库与两个从库。根据业务场景,也可以创建多个集群,充分、有效的利用系统资源。创建Mycat集群的SQL语句如下:

mysql> /*! mycat:createCluster{"name":"cls01","masters":["master"],"replicas":["slave114","slave117"],"switchType":"NOT_SWITCH"} */;

Query OK, 0 rows affected (0.03 sec)

上述SQL语句执行完以后,将在目录“/usr/local/mycat/conf/clusters”自动生成Mycat集群配置文件“cls01.cluster.json”,其完整内容如图7-17所示。

 

图7- 17

第三步:创建Mycat逻辑数据库。这一步是关键,需要将已经创建好的集群名称、MySQL物理数据库名称(schema)等信息一一对应上。在创建逻辑库之前,先在Mycat交互界面执行数据库查询,看是否存在其它用户数据库,正常情况下,应该不存在其它用户数据库,查询过程及输出应该如图7-18所示。

 

图7- 18

创建逻辑库的具体指令如下:

mysql> /*+ mycat:createSchema{ "schemaName":"v8_games","targetName":"cls01"} */;

Query OK, 0 rows affected (0.27 sec)

执行完这条SQL语句以后,再来查看创建的逻辑库“v8_games”,是否与物理数据库相关联?在物理数据库“v8_games”中,已经存在很多数据表,如果在Mycat交互界面,能查询出这些表单(如图7-19),就表明Mycat的逻辑库与MySQL物理库正确进行了关联。

 

图7- 19

7.3.3 Mycat读写分离功能验证

1)验证MySQL从数据库只读功能

关闭所有MySQL从数据库,仅保留主库可访问。登录Mycat客户端,交互界面执行简单数据表查询。可以看到用户数据库与数据表,但是执行查询操作不能成功,如图7-20所示。

 

图7- 20

启动任意从库,再登录到Mycat交互界面,再执行同样的查询操作,可以得到正确的结果,如图7-21所示。

 

图7- 21

通过上述对比测试,证明了设置的正确性:查询操作确实被分配到MySQL从数据库进行。

2)验证MySQL主数据库写入功能

关闭MySQL主数据,同时将剩下的两个从数据库运行起来,然后在Mycat2的交互界面创建用户数的数据表。这个写入操作将不会成功,在Mycat2的日志文件“logs/wrapper.log”立即就有错误信息写入,如图7-22所示。

图7- 22

 

启动MySQL主数据,重新远程连接Mycat代理,继续在用户数据库“v8_games”下执行数据表(student)的创建,立即可以执行成功,如图7-23所示。

图7- 23

 

直接登录任意MySQL从数据库,查看刚才创建的数据表(student.v8_games)应该被真正生成并被同步到从数据库,如图7-24所示。

图7- 24

 

通过上述对比测试,确认了通过Mycat代理只能对MySQL进行写入操作。

因为要在Mycat层面实现负载均衡,因此,需要将其它主机也部署好Mycat并实现MySQL数据库的读写分离。在Promxox VE超融合平台下,这个操作易如反掌,将已经验证实现MySQL读写分离功能的主机直接克隆出另外一个主机,启动系统后,控制台登录修改主机名、IP地址等,重启系统就可以直接使用。

7.4 Mycat 负载均衡集群

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
MySQL-Mycat读写分离是一种数据库架构设计,它将读操作和写操作分离到不同的数据库节点上,以提高数据库的性能和可扩展性。读写分离的好处包括提高读取性能、减轻主库的负载、增加系统的可用性等。Mycat是一个开源的数据库中间件,它提供了读写分离、分库分表、数据分片等功能,可以作为MySQL数据库的代理服务器。Mycat的架构是基于MySQL的协议进行开发的,它可以将客户端的请求转发到后端的MySQL数据库节点上。在部署Mycat时,需要配置Mycat的部署环境,并启动Mycat服务。如果在启动Mycat时遇到报错,可以查看Mycat的日志文件来定位问题。在测试客户端连接时,可以使用MySQL客户端工具,使用Mycat的账户和密码登录Mycat,并执行select语句来验证连接是否成功。如果客户端连接报错,可以查看Mycat的日志文件来查找错误信息。通过客户端进行测试是否能登录到Mycat上,可以使用mysql命令,指定Mycat的主机地址和端口号来登录,并执行show databases语句来查看数据库列表。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *2* *3* [MySQL-Mycat读写分离](https://blog.csdn.net/qq_45729646/article/details/126568880)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

4/5$全真龙门

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值