摘要:本文將介紹如何在 Docker 環(huán)境下搭建 MS SQL Server 的主從同步,幫助讀者了解主從同步的原理和實現(xiàn)方式,進而提高數(shù)據(jù)的可靠性和穩(wěn)定性。一、前言
在當(dāng)今信息化的時代,數(shù)據(jù)的安全性和穩(wěn)定性顯得尤為重要。數(shù)據(jù)庫是許多企業(yè)和組織存儲和管理數(shù)據(jù)的核心,因此如何保證數(shù)據(jù)庫的高可用性和數(shù)據(jù)的同步性是一個非常關(guān)鍵的問題。而基于主從同步的技術(shù)可以有效地解決這個問題。本文將介紹如何在 Docker 環(huán)境下搭建 MS SQL Server 的主從同步,幫助讀者了解主從同步的原理和實現(xiàn)方式,進而提高數(shù)據(jù)的可靠性和穩(wěn)定性。
(資料圖片)
二、SQL Server 主從同步的原理介紹主從同步是一種常用的技術(shù),用于在多個 SQL Server 實例之間保持數(shù)據(jù)同步。在主從同步中,一個 SQL Server 實例被用作數(shù)據(jù)的源,而另一個或多個 SQL Server 實例則作為數(shù)據(jù)的接收端。當(dāng)主節(jié)點上的數(shù)據(jù)發(fā)生更改時,這些更改將被捕獲并保存到一個事務(wù)日志中。從節(jié)點會定期檢查主節(jié)點的事務(wù)日志,并將主節(jié)點上的更改應(yīng)用到自己的數(shù)據(jù)庫中,從而保持兩個數(shù)據(jù)庫之間的數(shù)據(jù)同步。
三、具體的搭建過程3.1 準備工作在開始安裝之前,需要確保CentOS上已經(jīng)安裝了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-engine3.1.2 安裝 Docker
按照下列步驟依次進行安裝,中間過程直接略過
# 1.安裝需要的軟件包:sudo yum install -y yum-utils# 2.設(shè)置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服務(wù):sudo systemctl start docker# 5.設(shè)置開機自啟動docker服務(wù):sudo systemctl enable docker
挖坑002:后續(xù)會寫關(guān)于docker文章,對于docker image 邏輯原理,進行講解問答區(qū)有人提問該問題:https://ask.csdn.net/questions/7923009/541611003.1.3 驗證本地 Docker 是否安裝成功
sudo docker run hello-worldHello from Docker!This message shows that your installation appears to be working correctly....3.2 創(chuàng)建 Docker 網(wǎng)絡(luò)
在進行主從搭建之前,需要先創(chuàng)建一個 Docker 網(wǎng)絡(luò)。這個網(wǎng)絡(luò)用于連接所有的 SQL Server 容器。在創(chuàng)建網(wǎng)絡(luò)之前,需要先確認已經(jīng)啟動了 Docker:
sudo systemctl start docker
然后,可以使用以下命令來創(chuàng)建一個名為sync-net的 Docker 網(wǎng)絡(luò):
[root@hecs-bluetata ~]# docker network create -d bridge sync-net538c142757e91c0b798ce0e45dc02b6038f00adaf37cfe3b09659dea8c950c93
其中參數(shù) -d 指定了網(wǎng)絡(luò)的類型,bridge 指的是橋接網(wǎng)絡(luò),sync-net 指的是新創(chuàng)建的網(wǎng)絡(luò)的名稱。
3.3 創(chuàng)建主從節(jié)點的 SQL Server 容器創(chuàng)建 SQL Server 容器之前,需要先準備 SQL Server 的 Docker 鏡像??梢酝ㄟ^以下命令來獲取 SQL Server 2019 的 Docker 鏡像:
docker pull mcr.microsoft.com/mssql/server:2019-latest
獲取到 Docker 鏡像之后,就可以創(chuàng)建 SQL Server 容器了。可以通過以下命令來創(chuàng)建2個 SQL Server 容器,分別命名為 sqlserver-master、和 sqlserver-slave,并加入所創(chuàng)建的 Docker 網(wǎng)絡(luò)中。
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
針對上述命令,相關(guān)參數(shù)的解釋:
請確確保在創(chuàng)建上述 Docker 的過程中沒有錯誤。
如果在創(chuàng)建過程中出現(xiàn)端口占用,或者名稱占用等錯誤,可以查看相應(yīng)容器,選擇性的刪除容器后,重新創(chuàng)建,相關(guān)命令:
docker ps -adocker rm d3d3a4712b5fdocker stop d3d3a4712b5f3.4 創(chuàng)建主從同步端點3.4.1 配置主節(jié)點的同步端點
進入 SQL Server主節(jié)點容器,并創(chuàng)建主從同步端點:
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 配置從節(jié)點的同步端點
進入 SQL Server從節(jié)點容器,并創(chuàng)建主從同步端點:
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 創(chuàng)建主從同步數(shù)據(jù)庫3.5.1 創(chuàng)建主節(jié)點同步數(shù)據(jù)庫
回到 SQL Server 主節(jié)點容器,并創(chuàng)建主從同步數(shù)據(jù)庫:
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 創(chuàng)建從節(jié)點同步數(shù)據(jù)庫
回到 SQL Server 從節(jié)點容器,并創(chuàng)建主從同步數(shù)據(jù)庫:
docker exec -it sqlserver-slave /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P P@ssw0rd02docker 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 主節(jié)點容器,并啟動主從同步:
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 驗證同步狀態(tài)
回到 SQL Server 主節(jié)點容器,并查看主從同步狀態(tài):
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")"
可以看到以下的輸出結(jié)果:
database_id synchronization_state_desc----------- ------------------------5 SYNCHRONIZED
這表示主從同步已經(jīng)成功地建立,并且 mydb 數(shù)據(jù)庫已經(jīng)在主從節(jié)點之間同步。
注意:這里我這里使用了開發(fā)版的 SQL Server 鏡像,如果你在生產(chǎn)環(huán)境中使用 SQL Server,請使用適當(dāng)版本的鏡像,并根據(jù)需要進行調(diào)整。
四、總結(jié)本文介紹了在 Docker 環(huán)境下搭建 MS SQL Server 的主從同步,并演示了如何進行配置和管理。通過本文的學(xué)習(xí),你可以了解主從同步技術(shù)的實現(xiàn)原理和具體操作方法,并為提高數(shù)據(jù)可靠性和穩(wěn)定性提供了一種有效的解決方案。同時,也需要認真考慮主從同步的一些限制和要求,并根據(jù)實際情況進行配置和管理。
點擊關(guān)注,第一時間了解華為云新鮮技術(shù)~
標(biāo)簽: