实现MySQL群集读写分离

2020-12-29 18:53河南郭建伟
网络安全和信息化 2020年5期
关键词:主从配置文件端口

■ 河南 郭建伟

编者按:MyCat是一个新颖的数据库中间件,其支持事务和ACID,可以替代MySQL的加强版数据库,可以实现企业级MySQL数据库集群,是融合了内存缓存技术、NoSQL技术和HDFS大数据的新型SQL Server,结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品。

安装和配置MyCat

在安装MyCat之前,首先需要执行“vi/etc/hosts”命令,将所有相关主机名和IP地址绑定起来。之后下载Sun JDK组件,例如执行“tar zxvf/jdk-8u171-linux-x64.tar.gz”命令将其解压。

之后下载MyCat组件,执行“tar zxvf Mycatserver-1.x-linux.tar.gz”命令,将其解压,其中的“x”表示具体的版本信息。这里将JDK和MyCat均解压到“/mysql/app”目录中。执行“vi~/.bashrc”命令,输入“export JAVA_HOME=/mysql/app/jdk1.8.0_171”,“expo rt$JAVA_HOME/bin:$PATH”行,来设置环境变量,注意这是将这些环境变量权限控制到当前用户级别。

执行“vi/etc/profile”命令,输入“export JAVA_HO ME=/mysql/app/jdk1.8.0_1 71”,“export JRE_HOME=$JA VA_HOME/jre”,“export MYC AT_HOME=/mysql/app/mycat”,“export CLASSPATH=.:$J AVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH”,“export PATH=$JAVA_HOME/bin:$MYCAT_HOME:$JRE_HOME/bin:$PATH”等行,设置针对所有用户的环境变量。

执行“java -version”命令,查看Java版本信息。执行“groupadd mycat”,“useradd -g mycat mycat”,“cd/mysql/app”,“chrown-R mycat mycat/mysql/app/mycat ”,“pass mycat”等命令,来创建所需的用户组和账户信息。进入MyCat安装路径下的“bin”目录,执行“./startup_nowrap.sh”命令,可以手动启动MyCat。也可以执行“mycat console”命令,检测前台启动是否报错。执行“mystop”,“mycat start”命令,来停止和启动MyCat。

如果想让MyCat自动运行,可以执行“vi/usr/lib/systemd/system/mycat.service”命令,在其中输入“[Unit]”,“Description=Mycat Datab ase”,“Descripton=mycat”,“After=syslog.target”,“after=network.target”,“[Service]”,“Type=simple”,“Restart=on-abort”,“PIDFile=/mysql/app/logs/mycat.pid”,“ExecStart=/mysql/app/mycat/bin/myca t start”,“PrivateTmp=tru e”,“[Install]”,“WantedBy=multi-user.target”行,之后保存该文件。

执行“systemctl enable mycat”,“systemctl daemon-reload”,“systemctl start mycat”命令,可以让MyCat跟对系统启动自动运行。当其启动后,执行“ps-ef|grep mycat”命令,可以查看MySQL的启动信息。

对于MyCat,默认使用的端口为TCP 8066,MyCat利用该端口接收数据库客户端的访问请求,其管理端口为TCP 9066,用来接收MyCat监控命令,查询MyCat运行状态,重新加载配置文件等。

执行“netstat -tnlp”命令,可以查看端口信息。也可以执行“ss -lntup|grep java”命令,也可以显示上述端口信息。

搭建简单实验环境

对于MyCat来说,是通过配置文件的方式,来定义逻辑库和相关配置的,其主要包括MyCat安装路径下的“conf”目录中的“schema.xml”,“rule.xml”和“serve r.xml”等配置文件。在“schema.xml”文件中定义来逻辑库,表以及分片节点等内容,对应的是物理数据库和数据库表的配置。在“rule.xml”文件中定义分片(即分库分表)规则,在“server.xml”文件中定义用户以及系统相关变量配置文件,账号以及参数等。

在本例中就在MySQL主动复制的基础上实现读写分离操作,在“server01”上部署MyCat,其IP为172.16.1.100,在“serverdb 01”到“serverdb03”主机上安装MySQL,其IP从172.16.1.51到172.16.1.5 3,其中“serverdb01”为Master节点,其余两台作为Slave节点。

在默认情况下,在从节点上实现读操作,在主节点上实现写操作。

注意,在MySQL主动复制配置中,如果涉及到函数或者存储过程的同步复制的话,需要在“my.cnf”文件中的“mysqld”段中添加“log_bin_trust_function_creators=true”行,也可以在客户端执行“set global bin_trust_function_creators=1”命令进行配置。如果要执行读写分离下的主从切换(例如主节点出现故障等),那么某个从节点有可能变成主节点,因此在从节点上就不能设置为只读“read_only=1”参数。

为了防止因为大小写不明确导致找不到表的问题,可以在“/etc/my.cnf”文件中的“mysqld”段添加“lower_case_table_names=1”行。对于如何配置MySQL主动复制,这里限于篇幅就不在赘述了,其主要步骤是先准备主从二进制和中断日志目录。

