达梦-读写分离集群部署-完整版

达梦读写分离集群搭建

数据库安装

一、包检查

第一步就是要获取对应的数据库包,检查数据库的包和环境是否匹配。
主要检查三个方面:
1)架构,x86平台装x86的数据库包,arm平台装arm的包
2)cpu:lscpu查看cpu信息
3)操作系统
这三个都对应了,那数据库的版本就获取对了。然后拿安装包安装数据库。

dm8_setup_rh6_64_ent_8.1.1.76_20200422.iso
比如这就是一个x86的红帽6版本的dm8数据库安装包。

二、创建组和用户

创建dmdba用户来操作数据库,并使用dmdba用户来安装数据库。

如果不使用dmdba用户安装,有可能会打开图形化工具失败。

#创建安装用户组dinstall
groupadd  -g 12349 dinstall
#创建安装用户dmdba,将新建用户放在用户组dinstall中
useradd  -u 12345 -g  dinstall  -m  -d /home/dmdba  -s  /bin/bash  dmdba

#初始化dmdba用户密码
passwd  dmdba
三、修改openfile参数

输入命令检查openfile参数是否为65536或者无限制
#输入命令检查open file参数:
ulimit -a
若open file参数不是65536或者无限制则用以下方式进行修改:
#输入命令进入limits.conf文件编辑界面:

su - root
vi  /etc/security/limits.conf

进入到limits.conf文件后,键盘按“i”开始插入数据,在文件内容末尾增加内容:

* soft  nofile  65536
* hard  nofile  65536

添加完毕之后先按键盘“esc”键,再输入:wq,回车后退出文件编辑界面。
#输入命令重启服务器
reboot;
#输入命令查看参数修改是否成功
ulimit -a

四、挂载镜像文件并授权

将镜像文件直接上传在根目录,在根目录下将数据库安装包挂载在/mnt目录

mount  -o  loop  dm8_setup_rh6_64_ent_8.1.1.76_20200422.iso  /mnt

授权

chmod  755  ./DMInstall.bin
五、切换安装用户执行安装文件
#切换dmdba用户进行安装。
su - dmdba

#执行安装文件
./DMInstall.bin -i   # -i表示使用命令行方式安装

多种环境详细安装步骤见:
达梦数据库安装步骤

集群搭建

此处以一读一写集群为例,需要明确,一读一写集群需要三台服务器。一台主,一台备,一台监视器。
这三台服务器上都要安装达梦数据库软件。

服务器IP服务器作用
192.168.96.128主数据库 服务器
192.168.96.129备数据库 服务器
192.168.96.130监视器 服务器
一、初始化实例

#在两台服务器上分别用dminit初始化实例(实例初始化时需要明确初始化参数)
初始化的命名行工具的详细使用方法见以下链接:
https://blog.csdn.net/yuDazzle/article/details/107192708?spm=1001.2014.3001.5501

达梦也可以使用图形化工具进行初始化,在安装目录下的tool文件下的dbca工具(数据库配置助手)。

此时初始化数据库实例,指定路径为/dmdata/data(实际使用应该指定在数据大盘),其他参数均为默认(此处仅为实例,需要根据自己的业务系统需求设置初始化参数)。

./dminit path=/dmdata/data   

#在两台服务器上分别启停库一次

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

出现SYSTEM IS READY表示已经启动完成
然后在末尾输入exit退出。

二、配置读写分离集群
1.在主库DM1上使用dmdba用户脱机备份

如果备份过程中出现错误,通过ps -ef | grep dmap查看dmap服务是否在运行中
如果不在运行中
cd /opt/dmdbms/bin
./DmAPService start

#使用达梦的脱机备份工具dmrman备份主库DM1

su - dmdba
cd /opt/dmdbms/bin

此处指定备份文件名为backup20210118

./dmrman ctlstmt="backup database '/dmdata/data/DAMENG/dm.ini' full to backup20210118 backupset '/dmdata/data/DAMENG/backup20210118'"

/dmdata/data/DAMENG/dm.ini 对照的是 数据库初始化的路径下的dm.ini文件
full to backup20210118 中的backup20210118指的是备份的名字
/dmdata/data/DAMENG/backup20210118 指的是备份生成的文件夹路径

