server.xml配置
# server.xml配置
Mycat 服务系统配置文件。
# user标签
这个标签主要用于定义登录 Mycat 的用户和权限。例如下面的例子中,我们定义了一个用户,用户名为 user、密码为 123456,可访问的 schema为tb_order。
<user name="user">
<property name="password">123456</property>
<property name="schemas">tb_order</property>
<property name="readOnly">true</property>
<property name="defaultSchema">tb_order</property>
</user>
# firewall标签
防火墙,配置系统的黑白名单。
<firewall>
<!-- ip白名单 用户对应的可以访问的 ip 地址 -->
<whitehost>
<host host="127.0.0.*" user="root"/>
<host host="127.0.*" user="root"/>
<host host="127.*" user="root"/>
<host host="1*7.*" user="root"/>
</whitehost>
<!-- 黑名单允许的 权限 后面为默认 -->
<blacklist check="true">
<property name="selelctAllow">false</property>
<property name="selelctIntoAllow">false</property>
<property name="updateAllow">false</property>
<property name="insertAllow">false</property>
<property name="deletetAllow">false</property>
<property name="dropAllow">false</property>
</blacklist>
</firewall>
# 全局序列号
在实现分库分表的情况下,数据库自增主键已无法保证自增主键的全局唯一。为此,Mycat 提供了全局 sequence
,并且提供了包含本地配置和数据库配置等多种实现方式。
<system>
<property name="sequnceHandlerType">0</property>
</system>
- 0:表示使用本地文件方式
- 1:表示使用数据库方式生成
- 2:表示使用本地时间戳方式
- 3:表示基于ZK与本地配置的分布式ID生成器
- 4:表示使用zookeeper递增方式生成
# 本地文件
此方式 Mycat 将 sequence
配置到文件中,当使用到 sequence
中的配置后,Mycat 会更新下 classpath
中的 sequence_conf.properties
文件中 sequence
当前的值。
# default global sequence
GLOBAL.HISIDS=
GLOBAL.MINID=10001 # 最小ID
GLOBAL.MAXID=20000 # 最大ID
GLOBAL.CURID=10000 # 当前ID
# self define sequence
COMPANY.HISIDS=
COMPANY.MINID=1001
COMPANY.MAXID=2000
COMPANY.CURID=1000
ORDER.HISIDS= # ORDER是一张表
ORDER.MINID=1001
ORDER.MAXID=2000
ORDER.CURID=1000
# 数据库方式
在数据库中建立一张表,存放 sequence
名称(name),sequence
当前值(current_value),步长(increment) 等信息。表结构如下:
CREATE TABLE MYCAT_SEQUENCE (
name VARCHAR(64) NOT NULL,
current_value BIGINT(20) NOT NULL,
increment INT NOT NULL DEFAULT 1,
PRIMARY KEY (name)
) ENGINE = InnoDB;
# 本地时间戳方式
ID为64 位二进制 ,42(毫秒)+5(机器 ID)+5(业务编码)+12(重复累加)
换算成十进制为 18 位数的 long 类型,每毫秒可以并发 12 位二进制的累加。
在 Mycat 下配置sequence_time_conf.properties
文件
WORKID= # 0-31 任意整数
DATAACENTERID= #0-31 任意整数
每个Mycat 配置的 WORKID、DATAACENTERID 不同,组成唯一标识,总共支持32*32=1024 种组合。
# 分布式 ZK ID 生成器
Zk 的连接信息统一在 myid.properties 的
zkURL 属性中配置。基于 ZK 与本地配置的分布式 ID 生成器,InstanceID可以通过ZK自动获取,也可以通过配置文件配置。在sequence_distributed_conf.properties
,只要配置INSTANCEID=ZK就表示从 ZK 上获取 InstanceID。
ID 最大为63位二进制,可以承受单机房单机器单线程 1000*(2^6)=640000 的并发。结构如下
- current time millis(微秒时间戳 38 位,可以使用 17 年)
- clusterId(机房或者 ZKid,通过配置文件配置,5 位)
- instanceId(实例 ID,可以通过 ZK 或者配置文件获取,5 位)
- threadId(线程 ID,9 位)
- increment(自增,6 位)
# ZK 递增方式
Zk 的连接信息统一在 myid.properties
的 zkURL 属性中配置。需要配置sequence_conf.properties
文 件 :
- TABLE.MINID,某线程当前区间内最小值
- TABLE.MAXID,某线程当前区间内最大值
- TABLE.CURID,某线程当前区间内当前值