当前位置: 首页 > news >正文

[ 云原生 | Docker ] 构建高可用性的 SQL Server:Docker 容器下的主从同步实现指南

文章目录

    • 一、前言
    • 二、SQL Server 主从同步的原理介绍
    • 三、具体的搭建过程
      • 3.1 准备工作
        • 3.1.1 卸载旧版本(如果有,可选,非必须)
        • 3.1.2 安装 Docker
        • 3.1.3 验证本地 Docker 是否安装成功
      • 3.2 创建 Docker 网络
      • 3.3 创建主从节点的 SQL Server 容器
      • 3.4 创建主从同步端点
        • 3.4.1 配置主节点的同步端点
        • 3.4.2 配置从节点的同步端点
      • 3.5 创建主从同步数据库
        • 3.5.1 创建主节点同步数据库
        • 3.5.1 创建从节点同步数据库
      • 3.6 开启主从同步
      • 3.7 验证同步状态
    • 五、总结

一、前言

在当今信息化的时代,数据的安全性和稳定性显得尤为重要。数据库是许多企业和组织存储和管理数据的核心,因此如何保证数据库的高可用性和数据的同步性是一个非常关键的问题。而基于主从同步的技术可以有效地解决这个问题。本文将介绍如何在 Docker 环境下搭建 MS SQL Server 的主从同步,帮助读者了解主从同步的原理和实现方式,进而提高数据的可靠性和稳定性。

二、SQL Server 主从同步的原理介绍

主从同步是一种常用的技术,用于在多个 SQL Server 实例之间保持数据同步。在主从同步中,一个 SQL Server 实例被用作数据的源,而另一个或多个 SQL Server 实例则作为数据的接收端。当主节点上的数据发生更改时,这些更改将被捕获并保存到一个事务日志中。从节点会定期检查主节点的事务日志,并将主节点上的更改应用到自己的数据库中,从而保持两个数据库之间的数据同步。

三、具体的搭建过程

3.1 准备工作

在开始安装之前,需要确保CentOS上已经安装了Docker和Docker Compose。可以通过以下命令来进行安装:

3.1.1 卸载旧版本(如果有,可选,非必须)

sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-selinux \docker-engine-selinux \docker-engine

3.1.2 安装 Docker

按照下列步骤依次进行安装,中间过程直接略过

# 1.安装需要的软件包:
sudo yum install -y yum-utils
# 2.设置docker的stable存储库:
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 3.安装docker:
sudo yum install -y docker-ce docker-ce-cli containerd.io
# 4.启动docker服务:
sudo systemctl start docker
# 5.设置开机自启动docker服务:
sudo systemctl enable docker

挖坑002:后续会写关于docker文章,对于docker image 逻辑原理,进行讲解
问答区有人提问该问题:https://ask.csdn.net/questions/7923009/54161100

3.1.3 验证本地 Docker 是否安装成功

sudo docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.
...

在这里插入图片描述

3.2 创建 Docker 网络

在进行主从搭建之前,需要先创建一个 Docker 网络。这个网络用于连接所有的 SQL Server 容器。
在创建网络之前,需要先确认已经启动了 Docker:

sudo systemctl start docker

然后,可以使用以下命令来创建一个名为sync-net的 Docker 网络:

[root@hecs-bluetata ~]# docker network create -d bridge sync-net
538c142757e91c0b798ce0e45dc02b6038f00adaf37cfe3b09659dea8c950c93

其中参数 -d 指定了网络的类型,bridge 指的是桥接网络,sync-net 指的是新创建的网络的名称。

3.3 创建主从节点的 SQL Server 容器

创建 SQL Server 容器之前,需要先准备 SQL Server 的 Docker 镜像。可以通过以下命令来获取 SQL Server 2019 的 Docker 镜像:

docker pull mcr.microsoft.com/mssql/server:2019-latest

获取到 Docker 镜像之后,就可以创建 SQL Server 容器了。可以通过以下命令来创建2个 SQL Server 容器,分别命名为 sqlserver-master、和 sqlserver-slave,并加入所创建的 Docker 网络中。

docker run --name sqlserver-master --hostname sqlserver-master --network sync-net \-p 1433:1433 \-e 'ACCEPT_EULA=Y' \-e 'SA_PASSWORD=P@ssw0rd01' \-e "MSSQL_AGENT_ENABLED=True" \-e "MSSQL_PID=Developer" \-d mcr.microsoft.com/mssql/server:2019-latestdocker run --name sqlserver-slave --hostname sqlserver-slave --network sync-net \-p 1434:1433 \-e 'ACCEPT_EULA=Y' \-e 'SA_PASSWORD=P@ssw0rd02' \-e "MSSQL_AGENT_ENABLED=True" \-e "MSSQL_PID=Developer" \-d mcr.microsoft.com/mssql/server:2019-latest

