DM8读写分离集群部署过程

1、部署规划

读写分离集群适合读多写少的应用环境

3节点读写分离集群部署规划(1写2读)

IP规划:

主机名服务IP心跳IP数据库名实例名
dmdb01192.168.8.131192.168.8.131DAMENGdmrw1
dmdb02192.168.8.132192.168.8.132DAMENGdmrw2
dmdb03192.168.8.133192.168.8.133DAMENGdmrw3

注意:

最好一台机器配置两张网卡,第一张作为服务IP供外部应用访问,第二张作为心跳IP供DM内部应用访问。(此处只使用一张网卡,故服务IP与心跳IP相同)

端口规划:

实例名实例端口(监听外部应用)MAL端口dmwatch端口实例-dmwatch端口
dmrw15236611415214133141
dmrw25236611415214133141
dmrw35236611415214133141

磁盘规划:(按实际需求调整磁盘空间)

磁盘LVM 磁盘名/用途
/dev/sdc(100G)/dev/dmappvg/dmapplv(数据库安装磁盘)
/dev/sde(500G)/dev/dmdatavg/dmdatalv(数据磁盘)
/dev/sdf(500G)/dev/dmbakvg/dmbaklv(备份磁盘)

目录规划:(在对应服务器上创建目录 owner 为 dmdba 组为 dinstall)

目录路径
数据库软件安装目录/opt/dmdbms
实例安装目录/dmdata/data
归档日志存放目录/dmdata/arch
备份文件存放目录/dmbak/

注意:目录创建后,需执行以下命令

chown -R dmdba:dinstall /opt/dmdbms
chmod -R 775 /opt/dmdbms
chown -R dmdba:dinstall /dmdata/data
chmod -R 775 /dmdata/data	
chown -R dmdba:dinstall /dmdata/arch
chmod -R 775 /dmdata/arch
chown -R dmdba:dinstall /dmbak
chmod -R 775 /dmbak

2、数据库软件安装

略。

3、读写分离集群配置

初始化实例

实例初始化(3个节点)

dminit path=/dmdata/data page_size=32 charset=1 log_size=2048

以主机dmdb01为读写分离主库,启动实例(dmdba用户)

dmserver /dmdata/data/DAMENG/dm.ini
出现system is ready后,ctrl + c停库

:这样可快速启停库

脱机备份数据库

在主机dmdb01上执行以下命令,确认主库dmap服务已启动

ps -ef|grep dmap
若未启动,则切换到数据库软件安装目录的bin目录下执行以下命令
./DmAPService start

使用dmrman进行全库备份

dmrman
backup database '/dmdata/data/DAMENG/dm.ini' backupset '/dmbak/bakfull';

备份还原备库

将备份的文件/dmbak/bakfull拷贝到另外两台服务器上。

在主机 Dmdb02 和 Dmdb03 上

使用 dmrman 工具还原备库,dmdba 用户执行:

dmrman

进入 dmrman 工具交互界面

执行 restore:

restore database '/dmdata/data/DAMENG/dm.ini' from backupset '/dmbak/bakfull';

完成后执行 recover:

recover database '/dmdata/data/DAMENG/dm.ini' from backupset '/dmbak/bakful

最后执行 recover update db_magic。

recover database '/dmdata/data/DAMENG/dm.ini' update db_magic

修改dm.ini参数

所有节点都要修改,执行以下命令

vi /dmdata/data/DAMENG/dm.ini

主库 Dmdb01 上修改以下参数值:

INSTANCE_NAME = dmrw1
MAL_INI = 1
ARCH_INI = 1
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2

备库 Dmdb02 上修改以下参数值:

INSTANCE_NAME = dmrw2
MAL_INI = 1
ARCH_INI = 1
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2

备库 Dmdb03 上修改以下参数值:

INSTANCE_NAME = dmrw3
MAL_INI = 1
ARCH_INI = 1
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2

配置归档配置文件 dmarch.ini

在实例目录下新建文件 dmarch.ini,执行以下命令:

vi /dmdata/data/DAMENG/dmarch.ini

主库 Dmdb01 上添加以下内容:

[ARCHIVE_TIMELY1]
ARCH_TYPE = TIMELY #即时归档类型
ARCH_DEST = dmrw2 #即时归档目标实例名(主库侧填写备库实例名)
[ARCHIVE_TIMELY2]
ARCH_TYPE = TIMELY #即时归档类型
ARCH_DEST = dmrw3 #即时归档目标实例名(主库侧填写备库实例名)
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dmdata/arch #本地归档文件存放路径
ARCH_FILE_SIZE = 2048 #单位 MB,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 102400 #单位 MB,0 表示无限制,范围 1024~4294967294 MB

