Files
devops/mycat.md
2025-09-17 16:08:16 +08:00

5.8 KiB
Raw Permalink Blame History

myCat

img

mycat DAL中间件 数据访问层(Data Access Layer)

📀 some questions

  • mycat能做什么优点是什么
  • 逻辑表&逻辑库schema
  • mod水平切分其他手段
  • 垂直切分?
  • 自动处理切分?策略?
  • 父子关系外键关联关系相当于垂直切分ER表
  • mycat有什么缺点
           |-> mysql
           |
- mycat---|-> mysql
           |
           |-> mysql
  • 遗留问题 mysql之间要keepalived吗 benchmark性能测试怎么做

  • 优势 要点都在这了😂
    • 读写分离
    • 负载均衡HA
    • 分表分库,主要是水平切分
    • 其他基于NIO-并发高,
    • 官方规划2.0版本通过Mycat Balance 替代第三方的HaproxyLVS等第三方高可用完整的兼容Mycat集群节点的动态上下线。
  • 缺点
    • 事务性XA较弱事务性 关于分布式事务性的描述参考分布式事务
    • 分页查询limit n只查到某个分片上的topn或者后区间数据可能落在不同分片上可能查询缓慢DBA可优化

📀 垂直切分

按业务规划细分 不缩表,减少字段数 不能算myCat的优势

📀 水平切分&规则

缩表,减少记录数

  1. 枚举法: 通过在配置文件中配置可能的枚举id自己配置分片适用于按照省份或者区县来拆分数据类业务
  <rule>
  <columns>province_id</columns>
  <algorithm>enum-int</algorithm>
  </rule>
  1. 固定分片hash算法
  <tableRule name="rule1">
      <rule>
        <columns>user_id</columns>
        <algorithm>func1</algorithm>
      </rule>
  </tableRule>
  <function name="func1" class="org.opencloudb.route.function.PartitionByLong">
    <property name="partitionCount">2,1</property>
    <property name="partitionLength">256,512</property>
  </function>

  本例的分区策略希望将数据水平分成3份前两份各占25%第三份占50%。(故本例非均匀分区)
  |<---------------------1024------------------------>|
  |<----256--->|<----256--->|<----------512---------->|
  | partition0 | partition1 | partition2 |
  1. 范围约定 预先制定可能的id范围到某个分片
  <tableRule name="auto-sharding-long">
      <rule>
        <columns>user_id</columns>
        <algorithm>rang-long</algorithm>
      </rule>
  </tableRule>
  1. 求模法
      <columns>user_id</columns>
      <algorithm>mod-long</algorithm>
  1. 日期列分区法 起始时间 分区时间间隔
  2. 通配取模
  3. ASCII码求模通配 %n值分n个分区
  4. 编程指定 自定义算法
  5. 字符串拆分hash解析
  6. 一致性hash

📀 myCat HA

  • keepalived & haproxy装在一起
  • keepalived 负责抢VIP
  • haproxy 负责分发给可用myCat

img img

  1. HAProxy实现了Mycat多节点的集群高可用和负载均衡而HAProxy自身的高可用则可以通过Keepalived来实现。因此HAProxy主机上要同时安装HAProxy和KeepalivedKeepalived负责为该服务器抢占vip虚拟ip图中的192.168.209.130抢占到vip后对该主机的访问可以通过原来的ip192.168.209.135访问也可以直接通过vip192.168.209.130)访问。
  2. Keepalived抢占vip有优先级在keepalived.conf配置中的priority属性决定。但是一般哪台主机上的Keepalived服务先启动就会抢占到vip即使是slave只要先启动也能抢到要注意避免Keepalived的资源抢占问题
  3. HAProxy负责将对vip的请求分发到Mycat集群节点上起到负载均衡的作用。同时HAProxy也能检测到Mycat是否存活HAProxy只会将请求转发到存活的Mycat上。
  4. 如果Keepalived+HAProxy高可用集群中的一台服务器宕机集群中另外一台服务器上的Keepalived会立刻抢占vip并接管服务此时抢占了vip的HAProxy节点可以继续提供服务。
  5. 如果一台Mycat服务器宕机HAPorxy转发请求时不会转发到宕机的Mycat上所以Mycat依然可用。 综上Mycat的高可用及负载均衡由HAProxy来实现而HAProxy的高可用由Keepalived来实现。
    myCat HA reference

📀 附图

img


img


img


img


img


img


img


img


img


img


img


img


img


img


img


img


img


img


img


img


img


img


img


img


img


img


img


img


img