之后在主从节点上配置“my.cnf”文件,准备主库和从库参数。

注意,其中的“autocommit=0”行需要屏蔽,启用自动提交功能,否则数据无法提交到后端。

接着在主从节点创建用于复制操作的账户并授权,最后在从库上使Slave和Master节点建立连接。

配置MyCAT逻辑库信息

进入MyCat中的“conf”目录,执行“vi schema.xml”命令,在其中添加“”,“”,“”行,来创建名为“mycatdb1”,“mycatdb2”和“mycatdb3的逻辑库。

这些逻辑库仅仅在MyCat中可见,并不是真正意义上的数据库。

注意,其中“checkSQLschema”参数用来检查并过滤SQL中包含Schema的情况。

“sqlMaxLimit”参数设置默认返回的最大记录数。“dataNode”参数定义数据节点名称。添加“”,“”,“”行,用来定义个数据节点对应的数据主机名称和数据库名称。

输 入“”,“”,“”行,来执行读写分离的配置,其中的“xxx”表示具体的密码。Schema中的每一个DataHost的Host的值必须唯一,否则将会出现主从在所有DataHost中全部切换的现象。这里定义的数据主 机 名 为“mydatahost1”,连接到MySQL主动结构中的Master节点,并指定其MySQL账户名和密码。

输 入“”,“”,“”,“”,“”,“”,“”行,使用MyCat托管MySQL主动切换,定义数据主机名称,连接到MySQL读写分离集群,配置读写分离和主从切换参数。

配置MyCat账户权限和日志信息

进入MyCat中的“conf”目 录,执 行“vi server.xml”命 令,输 入“”,“ xxx”,“MyCATdb 1,MyCATdb2,MyCATdb3”行,定义所需的账户(这里为“adminuser”)和密码,其拥有Root权限,用来登录MyCat逻辑库,来管理后端的数据节点,与之对应的是MySQL主从群集。实现数据的读写分离。

输 入“”,“schema name="TESTDB" dml="0110">”,“”,“”,“”,“”,“”行,针对特定的数据库中的表,设置所需的权限,例如对于“TESTDB”数据库来说,允许执行删除和修改操作,禁止增加和和删除操作。对于“tb02”表来说,允许对其执行增删改查操作,“0”对应禁止操作,“1”对应允许操作。这样,可以实现对用户Schema及其下的Table进行精细化的DML权限控制,

DML权限设置设置顺序为“insert”,“update”,“select” 和“delete”。Privileges节点中的“check”属性用来标识是否开启DML权限检 查,默认为“false”不进行检查。输入“”,“xxx”,“MyCATdb 1,MyCATdb2,MyCATdb3”,“true”,“”行,用来设置普通用户(这里为“user1”)及其密码信息,使其只能拥有读取权限,其中的“xxx”表示不同账户各自的具体密码。进入MyCat中的“conf”目录,执行“vi log4j2.xml”命令,将其中的“”行修改为“”,将MyCat的日志输出级别修改为“debug”,便于进行调试。

使用MyCat实现群集读写分离

例如,执行“mysql-uadminuser -pxxx -P9066-h172.16.1.100”命令,使用上述定义的管理用户在客户端连接MyCat。连接完成后,执行“show databases;”命令,显示逻辑库信息。执行“show@@heartbeat;”命令,显示心跳信息。执行“show@@datasource;”命令,显示数据源信息。执行“mysql-uadminuser -pxxx -P8066-h172.16.1.100”命令,可以连接MyCat业务系统。执行“show databases;”命令,查看数据库信息。

注意,这里并没有使用MySQL的Root账户,有利于提高访问的安全性。

执行“use mycatdb1;”命令,切换到指定的逻辑库中,执行“show tables;”命令,查看其中的表信息。您可以根据需要,在数据库中执行各种操作。

如果其中一台MySQL宕 机,可以执行“mysql-uadminuser -pxxx -P8066-h172.16.1.100 -e "select@@hostname";”命令,来进行测试,发现数据库依然可以正常访问。

如果是MySQL群集中的Mastsr主机宕机,可以切换到“serverdb02”主机上,让其顶替Mastere工作。之后将上述“schema.xml”中的““”修改为“”。将“”修 改为“”,对心跳方式进行修改。并且添加添加诸如“”行,让“serverdb02”主机主机可以在Master出现故障时进行顶替。之后执行“mycat restart”命令,重启MyCat进行测试即可。

猜你喜欢
主从配置文件端口
基于Docker的实时数据处理系统配置文件管理软件的设计与实现
一种有源二端口网络参数计算方法
从Windows 10中删除所有网络配置文件
一种端口故障的解决方案
用软件处理Windows沙盒配置文件
Antarctica's pretty pink snow
Boy dresses up to honor school security officer
多按键情况下,单片机端口不足的解决方法
互不干涉混用Chromium Edge
现有网络架构及迁移方案