备库 Dmdb02 上添加以下内容:

[ARCHIVE_TIMELY1]
ARCH_TYPE = TIMELY #即时归档类型
ARCH_DEST = dmrw1 #即时归档目标实例名(备库侧填写主库实例名)
[ARCHIVE_TIMELY2]
ARCH_TYPE = TIMELY #即时归档类型
ARCH_DEST = dmrw3 #即时归档目标实例名(备库侧填写其他备库实例名)
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dmdata/arch #本地归档文件存放路径
ARCH_FILE_SIZE = 2048 #单位 MB,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 102400 #单位 MB,0 表示无限制,范围 1024~4294967294 MB

备库 Dmdb03 上添加以下内容:

[ARCHIVE_TIMELY1]
ARCH_TYPE = TIMELY #即时归档类型
ARCH_DEST = dmrw1 #即时归档目标实例名(备库侧填写主库实例名)
[ARCHIVE_TIMELY2]
ARCH_TYPE = TIMELY #即时归档类型
ARCH_DEST = dmrw2 #即时归档目标实例名(备库侧填写其他备库实例名)
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dmdata/arch #本地归档文件存放路径
ARCH_FILE_SIZE = 2048 #单位 MB,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 102400 #单位 MB,0 表示无限制,范围 1024~4294967294 M

配置 MAL 系统配置文件 dmmal.ini

在实例目录下新建文件 dmmal.ini,执行以下命令。

vi /dmdata/data/DAMENG/dmmal.ini

主备库 3 个节点文件内容要相同。

MAL_CHECK_INTERVAL = 5 #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 5 #判定 MAL 链路断开的时间
[MAL_INST1]
MAL_INST_NAME = dmrw1 #与 dm.ini 中的 INSTANCE_NAME 一致
MAL_HOST = 192.168.8.131 #MAL 系统监听 TCP 内部网络 IP
MAL_PORT = 61141 #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST = 192.168.8.131 #实例的对外服务 IP 地址
MAL_INST_PORT = 5236 #与 dm.ini 中的 PORT_NUM 一致
MAL_DW_PORT = 52141 #实例对应的守护进程监听 TCP 端口
MAL_INST_DW_PORT = 33141
[MAL_INST2]
MAL_INST_NAME = dmrw2 #与 dm.ini 中的 INSTANCE_NAME 一致
MAL_HOST = 192.168.8.132 # MAL 系统监听 TCP 内部网络 IP
MAL_PORT = 61141 #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST = 192.168.8.132 #实例的对外服务 IP 地址
MAL_INST_PORT = 5236 #与 dm.ini 中的 PORT_NUM 一致
MAL_DW_PORT = 52141 #实例对应的守护进程监听 TCP 端口
MAL_INST_DW_PORT = 33141
[MAL_INST3]
MAL_INST_NAME = dmrw3 #与 dm.ini 中的 INSTANCE_NAME 一致
MAL_HOST = 192.168.8.133 # MAL 系统监听 TCP 内部网络 IP
MAL_PORT = 61141 #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST = 192.168.8.133 #实例的对外服务 IP 地址
MAL_INST_PORT = 5236 #与 dm.ini 中的 PORT_NUM 一致
MAL_DW_PORT = 52141 #实例对应的守护进程监听 TCP 端口
MAL_INST_DW_PORT = 33141

配置守护进程配置文件 dmwatcher.ini

在实例目录下新建文件 dmwatcher.ini,执行以下命令:

vi /dmdata/data/DAMENG/dmwatcher.ini

主备库 3 节点文件内容要相同。

[GRP_RW]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = MANUAL #手动切换模式
DW_ERROR_TIME = 10 #远程守护进程故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 10 #本地实例故障认定时间
INST_OGUID = 453331 #守护系统唯一 OGUID 值
INST_INI = /dmdata/data/DAMENG/dm.ini #dm.ini 配置文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /opt/dmdbms/bin/dmserver #命令行方式启动

以 Mount 方式启动数据库实例

使用 dmdba 用户,执行以下命令(主备库都执行):

dmserver /dmdata/data/DAMENG/dm.ini mount

:当前还在测试部署中,用此命令起库即可,方便停库(ctrl + c)

