記事ディレクトリ
I.はじめに
今日の情報化時代では、データのセキュリティと安定性が特に重要です。データベースは、データを保存および管理する多くの企業や組織の中核であるため、データベースの高可用性とデータの同期を確保する方法は非常に重要な問題です。マスタースレーブ同期に基づく技術は、この問題を効果的に解決できます。この記事では、MS SQL Server のマスター/スレーブ同期を Docker 環境で構築する方法を紹介し、読者がマスター/スレーブ同期の原理と実装を理解できるようにし、データの信頼性と安定性を向上させます。
2. SQL Server マスター/スレーブ同期の原理の紹介
マスター/スレーブ同期は、複数の SQL Server インスタンス間でデータの同期を維持するために一般的に使用される手法です。マスター/スレーブ同期では、SQL Server の 1 つのインスタンスがデータのソースとして使用され、SQL Server の別のインスタンスまたは複数のインスタンスがデータの受信側として使用されます。プライマリ ノードでデータが変更されると、これらの変更がキャプチャされ、トランザクション ログに保存されます。スレーブ ノードは定期的にマスター ノードのトランザクション ログをチェックし、マスター ノードの変更を独自のデータベースに適用することで、2 つのデータベース間のデータの同期を維持します。
3. 具体的な施工方法
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
Digging 002: docker についての記事を今後書き、docker image の論理原理を説明します
Q&A エリアでこの質問をした人がいます: 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
次に、次のコマンドを使用して、次の名前の Docker ネットワークを作成できますsync-net
。
[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 コンテナーを作成できます。次のコマンドを使用して、それぞれ sqlserver-master と sqlserver-slave という名前の 2 つの SQL Server コンテナーを作成し、作成した 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' | このパラメーターは、Microsoft の使用許諾契約に同意するために使用され、Microsoft の使用許諾契約に同意したことを示します。 |
-e 'SA_PASSWORD=P@ssw0rd01' | このパラメーターは、SQL Server SA アカウントのパスワードを設定するために使用されます。強力なパスワードを使用する必要があります。 |
-p 1433:1433 | このパラメーターは、外部から SQL Server インスタンスにアクセスできるように、コンテナーでポート 1433 を公開するために使用されます。 |
–name sqlserver-master | このパラメーターは、SQL Server のコンテナーの名前を設定するために使用されます。 |
–ホスト名 sqlserver-master | このパラメーターは、SQL Server のホスト名を設定するために使用されます。 |
–ネットワーク同期ネット | このパラメーターは、SQL Server コンテナーを指定されたネットワークに接続するために使用されます。 |
-e “MSSQL_AGENT_ENABLED=True” | このパラメーターは、定期的なタスクを自動的に実行できるように SQL Server エージェントを有効にするために使用されます。 |
-e “MSSQL_PID=開発者” | このパラメーターは、Developer バージョンを指定する SQL Server コンテナーの製品 ID を指定するために使用されます。 |
-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 を使用する場合は、適切なバージョンのイメージを使用し、必要に応じて調整してください.
V. まとめ
この記事では、Docker 環境での MS SQL Server のマスター/スレーブ同期を紹介し、それを構成および管理する方法を示します。この記事の学習を通じて、マスター/スレーブ同期テクノロジの実現原理と具体的な操作方法を理解し、データの信頼性と安定性を向上させる効果的なソリューションを提供できます。同時に、マスター/スレーブ同期のいくつかの制限と要件を慎重に検討する必要があり、実際の状況に応じて構成と管理を実行する必要があります。