写点什么

6.2 分布式关系数据库 (下)

用户头像
张荣召
关注
发布于: 2020 年 11 月 01 日

1.分布式数据库中间件


1.连接:应用通过 jdbc 等连接到 Mycat 数据库中间件

2.分片:MyCat 实现数据库分片,示例中:分片逻辑,根据省份分片,数据库 1 存放省份是 wuhan 的数据,数据库 2 存放 sh 上海的数据,数据库 3 存放 bj 北京的数据。

3.解析:解析 SQL 请求请求内容(prov='wuhan')

4.路由选择:将 SQL 路由到目标数据库服务器(dn1)去处理。

5.聚合:dn1 数据库返回结果给 MyCat,Mycat 聚合结果作为整体,发送给应用程序。


分片逻辑由 Mycat 负责:Mycat 接收请求,并路由到目标服务器。应用程序连接到 Mycat,就像连接到普通数据库。

====>应用程序不需要关注分片逻辑。应用程序和分片逻辑解除耦合。


分布式数据库中间件的设计原理:相似。

2.分布式数据库中间件-Cobar 架构


      

路由配置示例:

?xml version="1.0" encoding="UTF-8"?><cobar:rule xmlns:cobar="http://cobar.alibaba.com/">
<!-- 路由规则定义,定义什么表,什么字段,采用什么路由算法 --><tableRule name="rule1"> <rule> <columns>id</columns> <algorithm><![CDATA[ abs(hash(id)) mod 2 = 0 ]]></algorithm> </rule> <rule> <columns>id</columns> <algorithm><![CDATA[ abs(hash(id)) mod 2 = 1 ]]></algorithm> </rule> <rule> <columns>id</columns> <algorithm><![CDATA[ func1(${id}) ]]></algorithm> </rule></tableRule>
<!-- 路由函数定义 --> <function name="func1" class="com.alibaba.cobar.route.function.PartitionByLong"> <property name="partitionCount">2</property> <property name="partitionLength">512</property> </function></cobar:rule>
复制代码


3.如何做集群伸缩


      解析:新增数据库服务器时,新服务器时空白的,没有数据。===>要把其他服务器上的数据迁移一部分到新服务器上。如何迁移?

      解决方法:预估数据库服务器集群较大规模数量,比如将来数据库服务器规模达到 100 台。

                      路由计算时,对 100 取模。比如:hash(id) mod 100=[0-99]

                      路由配置 100 个规则,数据库配置 100 个连接(实际只有两台服务器)

                      ===>启动时,启动 100 个数据库实例,分配 100 个数据库实例到 2 台服务器,每台 50 个实例(一致性哈市算法:虚拟节点<===>物理节点)。

      迁移操作:1.增加一台数据库服务器。

                      2.主从设置:原 MySQL 服务器 1==>设置 15 个主库===>新服务器 15 个从库;

                                         原 MySQL 服务器 2==>设置 15 个主库===>新服务器 15 个从库;

                                         原 MySQL 服务器 3==>设置 15 个主库===>新服务器 15 个从库;

                      3.主从复制:主从同步数据。

                      4.更新规则:调整数据库连接到新的服务器上。 


4.数据库部署方案-单一服务与单一数据库

                             



5.数据库部署方案-两个 Web 服务与两个数据库


6.数据库部署方案-综合部署


用户头像

张荣召

关注

还未添加个人签名 2018.05.02 加入

还未添加个人简介

评论

发布
暂无评论
6.2分布式关系数据库(下)