在新的终端使用 disql 工具连接数据库:

./disql SYSDBA/SYSDBA

主备库都修改 oguid,执行以下命令:

sp_set_oguid(453331);

主库 Dmdb01 上修改数据库模式为 primary,执行以下命令:

alter database primary;

备库 Dmdb02 和 Dmdb03 上修改数据库模式为 standby,执行以下命令:

alter database standby;

启动守护进程

dmdba 用户下,到数据库安装目录的 bin 下执行以下命令(主备库都执行):

dmwatcher /dmdata/data/DAMENG/dmwatcher.ini

守护进程启动后,会将 Mount 的实例 Open

:此方式启动即可,便于关闭dmwatcher

使用dmmonitor检查下配置是否正常

启动监视器(可以在任意节点配置)
守护进程配置为自动切换时,必须配置确认监视器。在主备服务器以外的服务器上(需安装有 DM 数据库软件,且与主备心跳网络端口开放)。

新建确认监视器配置文件 dmmonitor.ini,执行以下命令:

vi /dmdata/data/DAMENG/dmmonitor.ini

添加以下内容:

MON_DW_CONFIRM = 1 #确认监视器模式
MON_LOG_PATH = /opt/dmdbms/log #监视器日志文件存放路径
MON_LOG_INTERVAL = 60 #每隔 60 s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 32 #每个日志文件最大 32 MB
MON_LOG_SPACE_LIMIT = 0 #不限定日志文件总占用空间
[GRP_RW]
MON_INST_OGUID = 453331 #组 GRP_RW 的唯一 OGUID 值
#以下配置为监视器到组 GRP_RW 的守护进程的连接信息,以“IP:PORT”的形式配置
#IP 对应 dmmal.ini 中的 MAL_HOST,PORT 对应 dmmal.ini 中的 MAL_DW_PORT
MON_DW_IP = 192.168.8.131:52141
MON_DW_IP = 192.168.8.132:52141
MON_DW_IP = 192.168.8.133:52141

执行以下命令,启动监视器。

dmmonitor /dmdata/data/DAMENG/dmmonitor.ini

启动后输入 show

部署成功示例图

注册服务

以上启动为前台方式启动,仅用户搭建过程中验证配置。配置没问题后需要将实例,守护进

程和确认监视器注册为系统服务。

使用 root 用户,到数据库安装目录的 script/root 下

注册守护进程服务(主备库都执行)

  ./dm_service_installer.sh -t dmwatcher -p dmrw -watcher_ini /dmdata/data/DAMENG/dmwatcher.ini

注册数据库实例服务(主备库都执行):

  ./dm_service_installer.sh -t dmserver -p dmrw -dm_ini /dmdata/data/DAMENG/dm.ini

以服务方式启动

执行以下命令,启动数据库实例:

systemctl start DmServicedmrw

执行以下命令,启动守护进程

systemctl start DmWatcherServicedmrw

验证主备集群同步状态

监视器查看读写分离集群状态

集群任意节点,配置普通监视器配置文件 dmmonitor.ini,执行以下命令:

vi /dmdata/data/DAMENG/dmmonitor.ini

添加以下内容:

MON_DW_Confirm = 0 #普通监视器模式
MON_LOG_PATH = /opt/dmdbms/log #监视器日志文件存放路径
MON_LOG_INTERVAL = 60 #每隔 60 s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 32 #每个日志文件最大 32 MB
MON_LOG_SPACE_LIMIT = 0 #不限定日志文件总占用空间
[GRP_RW]
MON_INST_OGUID = 453331 #组 GRP_RW 的唯一 OGUID 值
#以下配置为监视器到组 GRP_RW 的守护进程的连接信息,以“IP:PORT”的形式配置
#IP 对应 dmmal.ini 中的 MAL_HOST,PORT 对应 dmmal.ini 中的 MAL_DW_PORT
MON_DW_IP = 192.168.8.131:52141
MON_DW_IP = 192.168.8.132:52141
MON_DW_IP = 192.168.8.133:52141

执行以下命令,启动监视器:

./dmmonitor /dmdata/data/DAMENG/dmmonitor.ini

输入 show 命令查看集群状态

disql 客户端验证

使用 disql 客户端登录主库,创建测试表,插入数据,执行以下命令:

disql SYSDBA/SYSDBA@192.168.8.131:5236
SQL 提示符下执行以下命令:
create table test(id int);
insert into test values (1);
commit;

使用 disql 客户端登录备库,查询测试表验证,执行以下命令:

disql SYSDBA/SYSDBA@192.168.8.132:5236
SQL 提示符下执行以下命令:
select * from test;

disql SYSDBA/SYSDBA@192.168.8.133:5236
SQL 提示符下执行以下命令:
select * from test;

可用命令

vim不适合批量修改多台机器上的文件,下面为sed批量修改的命令

修改网卡配置

cd /etc/sysconfig/network-scripts
sed -i '/UUID/d' ifcfg-ens33   
systemctl stop network
systemctl start network
nmcli con | sed -n '1,2p'
sed -i 's/dhcp/static/' 1.txt

修改主机名

hostnamectl set-newname dmdb01
hostnamectl set-newname dmdb02
hostnamectl set-newname dmdb03

系统配置文件

sed -i '$a vm.swappiness=10' /etc/sysctl.conf
sed -i '$a vm.dirty_background_ratio=0' /etc/sysctl.conf
sysctl -p

批量修改/etc/security/limits.conf

sed -i '$a dmdba soft nice 0' /etc/security/limits.conf
sed -i '$a dmdba hard nice 0' /etc/security/limits.conf
sed -i '$a dmdba soft as unlimited' /etc/security/limits.conf
sed -i '$a dmdba hard as unlimited' /etc/security/limits.conf
sed -i '$a dmdba soft fsize unlimited' /etc/security/limits.conf
sed -i '$a dmdba hard fsize unlimited' /etc/security/limits.conf
sed -i '$a dmdba soft nproc 65536' /etc/security/limits.conf
sed -i '$a dmdba hard nproc 65536' /etc/security/limits.conf
sed -i '$a dmdba soft nofile 65536' /etc/security/limits.conf
sed -i '$a dmdba hard nofile 65536' /etc/security/limits.conf
sed -i '$a dmdba soft core unlimited'  /etc/security/limits.conf
sed -i '$a dmdba hard core unlimited'  /etc/security/limits.conf
sed -i '$a dmdba soft data unlimited'  /etc/security/limits.conf
sed -i '$a dmdba hard data unlimited'  /etc/security/limits.conf

批量修改/etc/security/limits.d/20-nproc.conf

sed -i '$a dmdba soft nice 0' /etc/security/limits.d/20-nproc.conf
sed -i '$a dmdba hard nice 0' /etc/security/limits.d/20-nproc.conf
sed -i '$a dmdba soft as unlimited' /etc/security/limits.d/20-nproc.conf
sed -i '$a dmdba hard as unlimited' /etc/security/limits.d/20-nproc.conf
sed -i '$a dmdba soft fsize unlimited' /etc/security/limits.d/20-nproc.conf
sed -i '$a dmdba hard fsize unlimited' /etc/security/limits.d/20-nproc.conf
sed -i '$a dmdba soft nproc 65536' /etc/security/limits.d/20-nproc.conf
sed -i '$a dmdba hard nproc 65536' /etc/security/limits.d/20-nproc.conf
sed -i '$a dmdba soft nofile 65536' /etc/security/limits.d/20-nproc.conf
sed -i '$a dmdba hard nofile 65536' /etc/security/limits.d/20-nproc.conf
sed -i '$a dmdba soft core unlimited'  /etc/security/limits.d/20-nproc.conf
sed -i '$a dmdba hard core unlimited'  /etc/security/limits.d/20-nproc.conf
sed -i '$a dmdba soft data unlimited'  /etc/security/limits.d/20-nproc.conf
sed -i '$a dmdba hard data unlimited'  /etc/security/limits.d/20-nproc.conf

批量修改/home/dmdba/.bash_profile

sed -i '$a export DM_HOME=/opt/dmdbms' /home/dmdba/.bash_profile
sed -i '$a export PATH=$PATH:$DM_HOME/bin' /home/dmdba/.bash_profile
sed -i '$a export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$DM_HOME/bin' /home/dmdba/.bash_profile

启动实例

1、root用户

systemctl start DmServicedmdb

2、dmdba用户

dmserver /dmdata/data/DAMENG/dm.ini

4、部署过程中遇到的问题

部署读写分离集群三台机器的初始化:

先部署第一台机器(只安装了操作系统),通过克隆虚拟机的方式部署后两台

问题1:

克隆的机器网卡的UUID一致,无法正常使用

办法1:
删除网卡配置文件中的UUID后重启网卡,根据命令获取网卡真实的UUID并修改配置文件

问题2:

