暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

DM8 两节点读写分离集群的搭建

原创 bxf3000 2022-05-07
990

社区地址:https://eco.dameng.com


1、网络规划。

主机名

public ip

private ip

实例名

端口

用途

server01

192.168.118.101

10.0.0.11

dmrw1

5236

数据库实例 dmrw1 监听端口

server01

192.168.118.101

10.0.0.11

dmrw1

61141

MAL 系统监听连接的端口

server01

192.168.118.101

10.0.0.11

dmrw1

52141

实例本地守护进程监听连接的端口

server01

192.168.118.101

10.0.0.11

dmrw1

33141

实例监听守护进程连接的端口

server02

192.168.118.102

10.0.0.12

dmrw2

5236

数据库实例 dmrw2 监听端口

server02

192.168.118.102

10.0.0.12

dmrw2

61141

MAL 系统监听连接的端口

server02

192.168.118.102

10.0.0.12

dmrw2

52141

实例本地守护进程监听连接的端口

server02

192.168.118.102

10.0.0.12

dmrw2

33141

实例监听守护进程连接的端口

2、验证系统信息。

[root@server01 ~]# getconf LONG_BIT

64

[root@server01 ~]# cat /etc/redhat-release

CentOS Linux release 7.6.1810 (Core)

[root@server01 ~]# uname -a

Linux server01 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux


系统需要安装RPM包:

[root@server01 dmrw]# yum -y install unixODBC*

[root@server01 dmrw]# yum -y install glibc*

3、关闭防火墙。

1. 先查看防火墙状态

[root@bogon ~]#systemctl status firewalld

firewalld.service - firewalld - dynamic firewall daemon

   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled)

   Active: active (running) since 2015-05-25 22:53:54 CST; 3min 18s ago

 Main PID: 979 (firewalld)

   CGroup: /system.slice/firewalld.service

           └─979 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid

525 22:53:54 localhost.localdomain systemd[1]: Started firewalld - dynami...

Hint: Some lines were ellipsized, use -l to show in full.

 

2. 关闭防火墙

[root@bogon ~]#systemctl stop firewalld

[root@bogon ~]#systemctl status firewalld

firewalld.service - firewalld - dynamic firewall daemon

   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled)

   Active: inactive (dead) since 2015-05-25 23:03:56 CST; 3s ago

  Process: 979 ExecStart=/usr/sbin/firewalld --nofork --nopid $FIREWALLD_ARGS (code=exited, status=0/SUCCESS)

 Main PID: 979 (code=exited, status=0/SUCCESS)

525 22:53:54 localhost.localdomain systemd[1]: Started firewalld - dynami...

525 23:03:55 bogon systemd[1]: Stopping firewalld - dynamic firewall da.....

525 23:03:56 bogon systemd[1]: Stopped firewalld - dynamic firewall daemon.

Hint: Some lines were ellipsized, use -l to show in full.

 

3. 查看防火墙服务是否开机启动

[root@bogon ~]#systemctl is-enabled firewalld

enabled  #开启

 

4. 关闭防火墙开机启动

[root@bogon ~]#systemctl disable firewalld

rm '/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service'

rm '/etc/systemd/system/basic.target.wants/firewalld.service'

[root@bogon ~]#systemctl is-enabled firewalld

disabled

4、关闭SELinux

1. 查看当前SELinux状态

[root@bogon ~]#getenforce

Enforcing

 

2. 关闭SElinux

[root@bogon ~]#setenforce 0

[root@bogon ~]# getenforce

Permissive

 

3. 编辑配置文件

[root@bogon ~]#

vim /etc/selinux/config

# This file controls the state of SELinux on the system.

# SELINUX= can take one of these three values:

#     enforcing - SELinux security policy is enforced.

#     permissive - SELinux prints warnings instead of enforcing.

#     disabled - No SELinux policy is loaded.

SELINUX=permissive    #修改此参数

# SELINUXTYPE= can take one of three two values:

#     targeted - Targeted processes are protected,

#     minimum - Modification of targeted policy. Only selected processes are protected.

#     mls - Multi Level Security protection.

SELINUXTYPE=targeted

5创建DM数据库软件安装用户及用户组

