搭建DM数据守护集群

1环境与规划

准备3个kylin 10操作系统的虚拟机,规划IP、端口、安装目录等。

说明

搭建REALTIME归档模式、事务一致性的数据守护

名称项

初始主库机器dm1

初始备库机器dm2

监视器机器dmmon

外部业务IP

192.168.23.129

192.168.23.130

192.168.23.131

内部心跳IP

192.168.23.129

192.168.23.130

192.168.23.131

实例名

GRP1_DW_01

GRP1_DW_02

-

实例端口PORT_NUM

5237

5237

-

MAL监听端口MAL_PORT

65237

65237

-

守护进程监听端口MAL_DW_PORT

55237

55237

-

实例监听守护进程端口

MAL_INST_DW_PORT

35237

35237

-

OGUID

202507

202507

-

守护组

GRP1

GRP1

-

数据库软件安装目录

/opt/dmdbms

/opt/dmdbms

/opt/dmdbms

数据库实例目录

/data/dmdata/

/data/dmdata/

   -

1.1设置主机名与IP、关闭防火墙等

[root@~]# hostnamectl  set-hostname 名称

[root@~]# hostname 名称

[root@~]# systemctl  status  firewalld

firewall-cmd --list-port

firewall-cmd --permanent --zone=public --add-port=5237/tcp

firewall-cmd --permanent --zone=public --add-port=65237/tcp

firewall-cmd --permanent --zone=public --add-port=55237/tcp

firewall-cmd --permanent --zone=public --add-port=35237/tcp

firewall-cmd --reload

1.2配置时间同步

(1)服务端配置

vi  /etc/chrony.conf

allow 192.168.23.0/24   ##许访问的客户端列表

local stratum 10

重启服务:systemctl restart chronyd

(2)客户端配置

vi  /etc/chrony.conf

server 192.168.23.131 iburst

重启服务:systemctl restart chronyd

客户端同步时间: chronyc sources -v 

1.3其它操作参数优化

  略,这里重点数据守护手工搭建过程。

2各节点安装数据库软件

2.1每个节点创建用户和组

groupadd   dinstall

useradd -g dinstall dmdba

echo "HUN_xx202x" | passwd --stdin dmdba

2.2 每个节点安装达梦数据库软件

以主机dm1示例说明:

[root@dm1 ~]#mkdir /dmsoft  /opt/dmdbms  /data/dmarch

上传安装包到/dmsoft目录

[root@dm1 ~]# chown -R dmdba:dinstall /opt/dmdbms /data/dmarch

[root@dm1 ~]# cd /dmsoft

[root@dm1 dmsoft]# mount -o loop dm8.iso  /mnt

[root@dm1 dmsoft]# su  - dmdba

[dmdba@dm1 ~]$ cd /mnt

[dmdba@dm1 mnt]$ ./DMInstall.bin -i 

过程中选择安装目录:请选择安装目录 [/home/dmdba/dmdbms]:/opt/dmdbms

最后执行root执行/opt/dmdbms/script/root/root_installer.sh

3在主机dm1(主库机)操作

3.1初始化数据库实例

[dmdba@]$./dminit path=/data/dmdata  page_size=32 extent_size=32 port_num=5237 charset=1  log_size=1024 SYSDBA_PWD=HUN_admin2025 SYSAUDITOR_PWD=HUN_admin2025

主机dm1上注册数据库服务

[root@dm1 ~]# bash /opt/dmdbms/script/root/dm_service_installer.sh  -t dmserver -dm_ini  /data/dmata/DAMENG/dm.ini  -p DAMENG

[root@dm1 ~]# systemctl enable  DmServiceDAMENG.service

[root@dm1 ~]# systemctl start  DmServiceDAMENG.service

3.2启动数据库,配置归档

[dmdba@dm1 bin]$ disql SYSDBA/自定义的pwd@localhost:5237

SQL> ALTER DATABASE MOUNT;

