概述
数据库双活提供数据库语义级的同构数据库双活复制软件服务。采用数据库之间语义级的数据实时复制与同步;基于数据库事务日志分析技术,在数据库高并发事务场景下实现数据实时同步;于目标端同步写入时序,严格确保源端和目标端的数据库事务级最终一致性;提供了备库接管、反向同步等功能。
操作步骤
一、购买许可
登录天翼云,进入控制中心。
单击管理控制台左上角的

,选择区域。在服务列表选择“计算”-“多活容灾服务”,进入多活容灾服务控制台。
点击左侧菜单栏-“资源同步”-“资源同步管理”,进入资源管理模块页面。
点击左侧菜单栏-“数据库双活”,点击“许可”,进入许可页面。
点击右上角“购买数据库双活许可”按钮,弹出购买许可弹窗。按需购买许可。
填写数据库类型、购买数量和时长,勾选已阅读并同意相关协议后,点击“购买”按钮,完成许可支付。
二、安装drnode
步骤一:网络配置
场景1:若同步资源为天翼云内资源时,需手动配置其需同步资源所在的虚拟私有云(VPC),并通过部署VPC终端节点(VPCEP)实现MDR网络代理与目标VPC的安全互联。
登录天翼云,进入控制中心。
单击管理控制台左上角的

,选择资源所在区域。在服务列表选择“网络”-“VPC终端节点”,进入网络控制台。
点击右上角“创建终端节点”按钮,进入创建VPC终端节点页面。
在进行节点添加之前,需要把云主机所在的VPC,进行终端节点连接配置,截图如下:
服务类型选择“按服务实例ID查找服务”。其中,可用服务处填写MDR在不同资源池内的代理VPC终端节点服务ID(为MDR侧提供固定ID,不同资源池ID不同)。不同资源池对应的代理VPC终端节点服务ID如下:
资源池名称 终端节点服务ID 华东1 endpser-bjs8nmhm5m 西南1 endpser-fnc13o1uao 华南2 endpser-x6xhocvz79 西南2 endpser-ikzxim4cpv 华北2 endpser-lmmnp90xgx 虚拟私有云选择需要添加的ECS节点所在的VPC。
注意:此链接对于租户侧不收费,费用都在终端节点服务端侧(MDR)结算。
租户配置终端节点成功后,点击详情页可查看节点IP。此节点IP就是后续安装drnode客户端时,需要进行配置填写的IP。
场景2:云下、其他
云下或者其他场景,需要联系技术专家针对客户实际场景进行方案解决。
主要网络打通方案参考:
云下通过公网与MDR打通
步骤二:工作节点安装与配置
节点包安装步骤及注意事项:
所有数据库复制链路共用同一节点包,需对源端和目标端的机器安装节点包;
节点包集成同步所需的所有程序,包含iadumper、iawork、iatrack、iaback、ialoader、iamonitor和iadiff等。
1)JAVA环境配置
工作节点软件同步程序运行依赖Java 环境,建议安装jdk17及以上版本。具体步骤如下:
请检查确保当前机器具备JDK17 的环境。
# java -version
如未安装,请下载JAVA软件包进行安装。
2)linux系统安装节点包
用户需要准备适配的OS以完成安装节点包和进程启动,具体步骤如下:
将安装包下载至服务器,MD5完整性校验通过后(linux命令参考:md5sum 文件名),解压该安装包。
iahelper进程启动启动:iahelper服务主要用于连接控制台,使得控制台可发现该节点。节点包安装完成后只需启动iahelper 进程,其余同步进程在创建规则时自动拉起。Linux/Aix 操作系统下启动iahelper 进程的同时,会启动iahelper watchdog 监视进程,监视进程会根据用户在激活双活工作节点时,选择的双活工作节点类型,来开启对应的服务,启动服务的具体步骤如下:
编辑/etc/hosts文件,增加nodeproxy-mdr解析。
# vim /etc/hosts
添加或修改条目来映射域名到IP地址:
VPCE的节点IP nodeproxy-mdr
进入到MDR工作节点的安装路径,其中<NODE_INSTALLATION_PATH>为安装包路径。
# cd <NODE_INSTALLATION_PATH>/bin/
执行./iahelper nodeproxy-mdr,iahelper首次启动需要输入密码,初始密码规定应为8-16 位,需包含大小写字母,数字及特殊符号。
创建/root/ia/system.conf文件,配置tenant 指定租户ID,其中53f03e0d84324fc5a6e1bf32c90fb94b可替换成租户的ID,租户ID可联系支持人员获取。
# tenant=53f03e0d84324fc5a6e1bf32c90fb94b
重启iahelper。再次执行./iahelper nodeproxy-mdr,注册双活工作节点至控制机。
执行如下命令可检查iahelper 进程是否启动成功。
# ps -ef | grep iahelper
3)进程列表
以MySQL为例,Oracle、PostgreSQL等具体配置项参考 数据库双活用户操作手册。
mysql→mysql链路的将会运行的进程如下表:
| 链路\进程 | iahelper | iamonitor | iawork | iatrack | iaback | IaDumper | IaLoader | MysqlReplication |
| MySQL同构 | √ | √ | NA | √ | NA | √ | √ | √ |
Iahelper启动后,其他进程会在创建规则时自动拉起,无需手动启动。
说明:
IaLoader进程和IaDumup进程启动时默认需要占用8GB系统内存,如内存不足则无法启动。如内存分配不足,需先修改进程配置文件,调小进程占用内存后启动。
IaLoader进程:i2stream路径路径下/bin/start_ialoader.sh修改Xms、Xmx值大小。
IaDumup进程:
i2stream路径下/dumper-plugin-miscdb/bin/start_iadumper.sh
修改Xms、Xmx值大小。
步骤三:源端MySQL 同步配置
1)源端MySQL 同步OS侧配置
开启binlog 配置:
需要开启源库MySQL 的binlog 模式,具体操作步骤如下:
源库修改MySQL 的配置文件my.cnf,通过以下命令查询my.cnf 的路径位置<MYCNF_PATH>:
# find / -name my.cnf
# vi <MYCNF_PATH>
源库增加如下内容:
log-bin=mysql-bin
server_id=1
binlog_format=row
说明:
(1)log-bin参数的作用是MySQL 会根据这个配置自动设置log_bin 为on 状态,自动设置log_bin_index 文件为你指定的文件名后跟.index 打开binlog日志。
(2)在生产环境中一般都配置有server_id 值,若该项已有则不做改动,若没有按照上方提供内容添加,且需确保此值为唯一值,不可重复。
(3)仅支持binlog格式级别为row。
1. MySQL 提供一个sync_binlog 参数来控制数据库的binlog 刷到磁盘上去,还需增加如下内容:
sync_binlog=1
说明:
(1)默认sync_binlog=0,表示MySQL 不控制binlog 的刷新,由文件系统自己控制它的缓存的刷新。这时候的性能是最好的,但是风险也是最大的。
(2)若sync_binlog>0,表示每sync_binlog 次事务提交,MySQL 调用文件系统的刷新操作将缓存刷下去。最安全的是sync_binlog=1,表示每次事务提交,MySQL 都会把binlog刷下去,是最安全但性能损耗最大的设置。
(3)如果是从从库上抽取数据,还需要增加以下的参数值。
log_slave_updates=1
根据MySQL 官网介绍,A→B→C。A 作为从B 的master,B 作为从机C 的master。为了使这一点起作用,B 必须既是master 又是slave。必须用log bin 启动A 和B 以启用二进制日志记录,用log slave updates 选项启动B,以便B 将从A 接收的更新记录到其二进制日志中。
2. 修改完以上配置后,重启源库MySQL 服务:
systemctl restart mysql
3. 进入到源库MySQL 数据库内,查询并确认binlog 是否开启:
mysql> show variables like "log_%";
log_bin 的value 显示为ON 则表示已开启binlog。
4. 完成MySQL 源机数据库binlog 的开启。
2)源端MySQL 同步DB侧配置
创建远程连接同步用户。
<MySQL_USERNAME>为MySQL 的同步用户的用户名;
<MySQL_PASSWORD>为MySQL 的同步用户对应的密码;
mysql> create user '<MySQL_USERNAME>'@'%' identified with mysql_native_password by
'<MySQL_PASSWORD>';
2. 赋予源库用户权限:
若授权all privileges 用户权限受阻,则可以参考下发节源MySQL 用户all privileges 权限限制。
mysql> grant all privileges on *.* to '<MySQL_USERNAME>'@'%';
3. 源库刷新权限。
mysql> flush privileges;
4. 可在本机上通过如下命令查看是否可以正常连接:
<MySQL_IP>为源库MySQL 对应的IP 地址。
<MySQL_PORT>为源库MySQL 对应的端口号,默认为3306。
# mysql -u<MySQL_USERNAME> -p'<MySQL_PASSWORD>' -h<MySQL_IP> -P<MySQL_PORT>
5. 进入到数据库内则表示创建远程连接用户成功。
6. 完成MySQL 数据库源库的配置。
步骤四:目标端MySQL 同步配置
1)目标端MySQL 同步DB 侧配置
创建远程连接同步用户。
<MySQL_USERNAME>为MySQL 的同步用户的用户名;
<MySQL_PASSWORD>为MySQL 的同步用户对应的密码;
mysql> create user '<MySQL_USERNAME>'@'%' identified with mysql_native_password by '<MySQL_PASSWORD>';
2. 赋予备库用户权限:
mysql> grant all privileges on *.* to '<MySQL_USERNAME>'@'%';
3. 备库刷新权限。
mysql> flush privileges;
4. 可在本机上通过如下命令查看是否可以正常连接:
<MySQL_PORT>为备库MySQL 对应的端口号,默认为3306。
# mysql -u<MySQL_USERNAME> -p'<MySQL_PASSWORD>' -h<MySQL_IP> -P<MySQL_PORT>
进入到数据库内则表示创建远程连接用户成功。
完成MySQL 数据库备库的配置。
步骤五:最小权限
1)源端MySQL 最小权限
用户所需最小权限:SELECT、REPLICATION SLAVE、REPLICATION CLIENT、RELOAD(非必须)。
假定源端连接用户为USER:
mysql>grant SELECT on *.* to 'USER'@'%';
mysql>grant REPLICATION SLAVE on *.* to 'USER'@'%';
mysql>grant REPLICATION CLIENT on *.* to 'USER'@'%';
mysql>grant RELOAD on *.* to 'USER'@'%'; (非必须权限)
mysql>flush privileges;
说明:
若为表映射,可以缩小select on *.*的范围至所需同步的表,但需要information_schema的查询权限。
reload 权限非必须,同步用户若拥有该权限,将提高拉取binlog的速率,若无此权限,不影响同步。
TDSQL、GoldenDB 最小权限同MySQL。
2)目标端MySQL 最小权限
假定源端连接用户为USER:
mysql>grant SELECT on *.* to 'USER'@'%';
mysql>grant CREATE,SELECT,INSERT,UPDATE,DELETE,DROP,CREATE ROUTINE,TRIGGER,CREATE VIEW,INDEX,ALTER,REFERENCES,PROCESS,FILE on *.* to 'USER'@'%';
mysql>grant SUPER on *.* to 'USER'@'%';
mysql>flush privileges;
说明:
若为表映射,可以缩小select on *.*的范围至所需同步的表,但需要
information_schema 的查询权限。
如需DDL 复制,目标端需SUPER 权限。
TDSQL、GoldenDB 最小权限同MySQL。
Oracle、PostgreSQL等具体配置项参考 数据库双活用户操作手册。