mycat

主要配置文件:

server.xml

端口,选举主键生成方式,虚拟逻辑库,虚拟账户

schema.xml

数据库连接,切分规则

rule.xml

每个表的切分规则

mycat不存储数据,不执行sql语句,仅sql路由转发

mycat会把自己虚拟成mysql数据库,用navicat访问mycat就和访问数据库一样

安装mycat

在每个节点上进行安装

安装JDK镜像

docker pull adoptopenjdk/openjdk8
docker tag adoptopenjdk/openjdk8 openjdk8
docker rmi adoptopenjdk/openjdk8

创建Java容器,在数据卷放入MyCat

-it 是放在后台运行暂时不会退出

mycat要用docker主机的网络,要不然连接不上数据库

docker run -d -it --name mycat1 
-v mycat1:/root/server --privileged 
--net=host  
openjdk8
docker run -d -it --name mycat1 -v mycat1:/root/server --privileged --net=host openjdk8

开发linux主机8066和9066端口

firewall-cmd --zone=public --add-port=8066/tcp --permanent
firewall-cmd --zone=public --add-port=9066/tcp --permanent
firewall-cmd --reload

docker service restart

把mycat安装包上传到容器数据卷目录

先查看一下数据卷目录

docker volume inspect 容器名

进到目录解压

tar -xvf Mycat.tar.gz

在docker容器就可以看到mycat了

docker exec -it mycat1 bash

cd ~

cd server

ls

mycat 配置pxc集群负载均衡

负载均衡:执行100条sql语句,每个节点执行250条

打开数据卷目录mycat/conf/sever.xml (在最后97)

配置用户名、密码、虚拟数据库名字

<user name="admin" defaultAccount="true">
    <property name="password">password</property>
    <property name="schemas">neti</property>
</user>

mycat/conf/schema.xml

更改虚拟数据库名字neti,和上面一致

<schema name="neti" checkSQLschema="false" sqlMaxLimit="100">

 为分片A 配置pxc集群负载均衡

<dataHost name="pxc1" maxCon="1000" minCon="10" 
          balance="0"  
          writeType="1" dbType="mysql" dbDriver="native"
          switchType="1"  slaveThreshold="100">

    <heartbeat>select user()</heartbeat>

    <writeHost host="p1w1" url="192.168.31.147:9001" 
               user="root"
               password="abc123456"/>
    <writeHost host="p1w2" url="192.168.31.148:9001" 
               user="root"
               password="abc123456"/>
    <writeHost host="p1w3" url="192.168.31.149:9001" 
               user="root"
               password="abc123456"/>
    <writeHost host="p1w4" url="192.168.31.150:9001" 
               user="root"
               password="abc123456"/>
	
</dataHost>

为分片B配置pxc集群负载均衡

<dataHost name="pxc2" maxCon="1000" minCon="10" balance="0"
          writeType="1" dbType="mysql" dbDriver="native"
          switchType="1"  slaveThreshold="100">

    <heartbeat>select user()</heartbeat>

    <writeHost host="p2w1" url="192.168.31.147:9002" 
               user="root"
               password="abc123456"/>
    <writeHost host="p2w2" url="192.168.31.148:9002" 
               user="root"
               password="abc123456"/>
    <writeHost host="p2w3" url="192.168.31.149:9002" 
               user="root"
               password="abc123456"/>
    <writeHost host="p2w4" url="192.168.31.150:9002" 
               user="root"
               password="abc123456"/>
	
</dataHost>

当balance=0 ,不开启读写分离,所有读操作都发生在当前的writeHost上

当balance=1 ,所有读操作都随机发送到当前的writeHost对应的readHost和备用的writeHost

当balance=2,所有的读操作都随机发送到所有的writeHost,readHost上

当balance=3 ,所有的读操作都只发送到writeHost的readHost上

writeType="0", 所有写操作发送到配置的第一个writeHost,第一个挂了切到还生存的第二个writeHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties .
writeType="1",所有写操作都随机的发送到配置的writeHost。 
writeType="2",没实现。

switchtype属性如下(控制自动切换的)

<heartbeat>心跳检测,发生sql语句检测节点是否宕机,sql语句select 1也行,无所谓

主从数据库同步,从库落后主库100s,mycat剔除从节点,不从该节点读数据

slaveThreshold="100" 

配置replication读写分离

先学习第一个方案,第二个双rerplication同步再说

如果 replication 写节点宕机,mycat不会从它下面的从节点读数据

<dataHost name="rep1" maxCon="1000" minCon="10" balance="3"
          writeType="1" dbType="mysql" dbDriver="native"
          switchType="1"  slaveThreshold="100">

    <heartbeat>select user()</heartbeat>

    <writeHost host="r1w1" url="192.168.31.147:9003" 
               user="root"
               password="abc123456">
        <readHost host="r1r1" url="192.168.31.148:9003" 
               user="root"
               password="abc123456"/>
        <readHost host="r1r2" url="192.168.31.148:9003" 
               user="root"
               password="abc123456"/>
        <readHost host="r1r3" url="192.168.31.148:9003" 
               user="root"
               password="abc123456"/>
    </writeHost>
	
</dataHost>
<dataHost name="rep2" maxCon="1000" minCon="10" balance="3"
          writeType="1" dbType="mysql" dbDriver="native"
          switchType="1"  slaveThreshold="100">

    <heartbeat>select user()</heartbeat>

    <writeHost host="r2w1" url="192.168.31.147:9004" 
               user="root"
               password="abc123456">
        <readHost host="r2r1" url="192.168.31.148:9004" 
               user="root"
               password="abc123456"/>
        <readHost host="r2r2" url="192.168.31.148:9004" 
               user="root"
               password="abc123456"/>
        <readHost host="r2r3" url="192.168.31.148:9004" 
               user="root"
               password="abc123456"/>
    </writeHost>
	
</dataHost>

读节点 放在 写节点里面

 配置虚拟库和虚拟表

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值