SQL> ALTER DATABASE ARCHIVELOG;

SQL> ALTER DATABASE ADD ARCHIVELOG 'DEST =/data/dmarch, TYPE = local, FILE_SIZE = 1024,SPACE_LIMIT = 4096';

SQL> ALTER DATABASE OPEN;

3.3对主库进行联机备份

SQL> BACKUP DATABASE BACKUPSET 'backup_dbfull_01';

SQL> SELECT BACKUP_NAME,BEGIN_LSN FROM V$backupset;

默认的备份路径操作系统/data/dmdata/DAMENG/bak/。

查看数据库魔数:select db_magic;

查看数据库唯一魔数:select permanent_magic;

3.4拷贝主库备份到备机

[dmdba@dm1 ~]$scp -r /data/dmdata/DAMENG/bak/backup_dbfull_01 192.168.23.130:/data/dmdata/DAMENG/bak/

4在主机dm2(备库机)操作

4.1初始化数据库实例后启动后再关闭

[dmdba@]$./dminit path=/data/dmdata/  page_size=32 extent_size=32 port_num=5237 charset=1  log_size=2048 SYSDBA_PWD=自定义 SYSAUDITOR_PWD=自定义

[dmdba@]$./dmserver  /data/dmdata/DAMENG/dm.ini

4.2 dmrman还原恢复

[dmdba@dm2 ~]$ll /data/dmdata/DAMENG/bak/

[dmdba@dm2 bin]$ ./dmrman

RMAN> RESTORE DATABASE '/data/dmdata/DAMENG/dm.ini' REUSE DMINI  FROM BACKUPSET '/data/dmdata/DAMENG/bak/backup_dbfull_01';

RMAN> RECOVER DATABASE '/data/dmdata/DAMENG/dm.ini' FOR STANDBY FROM BACKUPSET '/data/dmdata/DAMENG/bak/backup_dbfull_01';

RMAN> RECOVER DATABASE '/data/dmdata/DAMENG/dm.ini' UPDATE DB_MAGIC ;

5在主机dm1(主库机)操作

5.1配置dm.ini

SP_SET_PARA_VALUE (2,'PORT_NUM',5237);

SP_SET_PARA_VALUE (2,'DW_INACTIVE_INTERVAL',60);

SP_SET_PARA_VALUE (2,'ALTER_MODE_STATUS',0);

SP_SET_PARA_VALUE (2,'ENABLE_OFFLINE_TS',2);

SP_SET_PARA_VALUE (2,'MAL_INI',1);

SP_SET_PARA_VALUE (2,'RLOG_SEND_APPLY_MON',64);

或者修改dm.in文件

##实例名,使用“组名_守护环境_序号”命名方式,总长度不能超过16

INSTANCE_NAME = GRP1_DW_01

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

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

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

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

MAL_INI = 1               ##打开MAL系统

ARCH_INI = 1              ##打开归档配置

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

然后关闭数据库实例

SQL> shutdown immediate;

或者

[root@dm1 ~]# systemctl stop  DmServiceDAMENG.service

5.2配置dmmal.ini

配置MAL系统,各主备库的dmmal.ini配置必须完全一致

MAL_CHECK_INTERVAL = 10     ##MAL链路检测时间间隔,单位秒(s)

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

MAL_TEMP_PATH = /data/dmdata/DAMENG

MAL_BUF_SIZE= 512

MAL_SYS_BUF_SIZE= 2048

MAL_COMPRESS_LEVEL= 0

[MAL_INST1]

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

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

 MAL_PORT = 65237           ## MAL监听端口,用于创建MAL链路

 MAL_INST_HOST = 192.168.23.129  ##数据库实例的对外服务IP地址

   MAL_INST_PORT = 5237   ##数据库实例对外服务端口,和dm.ini中PORT_NUM一致

 MAL_DW_PORT = 55237   ##守护进程监听端口

 MAL_INST_DW_PORT = 35237  ##实例监听守护进程的端口

