数据库中间件:CentOS7下MyCat实现读写分离(二)

CentOS7下MyCat实现读写分离

环境说明
Centos版本: CentOS Linux release 7.7.1908 (Core)
Linux连接工具:SecureCRT
MySQL Version: 5.7.28
主库主机地址:192.168.163.61
从库主机地址:192.168.163.62
参考文档:https://dev.mysql.com/doc/refman/5.7/en/replication.html
MyCat安装在主库主机
MyCat版本:Mycat-server-1.6.7.3-release
MyCat参考文档:http://www.mycat.io 里面有下载地址

安装配置MyCat

  • 把下载好的MyCat上传并解压到指定目录
#上传到opt目录,解压到/usr/local目录(我们自己的软件一般都安装到这个目录)
[root@localhost opt]# ls
Mycat-server-1.6.7.3-release-20190927161129-linux.tar.gz
[root@localhost opt]# pwd
/opt
#解压到指定目录
[root@localhost opt]# tar -xzvf Mycat-server-1.6.7.3-release-20190927161129-linux.tar.gz -C /usr/local/
[root@localhost opt]# cd /usr/local/
[root@localhost local]# ls
bin  etc  games  include  lib  lib64  libexec  Mycat-1.6.7.3  mysql  sbin  share  src

详细讲解几个主要的配置文件:
conf目录下面:
server.xml:这里面可以配置mycat的端口号,和连接用户和密码
schema.xml:中配置逻辑库、数据节点,数据主机
rule.xml:
log目录下面
wrapper.log:tail -n 100 logs/wrapper.log 可以查看mycat的日志信息:MyCAT Server startup successfully. see logs in logs/mycat.log代表mycat启动成功

  • 为MyCat创建单独的系统用户
#创建用户
[root@localhost Mycat-1.6.7.3]# useradd mycat
#设置密码
[root@localhost Mycat-1.6.7.3]# passwd mycat  
Retype new password: 
passwd: all authentication tokens updated successfully.
修改mycat安装目录的所有者为mycat
[root@localhost Mycat-1.6.7.3]# chown -R mycat:mycat /usr/local/Mycat-1.6.7.3
#切换当前用户为mycat
[root@localhost Mycat-1.6.7.3]# su mycat
#启动MyCat
[root@localhost Mycat-1.6.7.3]# ./bin/mycat start
Starting Mycat-server...
#查看日志信息,启动成功
[root@localhost Mycat-1.6.7.3]# tail -n 10 logs/wrapper.log 
STATUS | wrapper  | 2020/01/02 18:08:50 | --> Wrapper Started as Daemon
STATUS | wrapper  | 2020/01/02 18:08:50 | Launching a JVM...
INFO   | jvm 1    | 2020/01/02 18:08:50 | OpenJDK 64-Bit Server VM warning: ignoring option MaxPermSize=64M; support was removed in 8.0
INFO   | jvm 1    | 2020/01/02 18:08:51 | Wrapper (Version 3.2.3) http://wrapper.tanukisoftware.org
INFO   | jvm 1    | 2020/01/02 18:08:51 |   Copyright 1999-2006 Tanuki Software, Inc.  All Rights Reserved.
INFO   | jvm 1    | 2020/01/02 18:08:51 | 
INFO   | jvm 1    | 2020/01/02 18:09:01 | MyCAT Server startup successfully. see logs in logs/mycat.log

MyCat目录/bin命令有:
启动MyCat: ./mycat start 
查看启动状态:./mycat status 
停止: ./mycat stop 
重启: ./mycat restart 
启动并控制台打印日志:./mycat console