创建安装用户组dinstall
#groupadd -g 12349 dinstall

2.创建安装用户dmdba

#useradd -u 12345 -g dinstall -m -d /home/dmdba -s /bin/bash dmdba

初始化用户密码。
#passwd dmdba  dmdba用户密码为:caiong


修改用户资源限制

执行以下命令,修改 dmdba 用户资源限制:

vim /etc/security/limits.conf

文件末尾添加如下内容:

dmdba soft core unlimited
dmdba hard core unlimited
dmdba soft nofile 65536
dmdba hard nofile 65536
dmdba soft nproc  65536
dmdba hard nproc  65536
dmdba soft stack  65536
dmdba hard stack  65536

6检查操作系统限制

#ulimit -a

core file size          (blocks, -c) 0

data seg size           (kbytes, -d) unlimited

scheduling priority             (-e) 0

file size               (blocks, -f) unlimited

pending signals                 (-i) 15034

max locked memory       (kbytes, -l) 64

max memory size         (kbytes, -m) unlimited

open files                      (-n) 1024

pipe size            (512 bytes, -p) 8

POSIX message queues     (bytes, -q) 819200

real-time priority              (-r) 0

stack size              (kbytes, -s) 8192

cpu time               (seconds, -t) unlimited

max user processes              (-u) 15034

virtual memory          (kbytes, -v) unlimited

file locks                      (-x) unlimited


 data seg size

data seg size (kbytes, -d)

建议用户设置为1048576(1GB)以上或unlimited(无限制),此参数过小将导致数据库启动失败。

file size

file size(blocks, -f)

建议用户设置为unlimited(无限制),此参数过小将导致数据库安装或初始化失败。

open files

open files(-n)

建议用户设置为65536以上或unlimited(无限制)

virtual memory

virtual memory (kbytes, -v)

建议用户设置为1048576(1GB)以上或unlimited(无限制),此参数过小将导致数据库启动失败。

如果用户需要为当前安装用户更改ulimit的资源限制,请修改文件/etc/security/limits.conf

7、针对open files检查做出修改。

[root@server01 ~]# vim /etc/profile    #在文件末尾加入一行:ulimit -n 65536

ulimit -n 65536  

[root@server01 ~]# source /etc/profile

[root@server01 ~]# ulimit -a|grep open

open files                      (-n) 65536


8检查内存使用情况

# grep MemTotal /proc/meminfo

MemTotal:        3880468 kB

 

获取交换分区大小

# grep SwapTotal /proc/meminfo

SwapTotal:      12582908 kB

 

获取内存使用详情

#free -m

total      used      free       shared     buff/cache    available

Mem:       3789      655      1666        18        1467        2845

Swap:       12287       0      12287


9检查磁盘空间使用情况

[root@server01 ~]# df -h

Filesystem      Size  Used Avail Use% Mounted on

/dev/sda5       468G  5.0G  463G   2% /

devtmpfs        1.9G     0  1.9G   0% /dev

tmpfs           1.9G     0  1.9G   0% /dev/shm

tmpfs           1.9G  9.6M  1.9G   1% /run

tmpfs           1.9G     0  1.9G   0% /sys/fs/cgroup

/dev/sda2        20G   37M   20G   1% /home

/dev/sda1       197M  152M   46M  78% /boot

tmpfs           379M  4.0K  379M   1% /run/user/42

tmpfs           379M   24K  379M   1% /run/user/1000

tmpfs           379M     0  379M   0% /run/user/0

DM完全安装需要1GB的存储空间,用户需要提前规划好安装目录

临时文件需要1GB的存储空间,临时文件目录默认为**/tmp**

10、上传DM软件安装介质。

上传安装介质”dm8_20210927_x86_rh6_64_ent_8.1.2.70_pack2.iso”dmdba家目录。


11修改安装文件拥有组和拥有人及权限

[root@server01 dmdba]# chown dmdba:dinstall dm8_20210927_x86_rh6_64_ent_8.1.2.70_pack2.iso

[root@server01 dmdba]# chmod 755 dm8_20210927_x86_rh6_64_ent_8.1.2.70_pack2.iso

[root@server01 dmdba]# ls -l

total 781128