[MAL_INST2]

 MAL_INST_NAME = GRP1_DW_02

 MAL_HOST = 192.168.23.130

 MAL_PORT = 65237

 MAL_INST_HOST = 192.168.23.130

 MAL_INST_PORT = 5237

 MAL_DW_PORT = 55237

 MAL_INST_DW_PORT = 35237

5.3配置dmarch.ini

ARCH_WAIT_APPLY = 1

[ARCHIVE_LOCAL1]

ARCH_TYPE = LOCAL      ##本地归档类型

ARCH_DEST = /data/dmarch         ##本地归档文件存放路径

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

ARCH_SPACE_LIMIT =4096    ##单位Mb,0表示无限制,范围1024~2147483647M

[ARCHIVE_REALTIME1]

WAIT_APPLY=1

ARCH_TYPE = REALTIME                ##实时归档类型

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

5.4配置 dmwatcher.ini

[GRP1]

DW_TYPE = GLOBAL      ##全局守护类型

DW_MODE = AUTO       ##自动切换模式

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

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

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

INST_OGUID = 20250507    ##守护系统唯一OGUID值

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

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

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

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

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

5.5修改OGUIDPrimary模式

##以Mount方式启动主库

[dmdba@dm1 bin]$dmserver /data/dmdata/DAMENG/dm.ini mount

##启动命令行工具disql登录主库设置OGUID值、修改数据库为Primary模式

[dmdba@dm1 bin]$ ./disql  sysdba/HUN_admin2025@localhost:5237

SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);

sp_set_oguid(20250507);

ALTER DATABASE PRIMARY;

SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);

6在主机dm2(备库机)操作

6.1配置dm.ini

##实例名,建议使用“组名_守护环境_序号”的命名方式,总长度不能超过16

INSTANCE_NAME = GRP1_DW_02 

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

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

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

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

MAL_INI = 1               ##打开MAL系统

ARCH_INI = 1              ##打开归档配置

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

6.2配置dmmal.ini

各主备库的dmmal.ini配置必须完全一致。

MAL_CHECK_INTERVAL = 10     ##MAL链路检测时间间隔,单位秒(s)

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

MAL_TEMP_PATH = /data/dmdata/DAMENG

MAL_BUF_SIZE= 512

MAL_SYS_BUF_SIZE= 2048

MAL_COMPRESS_LEVEL= 0

[MAL_INST1]

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

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

 MAL_PORT = 65237           ## MAL监听端口,用于创建MAL链路

 MAL_INST_HOST = 192.168.23.129  ##数据库实例的对外服务IP地址

   MAL_INST_PORT = 5237   ##数据库实例对外服务端口,和dm.ini中PORT_NUM一致

 MAL_DW_PORT = 55237   ##守护进程监听端口

 MAL_INST_DW_PORT = 35237  ##实例监听守护进程的端口

[MAL_INST2]

 MAL_INST_NAME = GRP1_DW_02

 MAL_HOST = 192.168.23.130

 MAL_PORT = 65237

 MAL_INST_HOST = 192.168.23.130

 MAL_INST_PORT = 5237

 MAL_DW_PORT = 55237

 MAL_INST_DW_PORT = 35237

6.3配置dmarch.ini

ARCH_WAIT_APPLY = 1

[ARCHIVE_LOCAL1]

ARCH_TYPE = LOCAL      ##本地归档类型

ARCH_DEST = /data/dmarch         ##本地归档文件存放路径

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

ARCH_SPACE_LIMIT =4096    ##单位Mb,0表示无限制,范围1024~2147483647M

[ARCHIVE_REALTIME1]

WAIT_APPLY=1

ARCH_TYPE = REALTIME                ##实时归档类型

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

6.4配置dmwatcher.ini

[GRP1]

DW_TYPE = GLOBAL      ##全局守护类型

DW_MODE = AUTO       ##自动切换模式

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

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

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