MyCat配置读写分离

  • 修改schema.xml 文件
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
    <!-- 注意:里面的元素一定要按 schema 、dataNode 、 dataHost的顺序配置 -->
	<!-- schema 逻辑库:mycat数据服务中定义和管理的数据库 -->
    <schema name="myorders" checkSQLschema="false" sqlMaxLimit="100"
	dataNode="mydn1">
		
	</schema>
    <!-- dataNode数据节点,逻辑表分片的存放节点 -->
	<dataNode name="mydn1" dataHost="dhhost1" database="orders" />
	<dataNode name="mydn2" dataHost="dhhost2" database="orders" />
	<!-- 读写分离第一种配置方式 -->
	<!--dataHost:数据主机,数据节点所在的主机 -->
    <dataHost name="dhhost1" maxCon="1000" minCon="10" balance="1"
			  writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
		<heartbeat>select user()</heartbeat>
		<writeHost host="hostM1" url="192.168.163.61:3306" user="root" password="Root2020.">
			<readHost host="hostS1" url="192.168.163.62:3306" user="root" password="Root2020.">
			</readHost>
		</writeHost>
	</dataHost>
	<!-- 读写分离第二种配置方式 -->
	<dataHost name="dhhost2" maxCon="1000" minCon="10" balance="1"
			  writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
		<heartbeat>select user()</heartbeat>
		<writeHost host="hostM2" url="192.168.163.61:3306" user="root" password="Root2020.">			
		</writeHost>
		<writeHost host="hostS2" url="192.168.163.62:3306" user="root" password="Root2020.">			
		</writeHost>
	</dataHost>
</mycat:schema>
<!--
配置文件说明:
(1)设置 balance="1"与writeType="0"
Balance参数设置:
    1. balance=“0”, 所有读操作都发送到当前可用的writeHost上。
    2. balance=“1”,所有读操作都随机的发送到readHost。
    3. balance=“2”,所有读操作都随机的在writeHost、readhost上分发
WriteType参数设置:
    1. writeType=“0”, 所有写操作都发送到可用的writeHost上。
    2. writeType=“1”,所有写操作都随机的发送到readHost。
    3. writeType=“2”,所有写操作都随机的在writeHost、readhost分上发。
     “readHost是从属于writeHost的,即意味着它从那个writeHost获取同步数据,因此,当它所属的writeHost宕机了,则它也不会再参与到读写分离中来,即“不工作了”,这是因为此时,它的数据已经“不可靠”了。基于这个考虑,目前mycat 1.3和1.4版本中,若想支持MySQL一主一从的标准配置,并且在主节点宕机的情况下,从节点还能读取数据,则需要在Mycat里配置为两个writeHost并设置banlance=1。”

(2)设置 switchType="2" 与slaveThreshold="100"
 switchType指的是切换的模式,目前的取值也有4种(主从服务器下,当主服务器出现问题,选取从服务器的策略):
    1. switchType='-1' 表示不自动切换
    2. switchType='1' 默认值,表示自动切换
    3. switchType='2' 基于MySQL主从同步的状态决定是否切换,心跳语句为 show slave status
    4. switchType='3'基于MySQLgalary cluster的切换机制(适合集群)(1.4.1),心跳语句为 show status like 'wsrep%'。
   Mycat心跳检查语句配置为 show slave status ,dataHost 上定义两个新属性: switchType="2" 与slaveThreshold="100",此时意味着开启MySQL主从复制状态绑定的读写分离与切换机制。
  Mycat心跳机制通过检测 show slave status 中的 "Seconds_Behind_Master", "Slave_IO_Running", "Slave_SQL_Running" 三个字段来确定当前主从同步的状态以及Seconds_Behind_Master主从复制时延。
(3) password加密(1.4.1版本以后开始支持),我们在配置的的时候最好使用加密密码不要使用铭文密码:
       加密方法,在文章末尾单独讲解
->
  • 修改server.xml文件
<!--
            这个地方可以配置登录的端口号
			<property name="serverPort">8066</property> <property name="managerPort">9066</property> 
			<property name="idleTimeout">300000</property> <property name="bindIp">0.0.0.0</property>
			<property name="dataNodeIdleCheckPeriod">300000</property> 5 * 60 * 1000L; //连接空闲检查
			<property name="frontWriteQueueSize">4096</property> <property name="processors">32</property> -->