针对上述命令,相关参数的解释:

参数含义
-e ‘ACCEPT_EULA=Y’此参数用于接受微软的许可证协议,表明你已经同意了微软的许可协议。
-e ‘SA_PASSWORD=P@ssw0rd01’此参数用于设置 SQL Server 的 SA 账户密码,你应该使用强密码。
-p 1433:1433此参数用于暴露容器中的 1433 端口,使外部可以访问到 SQL Server 实例。
–name sqlserver-master此参数用于为 SQL Server 设置容器的名称。
–hostname sqlserver-master此参数用于为 SQL Server 设置主机名。
–network sync-net此参数用于将 SQL Server 容器连接到指定的网络中。
-e “MSSQL_AGENT_ENABLED=True”此参数用于启用 SQL Server 代理,以便可以自动执行定期任务。
-e “MSSQL_PID=Developer”此参数用于指定 SQL Server 容器的产品ID,这里指定的是 Developer 版本。
-d mcr.microsoft.com/mssql/server:2019-latest此参数用于指定 SQL Server 容器的镜像,这里使用的是最新的 SQL Server 2019 镜像。

请确确保在创建上述 Docker 的过程中没有错误。

如果在创建过程中出现端口占用,或者名称占用等错误,可以查看相应容器,选择性的删除容器后,重新创建,相关命令:

docker ps -a
docker rm d3d3a4712b5f
docker stop d3d3a4712b5f

3.4 创建主从同步端点

3.4.1 配置主节点的同步端点

进入 SQL Server 主节点容器,并创建主从同步端点:

docker exec -it sqlserver-master /opt/mssql-tools/bin/sqlcmd \
-S localhost -U SA -P P@ssw0rd01 \
-Q "CREATE ENDPOINT endpoint_mirroring STATE = STARTED AS TCP (LISTENER_PORT=7022) FOR DATABASE_MIRRORING (ROLE=PARTNER)"

3.4.2 配置从节点的同步端点

进入 SQL Server 从节点容器,并创建主从同步端点:

docker exec -it sqlserver-slave /opt/mssql-tools/bin/sqlcmd \
-S localhost -U SA -P P@ssw0rd02 \
-Q "CREATE ENDPOINT endpoint_mirroring STATE = STARTED AS TCP (LISTENER_PORT=7022) FOR DATABASE_MIRRORING (ROLE=PARTNER)"

在这里插入图片描述

3.5 创建主从同步数据库

3.5.1 创建主节点同步数据库

回到 SQL Server 主节点容器,并创建主从同步数据库:

docker exec -it sqlserver-master /opt/mssql-tools/bin/sqlcmd \
-S localhost -U SA -P P@ssw0rd01 \
-Q "CREATE DATABASE mydb" \
-Q "BACKUP DATABASE mydb TO DISK='/var/opt/mssql/data/mydb.bak'" \
-Q "RESTORE DATABASE mydb WITH NORECOVERY" \
-Q "ALTER DATABASE mydb SET PARTNER = 'TCP://sqlserver-slave:7022'"

3.5.1 创建从节点同步数据库

回到 SQL Server 从节点容器,并创建主从同步数据库:

docker exec -it sqlserver-slave /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P P@ssw0rd02
docker exec -it sqlserver-slave /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P P@ssw0rd02' \
-Q "CREATE DATABASE mydb" \
-Q "RESTORE DATABASE mydb FROM DISK='/var/opt/mssql/data/mydb.bak' WITH NORECOVERY" \
-Q "ALTER DATABASE mydb SET PARTNER = 'TCP://sqlserver-master:7022'"

3.6 开启主从同步

回到 SQL Server 主节点容器,并启动主从同步:

