达梦数据库dm8守护集群部署手册

news2024/11/24 19:57:24

环境说明

操作系统:liunx-centos7.6

服务器:3台虚拟机(主备数据库各一台,监视器一台(可选))

达梦数据库版本:达梦V8

一、安装前准备工作

参考达梦官方文档:https://eco.dameng.com/document/dm/zh-cn/ops/before-installation.html

1、系统环境(all three nodes)

1.1 关闭防火墙

systemctl stop firewalld

systemctl disable firewalld

1.2 关闭selinux

##临时关闭 SELinux:

[root@localhost ~]# setenforce 0

##永久关闭 SELinux

改配置文件:/etc/selinux/config,修改 SELINUX=disabled

1.3 关闭swap

内存足够的情况下关闭,不足的话可以不用关闭。

1.4 关闭透明大页

(1) 查看透明大页内存

##使用下图中命令查看当前操作系统透明大页内存配置。

[root@]# grep -i huge /proc/meminfo

[root@]# cat /sys/kernel/mm/transparent_hugepage/enabled

(2) 关闭透明大页内存

##通过修改 grub 配置,在 “GRUB_CMDLINE_LINUX=” 配置参数结尾加入 “transparent_hugepage=never”,可以永久关闭透明大页内存。

[root@~]# vim /etc/default/grub

(3) 重新生成 grub 配置

##如果操作系统安装时,使用 Legacy 模式引导安装,则使用以下命令重新生成 grub。

[root@~] # grub2-mkconfig -o /boot/grub2/grub.cfg

(4) 生成 grub 后,重启操作系统查看配置

可以看到系统中目前透明大页内存为 0,并且禁用透明大页内存(never)。查看 /sys/kernel/mm/transparent_hugepage/defrag 配置文件缺省配置为 “madvise”。

1.5 调整 limits.conf 参数

##编辑 limits.conf 文件

[root@~]# vi /etc/security/limits.conf

##在最后面添加以下内容

* soft nproc 10240

* hard nproc 10240

 或者指定用户

dmdba soft nproc 10240

dmdba hard nproc 10240

dmdba soft nofile 65536

dmdba hard nofile 65536

dmdba hard data unlimited

dmdba soft data unlimited

dmdba hard fsize unlimited

dmdba soft fsize unlimited

dmdba soft core unlimited

dmdba hard core unlimited

##重启操作系统

[root@]# reboot

##再次确认

[dmdba@]# ulimit –a

2、集群规划

序号

事项

数据库节点1

数据库节点2

监视器节点(可选)

1

业务IP

192.192.103.98

192.192.103.99

192.192.103.100

2

心跳 IP

192.192.103.98

192.192.103.99

 

3

实例名

DMSERVER1

DMSERVER2

DEM

4

实例端口

5236

5236

5236

5

MAL 端口

5336

5336

 

6

MAL 守护进程端口

5436

5436

 

7

守护进程端口

5536

5536

 

8

OGUID

45331

45331

 

9

守护组

GRP1

GRP1

 

10

安装目录

/dm8/dmdbms

/dm8/dmdbms

/dm8/dmdbms

11

实例目录

/dm8/dmdbms/data

/dm8/dmdbms/data

/dm8/dmdbms/data

12

归档上限

51200

51200

 

二、集群搭建

1、数据库软件安装(all three nodes)

参考官方文档:安装前准备 | 达梦技术文档

1.1上传解压安装包并挂在镜像

#mount -o loop dm8_20231116_x86_rh6_64.iso /mnt

1.2 创建用户及目录并授权

groupadd dinstall

useradd -g dinstall dmdba

echo dmdba|passwd --stdin dmdba

mkdir -p /dm8/{soft,arch}

chown -R dmdba. /dm8

chmod -R 777 /dm8

1.3 配置用户profile

$ vi ~/.bash_profile文件,添加以下行

export PATH=/dm8/dmdbms/bin:$PATH

$ source ~/.bash_profile

1.4 执行安装

1)图形安装(本次使用图形安装)

#xhost +

#su – dmdba

#export DISPLAY=xx.xx.xx.xx:0.0

在终端进入到安装程序所在文件夹,执行以下命令进行命令行安装

[root@test1 mnt]# ./DMInstall.bin

