首页 > 数据库 >构建高可用性的 SQL Server:Docker 容器下的主从同步实现

构建高可用性的 SQL Server:Docker 容器下的主从同步实现

时间:2023-06-25 15:31:57浏览次数:39  
标签:同步 Server 高可用性 SQL docker Docker 主从

摘要:本文将介绍如何在 Docker 环境下搭建 MS SQL Server 的主从同步,帮助读者了解主从同步的原理和实现方式,进而提高数据的可靠性和稳定性。

一、前言

在当今信息化的时代,数据的安全性和稳定性显得尤为重要。数据库是许多企业和组织存储和管理数据的核心,因此如何保证数据库的高可用性和数据的同步性是一个非常关键的问题。而基于主从同步的技术可以有效地解决这个问题。本文将介绍如何在 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.
...

构建高可用性的 SQL Server:Docker 容器下的主从同步实现_sql

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

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

构建高可用性的 SQL Server:Docker 容器下的主从同步实现_Server_02

请确确保在创建上述 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)"

构建高可用性的 SQL Server:Docker 容器下的主从同步实现_sql_03

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.2 创建从节点同步数据库

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


点击关注,第一时间了解华为云新鲜技术~

标签:同步,Server,高可用性,SQL,docker,Docker,主从
From: https://blog.51cto.com/u_15214399/6546373

相关文章

  • 【DataBase】SQL函数_ substr()函数
    substr()函数用于截取对应字段指定长度。SUBSTR(string,pos,len)string:指定字符串pos:规定字符串从何处开始,(这里的第一个位置是1而不是0)为正数时则从字段开始出开始,为负数则从结尾出开始。len:要截取字符串的长度。(是从1开始计数而不是0)  INSTR()......
  • Mysql数据库索引
    什么时候需要创建索引?(1)主键自动建立唯一索引;(2)频繁作为查询条件的字段应该创建索引;(3)查询中排序的字段创建索引将大大提高排序的速度(索引就是排序加快速查找)(4)查询中统计或者分组的字段;什么时候不需要创建索引?(1)频繁更新的字段不适合创建索引,因为每次更新不单单......
  • MySQL 5.7 基于GTID搭建主从复制
    MySQL5.7基于GTID搭建主从复制 1.搭建过程1.1准备两个MySQL实例mysqld--initialize-insecure--user=mysql--basedir=/usr/local/mysql--datadir=/mysql/3307/data/mysqld--initialize-insecure--user=mysql--basedir=/usr/local/mysql--datadir=/mysql/3308/data/mys......
  • MySQL 不同版本默认字符集
    MySQL不同版本默认字符集 一、MySQL5.6默认字符集备注:默认是utf8,支持utf8mb4。 二、MySQL5.7默认字符集备注:默认同样是utf8,到这个版本后生产环境我们会用utf8mb4。三、MySQL8.0默认字符集 备注:千呼万唤始出来,8.0默认终于支持到了utf8mb4,自然生产环境我们会用utf8mb4。 四、......
  • PostgreSQL 10.12 安装系列 - Yum+rpm 安装
    Yum+rpm安装Yum仓库下载:https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm 安装yum仓库:[root@open_source~]#lsanaconda-ks.cfgpgdg-redhat-repo-latest.noarch.rpm[root@open_source~]#rpm-ivhpgdg-redhat-re......
  • kibana启动失败Kibana server is not ready yet,后台日志报错:NoShardAvailableActionEx
    kibana.log日志报错信息:,{"level":"error","message":"Actionfailedwith'no_shard_available_action_exception'.Retryingattempt8outof10in64seconds."},{"level":"error","message&qu......
  • zabbix(2-server-agent)
    注意:以下步骤都是在LAMP配置之后进行的。关于LAMP环境的简单快速搭建,见博客:http://afterdawn.blog.51cto.com/7503144/1923139下面开始介绍在CentOS7上安装部署Zabbix3.0版本及快速进行基本配置,本次案例要用到两台主机,一台作为zabbix_server端,一台作为zabbix_agent端,具体信息如下:za......
  • MySQL---多表查询
    多表查询可分为两大类,一是连接查询,另一种是子查询准备两张案例表连接查询内连接查询:相当于查询AB交集数据外连接查询2.1左外连接查询:相当于查询A表所有数据和交集部门数据2.2右外连接查询:相当于查询B表所有数据和交集部分数据**内连接查询**内连接相当于查询......
  • winserver2012 登录秘密找回
      参考:https://wenku.csdn.net/answer/a7ed8fe6403cc45052a9a2f0d88601d6 实践后的方法:①登录界面连续点击多次【shift】点击多次后会弹出任务管理器,如图 ②文件》运行新任务》cmd》确定或者:文件》运行新任务》浏览 C:\Windows\System32\cmd.exe》确定③cmd输......
  • 使用自己的数据库SQLite database
    http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/MostalloftheAndroidexamplesandtutorialsoutthereassumeyouwanttocreateandpopulateyourdatabaseatruntimeandnottouseandaccessanindependent,prelo......