docker exec -it sqlserver-master /opt/mssql-tools/bin/sqlcmd `
-S localhost -U SA -P P@ssw0rd01 \
-Q "ALTER DATABASE mydb SET PARTNER SAFETY OFF" \
-Q "ALTER DATABASE mydb SET PARTNER SAFETY ON" \

3.7 验证同步状态

回到 SQL Server 主节点容器,并查看主从同步状态:

docker exec -it sqlserver-master /opt/mssql-tools/bin/sqlcmd \
-S localhost -U SA -P P@ssw0rd01 \
-Q "SELECT database_id, synchronization_state_desc FROM sys.database_mirroring WHERE database_id = DB_ID('mydb')"

可以看到以下的输出结果:

database_id  synchronization_state_desc
-----------  ------------------------
5            SYNCHRONIZED

这表示主从同步已经成功地建立,并且 mydb 数据库已经在主从节点之间同步。

注意:这里我这里使用了开发版的 SQL Server 镜像,如果你在生产环境中使用 SQL Server,请使用适当版本的镜像,并根据需要进行调整。

五、总结

本文介绍了在 Docker 环境下搭建 MS SQL Server 的主从同步,并演示了如何进行配置和管理。通过本文的学习,你可以了解主从同步技术的实现原理和具体操作方法,并为提高数据可靠性和稳定性提供了一种有效的解决方案。同时,也需要认真考虑主从同步的一些限制和要求,并根据实际情况进行配置和管理。

相关文章:

[ 云原生 | Docker ] 构建高可用性的 SQL Server:Docker 容器下的主从同步实现指南

文章目录 一、前言二、SQL Server 主从同步的原理介绍三、具体的搭建过程3.1 准备工作3.1.1 卸载旧版本(如果有,可选,非必须)3.1.2 安装 Docker3.1.3 验证本地 Docker 是否安装成功 3.2 创建 Docker 网络3.3 创建主从节点的 SQL S…...

Binary Utilities非默认目录构建和安装

在AppArmor零知识学习六、源码构建(3)中,详细介绍了libapparmor的构建步骤,但那完全使用的是官网给出的默认参数。如果需要将目标文件生成到指定目录而非默认的/usr,则需要进行一些修改,本文就来详述如何进…...

【故障检测】基于 KPCA 的故障检测【T2 和 Q 统计指数的可视化】(Matlab代码实现)

💥 💥 💞 💞 欢迎来到本博客 ❤️ ❤️ 💥 💥 🏆 博主优势: 🌞 🌞 🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 …...

从“捐赠openEuler”到“向openEuler捐赠”,openEuler生态走入高速发展期

【中国,上海,2023年4月21日】openEuler Developer Day 2023于4月20-21日在线上和线下同步举办。本次大会由开放原子开源基金会指导,中国软件行业协会、openEuler社区、边缘计算产业联盟共同主办,以“万涓汇流,奔涌向前…...

ambari的kafka服务开启sasl

添加 sasl 配置⽂件 集群部署 Kafka2.2下载地址 http://archive.apache.org/dist/kafka/2.2.1/kafka_2.11-2.2.1.tgz 解压安装包 tar -zxvf kafka_2.11-2.2.1.tgz 部署略 ambari 数据kafka服务 在kafka的conf目录下创建sasl_conf目录,将kafka_client_jaas.conf/kafka_se…...

改善内部客户服务的 3 个技巧

在当今世界,许多公司都专注于改善客户关系管理,公司管理层面临的挑战是他们不仅拥有外部客户,员工也是有痛点和需求的内部客户。正如糟糕的客户服务会导致客户流失一样,糟糕的内部客户服务会增加员工流动率。在当今瞬息万变的就业…...

使用Apache POI的SXSSFworkbook实现大量数据导出到Excel文件

Apache POI是一个开源的、用来读写微软Excel文件的Java工具包,一般用来读取Excel文件中的数据或者将数据导出到Excel文件。HSSFWorkbook用来处理早期版本的Excel文件(xls格式),而XSSFWorkbook用来处理新版本Excel文(xl…...

【技术选型】Java 定时任务

文章目录 背景一、基础1.1 Cron表达式1.2 定时任务的三大组成部分 二、Java做定时任务的技术方案比较2.1、JDK seelp实现定时任务2.2、JDK Timer & TimerTask 实现定时任务2.3、JDK ScheduledExecutorService2.4、Quartz框架2.5、Spring Task 中的 schedule2.6、Elastic-Jo…...

让你立刻学会指针

☃️个人主页:fighting小泽 🌸作者简介:目前正在学习C语言和数据结构 🌼博客专栏:C语言学习 🏵️欢迎关注:评论👊🏻点赞👍🏻留言💪&am…...

重塑元宇宙体验!元宇宙实时云渲染解决方案来了

元宇宙作为人工智能、云计算和数字孪生等前沿技术的结合体,近年来越发受到各大企业重视。 元宇宙的应用场景层出不穷,不仅包括营销推广场景,还有品牌活动和电商销售,能有效提升品宣和商业转化效果。 元宇宙也具有极大的建设价值…...

Node【Global全局对象】

文章目录 🌟前言🌟Global全局对象🌟Global对象属性与方法🌟Global对象属性🌟process🌟Buffer类🌟console 🌟写在最后 🌟前言 哈喽小伙伴们,新的专栏 Node 已…...

【技术】《Netty》从零开始学netty源码(四十一)之PoolChunk

PoolChunk 我们再回顾以下netty中与内存相关的类: 前面我们已经分析了PoolSubpag,本章我们分析PoolChunk,先看下它的属性值: 为了更好的理解这些属性值,我们结合它的构造函数来理解,具体的源码如下: 其…...

新建虚拟机更改ip(连接xshell)

# 查看网络设备 [rootcentos79 ~]# nmcli device DEVICE TYPE STATE CONNECTION ens32 ethernet 已连接 ens32 ens33 ethernet 已连接 ens33 virbr0 bridge 已连接 virbr0 lo loopback 未托管 -- # 查看…...

什么是VBST和PVST?两者有啥区别?

在计算机网络中,VLAN(Virtual Local Area Network,虚拟局域网)是一种将局域网划分为多个逻辑上独立的子网的技术,它可以帮助网络管理员更好地管理网络资源。 在VLAN技术中,STP(Spanning Tree P…...

记录-JavaScript常规加密技术

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 当今Web开发中,数据安全是一个至关重要的问题,为了确保数据的安全性,我们需要使用加密技术。JavaScript作为一种客户端编程语言,可以很好地为数据进行加…...

二十三、高级网络技术及应用——BFD解析

文章目录 前言一、BFD 简介1、概述:2、作用: 二、静态路由调用 BFD1、配置静态 BFD2、配置动态 BFD 三、OSPF联动BFD四、BFD 单臂回声(one arm echo) 前言 BFD:Bidirectional Forwarding Detection,双向转…...

大家经常说的java八股文到底是什么?让我来总结一下吧!

八股文问题集合 面试必看java八股文 问题正在收录中,累了休息一会,如果有需要请,先关注,这几天会更帖子,答案后续补上 文章目录 八股文问题集合问题正在收录中,累了休息一会,如果有需要请&#…...

C++备忘录模式实践:轻松实现撤销与恢复功能

目录标题 引言(Introduction)备忘录模式定义及核心概念(Memento Pattern Definition and Core Concepts)备忘录模式的定义(Definition of Memento pattern)备忘录模式的主要角色(Key roles in M…...

如何选择CDN加速平台?

现如今全球CDN市场规模逐年攀升,在2017年全球CDN市场规模约为75亿美元,到2021年增长到200亿美元左右。我国CDN行业同样保持高速发展,自2017年的135亿元增长到2022年的300亿元左右。但是国内的CDN市场规模仅为全球市场的15%-20%,海外CDN市场空间巨大。 接…...

其实苹果知道自己离不开中国制造,因此悄悄给自己留了后路

苹果在加速离开中国,不过从苹果的做法却又可以看到它其实很清醒地认识到无法离开中国制造,因此它在力推印度制造的时候,其实并没拼尽全力,深刻认识到印度制造和印度市场与中国的差距。 一、印度制造和印度市场与中国的差距 2022年…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

【Oracle APEX开发小技巧12】

有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣&#xff08;LeetCode&#xff09; 思路 使用两个栈&#xff1a;一个存储重复次数&#xff0c;一个存储字符串 遍历输入字符串&#xff1a; 数字处理&#xff1a;遇到数字时&#xff0c;累积计算重复次数左括号处理&#xff1a;保存当前状态&a…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1)&#xff1a;从基础到实战的深度解析-CSDN博客&#xff0c;但实际面试中&#xff0c;企业更关注候选人对复杂场景的应对能力&#xff08;如多设备并发扫描、低功耗与高发现率的平衡&#xff09;和前沿技术的…...

什么是库存周转?如何用进销存系统提高库存周转率?

你可能听说过这样一句话&#xff1a; “利润不是赚出来的&#xff0c;是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业&#xff0c;很多企业看着销售不错&#xff0c;账上却没钱、利润也不见了&#xff0c;一翻库存才发现&#xff1a; 一堆卖不动的旧货…...

现代密码学 | 椭圆曲线密码学—附py代码

Elliptic Curve Cryptography 椭圆曲线密码学&#xff08;ECC&#xff09;是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础&#xff0c;例如椭圆曲线数字签…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...