-rwxr-xr-x. 1 dmdba dinstall 799875072 Apr 20 14:08 dm8_20210927_x86_rh6_64_ent_8.1.2.70_pack2.iso

12、以root身份挂载安装镜像文件。

[root@server01 dmdba]# mkdir -p /media/centos7

[root@server01 dmdba]#mount -t iso9660 -o loop /home/dmdba/dm8_20210927_x86_rh6_64_ent_8.1.2.70_pack2.iso /media/centos7/

mount: /dev/loop0 is write-protected, mounting read-only

[root@server01 dmdba]# df -h

Filesystem      Size  Used Avail Use% Mounted on

/dev/sda5       468G  4.3G  464G   1% /

devtmpfs        1.9G     0  1.9G   0% /dev

tmpfs           1.9G     0  1.9G   0% /dev/shm

tmpfs           1.9G  9.2M  1.9G   1% /run

tmpfs           1.9G     0  1.9G   0% /sys/fs/cgroup

/dev/sda2        20G  800M   20G   4% /home

/dev/sda1       197M  152M   46M  78% /boot

tmpfs           379M   12K  379M   1% /run/user/42

tmpfs           379M     0  379M   0% /run/user/0

/dev/loop0      763M  763M     0 100% /media/centos7

13、配置本地YUM仓库。

挂载系统文件ISO光盘,默认挂在后

[root@server01 centos]# df -h

Filesystem      Size  Used Avail Use% Mounted on

/dev/sr0        4.3G  4.3G     0 100% /run/media/dmdba/CentOS 7 x86_64

 

[root@server01 centos]#mkdir /mnt/cdrom

[root@server01 centos]#cd /run/media/dmdba/CentOS\ 7\ x86_64/

[root@server01 CentOS 7 x86_64]# ls

CentOS_BuildTag  GPL       LiveOS    RPM-GPG-KEY-CentOS-7

EFI              images    Packages  RPM-GPG-KEY-CentOS-Testing-7

EULA             isolinux  repodata  TRANS.TBL

[root@server01 centos]#cd /run/media/dmdba

[root@server01 centos]#cp -r CentOS\ 7\ x86_64/ /mnt/cdrom/centos

[root@server01 yum.repos.d]# cd /mnt/cdrom/centos

[root@server01 centos]# ls

CentOS_BuildTag  GPL       LiveOS    RPM-GPG-KEY-CentOS-7

EFI              images    Packages  RPM-GPG-KEY-CentOS-Testing-7

EULA             isolinux  repodata  TRANS.TBL

 

[root@server01 yum.repos.d]#cd /etc/yum.repos.d

[root@server01 yum.repos.d]#mv CentOS-* /tmp/    ##把原来的配置文件备份到TMP

[root@server01 yum.repos.d]# ls

[root@server01 yum.repos.d]# vim local.repo

[local_server]

name=This is a local repo

baseurl=file:///mnt/cdrom/centos

enabled=1

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

 

[root@server01 centos]#yum clean all

[root@server01 centos]#yum list all

……

yum-plugin-verify.noarch               1.1.31-50.el7                       local_server

yum-plugin-versionlock.noarch          1.1.31-50.el7                       local_server

zlib-devel.x86_64                   1.2.7-18.el7                          local_server

zsh.x86_64                         5.0.2-31.el7                         local_server

zziplib.x86_64                      0.13.62-9.el7                         local_server

本地YUM源配置完成。

14、创建 /opt/dmdbms/dmdata目录,并授权。

[root@server01 opt]# cd /opt

[root@server01 /]# mkdir dmdbms

[root@server01 /]# id dmdba

uid=12345(dmdba) gid=12349(dinstall) =12349(dinstall)

[root@server01 /]# chown dmdba:dinstall dmdbms/

 

[root@server01 /]# mkdir /dmdata

[root@server01 /]# chown dmdba:dinstall /dmdata

15、配置dmdba用户常用环境变量。

将数据库常用命令的目录加到dmdba环境变量中。

/opt/dmdbms/bin

/opt/dmdbms/bin2

/opt/dmdbms/tool

[dmdba@server01 tool]$ vim /home/dmdba/.bash_profile   #文本最后添加

export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/opt/dmdbms/bin"

export DM_HOME="/opt/dmdbms"

export PATH=/opt/dmdbms/bin:/opt/dmdbms/bin2:/opt/dmdbms/tool:$PATH

export DISPLAY=192.168.118.82:0.0

 

[dmdba@server01 tool]$ source /home/dmdba/.bash_profile

16、继续命令行方式执行安装程序。

[dmdba@server01 centos7]$ ls

DM8 Install.pdf  DMInstall.bin

[dmdba@server01 centos7]$ ./DMInstall.bin -i

Please select the installer's language (E/e:English C/c:Chinese) [E/e]:c

解压安装程序..........

删除配置文件/tmp/dm_build.properties失败,请手动删除。

[dmdba@server01 centos7]$ ./DMInstall.bin -i

Please select the installer's language (E/e:English C/c:Chinese) [E/e]:c

解压安装程序..........

欢迎使用达梦数据库安装程序

 

是否输入Key文件路径? (Y/y:N/n:) [Y/y]:n

 

是否设置时区? (Y/y:N/n:) [Y/y]:y

设置时区:

[ 1]: GTM-12=日界线西

……

[21]: GTM+08=中国标准时间

[22]: GTM+09=汉城

请选择设置时区 [21]:

 

安装类型:

1 典型安装

2 服务器

3 客户端

4 自定义

请选择安装类型的数字序号 [1 典型安装]:

所需空间: 1220M

 

请选择安装目录 [/home/dmdba/dmdbms]:/opt/dmdbms    #输入提前创建好的目录

可用空间: 457G

是否确认安装路径(/opt/dmdbms)? (Y/y:N/n:)  [Y/y]:y

 

安装前小结

安装位置: /opt/dmdbms

所需空间: 1220M

可用空间: 457G

版本信息:

有效日期:

安装类型: 典型安装

是否确认安装? (Y/y:N/n:):y

2022-04-21 13:43:44

[INFO] 安装达梦数据库...

2022-04-21 13:43:44

[INFO] 安装 基础 模块...

2022-04-21 13:43:47

[INFO] 安装 服务器 模块...

2022-04-21 13:43:51

[INFO] 安装 客户端 模块...

2022-04-21 13:44:22

[INFO] 安装 驱动 模块...

2022-04-21 13:44:28

[INFO] 安装 手册 模块...

2022-04-21 13:44:30

[INFO] 安装 服务 模块...

2022-04-21 13:44:31

[INFO] 移动日志文件。

2022-04-21 13:44:31

[INFO] 安装达梦数据库完成。

 

请以root系统用户执行命令:

/opt/dmdbms/script/root/root_installer.sh

 

安装结束

 

在新的会话连接中以root用户身份执行脚本

[root@server01 ~]# /opt/dmdbms/script/root/root_installer.sh

移动 /opt/dmdbms/bin/dm_svc.conf /etc目录

mv: cannot stat ‘/opt/dmdbms/bin/dm_svc.conf’: No such file or directory

修改服务器权限

创建DmAPService服务

创建服务(DmAPService)完成

启动DmAPService服务

##########################以上步骤均都需要在两个节点完成#######################

17、分别在对两个节点进行数据库初始化操作。

[dmdba@server01 dmdata]$ dminit path=/dmdata db_name=dmrw page_size=32

[dmdba@server02 dmdata]$ dminit path=/dmdata db_name=dmrw page_size=32

initdb V8

db version: 0x7000c

file dm.key not found, use default license!

License will expire on 2022-09-24

Normal of FAST

Normal of DEFAULT

Normal of RECYCLE

Normal of KEEP

Normal of ROLL

 

 log file path: /dmdata/dmrw/dmrw01.log

 

 

 log file path: /dmdata/dmrw/dmrw02.log

 

write to dir [/dmdata/dmrw].

create dm database success. 2022-04-28 11:40:15

 

创建数据库服务,两个节点都执行

[root@server01 bin]# cd /opt/dmdbms/script/root/

[root@server01 root]# ./dm_service_installer.sh -t dmserver -p dmserver -dm_ini /dmdata/dmrw/dm.ini

[root@server02 bin]# cd /opt/dmdbms/script/root/

[root@server02 root]# ./dm_service_installer.sh -t dmserver -p dmserver -dm_ini /dmdata/dmrw/dm.ini

Created symlink from /etc/systemd/system/multi-user.target.wants/DmServicedmserver.service to /usr/lib/systemd/system/DmServicedmserver.service.

创建服务(DmServicedmserver)完成

 

[root@server01 root]# systemctl start DmServicedmserver.service

[root@server01 root]# systemctl status DmServicedmserver

● DmServicedmserver.service - DM Instance Service(DmServicedmserver).

   Loaded: loaded (/usr/lib/systemd/system/DmServicedmserver.service; enabled; vendor preset: disabled)

   Active: active (running) since Thu 2022-04-28 11:57:47 CST; 22s ago

//启动数据库服务只在主库上做。

18、对主库进行脱机备份。

1.先确认主库dmap服务已启动

[dmdba@server01 dmdata]$ systemctl list-units|grep Dm


2.关闭数据库后,使用dmrman工具对主库进行备份。

[dmdba@server01 ~]$ disql sysdba/SYSDBA@192.168.118.101:5236

服务器[192.168.118.101:5236]:处于普通打开状态

disql V8

SQL> shutdown immediate;

操作已执行

[dmdba@server01 ~]$ dmrman

dmrman V8

RMAN> backup database '/dmdata/dmrw/dm.ini' backupset '/dmdata/backup/bakfull';

 

19、备库还原。

拷贝主库的备份集到备库

[dmdba@server01 bakfull]$ scp -r /dmdata/backup/bakfull 192.168.118.102:/dmdata/backup/


 关闭备库数据库开始还原

SQL> shutdown immediate;

RMAN> restore database '/dmdata/dmrw/dm.ini' from backupset '/dmdata/backup/bakfull';

RMAN> recover database '/dmdata/dmrw/dm.ini' from backupset '/dmdata/backup/bakfull';

RMAN> recover database '/dmdata/dmrw/dm.ini' update db_magic;

 

20配置主库和备库实例的配置文件 dm.ini

[dmdba@server01 ~]$ vim /dmdata/dmrw/dm.ini

INSTANCE_NAME = dmrw1

MAL_INI = 1

ARCH_INI = 1

ALTER_MODE_STATUS = 0

ENABLE_OFFLINE_TS = 2

//主库dm.ini配置文件修改

 

[dmdba@server02 ~]$  vim /dmdata/dmrw/dm.ini

INSTANCE_NAME = dmrw2

MAL_INI = 1

ARCH_INI = 1

ALTER_MODE_STATUS = 0

ENABLE_OFFLINE_TS = 2

//备库dm.ini配置文件修改

21配置归档配置文件 dmarch.ini

[dmdba@server01 ~]$ vim /dmdata/dmrw/dmarch.ini

[ARCHIVE_TIMELYE]  

ARCH_TYPE = TIMELY   #即时归档类型

ARCH_DEST = dmrw2   #即时归档目标实例名(主库侧填写备库实例名)

[ARCHIVE_LOCAL1]

ARCH_TYPE = LOCAL    #本地归档类型

ARCH_DEST = /dmdata/dmrw/arch    #本地归档文件存放路径

ARCH_FILE_SIZE = 128             #单位 MB,本地单个归档文件最大值

ARCH_SPACE_LIMIT = 10240        #单位 MB0 表示无限制,范围 1024~4294967294 MB

//主库dmarch.ini配置文件修改

 

[dmdba@server02 arch]$ vim /dmdata/dmrw/dmarch.ini

[ARCHIVE_TIMELY]  

ARCH_TYPE     = TIMELY  #即时归档类型

ARCH_DEST     = dmrw1   #即时归档目标实例名(备库侧填写主库实例名)

[ARCHIVE_LOCAL1]

ARCH_TYPE     = LOCAL #本地归档类型

ARCH_DEST     = /dmdata/dmrw/arch  #本地归档文件存放路径

ARCH_FILE_SIZE    = 128 #单位 MB,本地单个归档文件最大值

ARCH_SPACE_LIMIT  = 10240    #单位 MB0 表示无限制,范围 1024~4294967294 MB

//备库dmarch.ini配置文件修改

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

主库和备库实例目录下新建文件 dmmal.ini配置文件两边都需要,且内容相同

[dmdba@server01 bakfull]# vim /dmdata/dmrw/dmmal.ini

[dmdba@server02 bakfull]# vim /dmdata/dmrw/dmmal.ini

MAL_CHECK_INTERVAL = 5  #MAL 链路检测时间间隔

MAL_CONN_FAIL_INTERVAL = 5  #判定 MAL 链路断开的时间

[MAL_INST1]

MAL_INST_NAME = dmrw1 #dm.ini 中的 INSTANCE_NAME 一致

MAL_HOST = 10.0.0.11  #MAL 系统监听 TCP 内部网络 IP

MAL_PORT = 61141 #MAL 系统监听 TCP 连接的端口

MAL_INST_HOST = 192.168.118.101  #实例的对外服务 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 = 10.0.0.12  # MAL 系统监听 TCP 内部网络 IP

MAL_PORT = 61141 #MAL 系统监听 TCP 连接的端口

MAL_INST_HOST = 192.168.118.102  #实例的对外服务 IP 地址

MAL_INST_PORT = 5236 #dm.ini 中的 PORT_NUM 一致

MAL_DW_PORT = 52141 #实例对应的守护进程监听 TCP 端口

MAL_INST_DW_PORT = 33141

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

主库和备库实例目录下新建文件  dmwatcher.ini配置文件两边都需要,且内容相同

[dmdba@server01 ~]$ vim /dmdata/dmrw/dmwatcher.ini

[dmdba@server02 ~]$ vim /dmdata/dmrw/dmwatcher.ini

[GRP_RW]

DW_TYPE = GLOBAL  #全局守护类型

DW_MODE = AUTO   #自动切换模式

DW_ERROR_TIME = 10  #远程守护进程故障认定时间

INST_RECOVER_TIME = 60    #主库守护进程启动恢复的间隔时间

INST_ERROR_TIME = 10  #本地实例故障认定时间

INST_OGUID = 453331  #守护系统唯一 OGUID

INST_INI = /dmdata/dmrw/dm.ini  #dm.ini 配置文件路径

INST_AUTO_RESTART = 1   #打开实例的自动启动功能

INST_STARTUP_CMD = /opt/dmdbms/bin/dmserver #命令行方式启动

24 Mount 方式启动数据库实例

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

dmserver /dmdata/dmrw/dm.ini mount

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

disql SYSDBA/SYSDBA

 

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

sp_set_oguid(453331);

 

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

alter database primary;

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

alter database standby;

25启动守护进程

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

dmwatcher /dmdata/dmrw/dmwatcher.ini

SQL> select name,status$ from v$instance;


 

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

26、安装守护监视器。

守护监视器在第三台服务器上安装。

[dmdba@server03 network-scripts]# cd /opt/dmdbms/

[dmdba@server03 dmdbms]# touch dmmonitor.ini

[dmdba@server03 dmdbms]# vim 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_HOSTPORT 对应 dmmal.ini 中的 MAL_DW_PORT

MON_DW_IP = 10.0.0.11:52141

MON_DW_IP = 10.0.0.12:52141

 

[dmdba@server03 ~]$ dmmonitor /opt/dmdbms/dmmonitor.ini

启动后输入 show 命令查看集群状态


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

[root@server01 root]# cd /opt/dmdbms/script/root

[root@server01 root]# ./dm_service_installer.sh -t dmwatcher -p dmrw -watcher_ini /dmdata/dmrw/dmwatcher.ini

[root@server02 root]# ./dm_service_installer.sh -t dmwatcher -p dmrw -watcher_ini /dmdata/dmrw/dmwatcher.ini



28注册监视器服务

只需在第三台服务器,监视器服务器上执行

[root@server03 root]# pwd

/opt/dmdbms/script/root

[root@server03 root]# ./dm_service_installer.sh -t dmmonitor -p confirm -monitor_ini /opt/dmdbms/dmmonitor.ini

 

29验证主备集群同步状态

1.配置普通监视器

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

[dmdba@server01 dmdbms]$ cd /dmdata/dmrw/

