首頁 熱點 業界 科技快訊 數碼 電子消費 通信 前沿動態 電商

構建高可用性的 SQL Server:Docker 容器下的主從同步實現 當前消息

2023-06-25 20:42:56 來源 : 博客園

摘要:本文將介紹如何在 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-worldHello 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-net538c142757e91c0b798ce0e45dc02b6038f00adaf37cfe3b09659dea8c950c93

其中參數 -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

針對上述命令,相關參數的解釋:

請確確保在創建上述 Docker 的過程中沒有錯誤。

如果在創建過程中出現端口占用,或者名稱占用等錯誤,可以查看相應容器,選擇性的刪除容器后,重新創建,相關命令:

docker ps -adocker rm d3d3a4712b5fdocker 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.2 創建從節點同步數據庫

回到 SQL Server 從節點容器,并創建主從同步數據庫:

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 主節點容器,并啟動主從同步:

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 的主從同步,并演示了如何進行配置和管理。通過本文的學習,你可以了解主從同步技術的實現原理和具體操作方法,并為提高數據可靠性和穩定性提供了一種有效的解決方案。同時,也需要認真考慮主從同步的一些限制和要求,并根據實際情況進行配置和管理。

點擊關注,第一時間了解華為云新鮮技術~

標簽:

相關文章

最近更新