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

news2025/1/19 14:33:44

文章目录

    • 一、前言
    • 二、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-latest

docker 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 的主从同步,并演示了如何进行配置和管理。通过本文的学习,你可以了解主从同步技术的实现原理和具体操作方法,并为提高数据可靠性和稳定性提供了一种有效的解决方案。同时,也需要认真考虑主从同步的一些限制和要求,并根据实际情况进行配置和管理。

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

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

相关文章

部署环境从docker swarm迁移到k8s后kie-server的发布方式变化(二)

正如后来的考虑, 如果外接maven私库照理说是ok的, 这样去掉volume的设计整个流程更加的自动化标准化. 开搞 第一步先部署一个nexus yaml文件如下: apiVersion: v1 kind: Namespace metadata:name: nexus---apiVersion: v1 kind: Service metadata:labels:k8s-app: nexusname…

【数据结构与算法】八大排序

[数据结构与算法]八大排序 数据结构与算法-八大排序排序的概念及其应用排序的概念排序的应用 常见的排序算法实现常见的排序算法插入排序直接插入排序希尔排序(缩小增量排序)希尔排序的时间复杂度希尔排序对插入排序的优化效果 选择排序直接选择排序堆排序向上调整建堆&#xf…

【C语言】从n个字符串中匹配查找abc字符串个数

目录 前言知识点重温1、scanf和scanf_s区别2、指针3、char、char*使用查找字符串收尾前言 这是小5聊的《C语言知识点例子》系列的第四篇文章。 在软件行业已经有快十年,技术虽然一般般,但是足够应付和解决编程入门的相关问题! 都说十年磨一剑,积累到一定经验,是时候发挥自…

数据库基础篇 《1. 概述》

目录 1. 为什么要使用数据库 2. 数据库与数据库管理系统 2.1 数据库的相关概念 2.2 数据库与数据库管理系统的关系 2.3 常见的数据库管理系统排名(DBMS) 2.4 常见的数据库介绍 3. MySQL介绍 3.1 概述 3.2 MySQL发展史重大事件 4. RDBMS 与 非RDBMS 4.1 关系型数据库…

Delphi Web Server 流程分析

通过向导 "Web Server Application" (选择 "Stand-alone GUI Application") 创建一个 WebServer Demo。 主单元代码: ...... private FServer: TIdHTTPWebBrokerBridge; procedure StartServer; ............. Delphi的网络组件是基于INDY的&a…

项目四:无极调光台灯

项目四:无极调光台灯 文章目录 项目四:无极调光台灯一、导入(5分钟)学习目的 二、新授(65分钟)1.预展示结果(5分钟)2.本节课所用的软硬件(5分钟)3.硬件介绍(5分钟)4.图形化块介绍(10分钟)5.单个模块的简单使用(10分钟)6.无极调光台灯编程逻辑…

SQLServer的内存管理架构

内存管理架构说明 一、Windows的虚拟内存管理器二、SQL Server 内存体系结构2.1、传统(虚拟)内存2.2、地址窗口扩展 (AWE) 内存 三、从 SQL Server 2012 (11.x) 开始发生的改变3.1、对内存管理的更改3.2、对…

【网络原理】TCP/IP协议

目录 1.应用层 2.传输层(核心问题) 2.1 UDP协议 2.1.2 UDP的特点 2.1.3 基于UDP的应用层协议 2.2 TCP协议(重点内容) 2.2.1 TCP/IP 协议含义 2.2.2 TCP协议端格式: 2.2.3 TCP的特点 2.3 TCP原理 2.4 确认应…

Fork/Join优化mybatis-plus批量插入性能

最近在项目开发中,遇到需要一次性保存100万数据到数据库中。想到以下几种实现方式: 第一种方案:在mapper文件中,实现批量插入动态SQL语句,采用insert into table_name values(?,?,?,),(?,?,?)拼接SQL方式。 &l…

HTTP中ETag语法及使用实战详解

1.1 ETag 是什么 ETag(Entity Tag)是万维网协议 HTTP 的一部分。它是 HTTP 协议提供的若干机制中的一种 Web 缓存验证机制,并且允许客户端进行缓存协商。这使得缓存变得更加高效,而且节省带宽。如果资源的内容没有发生改变&#x…

电脑网速慢怎么解决?4个方法有效提升电脑网速!

案例:电脑网速慢怎么解决 【谁懂啊!我的电脑网速太慢了!总是上不了网,打开浏览器也是一直在转圈圈!太折磨了!这是为什么呢?谁能帮帮我呀!】 随着互联网的发展和普及,电…

继续学c++

由于c里面有很多和c语言很像的东西,这里就来总结一点不像的或者要注意的,或者是我已经快忘记的; 先来一个浮点型也就是实型类型的总结; 知道浮点型有这两个类型:float和double型; 然后float型占四个字节…

To B第六年,腾讯过分温柔

腾讯做2B,方向是正确的,初心是果决的,行动是温柔的,事实是掉队的。 2018年,率先打出“互联网的下半场属于产业互联网”的大旗,宣布“拥抱产业互联网”,腾讯发力To B业务,绝对是有先发…

HTB-Jarvis

HTB-Jarvis 信息收集80端口 www-data(sqlmap)www-data(myPhpAdmin)www-data -> pepperpepper -> root 信息收集 80端口 目录扫描 我啥也没干咋就被ban了,可能是gobuster流量太大被逮住了。 老老实实等90秒,先从已有的目录收集信息。 phpMyAdmin 4…

X 态及基于 VCS 的 X-Propagation 检测

🔥点击查看精选 IC 技能树系列文章🔥 🔥点击进入【芯片设计验证】社区,查看更多精彩内容🔥 📢 声明: 🥭 作者主页:【MangoPapa的CSDN主页】。⚠️ 本文首发于CSDN&#…

Lightroom Classic2022图文安装教程

Lightroom Classic是一款专业的数字照片处理软件,具有数字照片编辑、照片整理和管理、批量处理、智能预览、输出等特点。 该软件适用于摄影师和数字照片后期处理爱好者,可以帮助用户提高处理效率和照片质量。 Lightroom Classic是Adobe公司推出的系列软…

ai智能写作软件哪个好-ai智能写作免费

人工智能自动写作软件 人工智能自动写作软件是如今数字营销领域中备受瞩目的一种工具。无论是网络文章、博客、报告、新闻稿或者其他一些营销内容,人工智能自动写作软件可以以相当高的速度和质量将其生成,从而释放人类营销人员的时间和精力。 尽管自动写…

深度学习实战案例:基于 AutoRec 构建电影推荐系统( 附 PyTorch 版代码)

文章目录 技术交流前言AutoRec 模型介绍损失函数基于 AutoRec 的推荐过程实验对比消融实验代码实践总结参考 本文要介绍的 AutoRec 模型是由澳大利亚国立大学在2015年提出的,它将自编码器(AutoEncoder)的思想与协同过滤(Collaborative Filter)的思想结合起来&#x…

GitHub 创建 Pull Request 将代码提交至别人的仓库

GitHub 创建 Pull Request 将代码提交至别人的仓库 1 Forking the repository 1.1 About forks (关于 forks) A fork is a new repository that shares code and visibility settings with the original upstream repository. A fork 是一个新的存储库,它与原 ups…

U-Boot 命令使用

进入 uboot 的命令行模式以后输入“help”或者“?”,然后按下回车即可查看当前 uboot 所 支持的命令,如图 所示: 我们输入“help(或?) 命令名”既可以查看命令的详细用法,以“bootz”这 个命令为例,我们输…