一、部署规划
1、mycat部署规划
名称 | IP | 角色 | 端口 | 容器 | 数据卷 |
---|---|---|---|---|---|
v-pub | 192.168.78.200 | 主节点 | 8066、9066 | mycat_1 | mycat_1 |
v2 | 192.168.78.102 | 备用节点 | 8066、9066 | mycat_2 | mycat_2 |
2、已经配置好的PXC集群
名称 | IP | 端口 | 数据卷 | 角色 |
---|---|---|---|---|
v2 | 192.168.78.102 | 3306 | vv2 | 管理节点 |
v3 | 192.168.78.103 | 3306 | vv3 | 工作节点 |
v4 | 192.168.78.104 | 3306 | vv4 | 工作节点 |
v5 | 192.168.78.105 | 3306 | vv5 | 工作节点 |
3、已经配置好的replication集群
名称 | IP | 端口 | 容器 | 数据卷 | 角色 |
---|---|---|---|---|---|
v2 | 192.168.78.102 | 3307 | rep_v2 | rep_v2 | 主节点 |
v3 | 192.168.78.103 | 3307 | rep_v3 | rep_v3 | 从节点 |
v4 | 192.168.78.104 | 3307 | rep_v4 | rep_v4 | 从节点 |
v5 | 192.168.78.105 | 3307 | rep_v5 | rep_v5 | 从节点 |
二、安装mycat
1、下载java openjdk镜像
mcyat是基于java运行的,因此还需要安装下java。
# 在v2和v-pub分别执行下面命令
docker pull adoptopenjdk/openjdk8
docker tag adoptopenjdk/openjdk8 openjdk8
docker rmi adoptopenjdk/openjdk8
2、创建java容器
# 在v-pub中执行
docker run -itd -v mycat_1:/root/server --privileged --net=host --name=mycat_1 openjdk8
# 在v2中执行
docker run -itd -v mycat_2:/root/server --privileged --net=host --name=mycat_2 openjdk8
3、查看java容器数据卷位置
# 在v-pub执行
docker volume inspect mycat_1
# 在v2执行
docker volume inspect mycat_2
4、进入数据卷,并下载mycat包
# 在v-pub执行
cd /var/lib/docker/volumes/mycat_1/_data
wget http://dl.mycat.org.cn/1.6.7.4/Mycat-server-1.6.7.4-release/Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz
# 在v2执行
cd /var/lib/docker/volumes/mycat_2/_data
wget http://dl.mycat.org.cn/1.6.7.4/Mycat-server-1.6.7.4-release/Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz
5、解压mycat包
# 解压缩mycat包
tar -xzvf Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz
# 将压缩包删除
rm -rf Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz
三、对mycat进行配置
配置文件路径:
# v2主机上的路径
/var/lib/docker/volumes/mycat_2/_data/mycat/conf/
# v-pub主机上的路径
/var/lib/docker/volumes/mycat_1/_data/mycat/conf/
1、mycat到底是什么
mycat是MySQL数据库中间件产品,运行的时候会把自己虚拟成MySQL数据库,包括虚拟的逻辑库、虚拟的数据表、虚拟的账户
我们可以直接用navicat连接mycat,和访问正常的数据库是相同的
我们把SQL语句交给mycat执行,mycat会把这个SQL语句路由给MySQL去执行。
在启动mycat之前,我们必须先配置好mycat,让它有虚拟的逻辑库、虚拟的数据表、虚拟的账户。这样我们才可以使用mycat
2、配置server.xml
可以配置端口号、账户信息、全局主键方式等。
<user name="root" defaultAccount="true">
<property name="password">123456</property>
<property name="schemas">new_retail</property>
</user>
3、配置schema.xml
-
pxc集群每个节点地位相同,都是可读可写,因此需要做负载均衡。
-
replication集群分主从,主写从读,因此需要做读写分离。
(1)pxc负载均衡配置:
<!--pxc集群负载均衡-->
<dataHost name="pxc" maxCon="1000" minCon="10" balance="0" writeType="1" dbType="mysql" dbDriver="native"
switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<!--v2节点-->
<writeHost host="pxc_v2" url="192.168.78.102:3306" user="root" password="123456" />
<!--v3节点-->
<writeHost host="pxc_v3" url="192.168.78.103:3306" user="root" password="123456" />
<!--v4节点-->
<writeHost host="pxc_v4" url="192.168.78.104:3306" user="root" password="123456" />
<!--v5节点-->
<writeHost host="pxc_v5" url="192.168.78.105:3306" user="root" password="123456" />
</dataHost>
(2)replication读写分离配置:
<!--replication读写分离-->
<dataHost name="replication" maxCon="1000" minCon="10" balance="3" writeType="1" dbType="mysql" dbDriver="native"
switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<!--一主三从,v2为master,v3、v4、v5为slave-->
<writeHost host="rep_v2" url="192.168.78.102:3307" user="root" password="123456">
<readHost host="rep_v3" url="192.168.78.103:3307" user="root" password="123456" />
<readHost host="rep_v4" url="192.168.78.104:3307" user="root" password="123456" />
<readHost host="rep_v5" url="192.168.78.105:3307" user="root" password="123456" />
</writeHost>
</dataHost>
(3)虚拟逻辑库和关系表配置:
因为mycat并不存储数据,它只是个SQL语句的路由器,而且mycat并不是默认接管数据上的所有数据表,哪张数据表需要被mycat接管,就需要把它配置到虚拟逻辑库中,以虚拟数据表的形式存在。
因为水平切分会把数据切分存储到不同的MySQL节点上,所以mycat就提出了虚拟表这个概念。
我们设置一个虚拟的商品表,当我们用SQL语句查询虚拟表中近三天上架的商品,mycat就会从多个MySQL真实商品表里获取数据,然后合并成结果集。
当我们往虚拟表里保存数据的时候,mycat会把数据切分存储到不同的MySQL节点上。
有了虚拟表之后,我们只需要对虚拟表做正常的读写操作,mycat就会把这些操作转换成真实的MySQL节点的数据库操作,让我们远离了底层的实现细节。
到这里,mycat的基本配置就完成了。
四、mycat错误日志
# 通过查看mycat容器数据卷,找到mycat路径
docker volume inspect mycat
查找结果:/var/lib/docker/volumes/mycat_2/_data/mycat/logs
注:mycat中文手册 http://www.mycat.org.cn/document/mycat-definitive-guide.pdf