2)命令交互安装

在终端进入到安装程序所在文件夹,执行以下命令进行命令行安装:

[root@test1 mnt]# ./DMInstall.bin -i

2、初始化实例

2.1 初始化(all three nodes)

1)命令行

#数据库1

[dmdba@test1~]$ /dm8/dmdbms/bin/dminit  PATH=/dm8/dmdbms/data/ INSTANCE_NAME=DMSERVER1 PAGE_SIZE=32 EXTENT_SIZE=32 LOG_SIZE=2048

#数据库2

[dmdba@test2~]$ /dm8/dmdbms/bin/dminit  PATH=/dm8/dmdbms/data/ INSTANCE_NAME=DMSERVER2 PAGE_SIZE=32 EXTENT_SIZE=32 LOG_SIZE=2048

#Monitor

[dmdba@test3~]$ /dm8/dmdbms/bin/dminit  PATH=/dm8/dmdbms/data/ INSTANCE_NAME=DEM PAGE_SIZE=32 EXTENT_SIZE=32 LOG_SIZE=2048

2)图形 (本次测试使用图形)

在终端进入到安装程序所在文件夹,执行以下命令进行命令行安装[dmdba@test1~]$ cd /dm8/dmdbms/tool

[dmdba@test1~]$./dbca.sh

test2\test3执行相同方法安装。

2.2 启动服务(all three nodes)

1root用户启动

#systemctl start DMSERVER1

#systemctl start DMSERVER2

或者

2dmdba用户启动

[dmdba@test1 bin]$ DmServiceDMSERVER1 start

[dmdba@test2 bin]$ DmServiceDMSERVER2 start

#图形化初始化过程中服务已经启动,可忽略此步骤。

2.3 开启归档(all db nodes)

[dmdba@~]$ disql SYSDBA/dameng123@localhost:5236

SQL>ALTER DATABASE MOUNT;

SQL>ALTER DATABASE ARCHIVELOG;

SQL>ALTER DATABASE ADD ARCHIVELOG 'DEST=/dm8/arch, TYPE=LOCAL, FILE_SIZE=1024, SPACE_LIMIT=51200';

SQL>ALTER DATABASE OPEN;

2.4 脱机备份还原
2.4.1 正常关闭数据库(all db nodes)

[dmdba@test1 bin]$ DmServiceDMSERVER1 stop

[dmdba@test2 bin]$ DmServiceDMSERVER2 stop

2.4.2 数据库1进行脱机备份(DMSERVER1)

[dmdba@test1 bin]$ dmrman

RMAN> BACKUP DATABASE '/dm8/dmdbms/data/DAMENG/dm.ini' FULL BACKUPSET  '/dm8/BACKUP_FILE_01'

2.4.3 拷贝备份文件到备库所在机器(DMSERVER1)

[dmdba@test1 ~]$ scp -r /dm8/BACKUP_FILE_01 192.192.103.99:/dm8/

4 执行脱机数据库还原与恢复(DMSERVER2)

[dmdba@test2 bin]$ dmrman

RMAN>RESTORE DATABASE '/dm8/dmdbms/data/DAMENG/dm.ini' FROM BACKUPSET '/dm8/BACKUP_FILE_01'

RMAN>RECOVER DATABASE '/dm8/dmdbms/data/DAMENG/dm.ini' FROM BACKUPSET '/dm8/BACKUP_FILE_01'

RMAN>RECOVER DATABASE '/dm8/dmdbms/data/DAMENG/dm.ini' UPDATE DB_MAGIC

3、主备库配置文件

3.1 配置 dm.ini(主库备库都要修改)

#主库

INSTANCE_NAME = DMSERVER1     #数据库实例名

PORT_NUM = 5236              #数据库实例监听端口

DW_INACTIVE_INTERVAL = 60      #接收守护进程消息超时时间

ALTER_MODE_STATUS = 0        #不允许手工方式修改实例模式/状态

ENABLE_OFFLINE_TS = 2       #不允许备库 OFFLINE 表空间

MAL_INI = 1            #打开 MAL 系统

ARCH_INI = 1          #打开归档配置

RLOG_SEND_APPLY_MON = 64          #统计最近 64 次的日志发送信息

#备库