INST_OGUID = 20250507    ##守护系统唯一OGUID值

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

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

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

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

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

6.5修改OGUIDstandby模式

以mount方式启动备库

[dmdba@dm2 bin]$dmserver /data/dmdata/DAMENG/dm.ini mount

备库修改oguid和数据库模式

[dmdba@dm2 bin]$ ./disql  sysdba/HUN_admin2025@localhost:5237

SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);

sp_set_oguid(20250507);

alter database standby;  

SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);

7在主机mon配置监视器

vi /opt/dmdbms/dmmonitorGRP1.ini

MON_DW_CONFIRM = 1         ##确认模式

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

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

MON_LOG_FILE_SIZE = 32        ##每个日志文件最大32M

MON_LOG_SPACE_LIMIT = 0       ##不限定日志文件总占用空间

[GRP1]

MON_INST_OGUID = 20250507         ##组GRP1的唯一OGUID值

MON_DW_IP = 192.168.23.129:55237  ##IP和PORT信息和dmmal.ini中的MAL_HOST和MAL_DW_PORT配置项一致

MON_DW_IP = 192.168.23.130:55237  

8主机dm1和主机dm2上注册守护进程并启动

(1)dm1主库上注册守护进程服务并启动

[root@dm1 ~]# bash /opt/dmdbms/script/root/dm_service_installer.sh  -t dmwatcher -watcher_ini  /data/dmdata/DAMENG/dmwatcher.ini  -p GRP1

--如果需要卸载服务

bash /opt/dmdbms/script/root/dm_service_uninstaller.sh  -n DmWatcherServiceGRP1

[root@dm1 ~]# systemctl enable  DmWatcherServiceGRP1

[root@dm1 ~]# systemctl start  DmWatcherServiceGRP1

(2)dm2备库上注册数据库服务

[root@dm2 ~]# bash /opt/dmdbms/script/root/dm_service_installer.sh  -t dmserver -dm_ini  /data/dmdata/DAMENG/dm.ini  -p DAMENG

[root@dm2 ~]# systemctl enable  DmServiceDAMENG.service

(3)dm2备库上注册守护进程服务并启动

[root@dm2 bin]# bash /opt/dmdbms/script/root/dm_service_installer.sh  -t dmwatcher -watcher_ini  /data/dmdata/DAMENG/dm.ini  -p GRP1

[root@dm2 ~]# systemctl enable  DmWatcherServiceGRP1

[root@dm2 ~]# systemctl start   DmWatcherServiceGRP1

--如果需要调试时手动启动方式

./dmwatcher   /opt/dmdbms/data/DAMENG/dmwatcher.ini

9监视机上注册监视器服务并启动

[root@mon ~]# bash /opt/dmdbms/script/root/dm_service_installer.sh  -t dmmonitor -monitor_ini  /opt/dmdbms/dmmonitorGRP1.ini  -p GRP1

[root@mon ~]# systemctl enable  DmMonitorServiceGRP1

调试时手动启动

./dmmonitor  /opt/dmdbms/dmmonitorGRP1.ini

监视机上先非确认监视器命令查看

[dmdba@mon ~]#cp /opt/dmdbms/dmmonitor.ini /opt/dmdbms/dmmonitorGRP1s.ini

[dmdba@mon ~]#vi /opt/dmdbms/dmmonitors.ini

MON_DW_CONFIRM = 0

[dmdba@mon bin]$dmmonitor  /opt/dmdbms/dmmonitorGRP1s.ini

确认状态无误后,启动确认监视器

[root@mon ~]# systemctl start   DmMonitorServiceGRP1

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

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

相关文章

AUTOSAR进阶图解==>AUTOSAR_SRS_OCUDriver

AUTOSAR OCU驱动程序详解 AUTOSAR标准输出比较单元驱动程序架构与实现分析目录 1. 概述 1.1 OCU驱动程序简介1.2 功能概述 2. OCU驱动程序架构 2.1 架构图2.2 层次结构 3. OCU驱动程序组件设计 3.1 组件图3.2 接口定义 4. OCU驱动程序状态管理 4.1 状态图4.2 状态转换 5. OCU驱…