[dmdba@server01 dmrw]$ touch dmmonitor.ini

[dmdba@server01 dmrw]$ vim dmmonitor.ini

[dmdba@server01 dmrw]$ cat dmmonitor.ini

MON_DW_Confirm = 0

MON_LOG_PATH = /opt/dmdbms/log

MON_LOG_INTERVAL = 60

MON_LOG_FILE_SIZE = 32

MON_LOG_SPACE_LIMIT = 0

[GRP_RW]

MON_INST_OGUID = 453331

MON_DW_IP = 10.0.0.11:52141

MON_DW_IP = 10.0.0.12:52141

2.在主库节机点启动监视器

[dmdba@server01 dmrw]$ dmmonitor /dmdata/dmrw/dmmonitor.ini

输入 show 命令查看集群状态:


其中守护进程状态 WSTATUS OPEN,实例状态 ISTATUS OPEN,归档类型 RTYPE TIMELY,归档状态 RSTAT VALID

3.端验主库和备库数据同步

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

disql SYSDBA/SYSDBA@192.168.118.101:5236

create table test(id int);

insert into test values (1);

commit;

select * from test;


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

disql SYSDBA/SYSDBA@192.168.118.102:5236

select * from test;

 

结果显示主、备库数据一致,说明集群搭建成功。

30集群的启停顺序

关闭监视器:systemctl stop DmMonitorServiceconfirm

关闭主库守护进程:systemctl stop DmWatcherServicedmrw

关闭备库守护进程:systemctl stop DmWatcherServicedmrw

关闭主库实例:systemctl stop DmServiceddmserver

关闭备库实例:systemctl stop DmServiceddmserver

启动主库实例:systemctl start DmServiceddmserver

启动备库实例:systemctl start DmServiceddmserver

启动主库守护进程:systemctl start DmWatcherServicedmrw

启动备库守护进程:systemctl start DmWatcherServicedmrw

启动监视器:systemctl start DmMonitorServiceconfirm

31、模拟主库故障备库接管场景。

1.在第3台客户端服务器上配置服务名配置文件

[root@server03 ~]# vim /etc/dm_svc.conf

TIME_ZONE=(480)

LANGUAGE=(cn)

# 全局配置区

DMRW=(192.168.118.101:5236,192.168.118.102:5236)

LOGIN_ENCRYPT=(0)

DIRECT=(Y)

# 服务配置区

[DMRW]

SWITCH_TIME=(5) #在服务器之间切换的次数

SWITCH_INTERVAL=(10) #在服务器之间切换的时间间隔,单位为毫秒

RW_SEPARATE=(1) #启用读写分离

RW_PERCENT=(25) #读事务分发到主库的比例

2.在第3台客户端服务器上通过服务名连接数据库

[dmdba@server03 ~]$ disql sysdba/SYSDBA@DMRW

服务器[192.168.118.101:5236]:处于主库打开状态

登录使用时间 : 7.711(ms)

disql V8

SQL> SET TIMING OFF;

SQL> host hostname

server03

SQL> select name,status$ from v$instance;

行号     NAME  STATUS$

---------- ----- -------

1          DMRW1 OPEN

通过查询发现客户端一开始连接的主库。

3.模拟主库故障,在主库上停止网络服务

[root@server01 ~]# service network stop

连续多次执行查询语句,发现连接已经自动切换到备库节点。


测试发现:主机故障,备机会自动接管并持续提供服务。

32、恢复故障主机,将故障主机加入集群。

1.恢复主库节点故障 service network restart



2.网络恢复后,查看两个数据库的角色。


//192.168.118.102 server02 主机上的数据库现在成为主库


//192.168.118.101 server01 主机上的数据库现在成为备库

3.重新启动server01上数据库守护服务。

[dmdba@server01 ~]$ ps -elf|grep dmwatcher

0 S dmdba     4849 17052  0  80   0 - 28178 pipe_w 21:20 pts/8    00:00:00 grep --color=auto dmwatcher

 

[dmdba@server01 ~]$ systemctl status DmWatcherServicedmrw.service