备份成功以后,在/dmdata/data/DAMENG路径下会生成一个backup20210118备份文件夹。
#将整个备份文件夹发送到备库DM2

su - dmdba
scp	-r	/dmdata/data/DAMENG/backup20210118/ 192.168.96.129:/dmdata/data/DAMENG
2.在备库DM2上进行备份还原与更新

#在备库上使用dmrman工具,备份文件backup20210118还原、恢复与更新

首先要将接收到的备份文件的权限修改为dmdba;

chown -R dmdba.dinstall /dmdata/data/DAMENG/backup20210118
su - dmdba
cd /opt/dmdbms/bin

还原:

./dmrman ctlstmt="restore database '/dmdata/data/DAMENG/dm.ini' from backupset '/dmdata/data/DAMENG/backup20210118'"

恢复:

./dmrman ctlstmt="recover database '/dmdata/data/DAMENG/dm.ini' from backupset '/dmdata/data/DAMENG/backup20210118'"

更新db_magic:

./dmrman ctlstmt="recover database '/dmdata/data/DAMENG/dm.ini' update db_magic"
3.配置主库DM1

1)修改主库dm.ini文件
vi /dmdata/data/DAMENG/dm.ini
修改以下参数值

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

2)配置主库dmmal.ini
在/dmdata/data/DAMENG文件夹下,创建dmmal.ini文件

vi dmmal.ini

将以下内容复制进去
注意IP地址相对应

MAL_CHECK_INTERVAL = 5 
MAL_CONN_FAIL_INTERVAL = 5 
[MAL_INST1] 
MAL_INST_NAME = DM1
MAL_HOST =192.168.96.128
MAL_PORT = 61141 
MAL_INST_HOST = 192.168.96.128
MAL_INST_PORT = 5236
MAL_DW_PORT = 52141 
MAL_INST_DW_PORT = 33141 
[MAL_INST2] 
MAL_INST_NAME = DM2 
MAL_HOST = 192.168.96.129
MAL_PORT = 61142 
MAL_INST_HOST = 192.168.96.129
MAL_INST_PORT = 5236 
MAL_DW_PORT = 52142 
MAL_INST_DW_PORT = 33142

3)配置主库dmarch.ini
在/dmdata/data/DAMENG文件夹下,创建dmarch.ini文件

vi dmarch.ini

文件内容如下:

ARCH_WAIT_APPLY=1
[ARCHIVE_REALTIME1] 
ARCH_TYPE = REALTIME
ARCH_DEST = DM2  
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL 
ARCH_DEST = /dmdata/data/DAMENG/arch 
ARCH_FILE_SIZE = 512 
ARCH_SPACE_LIMIT = 10240

(根据实际情况设置ARCH_SPACE_LIMIT值,此处设置归档上限为10G)

使用dmdba用户在/dmdata/data/DAMENG文件夹下创建arch文件夹

su - dmdba
cd /dmdata/data/DAMENG
mkdir -p arch

4)配置主库dmwatcher.ini
在/dmdata/data/DAMENG文件夹下,创建dmwatcher.ini文件

vi dmwatcher.ini

文件内容如下:

[GRP1]
DW_TYPE = GLOBAL 
DW_MODE = AUTO 
DW_ERROR_TIME = 10 
INST_RECOVER_TIME = 60 
INST_ERROR_TIME = 10 
INST_OGUID = 453331 
INST_INI = /dmdata/data/DAMENG/dm.ini 
INST_AUTO_RESTART = 1 
INST_STARTUP_CMD = /opt/dmdbms/bin/dmserver 
RLOG_SEND_THRESHOLD = 0 
RLOG_APPLY_THRESHOLD = 0 

5)使用dmdba用户将配置文件发送到备库
#将dmmal.ini dmarch.ini dmwatcher.ini发到备库DM2

scp dmmal.ini dmarch.ini dmwatcher.ini @192.168.96.129:/dmdata/data/DAMENG 

并在备库检查这个三个文件的权限是否属于dmdba:dinstall。
如果不属于,使用以下语句修改权限:

chown -R dmdba:dinstall  dmmal.ini
chown -R dmdba:dinstall  dmwatcher.ini
chown -R dmdba:dinstall  dmarch.ini