INSTANCE_NAME = DMSERVER2        #数据库实例名

PORT_NUM = 5236                   #数据库实例监听端口

DW_INACTIVE_INTERVAL = 60        #接收守护进程消息超时时间

ALTER_MODE_STATUS = 0        #不允许手工方式修改实例模式/状态

ENABLE_OFFLINE_TS = 2         #不允许备库 OFFLINE 表空间

MAL_INI = 1                #打开 MAL 系统

ARCH_INI = 1               #打开归档配置

RLOG_SEND_APPLY_MON = 64           #统计最近 64 次的日志发送信息

3.2 配置 dmmal.ini(主库备库一致)

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

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

[MAL_INST1]

MAL_INST_NAME = DMSERVER1      #实例名,和 dm.ini 的 INSTANCE_NAME 一致

MAL_HOST = 192.192.103.98        #MAL 系统监听 TCP 连接的 IP 地址

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

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

MAL_INST_PORT = 5236        #实例对外服务端口,和 dm.ini 的 PORT_NUM 一致

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

MAL_INST_DW_PORT = 5536   #实例监听守护进程 TCP 连接的端口

[MAL_INST2]

MAL_INST_NAME = DMSERVER2

MAL_HOST = 192.192.103.99

MAL_PORT = 5336

MAL_INST_HOST = 192.192.103.99

MAL_INST_PORT = 5236

MAL_DW_PORT = 5436

MAL_INST_DW_PORT = 5536

注: MAL_HOST与MAL_INST_HOST在生产环境下要设置不同网卡不同IP地址,MAL_HOST用于对外服务地址,MAL_INST_HOST用于集群间的心跳通讯、数据同步。

3.3 配置 dmarch.ini

#主库

ARCH_WAIT_APPLY            = 0   #0:高性能 1:事务一致

[ARCHIVE_LOCAL]

ARCH_TYPE                = LOCAL    #本地归档类型

ARCH_DEST                = /dm8/arch/    #本地归档存放路径

ARCH_FILE_SIZE           = 1024   #单个归档大小,单位 MB

ARCH_SPACE_LIMIT         = 51200    #单个归档大小,单位 MB

[ARCHIVE_REALTIME1]

ARCH_TYPE                = REALTIME  #实时归档类型

ARCH_DEST                = DMSERVER2  #实时归档目标实例名

#备库

ARCH_WAIT_APPLY            = 0

[ARCHIVE_LOCAL]

ARCH_TYPE                = LOCAL

ARCH_DEST                = /dm8/arch/ 

ARCH_FILE_SIZE           = 1024 

ARCH_SPACE_LIMIT         = 51200 

[ARCHIVE_REALTIME1]

ARCH_TYPE                = REALTIME

ARCH_DEST                = DMSERVER1

3.4 配置 dmwatcher.ini(主库备库一致)

[GRP1]

DW_TYPE                 = GLOBAL  #全局守护类型

DW_MODE                = MANUAL  #MANUAL:故障手切 AUTO:故障自切

DW_ERROR_TIME           = 20  #远程守护进程故障认定时间,单位秒

INST_ERROR_TIME          = 20   #本地实例故障认定时间,单位秒

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

INST_OGUID               = 45331  #守护系统唯一 OGUID 值,这个值可以自定义

INST_INI                 = /dm8/dmdbms/data/DAMENG/dm.ini   #dm.ini 文件路径

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

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

RLOG_SEND_THRESHOLD      = 0  #指定主库发送日志到备库的时间阈值,默认关闭

RLOG_APPLY_THRESHOLD     = 0  #指定备库重演日志的时间阈值,默认关闭

3.5 注册dmwatcher服务

--DMSERVER1

#/dm8/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -watcher_ini /dm8/dmdbms/data/DAMENG/dmwatcher.ini -p DMSERVER1

--DMSERVER2

#/dm8/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -watcher_ini /dm8/dmdbms/data/DAMENG/dmwatcher.ini -p DMSERVER2

4、修改模式

4.1 主库
--mount启动
#/dm8/dmdbms/bin/dmserver /dm8/dmdbms/data/DAMENG/dm.ini mount 
--连接修改oguid与primary

[dmdba@test1 DAMENG]$ disql SYSDBA/dameng123@localhost:5236

