停服扩容
- 停止服务
- 新建2*n个新库,并做好高可用
- 进行数据迁移,把数据从n个库里select出来,insert到2*n个库里;(耗时最长)
- 修改微服务的数据库路由配置,模n变为模2*n;
- 微服务重启,连接新库重新对外提供服务;
平滑扩容
前提
每台db都有一个salve,作为高可用也好,扩容也好
db | ip映射 | 取模 |
---|---|---|
db1 | ip0 | 0 |
db1 salve | 无 | |
db2 | ip1 | 1 |
db2 salve | 无 |
步骤一:修改配置。
- 数据库实例所在的机器做双虚ip:
- 原%2=0的库是虚ip0,现增加一个虚ip00
- 原%2=1的库是虚ip1,现增加一个虚ip11
- 修改服务的配置,将2个库的数据库配置,改为4个库的数据库配置,修改的时候要注意旧库与新库的映射关系:
- %2=0的库,会变为%4=0与%4=2
- %2=1的部分,会变为%4=1与%4=3
db | ip映射 | 取模 |
---|---|---|
db1 | ip0,ip00 | 0 |
db1 salve | ip0,ip00 | |
db2 | ip1,ip11 | 1 |
db2 salve | ip1,ip11 |
步骤二:reload配置,实例扩容
reload可能是这么几种方式:
- 比较原始的,重启服务,读新的配置文件;
- 高级一点的,配置中心给服务发信号,重读配置文件,重新初始化数据库连接池;
db | ip映射 | 取模 |
---|---|---|
db1 | ip0,ip00 | 0 |
db1 salve | ip0,ip00 | 2 |
db2 | ip1,ip11 | 1 |
db2 salve | ip1,ip11 | 3 |
步骤三:收尾工作,数据收缩
- 把双虚ip修改回单虚ip;
- 解除旧的双主同步,让成对库的数据不再同步增加;
- 增加新的双主同步,保证高可用;
- 删除掉冗余数据,例如:ip0里%4=2的数据全部删除,只为%4=0的数据提供服务
db | ip映射 | 取模 |
---|---|---|
db1 | ip0 | 0 |
new db1 salve | ||
db2 | ip00 | 2 |
new db2 salve | ||
db3 | ip1 | 1 |
new db3 salve | ||
db4 | ip11 | 3 |
new db4 salve |