InfluxDB 与 HTTP 协议交互进阶(一)

引言 在当今数字化时代,数据处理的高效性和准确性成为了众多领域关注的焦点。InfluxDB 作为一款开源的时序数据库,凭借其高性能、易扩展等特性,在时间序列数据处理中占据了重要地位。而 HTTP 协议作为互联网应用层的核心协议之一&#xff0c…

NAS远程访问新解法:OMV与cpolar的技术协同价值

文章目录前言1. OMV安装Cpolar2. 配置FTP公网地址3. OMV FTP 配置4. OMV FTP远程连接前言 当家庭存储需求突破本地边界时,传统NAS方案往往陷入"连接困境":复杂的端口转发配置、高昂的公网IP成本、以及始终存在的安全顾虑…开源解决方案OMV虽然…

vue 渲染 | 不同类型的元素渲染的方式(vue组件/htmlelement/纯 html)

省流总结&#xff1a;&#xff08;具体实现见下方&#xff09; vue 组件 ——》<component :is组件名> htmlelement 元素 ——》 ref 、★ v-for ref 或是 ★ vue 的 nextTick 纯 html 结构——》v-html 另外&#xff0c;当数据异步加载时&#xff0c;vue3中如何渲…

Charles中文版深度解析,轻松调试API与优化网络请求

在现代软件开发过程中&#xff0c;调试API、捕获HTTP/HTTPS流量以及优化网络性能是开发者不可避免的挑战。特别是在处理复杂的网络请求和验证API接口的数据传输准确性时&#xff0c;开发者需要一款强大且易于使用的工具。Charles抓包工具凭借其功能强大、界面简洁、易于操作的特…

【CF】Codeforces Round 1039 (Div. 2) E1 (二分答案求中位数)

E1. Submedians (Easy Version)题目&#xff1a;思路&#xff1a;经典不过加了点东西对于求中位数&#xff0c;我们必然要想到二分答案&#xff0c;具体的&#xff0c;对于所有大于等于 x 的数我们令其奉献为 1&#xff0c;小于的为 -1&#xff0c;如果存在某段区间的奉献和大于…

ESP32-S3学习笔记<8>:LEDC的应用

ESP32-S3学习笔记&#xff1c;8&#xff1e;&#xff1a;LEDC的应用1. 头文件包含2. LEDC的配置2.1 配置定时器2.1.1 speed_mode/设置速度模式2.1.2 duty_resolution/设置占空比分辨率2.1.3 timer_num/选择定时器2.1.4 freq_hz/设定PWM频率2.1.5 clk_cfg/选择LEDC的外设时钟源2…

网络安全第14集

前言&#xff1a;小迪安全14集&#xff0c;这集重点内容&#xff1a;0、什么是js渗透测试&#xff1f;在javascript中也存在变量和函数&#xff0c;存在可控变量和函数就有可能存在在漏洞&#xff0c;js开发的web应用和php、java开发的区别是&#xff0c;js能看得到的源代码&am…

代码随想录算法训练营第三十三天

