first commit

This commit is contained in:
douboer
2025-09-17 16:08:16 +08:00
parent 9395faa6b2
commit 3ff47c11d5
1318 changed files with 117477 additions and 0 deletions

148
mycat.md Normal file
View File

@@ -0,0 +1,148 @@
## myCat
![img](imgs/db/mycat_arch.jpg)
mycat DAL中间件 数据访问层(Data Access Layer)
#### :dvd: some questions :question:
- mycat能做什么优点是什么
- 逻辑表&逻辑库schema
- mod水平切分其他手段
- 垂直切分?
- 自动处理切分?策略?
- 父子关系外键关联关系相当于垂直切分ER表
- mycat有什么缺点
```
|-> mysql
|
- mycat---|-> mysql
|
|-> mysql
```
- 遗留问题
mysql之间要keepalived吗:question:
benchmark性能测试怎么做:question:
---
- <b>优势</b>
[要点都在这了:joy:](http://www.mycat.io/)
- 读写分离
- 负载均衡HA
- 分表分库,主要是水平切分
- 其他基于NIO-并发高,
- 官方规划2.0版本<b>:star:通过Mycat Balance 替代第三方的HaproxyLVS等第三方高可用完整的兼容Mycat集群节点的动态上下线。</b>
- <b>缺点</b>
- 事务性XA较弱:question:事务性
关于分布式事务性的描述参考[分布式事务](https://www.cnblogs.com/zengkefu/p/5742617.html)
- 分页查询limit n只查到某个分片上的topn或者后区间数据可能落在不同分片上可能查询缓慢DBA可优化
[](https://www.cnblogs.com/leeSmall/p/9539370.html)
#### :dvd: 垂直切分
按业务规划细分
不缩表,减少字段数
不能算myCat的优势
#### :dvd: 水平切分&规则
缩表,减少记录数
1. 枚举法:
通过在配置文件中配置可能的枚举id自己配置分片适用于按照省份或者区县来拆分数据类业务
```
<rule>
<columns>province_id</columns>
<algorithm>enum-int</algorithm>
</rule>
```
2. 固定分片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 |
```
3. 范围约定
预先制定可能的id范围到某个分片
```
<tableRule name="auto-sharding-long">
<rule>
<columns>user_id</columns>
<algorithm>rang-long</algorithm>
</rule>
</tableRule>
```
4. 求模法
```
<columns>user_id</columns>
<algorithm>mod-long</algorithm>
```
5. 日期列分区法
起始时间
分区时间间隔
6. 通配取模
7. ASCII码求模通配
%n值分n个分区
8. 编程指定
自定义算法
9. 字符串拆分hash解析
10. 一致性hash
#### :dvd: myCat HA
- keepalived & haproxy装在一起
- keepalived 负责抢VIP
- haproxy 负责分发给可用myCat
![img](imgs/db/myCatHa1.png)
![img](imgs/db/myCatHa.png)
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来实现。<br>
[myCat HA reference](https://blog.csdn.net/l1028386804/article/details/76397064)
### :dvd: 附图
![img](imgs/db/1508220824685.png) <br><br><br>
![img](imgs/db/1508224104762.png) <br><br><br>
![img](imgs/db/1508224116977.png) <br><br><br>
![img](imgs/db/1508224133068.png) <br><br><br>
![img](imgs/db/1508224143652.png) <br><br><br>
![img](imgs/db/1508224155090.png) <br><br><br>
![img](imgs/db/1508224163862.png) <br><br><br>
![img](imgs/db/1508224175479.png) <br><br><br>
![img](imgs/db/1508224183405.png) <br><br><br>
![img](imgs/db/1508224195432.png) <br><br><br>
![img](imgs/db/1508232831054.png) <br><br><br>
![img](imgs/db/1508233065722.png) <br><br><br>
![img](imgs/db/1508233301178.png) <br><br><br>
![img](imgs/db/1508234022148.png) <br><br><br>
![img](imgs/db/1508234196383.png) <br><br><br>
![img](imgs/db/1508234209931.png) <br><br><br>
![img](imgs/db/1508234224944.png) <br><br><br>
![img](imgs/db/1508234232978.png) <br><br><br>
![img](imgs/db/1508234240747.png) <br><br><br>
![img](imgs/db/1508234256389.png) <br><br><br>
![img](imgs/db/1508234267301.png) <br><br><br>
![img](imgs/db/1508234279553.png) <br><br><br>
![img](imgs/db/1508234313005.png) <br><br><br>
![img](imgs/db/1508234321343.png) <br><br><br>
![img](imgs/db/1508234483676.png) <br><br><br>
![img](imgs/db/1508234508872.png) <br><br><br>
![img](imgs/db/1508234525067.png) <br><br><br>
![img](imgs/db/1508234545534.png) <br><br><br>
![img](imgs/db/1508234554521.png) <br><br><br>