DmWatcherServicedmrw.service - DM Data Watch Service(DmWatcherServicedmrw).

   Loaded: loaded (/usr/lib/systemd/system/DmWatcherServicedmrw.service; enabled; vendor preset: disabled)

   Active: failed (Result: exit-code) since Fri 2022-04-29 13:54:53 CST; 1 day 7h ago

[dmdba@server01 ~]$ systemctl start DmWatcherServicedmrw.service

经查询发现server01上数据库的守护服务DmWatcherServicedmrw.service停止运行

 

启动server01上数据库的守护服务DmWatcherServicedmrw.service

[dmdba@server01 ~]$ systemctl start DmWatcherServicedmrw.service

==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===

Authentication is required to manage system services or units.

Authenticating as: caixiong

Password:

==== AUTHENTICATION COMPLETE ===

[dmdba@server01 ~]$ systemctl status DmWatcherServicedmrw.service

DmWatcherServicedmrw.service - DM Data Watch Service(DmWatcherServicedmrw).

   Loaded: loaded (/usr/lib/systemd/system/DmWatcherServicedmrw.service; enabled; vendor preset: disabled)

   Active: active (running) since Sat 2022-04-30 21:26:25 CST; 3s ago

  Process: 14474 ExecStart=/opt/dmdbms/bin/DmWatcherServicedmrw start (code=exited, status=0/SUCCESS)

 Main PID: 14498 (dmwatcher)

    Tasks: 17

   CGroup: /system.slice/DmWatcherServicedmrw.service

           └─14498 /opt/dmdbms/bin/dmwatcher path=/dmdata/dmrw/dmwatcher.ini

 

守护服务启动后,同时发现server03节点上监控工具中出现新的日志:

#=============================================================================#

[monitor]         2022-04-30 21:26:16: 收到守护进程(DMRW1)消息

[monitor]         2022-04-30 21:26:18: 守护进程(DMRW1)状态切换 [STARTUP-->OPEN]

                  WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN            CLSN            

                  2022-04-30 21:26:12  OPEN           OK        DMRW1            OPEN        STANDBY   VALID    3        27556           27556

 

测试发现:DMWR1数据库守护服务重启后,DMWR1将自动加入集群。

33、手动切换主备集群,恢复原主备集群的位置。

switchover GRP_RW.DMRW1

[monitor]         2022-04-30 21:58:46: 未登录监视器或服务器公钥发生变化,请重新登录!

login

用户名:SYSDBA

密码:

[monitor]         2022-04-30 21:59:31: 登录监视器成功!



DMRW1切为主库,DMWR2切为备库,集群恢复到最开始的状态。

34、测试读事务自动分发到备机的过程。

启用SQL日志,主库和备库都需要设置。读写分离可以通过数据库中的SQL日志来体现。SQL日志默认没有开启。可以使用动态开启SQL日志。开启后。会在数据库安装目录下的log文件夹下面出现一个dmsql_XXXXXX.log的日志文件。

SP_SET_PARA_VALUE(1,'SVR_LOG',1);


读事务自动分发

测试读写分离集群中读取事务是否会自动分发到备机上。测试前先需要在客户端和服务端做相关配置。确定启用读写分离。

 

服务端:

这需要配置一下RW_SEPARATE(1)RW_PERCENT(50)其中RW_SEPARATE表示是否开启读写分离。1表示开启0表示不开启;RW_PERCENT表示读写分离的比例范围是0-100。配置好后需要重启一下实例。

顺序关停主库和备库,集群会检测到数据库关停后会自动启动主库和备库。

SQL> shutdown immediate;

操作已执行

已用时间: 0.801(毫秒). 执行号:0.



注意:这里主备最好都打开。当主备身份切换后也可以正常使用。

 

客户端:


 disql客户端可以支持开启读写分离配置。具体步骤为:

输入./disql /nolog

看到SQL>界面输入login

一直回车看到提示是否读写分离选择“y”然后回车

看到提示读写分离百分百选择合适的数值0-100.这里选50.然后回车

连接到主库之后进行查询之前我们创建的TEST表。


以上操作完成后可以通过查询主备sql日志看看查询操作是否在备机完成。



测试表明:测试读事务会自动分发到备机。


社区地址:https://eco.dameng.com

最后修改时间:2022-05-11 21:59:09
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论