服务器[localhost:5236]:处于普通配置状态

登录使用时间 : 10.368(ms)

disql V8

SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);

DMSQL 过程已成功完成

已用时间: 35.799(毫秒). 执行号:1.

SQL> sp_set_oguid(45331);

DMSQL 过程已成功完成

已用时间: 57.060(毫秒). 执行号:2.

SQL> alter database primary;

操作已执行

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

SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);

DMSQL 过程已成功完成

已用时间: 28.823(毫秒). 执行号:3.

4.2 备库
--mount启动
#/dm8/dmdbms/bin/dmserver /dm8/dmdbms/data/DAMENG/dm.ini mount

--连接修改oguid与standby

[dmdba@test2 DAMENG]$ disql SYSDBA/dameng123@localhost:5236

服务器[localhost:5236]:处于普通配置状态

登录使用时间 : 9.503(ms)

disql V8

SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);

sp_set_oguid(45331);DMSQL 过程已成功完成

已用时间: 30.513(毫秒). 执行号:1.

SQL>

DMSQL 过程已成功完成

已用时间: 121.479(毫秒). 执行号:2.

SQL> alter database standby;

操作已执行

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

SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);

DMSQL 过程已成功完成

已用时间: 28.993(毫秒). 执行号:3.

5、启动主备库守护

5.1 启动

#启动守护进程,先启动主库,后启动备库;

--方式1

[dmdba@test1 DAMENG]$ dmwatcher /dm8/dmdbms/data/DAMENG/dmwatcher.ini

DMWATCHER[4.0] V8

DMWATCHER[4.0] IS READY

[dmdba@test2 DAMENG]$ dmwatcher /dm8/dmdbms/data/DAMENG/dmwatcher.ini

DMWATCHER[4.0] V8

DMWATCHER[4.0] IS READY

--方式2注册服务后启动

#主库

#/dm8/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -watcher_ini /dm8/dmdbms/data/DAMENG/dmwatcher.ini -p DMSERVER1

#systemctl start DmWatcherServiceDMSERVER1.service

#备库

#/dm8/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -watcher_ini /dm8/dmdbms/data/DAMENG/dmwatcher.ini -p DMSERVER2

#systemctl start DmWatcherServiceDMSERVER2.service

dmwatcher启动后,自动将主备库从mount状态启动到open状态。

5.2 查看状态

[dmdba@test1 bin]$ disql sysdba/dameng123@localhost:5236

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

登录使用时间 : 8.704(ms)

disql V8

SQL>

[dmdba@test2 bin]$ disql sysdba/dameng123@localhost:5236

服务器[localhost:5236]:处于备库打开状态

登录使用时间 : 8.704(ms)

disql V8

SQL>

6、监视器的配置与启用

6.1 配置文件dmmonitor.ini

[dmdba@test3 ~]$ vi /dm8/dmdbms/data/DEM/dmmonitor.ini

MON_DW_CONFIRM             = 1  #0:非确认(故障手切) 1:确认(故障自切)

MON_LOG_PATH               = ../log  #监视器日志文件存放路径

MON_LOG_INTERVAL           = 60  #每隔 60s 定时记录系统信息到日志文件

MON_LOG_FILE_SIZE          = 512  #单个日志大小,单位 MB

MON_LOG_SPACE_LIMIT        = 2048  #日志上限,单位 MB

[GRP1]

MON_INST_OGUID           = 45331   #组 GRP1 的唯一 OGUID 值,与dmwatcher.ini一致

MON_DW_IP                = 192.192.103.98:5436   #IP 对应 MAL_HOST,PORT 对应 MAL_DW_PORT

MON_DW_IP                = 192.192.103.99:5436   #IP 对应 MAL_HOST,PORT 对应 MAL_DW_PORT

6.2 启动监视器

--前台启动

[dmdba@test3 DEM]$ dmmonitor /dm8/dmdbms/data/DEM/dmmonitor.ini

--后台启动

[dmdba@test3 DEM]$ /dm8/dmdbms/bin/DmMonitorServiceMonitor start

6.3 监视器使用

命令

含义

list

查看守护进程的配置信息

show global info

查看所有实例组的信息

tip

查看系统当前运行状态

login

登录监视器

logout

退出登录