6)配置主库OGUID
#到数据库安装目录下的bin目录

su - dmdba
cd /opt/dmdbms/bin

用dmdba用户以mount模式开启主库

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

一直到显示SYSTEM IS READY启动完成。此时不要关闭这个窗口,重新在主服务器上开启一个窗口。

切换到dmdba用户,进入数据库安装bin目录

su - dmdba
cd /opt/dmdbms/bin

使用达梦的系统管理员用户SYSDBA登录达梦的disql工具,默认密码为SYSDBA。

./disql SYSDBA/SYSDBA

#登录成功后,修改OGUID
OGUID号与dmwatcher.ini中的INST_OGUID 保持一致

sp_set_oguid(453331);

#修改数据库模式

alter database primary;

修改成功以后,在./dmserver /dmdata/data/DAMENG/dm.ini mount窗口后输入exit退出。

4.配置备库DM2

1)修改配置文件dm.ini的内容
分别将INSTANCE_NAME设置为DM2

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

2)修改dmarch.ini
将ARCH_DEST参数修改为除自己外的库

ARCH_WAIT_APPLY=1
[ARCHIVE_REALTIME1] 
ARCH_TYPE = REALTIME
ARCH_DEST = DM1 
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL 
ARCH_DEST = /dmdata/data/DAMENG/arch 
ARCH_FILE_SIZE = 512 
ARCH_SPACE_LIMIT = 10240

使用dmdba用户在/dmdata/data/DAMENG文件夹下创建arch文件夹。

su - dmdba
cd /dmdata/data/DAMENG
mkdir -p arch

3)配置备库的OGUID
#使用dmdba用户以mount模式开启备库

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

一直到显示SYSTEM IS READY启动完成。此时不要关闭这个窗口,重新在主服务器上开启一个窗口。

切换到dmdba用户,进入数据库安装bin目录

su - dmdba
cd /opt/dmdbms/bin

使用达梦的系统管理员用户SYSDBA登录达梦的disql工具,默认密码为SYSDBA。

./disql SYSDBA/SYSDBA

#登录disql,修改OGUID

sp_set_oguid(453331);

#修改数据库模式为备库

alter database standby;

修改成功以后,在./dmserver /dmdata/data/DAMENG/dm.ini mount窗口后输入exit退出。

5.注册服务

在主和备数据库服务器上分别注册实例服务和守护进程服务。
在监视器所在服务器上注册监视器服务。

注册服务的脚本在安装目录下dmdbms的script/root下面。

使用root用户在主数据库服务器上执行以下命令

--注册主库实例服务
./dm_service_installer.sh -t dmserver -dm_ini /home/dmdba/data/DAMENG/dm.ini -m mount -p DM1
--注册主库守护进程服务
./dm_service_installer.sh -t dmwatcher -watcher_ini /home/dmdba/data/DAMENG/dmwatcher.ini -p DM1

注册成功以后会在/opt/dmdbms/bin目录下生成对应的服务脚本。
使用root用户在备数据库服务器上执行以下命令

--注册备库服务
./dm_service_installer.sh -t dmserver -dm_ini /home/dmdba/data/DAMENG/dm.ini -m mount -p DM2
--注册备库守护进程服务
./dm_service_installer.sh -t dmwatcher -watcher_ini /home/dmdba/data/DAMENG/dmwatcher.ini -p DM2

在监视器服务器上使用root用户在备数据库服务器上执行以下命令。

--注册监视器服务
./dm_service_installer.sh -t dmmonitor -monitor_ini /home/dmdba/data/DAMENG/dmmonitor.ini -p DM
6配置确认监视器

在192.168.96.130服务器上安装数据库,然后配置确认监视器。
此处数据库安装路径为/opt/dmdbms/bin

监视器配置文件路径:
/opt/dmdbms/dmmonitor.ini
监视器日志路径:
/opt/dmdbms/log

配置dmmonitor.ini
在监视器服务器上使用dmdba用户创建dmmonitor.ini文件

su - dmdba
vi dmmonitor.ini

dmmonitor.ini文件内容如下:
MON_INST_OGUID与dmwatcher.ini中的INST_OGUID 保持一致