LeetCode.62 不同路径 题目链接 不同路径 题解 class Solution {public int uniquePaths(int m, int n) {// dp表示到达ij有多少条路径int[][] dp new int[110][110];dp[1][1] 1;for(int i 0;i<m;i){dp[i][0] 1;}for(int j 0;j<n;j){dp[0][j] 1;}for(int i 1;i…

银行回单OCR识别技术原理

银行回单OCR&#xff08;光学字符识别&#xff09;技术通过结合图像处理、模式识别和自然语言处理&#xff08;NLP&#xff09;技术&#xff0c;将纸质或电子版银行回单中的非结构化文本&#xff08;如账号、金额、日期等&#xff09;转化为结构化数据。以下是其核心原理和关键…

Day22-二叉树的迭代遍历

昨天学习了递归遍历&#xff1a;递归就是一次次的把参数压入栈中&#xff0c;然后返回的时候还是上一次递归保存的参数。今天学习迭代遍历。迭代遍历就是用栈去模拟保存二叉树的节点&#xff0c;然后依次去遍历&#xff0c;只不过要注意栈的后入先出的规则。前序遍历&#xff1…

知识蒸馏 - 通过引入温度参数T调整 Softmax 的输出

知识蒸馏 - 通过引入温度参数T调整 Softmax 的输出 flyfish import torch import torch.nn.functional as F import matplotlib.pyplot as plt import numpy as np# 设置中文字体支持 plt.rcParams["font.family"] [AR PL UMing CN] # Linux plt.rcParams[axes.uni…

Java研学-RabbitMQ(三)

一 消息通信协议 1 AMQP AMQP 是一个开放的、跨语言、跨平台的消息协议标准&#xff0c;用于在分布式系统中传递业务消息。它定义了消息队列的二进制协议格式和交互模型&#xff08;如交换机、队列、绑定等&#xff09;&#xff0c;确保不同语言&#xff08;Java、Python、C#等…

http.client 教程-如何使用 Python 标准库发送 HTTP 请求

http.client 教程-如何使用 Python 标准库发送 HTTP 请求以下是 http.client 模块的详细使用教程&#xff0c;帮助你理解如何使用 Python 标准库发送 HTTP 请求&#xff1a;1. http.client 概述http.client 是 Python 内置的 HTTP 客户端库&#xff0c;提供了底层的 HTTP 协议实…

Android-三种持久化方式详解

持久化技术分为3种&#xff0c;文件&#xff0c;sharedPreferences存储&#xff0c;数据库来存储&#xff1b; 目录 文件存储&#xff1a; 利用SharedPreferences中读取数据 SQLite创建数据库 更新 添加 删除 查找&#xff1a; 文件存储&#xff1a; 文件存储是 Andr…

并发安全之锁机制一

锁机制一 锁机制是计算机系统中解决并发冲突的核心工具&#xff0c;其存在和应用场景源于一个根本问题&#xff1a;当多个执行单元&#xff08;线程、进程、分布式节点&#xff09;同时访问或修改同一份共享资源时&#xff0c;如何保证数据的正确性、一致性和系统可靠性&#x…

结合项目阐述 设计模式:单例、工厂、观察者、代理

原文链接&#xff1a;https://download.csdn.net/blog/column/12433305/133862792#_1613 1、工厂模式应用 C17及之后可编译 /*日志落地模块的实现1.抽象落地基类2.派生子类&#xff08;根据不同落地方向进行派生&#xff09;3.使用工厂模式进行创建与表示的分离 */#ifndef _…

uniapp 更新apk有缓存点不动,卸载安装apk没有问题。android

方式一。pages.json&#xff1a;"globalStyle" : {"navigationBarTextStyle" : "black","navigationBarTitleText" : "uni-app","navigationBarBackgroundColor" : "#F8F8F8","backgroundColor&qu…

HTML响应式SEO公司网站源码

核心优势 100%纯HTML/CSS开发自动适配手机/平板/PC内置SEO优化结构0.5秒极速加载 包含页面 • 首页&#xff08;关键词布局优化版&#xff09; • 服务项目展示页 • 客户案例库 • 新闻资讯系统 • 联系方式&#xff08;带地图API&#xff09; 技术参数 兼容Chrome/Firefo…

Error: llama runner process has terminated: exit status 2

我是i7 12700h ,3080显卡&#xff0c;在 Windows 11 上运行 ollama run deepseek-r1:1.5b 出现 Error: llama runner process has terminated: exit status 2 之前是好用的&#xff0c;后来不知为什么就不好用了。 原因&#xff1a; 检查 Microsoft Visual C Redistributab…