choose switchover GRP1

主机正常:查看可切换为主机的实例列表

switchover GRP1.实例名

主机正常:使用指定组的指定实例,切换为主机

choose takeover GRP1

主机故障:查看可切换为主机的实例列表

takeover GRP1.实例名

主机故障:使用指定组的指定实例,切换为主机

choose takeover force GRP1

强制切换:查看可切换为主机的实例列表

takeover force GRP1.实例名

强制切换:使用指定组的指定实例,切换为主机

主机故障后,在备机执行 SELECT SF_DW_CHECK_TAKEOVER(); MON_DW_CONFIRM 参数设置为1:可接管;设置为0:不可接管】。

三、集群管理

1、启停集群

##启动集群

#test1/test2机器,顺序启动wachter即可

[dmdba@test1 ~]$ /dm8/dmdbms/bin/DmWatcherServiceWatcher start

[dmdba@test2 ~]$ /dm8/dmdbms/bin/DmWatcherServiceWatcher start

##停止集群

#test1/test2机器,顺序关闭watcher

[dmdba@test1~]$ /dm8/dmdbms/bin/DmWatcherServiceWatcher stop

[dmdba@test2~]$ /dm8/dmdbms/bin/DmWatcherServiceWatcher stop

#test1机器 关闭数据库服务

[dmdba@test1 ~]$ /dm8/dmdbms/bin/DmServiceDMSERVER1 stop

#test2机器 关闭数据库服务

[dmdba@test2 ~]$ /dm8/dmdbms/bin/DmServiceDMSERVER2 stop

2、switchover主备切换

2.1 使用监视器查看集群状态

2.2 使用监视器进行主备切换

#查看可切换的正常主机

choose switchover GRP1 

Can choose one of the following instances to do switchover:

1: DMSERVER2

#执行切换

switchover DMSERVER2

2.3 查看切换结果

监视器内查看切换结果,如下:

分别登录主备数据库查看状态:

--test1

[dmdba@test1 DAMENG]$ disql sysdba/dameng123@localhost:5236

服务器[localhost:5236]:处于备库打开状态

登录使用时间 : 6.863(ms)

disql V8

SQL>

--test2

[dmdba@test2 DAMENG]$ disql sysdba/dameng123

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

登录使用时间 : 7.172(ms)

disql V8

SQL>

2.4 读写测试

--test2

--test1

3、failover故障切换

3.1 模拟主库宕机

手动关闭test2系统

[root@test2 bin]# poweroff

3.2 监视器查看主节点关闭后集群状态

3.3 使用监视器进行faliover故障切换

#查看可切换主机

choose takeover GRP1

Can choose one of the following instances to do takeover:

1: DMSERVER1

#执行切换

takeover DMSERVER1

3.4 查看切换结果

#切换完成,使用监视器查看结果如下:

备节点提升为primary。

#查看新主库是否正常可读写

3.5 failover备库恢复
3.5.1 恢复test2系统

系统启动后,watcher和数据库自动启动,但是已经脱离集群节点,查看监视器,结果如下:

3.5.2 恢复test2数据库
1、主库在线备份

SQL> backup database backupset '/dm8/full_bak2';

#拷贝备份文件至备库

scp -r full_bak2/ test2:/dm8/

2、关闭备库守护进程和数据库

[dmdba@test2 ~]$ DmWatcherServiceDMSERVER stop

Stopping DmWatcherServiceDMSERVER:                         [ OK ]

[dmdba@test2 ~]$ DmServiceDMSERVER2 stop

Stopping DmServiceDMSERVER2:                               [ OK ]

3、备库还原

注意:首先更改备库所有备份控制文件的权限,如下

[root@test2 full_bak2]# chown -R dmdba. /dm8/dmdbms/data/DAMENG/ctl_bak/dm_*.ctl

恢复分三步:还原数据库、应用备份期间产生的日志、更新魔术

RMAN>  restore database '/dm8/dmdbms/data/DAMENG/dm.ini' from backupset '/dm8/full_bak2';

RMAN> recover database '/dm8/dmdbms/data/DAMENG/dm.ini' from backupset '/dm8/full_bak2';

RMAN> recover database '/dm8/dmdbms/data/DAMENG/dm.ini' update db_magic;