MON_DW_Confirm = 1
MON_LOG_PATH = /opt/dmdbms/log
MON_LOG_INTERVAL = 60
MON_LOG_FILE_SIZE = 32
MON_LOG_SPACE_LIMIT = 0
[GRP1]
MON_INST_OGUID = 453331 
MON_DW_IP = 192.168.96.128:52141
MON_DW_IP = 192.168.96.129:52142

到此处集群已经初步搭建好;可以把集群启动起来;
启动集群的顺序为:
主库实例(DmServiceDM1)——备库实例(DmServiceDM2)——主库守护进程(DmWatcherServiceDM1)——备库守护进程(DmWatcherServiceDM2)——监视器服务(DmMonitorServiceDM)
关闭集群的顺序为
监视器服务(DmMonitorServiceDM)——备库守护进程(DmWatcherServiceDM2)——主库守护进程(DmWatcherServiceDM1)——主库实例(DmServiceDM1)——备库实例(DmServiceDM2)

到目前为止,只是进行集群的搭建,为保障安全和性能,还需进行优化和设置备份;
比如MAX_SESSIONS,BUFFER等参数的修改;

配置服务名

**服务名的作用是可以在url串中替代IP地址连接整个集群**
达梦安装时会生成一个配置文件dm_svc.conf,Linux服务器上该文件存在目录/etc下面;
该文件中包含 DM 各接口及客户端需要配置的一些参数
因此在应用服务器上修改dm_svc.conf文件。
如果/etc下没有dm_svc.conf就手动创建一个。

cd /etc
vi dm_svc.conf

dm_svc.conf配置内容如下:

TIME_ZONE=(480)
LANGUAGE=(cn)
DM=(192.168.96.128:5236,192.168.96.129:5236)

[DM]
login_mode=(1)
RW_SEPARATE=1

其中,
TIME_ZONE和LANGUAGE分别对应操作系统时区和语言;
DM=(192.168.96.128:5236,192.168.96.129:5236)表示,把主机和备机都集成一个名字DM;
login_mode的值为1,表示只连接主库;这个一定要局部配置,否则可能会影响disql的使用;
RW_SEPARATE=1,表示开启读写分离;

此处的服务名为DM(可以根据需要,设置成别的名字),即可以在url串中使用DM来替代IP地址。

jdbc连接达梦数据库
驱动类名:dm.jdbc.driver.DmDriver
驱动包在安装目录下的driver/jdbc下
URL串格式:
单机: jdbc:dm://IP:端口
集群:jdbc:dm://服务名
例如此处:
jdbc:dm://DM?rwSeparate=1&rwPercent=25

设置备份作业

达梦数据库设置定时作业备份数据库

达梦数据库使用:
如何使用客户端工具连接服务器端
达梦数据库之模式对象管理,语法汇总

达梦云适配中心

  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