修改完oguid和数据库模式后,启动dmwatcher,实例没有从mount变为open

办法2:

由于主从之间需要交互,需关闭防火墙。

dmwatcher日志如下:

2021-10-15 19:02:01.819 [INFO] dmwatcher P0000049897 T0000139833215907648  DMWATCHER[4.0] group(GRP_RW) initialized succeed.
GUID(DCE5E18EDCE5E18E5D13B88A7841ABD7)
2021-10-15 19:02:01.824 [INFO] dmwatcher P0000049897 T0000139833215907648  DMWATCHER[4.0] IS READY
2021-10-15 19:02:02.823 [INFO] dmwatcher P0000049897 T0000139833105229568  dw2_send_port_set to dmserver vio(3) set, mid(-1), to name:DMRW1, ip:127.0.0.1
2021-10-15 19:02:02.825 [ERROR] dmwatcher P0000049897 T0000000000000049902  Can't connect to DM server on '192.168.8.132' port(52141) errno(113)
2021-10-15 19:02:02.827 [ERROR] dmwatcher P0000049897 T0000000000000049903  Can't connect to DM server on '192.168.8.133' port(52141) errno(113)
2021-10-15 19:02:02.831 [INFO] dmwatcher P0000049897 T0000139833096808192  dw2_group_process_svr_info_low, receive ep(seqno:0, master:0, n_ok:0) message, change ep(DMRW1) status from ERROR to OK.
2021-10-15 19:02:02.832 [INFO] dmwatcher P0000049897 T0000139833096808192  Local db apply info changed, old info[p_db_magic:0, n_apply_ep:0], new info to set[p_db_magic:333042144, n_apply_ep:0]!
2021-10-15 19:02:02.832 [INFO] dmwatcher P0000049897 T0000139833096808192  dw2_process_ohis_info, n_ohis changed from 0 to 1, from_ep:DMRW1, ep_seqno:0, hpc_master:0
2021-10-15 19:02:02.833 [INFO] dmwatcher P0000049897 T0000139833096808192  dw2_process_ohis_info local apply info, p_db_magic:333042144, n_apply_ep:0, n_fill_ep:1 pkg_seq_arr:[4243, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], apply_lsn_arr:[24277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]!
2021-10-15 19:02:02.833 [INFO] dmwatcher P0000049897 T0000139833096808192  Server(DMRW1) public key changed, broadcast new value to monitor
2021-10-15 19:02:12.844 [INFO] dmwatcher P0000049897 T0000000000000049903  dm_connect_async connection 6 is in progress
2021-10-15 19:02:12.847 [INFO] dmwatcher P0000049897 T0000000000000049902  dm_connect_async connection 7 is in progress
2021-10-15 19:02:22.855 [INFO] dmwatcher P0000049897 T0000000000000049903  dm_connect_async connection 6 is timeout
2021-10-15 19:02:22.859 [INFO] dmwatcher P0000049897 T0000000000000049902  dm_connect_async connection 7 is timeout
2021-10-15 19:02:43.913 [INFO] dmwatcher P0000049897 T0000000000000049903  dm_connect_async connection 6 is in progress
2021-10-15 19:02:44.912 [INFO] dmwatcher P0000049897 T0000000000000049902  dm_connect_async connection 7 is in progress
2021-10-15 19:02:46.925 [INFO] dmwatcher P0000049897 T0000000000000049902  dm_connect_async connection 7 is failed
2021-10-15 19:02:53.924 [INFO] dmwatcher P0000049897 T0000000000000049903  dm_connect_async connection 6 is timeout
2021-10-15 19:03:07.966 [INFO] dmwatcher P0000049897 T0000000000000049902  dm_connect_async connection 6 is in progress
2021-10-15 19:03:09.981 [INFO] dmwatcher P0000049897 T0000000000000049902  dm_connect_async connection 6 is failed
2021-10-15 19:03:40.061 [INFO] dmwatcher P0000049897 T0000000000000049903  dm_connect_async connection 6 is in progress
2021-10-15 19:03:41.045 [INFO] dmwatcher P0000049897 T0000000000000049902  dm_connect_async connection 7 is in progress
2021-10-15 19:03:43.061 [INFO] dmwatcher P0000049897 T0000000000000049902  dm_connect_async connection 7 is failed

从日志的报错可以发现,主从之间的连接有问题,很可能是被防火墙拦截了,关闭防火墙后问题解决。

达梦云适配中心:
https://eco.dameng.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值