4、mount状态改变数据库模式

[dmdba@test2 ~]$ dmserver /dm8/dmdbms/data/DAMENG/dm.ini mount

[dmdba@test2 dm8]$ disql sysdba/dameng123

服务器[LOCALHOST:5236]:处于主库配置状态

登录使用时间 : 7.791(ms)

disql V8

SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);

DMSQL 过程已成功完成

已用时间: 151.800(毫秒). 执行号:1.

SQL> sp_set_oguid(45331);

DMSQL 过程已成功完成

已用时间: 77.489(毫秒). 执行号:2.

SQL> alter database standby;

操作已执行

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

SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);

DMSQL 过程已成功完成

已用时间: 29.309(毫秒). 执行号:3.

5、启动备库守护进程

[dmdba@test2 dm8]$ DmWatcherServiceDMSERVER start

Starting DmWatcherServiceDMSERVER:                         [ OK ]

6、集群读写验证

--主库

--备库

总结:在主备集群中备库故障情况下、如果要重建备库,因为主库的模式已经是primary模式,主库可以在线备份拷贝至备库恢复,不需要像单机搭建主备的情况将库关闭搭建。

3.5.3 监视器查看集群状态

show

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1297054.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(2)(2.4) TerraRanger Tower/Tower EVO(360度)

文章目录 前言 1 安装传感器并连接 2 通过地面站进行配置 3 参数说明 前言 TeraRanger Tower 可用于在 Loiter 和 AltHold 模式下进行目标规避。传感器的最大可用距离约为 4.5m。 TeraRanger Tower EVO 可用于在 Loiter 和 AltHold 模式下进行目标规避。传感器的最大可用…

智能优化算法应用:基于法医调查算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于法医调查算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于法医调查算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.法医调查算法4.实验参数设定5.算法结果6.参考…

爱上 `grep`:小白也能用的命令行超能工具!

1. grep 简介 grep 是一款命令行工具,它的任务是在文件中搜索特定的文本模式。在 Windows 上,我们可以通过安装 Chocolatey 包管理器来安装 grep。 2. 在 Windows 上安装 grep 打开 Windows PowerShell 首先,我们需要确保你已经安装了 Cho…

学生护眼灯哪个牌子好?适合学生考研用的台灯推荐

不知道各位家长们有没有对孩子的视力健康关注过,如今中国近视的总人数接近6亿人口!而我国儿童青少年近视比率更是超过了一半,达到了52.7%的近视率,也就是说每十个儿童青少年中就有五个是存在视力问题的。其中很大的原因就是长时间…

cache教程 3.HTTP服务器

上一节我们实现了单机版的缓存服务,但是我们的目标是分布式缓存。那么,我们就需要把缓存服务部署到多态机器节点上,对外提供访问接口。客户端就可以通过这些接口去实现缓存的增删改查。 分布式缓存需要实现节点间通信,而通信方法…

SQL Server 2017数据库window server服务器改名操作

在window服务器修改机器名重新加域后&#xff0c;需要执行下面的SQL语句修改数据库里面记录的机器名字&#xff0c;才能在修改后通过新名字连接数据库。 if serverproperty(servername) <> servername begin declare server sysname set server ser…

深入理解Dubbo-3.高级功能剖析和原理解析

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱吃芝士的土豆倪&#xff0c;24届校招生Java选手&#xff0c;很高兴认识大家&#x1f4d5;系列专栏&#xff1a;Spring源码、JUC源码、Kafka原理、分布式技术原理&#x1f525;如果感觉博主的文章还不错的话&#xff…

Halcon读取图片

1.打开对话框读取单张图 dev_open_file_dialog 2.图像显示不全 解决方案&#xff1a; HOperatorSet.SetPart(HTuple windowHandle, HTuple row1, HTuple column1, HTuple row2, HTuple column2) windowHandle:窗体 HTuple row1, HTuple column1,&#xff1a;左上角的行列坐…

imazing正在查找最新的apple mobile device组件

​ Apple Mobile Device是macOS的一个组件&#xff0c;它允许您在Mac上与iOS设备进行无缝连接和通信。因此&#xff0c;无法直接在苹果设备上下载和安装Apple Mobile Device&#xff0c;需要借助管理工具进行下载安装后启动。 如果您需要与iOS设备进行通信和同步&#xff0c;…