要实现Spring Boot与达梦数据库读写分离集群,您需要进行以下步骤: 1. 配置数据源:打开Spring Boot项目的application.properties文件,配置主库和从库的数据源信息。例如: ``` # 主库数据源 spring.datasource.primary.url=jdbc:dme://localhost:5236/demo spring.datasource.primary.username=root spring.datasource.primary.password=root # 从库数据源 spring.datasource.secondary.url=jdbc:dme://localhost:5236/demo spring.datasource.secondary.username=root spring.datasource.secondary.password=root ``` 2. 配置数据源路由:使用Spring Boot提供的AbstractRoutingDataSource类,创建一个数据源路由器,根据SQL语句的类型(读/写)选择合适的数据源。例如: ``` public class DynamicDataSource extends AbstractRoutingDataSource { @Override protected Object determineCurrentLookupKey() { // 根据上下文选择合适的数据源 return DatabaseContextHolder.getDatabaseType(); } } ``` 3. 配置数据源上下文:使用ThreadLocal类保存当前线程的数据源类型,以便在数据源路由器中选择正确的数据源。例如: ``` public class DatabaseContextHolder { private static final ThreadLocal<DatabaseType> contextHolder = new ThreadLocal<>(); public static void setDatabaseType(DatabaseType databaseType) { contextHolder.set(databaseType); } public static DatabaseType getDatabaseType() { return contextHolder.get(); } public static void clearDatabaseType() { contextHolder.remove(); } } public enum DatabaseType { PRIMARY, SECONDARY } ``` 4. 配置事务管理器:使用Spring Boot提供的JpaTransactionManager类,为主库和从库分别配置事务管理器。例如: ``` @Configuration @EnableTransactionManagement public class TransactionConfig { @Autowired @Qualifier("primaryEntityManagerFactory") private EntityManagerFactory primaryEntityManagerFactory; @Autowired @Qualifier("secondaryEntityManagerFactory") private EntityManagerFactory secondaryEntityManagerFactory; @Bean(name = "primaryTransactionManager") public PlatformTransactionManager primaryTransactionManager() { JpaTransactionManager transactionManager = new JpaTransactionManager(); transactionManager.setEntityManagerFactory(primaryEntityManagerFactory); return transactionManager; } @Bean(name = "secondaryTransactionManager") public PlatformTransactionManager secondaryTransactionManager() { JpaTransactionManager transactionManager = new JpaTransactionManager(); transactionManager.setEntityManagerFactory(secondaryEntityManagerFactory); return transactionManager; } } ``` 5. 配置JPA和Hibernate:为主库和从库分别配置JPA和Hibernate。例如: ``` @Configuration @EnableJpaRepositories( basePackages = "com.example.demo.primary", entityManagerFactoryRef = "primaryEntityManagerFactory", transactionManagerRef = "primaryTransactionManager" ) @EnableTransactionManagement public class PrimaryDataSourceConfig { @Primary @Bean(name = "primaryDataSource") @ConfigurationProperties(prefix = "spring.datasource.primary") public DataSource primaryDataSource() { return DataSourceBuilder.create().build(); } @Primary @Bean(name = "primaryEntityManagerFactory") public LocalContainerEntityManagerFactoryBean primaryEntityManagerFactory(EntityManagerFactoryBuilder builder, @Qualifier("primaryDataSource") DataSource dataSource) { return builder .dataSource(dataSource) .packages("com.example.demo.primary") .persistenceUnit("primary") .build(); } @Primary @Bean(name = "primaryJpaProperties") @ConfigurationProperties(prefix = "spring.jpa.primary") public JpaProperties primaryJpaProperties() { return new JpaProperties(); } @Primary @Bean(name = "primaryHibernateProperties") @ConfigurationProperties(prefix = "spring.jpa.primary.hibernate") public HibernateProperties primaryHibernateProperties() { return new HibernateProperties(); } } @Configuration @EnableJpaRepositories( basePackages = "com.example.demo.secondary", entityManagerFactoryRef = "secondaryEntityManagerFactory", transactionManagerRef = "secondaryTransactionManager" ) @EnableTransactionManagement public class SecondaryDataSourceConfig { @Bean(name = "secondaryDataSource") @ConfigurationProperties(prefix = "spring.datasource.secondary") public DataSource secondaryDataSource() { return DataSourceBuilder.create().build(); } @Bean(name = "secondaryEntityManagerFactory") public LocalContainerEntityManagerFactoryBean secondaryEntityManagerFactory(EntityManagerFactoryBuilder builder, @Qualifier("secondaryDataSource") DataSource dataSource) { return builder .dataSource(dataSource) .packages("com.example.demo.secondary") .persistenceUnit("secondary") .build(); } @Bean(name = "secondaryJpaProperties") @ConfigurationProperties(prefix = "spring.jpa.secondary") public JpaProperties secondaryJpaProperties() { return new JpaProperties(); } @Bean(name = "secondaryHibernateProperties") @ConfigurationProperties(prefix = "spring.jpa.secondary.hibernate") public HibernateProperties secondaryHibernateProperties() { return new HibernateProperties(); } } ``` 6. 使用数据源:在需要使用数据源的地方,通过调用DatabaseContextHolder.setDatabaseType()方法设置当前线程的数据源类型,然后执行SQL语句即可。例如: ``` @Service public class UserService { @Autowired private UserRepository userRepository; @Transactional public void save(User user) { DatabaseContextHolder.setDatabaseType(DatabaseType.PRIMARY); userRepository.save(user); DatabaseContextHolder.setDatabaseType(DatabaseType.SECONDARY); userRepository.save(user); } } ``` 这样,就可以实现Spring Boot与达梦数据库读写分离集群了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值