mycat 安装和水平分表

发布时间:2024年01月03日

1.拉取需要创建docker版的mycat资源

# 下载对应的资源
git clone https://github.com/ruanjiayu/docker.mycat
# 进入docker.mycat
cd /home/cluster/mycat/docker.mycat
# 构建镜像
docker-compose build

2.修改配置

vim config/mycat/schema.xml

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">

	<schema name="dtu_prod" dataNode="dataNode1" checkSQLschema="true" sqlMaxLimit="100">
		<!--subTables="boards_$0-127"-->
		<table
				name="device_record"
				dataNode="dataNode1,dataNode2"
				rule="mod-long"/>
	</schema>

	<dataNode name="dataNode1" dataHost="dataHost1" database="dtu_prod" />
	<dataNode name="dataNode2" dataHost="dataHost2" database="dtu_prod" />

	<dataHost name="dataHost1" maxCon="1000" minCon="10" balance="0"
			  writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1" slaveThreshold="100">
		<heartbeat>select user()</heartbeat>
		<writeHost
				host="ip"
				url="jdbc:mysql://ip:1003?useSSL=false&amp;serverTimezone=UTC&amp;characterEncoding=utf8"
				user="xxxx" password="xxxx">
		</writeHost>
	</dataHost>
	<dataHost name="dataHost2" maxCon="1000" minCon="10" balance="0"
			  writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1" slaveThreshold="100">
		<heartbeat>select user()</heartbeat>
		<writeHost
				host="ip"
				url="jdbc:mysql://ip:1004?useSSL=false&amp;serverTimezone=UTC&amp;characterEncoding=utf8"
				user="xxxx" password="xxxx">
		</writeHost>
	</dataHost>

</mycat:schema>


?? ?balance
?? ??? ?0, 不开启读写分离机制,所有读操作都发送到当前可用的writeHost上。
?? ??? ?1,全部的readHost与stand by writeHost参与select语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且M1与M2互为主备),正常情况下,M2,S1,S2都参与select语句的负载均衡。
?? ??? ?2,所有读操作都随机的在writeHost、readhost上分发。
?? ??? ?3,所有读请求随机的分发到wiriterHost对应的readhost执行,writerHost不负担读压力

?? ?writeType 表示写模式
?? ??? ?0,所有的操作发送到配置的第一个writehost
?? ??? ?1,随机发送到配置的所有writehost
?? ??? ?2,不执行写操作

?? ?switchType 指的是切换的模式,目前的取值也有4种:
?? ??? ?-1,表示不自动切换
?? ??? ? 1,默认值,表示自动切换
?? ??? ? 2,基于MySQL主从同步的状态决定是否切换,心跳语句为show slave status
?? ??? ? 3,基于MySQL galary cluster的切换机制(适合集群)(1.4.1),心跳语句为show status like ‘wsrep%‘。
??

3.rule.xml配置

	<tableRule name="mod-long">
		<rule>
			<columns>record_id</columns>
			<algorithm>mod-long</algorithm>
		</rule>
	</tableRule>

?columns 表主键字段名


	<function name="mod-long" class="io.mycat.route.function.PartitionByMod">
		<!-- how many data nodes -->
		<property name="count">2</property>
	</function>

?要分片的数据库节点数量 我这边分成2个表

4.配置docker-compose.yml

version: '3'
services:
  mycat:
    build: .
    container_name: mycat
    volumes:
      - ./config/mycat/:/mycat/conf/:ro
      - ./log/mycat-logs/:/mycat/logs/:rw
      #- /etc/localtime:/etc/localtime:ro
      - ./config/hosts:/etc/hosts:ro
    ports:
      - "8066:8066"
      - "9066:9066"
    ulimits:
      nproc: 65535
    hostname: mycat
#    mem_limit: 1024m
    restart: always

?5.设置mycat的用户名,密码以及数据库名称

vim config/mycat/server.xml


    <!-- Mycat 数据库用户名 -->
    <user name="root">
        <!-- Mycat 数据库密码 -->
        <property name="password">xxxx</property>

        <!-- Mycat 数据库名 -->
        <property name="schemas">dtu_prod</property>

        <!-- 是否使用加密的密码,0 表示不使用加密的密码 -->
        <property name="usingDecrypt">0</property>

    </user>

?6.构建

docker-compose up -d

文章来源:https://blog.csdn.net/qq_36949713/article/details/135368221
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。