[ クラウド ネイティブ | Docker ] 可用性の高い SQL Server の構築: Docker コンテナーでマスター/スレーブ同期を実装するためのガイド

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 のマスター/スレーブ同期を紹介し、それを構成および管理する方法を示します。この記事の学習を通じて、マスター/スレーブ同期テクノロジの実現原理と具体的な操作方法を理解し、データの信頼性と安定性を向上させる効果的なソリューションを提供できます。同時に、マスター/スレーブ同期のいくつかの制限と要件を慎重に検討する必要があり、実際の状況に応じて構成と管理を実行する必要があります。

おすすめ

転載: blog.csdn.net/dietime1943/article/details/130124814