万隆的笔记 万隆的笔记
博文索引
笔试面试
  • 在线学站

    • 菜鸟教程 (opens new window)
    • 入门教程 (opens new window)
    • Coursera (opens new window)
  • 在线文档

    • w3school (opens new window)
    • Bootstrap (opens new window)
    • Vue (opens new window)
    • 阿里开发者藏经阁 (opens new window)
  • 在线工具

    • tool 工具集 (opens new window)
    • bejson 工具集 (opens new window)
    • 文档转换 (opens new window)
  • 更多在线资源
  • Changlog
  • Aboutme
GitHub (opens new window)
博文索引
笔试面试
  • 在线学站

    • 菜鸟教程 (opens new window)
    • 入门教程 (opens new window)
    • Coursera (opens new window)
  • 在线文档

    • w3school (opens new window)
    • Bootstrap (opens new window)
    • Vue (opens new window)
    • 阿里开发者藏经阁 (opens new window)
  • 在线工具

    • tool 工具集 (opens new window)
    • bejson 工具集 (opens new window)
    • 文档转换 (opens new window)
  • 更多在线资源
  • Changlog
  • Aboutme
GitHub (opens new window)
  • Mycat介绍
  • Mycat 核心概念
  • server.xml配置
    • user标签
    • firewall标签
    • 全局序列号
  • schema.xml配置
  • rule.xml配置
  • Mycat的基本使用
  • Mycat事物
  • MyCat
2022-03-26
目录

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,某线程当前区间内当前值
上次更新: 5/30/2023, 11:42:20 PM
schema.xml配置

schema.xml配置→

最近更新
01
2025
01-15
02
Elasticsearch面试题
07-17
03
Elasticsearch进阶
07-16
更多文章>
Theme by Vdoing
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式