摘要:本文將介紹如何在 Docker 環境下搭建 MS SQL Server 的主從同步,幫助讀者瞭解主從同步的原理和實現方式,進而提高資料的可靠性和穩定性。
在當今資訊化的時代,資料的安全性和穩定性顯得尤為重要。資料庫是許多企業和組織儲存和管理資料的核心,因此如何保證資料庫的高可用性和資料的同步性是一個非常關鍵的問題。而基於主從同步的技術可以有效地解決這個問題。本文將介紹如何在 Docker 環境下搭建 MS SQL Server 的主從同步,幫助讀者瞭解主從同步的原理和實現方式,進而提高資料的可靠性和穩定性。
主從同步是一種常用的技術,用於在多個 SQL Server 範例之間保持資料同步。在主從同步中,一個 SQL Server 範例被用作資料的源,而另一個或多個 SQL Server 範例則作為資料的接收端。當主節點上的資料發生更改時,這些更改將被捕獲並儲存到一個事務紀錄檔中。從節點會定期檢查主節點的事務紀錄檔,並將主節點上的更改應用到自己的資料庫中,從而保持兩個資料庫之間的資料同步。
在開始安裝之前,需要確保CentOS上已經安裝了Docker和Docker Compose。可以通過以下命令來進行安裝:
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
按照下列步驟依次進行安裝,中間過程直接略過
# 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
sudo docker run hello-world Hello from Docker! This message shows that your installation appears to be working correctly. ...
在進行主從搭建之前,需要先建立一個 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 指的是新建立的網路的名稱。
建立 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
針對上述命令,相關引數的解釋:
請確確保在建立上述 Docker 的過程中沒有錯誤。
如果在建立過程中出現埠佔用,或者名稱佔用等錯誤,可以檢視相應容器,選擇性的刪除容器後,重新建立,相關命令:
docker ps -a
docker rm d3d3a4712b5f
docker stop d3d3a4712b5f
進入 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)"
進入 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 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'"
回到 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'"
回到 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" \
回到 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 的主從同步,並演示瞭如何進行設定和管理。通過本文的學習,你可以瞭解主從同步技術的實現原理和具體操作方法,併為提高資料可靠性和穩定性提供了一種有效的解決方案。同時,也需要認真考慮主從同步的一些限制和要求,並根據實際情況進行設定和管理。