<!--这个地方配置MyCat登录的账号和密码-->
<user name="root" defaultAccount="true">
		<property name="password">Root2020.</property>
        <!--这个地方配置MyCat逻辑库-->
		<property name="schemas">myorders</property>
		
		<!-- 表级 DML 权限设置 
        dml:0110四个数字位分别表示:insert update select delete
        -->
		<!-- 		
		<privileges check="false">
			<schema name="TESTDB" dml="0110" > 这四个数字分别代表:insert update select delete
				<table name="tb01" dml="0000"></table>
				<table name="tb02" dml="1111"></table>
			</schema>
		</privileges>		
		 -->
	</user>
  • 重启MyCat服务
#启动MyCat
[root@localhost Mycat-1.6.7.3]# ./bin/mycat start
Starting Mycat-server...
#查看日志信息,启动成功
[root@localhost Mycat-1.6.7.3]# tail -n 10 logs/wrapper.log 
STATUS | wrapper  | 2020/01/02 18:08:50 | --> Wrapper Started as Daemon
STATUS | wrapper  | 2020/01/02 18:08:50 | Launching a JVM...
INFO   | jvm 1    | 2020/01/02 18:08:50 | OpenJDK 64-Bit Server VM warning: ignoring option MaxPermSize=64M; support was removed in 8.0
INFO   | jvm 1    | 2020/01/02 18:08:51 | Wrapper (Version 3.2.3) http://wrapper.tanukisoftware.org
INFO   | jvm 1    | 2020/01/02 18:08:51 |   Copyright 1999-2006 Tanuki Software, Inc.  All Rights Reserved.
INFO   | jvm 1    | 2020/01/02 18:08:51 | 
INFO   | jvm 1    | 2020/01/02 18:09:01 | MyCAT Server startup successfully. see logs in logs/mycat.log

MyCat用户和数据库密码加密

在mycat-1.4.1版本以后开始支持对密码加密,在/usr/local/Mycat-1.6.7.3/lib目录下有一个jar包:Mycat-server-1.6.7.3-release.jar提> 供了加密方法:
用户加密: java -cp Mycat-server-1.6.7.3-release.jar io.mycat.util.DecryptUtil 0:root:Root2020.
dataHost加密:java -cp Mycat-server-1.6.7.3-release.jar io.mycat.util.DecryptUtil 1:hostS2:root:Root2020.
输入命令后,会有相应的提示信息

#加密命令
[mycat@localhost lib]$ java -cp Mycat-server-1.6.7.3-release.jar io.mycat.util.DecryptUtil 0:root:Root2020.       
其中 0:user:password是加密字符串,有两种格式
dataHost加密格式
1:hostM1:root:123456
1代表是dataHost加密
hostM1是<writeHost host="hostM1" 
root是user="root"
123456是 password=明文密码(123456)
对应writeHost配置
                <writeHost host="hostM1" url="localhost:3306" user="root"                                   password="BpkNIjF7LfzS1C76HT7B1bJgmGIDtPihqIvHBlC92L1IFqsMfoJEMk1EkxSzjasWB4GWoUcODYO4AaJstdAp5w==" usingDecrypt="1">
                        <!-- can have multi read hosts -->
                </writeHost>
mycat用户登录密码加密格式
0:root:123456
0代表mycat用户登录密码加密
        <user name="root" defaultAccount="true">
                <property name="usingDecrypt">1</property>
                <property name="password">d6D+pOmkuUoY09p4/aivwMsScLa7zfjIwAxvkEhr3v7en06mEXoX9DTTjQNug5CfvGf7Wy9oLcthYI3yLMSjIg==</property>
                <property name="schemas">TESTDB</property>
##生成的加密密文
A+OX6CDyAa/ipM9DvV2us9l9p/FRQLPaesX9LM39+U94Nk11HWNZ+kieVkpoCxqzsqxCGJ0UUxirZQDBbf5jBA==
原创文章 25 获赞 0 访问量 1824

猜你喜欢

转载自blog.csdn.net/ttf0203/article/details/103810541