新零售-使用mycat数据库中间件

一、部署规划

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