前端canvas的基础使用

一、介绍 前端中的 Canvas 是一种用于在网页上绘制图形的 HTML 元素。它提供了一个可以通过 JavaScript 进行绘制的 2D 绘图环境。使用 Canvas&#xff0c;您可以绘制图形&#xff0c;包括线条、矩形、圆形、文本和图像。Canvas 为开发人员提供了灵活自由的绘图能力&#xff0…

转换NC或HDF数据时候转出数据无坐标信息的处理方法

有时候我们在转换NC或HDF数据时&#xff0c;有时候会出现没有坐标信息的情况&#xff01;如下图&#xff1a; 这种情况一般是原始数据将坐标信息存储在说明文件中以便后期做生成坐标信息的处理、或坐标存储的形式比较特殊&#xff0c;造成工具无法读取&#xff01;这种数据处理…

【华为数据之道学习笔记】1-2华为数字化转型与数据治理

传统企业通过制造先进的机器来提升生产效率&#xff0c;但是未来&#xff0c;如何结构性地提升服务和运营效率&#xff0c;如何用更低的成本获取更好的产品&#xff0c;成了时代性的问题。数字化转型归根结底就是要解决企业的两大问题&#xff1a;成本和效率&#xff0c;并围绕…

单点登录方案调研与实现

作用 在一个系统登录后&#xff0c;其他系统也能共享该登录状态&#xff0c;无需重新登录。 演进 cookie → session → token →单点登录 Cookie 可以实现浏览器和服务器状态的记录&#xff0c;但Cookie会出现存储体积过大和可以在前后端修改的问题 Session 为了解决Co…

Java 21 的虚拟线程:高性能并发应用的福音

Java 21 最重要的特性之一就是虚拟线程 (JEP 444)。这些轻量级的线程降低了编写、维护和观察高吞吐量并行应用所需的努力。 在讨论新特性之前&#xff0c;让我们先看一下当前的状态&#xff0c;以便更好地理解它试图解决什么问题以及带来了哪些好处。 平台线程 在引入虚拟线…

多线程(进阶一:锁策略)

一、乐观锁和悲观锁 二、轻量级锁和重量级锁 三、自旋锁和挂起等待锁 四、普通互斥锁和读写锁 五、公平锁和非公平锁 六、可重入锁和不可重入锁 七、synchronized和Linux的mutex锁的简单比较 八、synchronized的自适应 一、乐观锁和悲观锁 乐观锁&#xff1a;在加锁之前…

mybatis 的快速入门以及基于spring boot整合mybatis(一)

MyBatis基础 MyBatis是一款非常优秀的持久层框架&#xff0c;用于简化JDBC的开发 准备工作&#xff1a; 1&#xff0c;创建sprong boot工程&#xff0c;引入mybatis相关依赖2&#xff0c;准备数据库表User&#xff0c;实体类User3&#xff0c; 配置MyBatis&#xff08;在applic…

高德地图画渐变线

高德地图画渐变线&#xff0c;思路是将线和颜色均分为多个小线段和小颜色&#xff0c;实现渐变&#xff0c;类似于下图。 如果需要多段线&#xff0c;自己循环拼一下就可以了&#xff0c;方法返回多个小线段组成的polyline数组。 /** 高德地图画渐变线* author: liyun* params…

记一次由 jedis 引发的离谱选学问题

背景 我的应用中&#xff0c;使用 jedis 作为连接 redis 的客户端&#xff0c;一直在用的好好的&#xff0c;后来有一个新的组件&#xff0c;也需要使用 redis&#xff0c;但是组件是内部封装的&#xff0c;我只能提供一个 StringReidsTempalte&#xff0c;所以我基于应用本身…

GPTs的创建与使用,自定义GPTs中的Actions示例用法 定义和执行特定任务的功能模块 通过API与外部系统或服务的交互

Name 等 Logo:自动生成 Name 介绍 Description 介绍 Instructions 要求或命令等 比如用中文回复&#xff0c;角色。 Knowledge 上传你的知识库&#xff0c;如果你有某一垂直行业的数据&#xff0c;基于数据来回答。比如我有某个芯片的指令集。 Capabilities 都要 Actions&…