SQL Server 2019 Always On クラスターの Docker デプロイメントの実装

SQL Server 2019 Always On クラスターの Docker デプロイメントの実装

Docker デプロイメント Always on クラスター

SQL Server は 2016 年に Linux のサポートを開始しました。 2017 バージョンと 2019 バージョンのリリースにより、Linux およびコンテナー プラットフォーム上の HA/DR、Kubernetes、ビッグ データ クラスター ソリューションのサポートが開始されました。

この記事では、3 ノードの Docker コンテナーに SQL Server 2019 をインストールし、AlwaysOn 可用性グループを作成します。

私たちの目標は、単一の構成ファイルを使用して環境を迅速に準備することです。したがって、開発者やテストチームは、互換性、接続性、コード機能などのテストを迅速に実行できます。

このセクションでは、まずコンテナに可用性グループをインストールできるように、Ubuntu ベースのイメージを準備します。その後、必要なインストールを実行します。

重要: この操作は実稼働環境では推奨されません。インストールはUbuntu 18.04で実行されました。

Dockerをインストールする

Dockerのインストールについては紹介しませんので、ご自身でインストールしてください。

建築

ホスト名IPポート役割
sqlNode1ホストIP 1501:1433ホスト
sqlNode2ホストIP 1502:1433インスタンス
sqlNode3ホストIP 1503:1433インスタンス

ポートは以下を示します: 外部ネットワークポート: 内部ネットワークポート

関連するコンテナイメージを準備する

次のようにオペレーティングシステムとデータベースのDockerイメージをプルします。

オペレーティング·システム

docker pull ubuntu:18.04

SQL Server 2019

docker pull mcr.microsoft.com/mssql/server:2019-latest

ダウンロードしたイメージ情報はdocker imagesを通じて確認できます。

ミラー アドレス: https://hub.docker.com/_/microsoft-mssql-server

構成コンテナを起動する

環境が準備できたら、正式な設定とインストールを開始します。

ステップ1: Dockerfileを作成する

dockerfile や docker-compose.yml などのファイルを保存するディレクトリを作成します。

mkdir /sql2019ha
cd /sql2019ha
dockerfile をタッチする
vi ドッカーファイル

dockerfileの内容は次のとおりです

ubuntu:18.04より
 
apt-get updateを実行する
 
apt install sudo wget curl gnupg gnupg1 gnupg2 -yを実行します。
apt install software-properties-common systemd vim -y を実行します。
wget -qO- https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add - を実行します。
 
add-apt-repository "$(wget -qO- https://packages.microsoft.com/config/ubuntu/18.04/mssql-server-2019.list)" を実行します。
apt-get updateを実行する
apt-get install -y mssql-serverを実行します。
 
/opt/mssql/bin/mssql-conf を実行して hadr.hadrenabled 1 を設定します。
/opt/mssql/bin/mssql-conf を実行して sqlagent.enabled を true に設定します。
 
エクスポーズ1433
 
エントリポイント /opt/mssql/bin/sqlservr

:

  • FROM : インストールのベースとなるイメージを示します
  • RUN : イメージ内で実行される操作
  • EXPOSE : サービスポートを指定する
  • ENTRYPOINT : コマンドを実行

ステップ2: イメージをコンパイルする

後続のインストールのために、Dockerfile を使用してイメージをコンパイルします。コマンド: docker build -t sqlag2019:ha .

ここで、 sqlag2019はイメージ名、 haはイメージ タグ、および Dockerfile が現在のディレクトリにあるため、 .は現在のディレクトリでのコンパイルを示します。

以下の出力は簡潔です。実際には、出力はたくさんあり、ネットワーク速度によっては、パッケージやデータベースのインストールなどに時間がかかります。

ビルドが成功しました。
ビルドコンテキストを Docker デーモンに送信 2.56kB
ステップ 1/12: ubuntu:18.04 から
 ---> c3c304cb4f22
ステップ 2/12: apt-get update を実行する
 ---> 950e50f80f00 で実行中
入手:1 http://archive.ubuntu.com/ubuntu bionic InRelease [242 kB]
入手:2 http://security.ubuntu.com/ubuntu bionic-security InRelease [88.7 kB]
取得:3 http://security.ubuntu.com/ubuntu bionic-security/main amd64 パッケージ [932 kB]
取得:4 ​​http://archive.ubuntu.com/ubuntu bionic-updates InRelease [88.7 kB]...
ステップ 3/12: apt install sudo wget curl gnupg gnupg1 gnupg2 -y を実行します。
 ---> edc9d15b2383 で実行中
..
..
ステップ 8/12: sudo apt-get install -y mssql-server を実行します。
 ---> 43d82a503f8a で実行中
パッケージリストを読み込んでいます...
依存関係ツリーを構築しています...
状態情報を読み取っています...
次の追加パッケージがインストールされます:
ステップ 9/12: sudo /opt/mssql/bin/mssql-conf set hadr.hadrenabled 1 を実行します。
 ---> 166c6596d2dd で実行中
この設定を適用するにはSQL Serverを再起動する必要があります。
'systemctl mssql-server.service を再起動します。
中間コンテナ 166c6596d2dd を削除しています
 ---> bcdb057fed43
ステップ 10/12: sudo /opt/mssql/bin/mssql-conf set sqlagent.enabled true を実行します。
 ---> 22dd6a93d1ef で実行中
この設定を適用するにはSQL Serverを再起動する必要があります。
'systemctl mssql-server.service を再起動します。
中間コンテナ 22dd6a93d1ef を削除
 ---> 6b90afbaf94e
ステップ 11/12: EXPOSE 1433
 ---> bcc14f3b0bad で実行中
中間コンテナ bcc14f3b0bad を削除しています
 ---> 4aae1563aa74
ステップ 12/12: ENTRYPOINT /opt/mssql/bin/sqlservr
 ---> 68b6ed45ff6a で実行中
中間コンテナ 68b6ed45ff6a を削除しています
 ---> b7467618c371
b7467618c371 の構築に成功しました
sqlag2019:ha のタグ付けに成功しました

最後にSuccessfullyメッセージが表示されたら、コンパイルは成功したことになります。そうでない場合は、エラー メッセージに従って問題を解決してください。

ステップ3: コンテナを作成する

イメージがコンパイルされたので、 docker-composeファイルを使用して 3 つのコンテナを作成し、構成します。具体的な内容は次のとおりです。

$ docker-compose.yml をタッチします
$ vi docker-compose.yml
バージョン: '3'
 
サービス:
  db1:
    コンテナ名: sqlNode1
    画像: sqlag2019:ha
    ホスト名: sqlNode1
    ドメイン名: lab.local
    環境:
      SA_パスワード: "MyPassWord123"
      EULA に同意: 「Y」
    ポート:
    - 「1501:1433」
    追加ホスト:
      sqlNode2.labl.local: "172.16.238.22"
      sqlNode3.labl.local: "172.16.238.23"
    ネットワーク:
        内部:
                ipv4_アドレス: 172.16.238.21
 
  db2:
    コンテナ名: sqlNode2
    画像: sqlag2019:ha
    ホスト名: sqlNode2
    ドメイン名: lab.local
    環境:
      SA_パスワード: "MyPassWord123"
      EULA に同意: 「Y」
    ポート:
    - 「1502:1433」
    追加ホスト:
      sqlNode1.lab.local: "172.16.238.21"
      sqlNode3.lab.local: "172.16.238.23"
    ネットワーク:
        内部:
                ipv4_アドレス: 172.16.238.22
 
  db3:
    コンテナ名: sqlNode3
    画像: sqlag2019:ha
    ホスト名: sqlNode3
    ドメイン名: lab.local
    環境:
      SA_パスワード: "MyPassWord123"
      EULA に同意: 「Y」
    ポート:
    - 「1503:1433」
    追加ホスト:
      sqlNode1.lab.local: "172.16.238.21"
      sqlNode2.lab.local: "172.16.238.22"
    ネットワーク:
        内部:
                ipv4_アドレス: 172.16.238.23
 
ネットワーク:
    内部:
      ipam:
            ドライバー: デフォルト
            設定:
                - サブネット: 172.16.238.0/24

ステップ4: コンテナを起動する

次に、 docker-compose up -dコマンドを使用して 3 つのコンテナを起動します。ここで、 -dバックグラウンドで実行することを意味します。

$ docker-compose アップ -d
デフォルト ドライバーを使用してネットワーク「sql2019hademo_internal」を作成しています
sqlNode2 を作成しています...
sqlNode1 を作成しています...
sqlNode2 を作成しています
sqlNode3 を作成しています...
sqlNode1 を作成しています
sqlNode2 を作成しています...完了

注意: 実行可能ファイルである docker-compose は別途インストールする必要があります。 apt、yum 経由でインストールできます。

コンテナのステータスを表示する

$ docker-compose ps
名前 コマンド 状態 ポート
--------------------------------------------------------------------------
sqlNode1 /bin/sh -c /opt/mssql/bin/ ... 0.0.0.0:1501->1433/tcp を起動
sqlNode2 /bin/sh -c /opt/mssql/bin/ ... 0.0.0.0:1502->1433/tcp が起動します
sqlNode3 /bin/sh -c /opt/mssql/bin/ ... 0.0.0.0:1503->1433/tcp が起動します

これでコンテナが起動しました。次に、SSMS を介してデータベースに接続し、関連するチェックを実行して ALWAYSON を構成します。

ステップ5: SSMSをMSSQLに接続する

次のように、ホストの外部ネットワーク IP + ポートを介して対応するデータベースに接続します。

ここに画像の説明を挿入

注: IPとポートの間にはカンマがあります

ここに画像の説明を挿入

データベースアイコンも Linux アイコンであることがわかります。

構成 - データベース

この部分では、KEY 暗号化ファイルの作成、ユーザーや利用可能なグループの管理など、データベース内の関連する構成を実行します。

ステップ 1: メイン データベース (sqlNode1) に接続する

メインデータベースはノード1、ポートは1501、接続方法は上記の通りです。

証明書と秘密鍵を/tmp/dbm_certificate.cerおよび/tmp/dbm_certificate.pvkファイルに抽出しました。

これらのファイルを他のノードにコピーし、次のファイルに基づいてマスターキーと証明書を作成します。次のスクリプトを実行します。

マスターを使用する
行く
 
パスワード = 'MyStr0ngPa$w0rd' でログイン dbm_login を作成します。
ログイン dbm_login のユーザー dbm_user を作成します。
行く
 
PASSWORD = 'MyStr0ngPa$w0rd' によるマスター キー暗号化の作成;
行く
SUBJECT = 'dbm' を指定して証明書 dbm_certificate を作成します。
バックアップ証明書 dbm_certificate
ファイル = '/tmp/dbm_certificate.cer'
秘密鍵付き(
        ファイル = '/tmp/dbm_certificate.pvk',
        パスワードによる暗号化 = 'MyStr0ngPa$w0rd'
    );
行く

ファイルを他の 2 つのノードにコピーします。

sqlNode1 に dbm_certificate.cer というファイルを作成します。
sqlNode1 に .pvk というファイルを作成します。
$ docker cp dbm_certificate.cer sqlNode2:/tmp/
$ docker cp dbm_certificate.pvk sqlNode2:/tmp/
$ docker cp dbm_certificate.cer sqlNode3:/tmp/
$ docker cp dbm_certificate.pvk sqlNode3:/tmp/

ステップ 2: スレーブ ライブラリ (sqlNode2 および sqlNode3) に接続する

2 つのスレーブ ライブラリのポートは 1502 と 1503 です。次に、マスター ライブラリによって実行される操作を次のように繰り返します。

パスワード = 'MyStr0ngPa$w0rd' でログイン dbm_login を作成します。
ログイン dbm_login のユーザー dbm_user を作成します。
行く
 
PASSWORD = 'MyStr0ngPa$w0rd' によるマスター キー暗号化の作成;
行く
証明書の作成 dbm_certificate   
    認証 dbm_user
    ファイルから = '/tmp/dbm_certificate.cer'
    秘密鍵付き(
    ファイル = '/tmp/dbm_certificate.pvk',
    パスワードによる復号 = 'MyStr0ngPa$w0rd'
);
行く

ステップ3: すべてのノード

すべてのノードで次のコマンドを実行します。

エンドポイントの作成 [Hadr_endpoint]
    AS TCP (LISTENER_IP = (0.0.0.0)、LISTENER_PORT = 5022)
    データミラーリングの場合(
        役割 = 全員、
        認証 = 証明書 dbm_certificate、
        暗号化 = 必要なアルゴリズム AES
        );
ALTER ENDPOINT [Hadr_endpoint] STATE = STARTED;
ENDPOINT::[Hadr_endpoint]への接続を[dbm_login]に許可します。

自動起動を常に有効にして、すべてのノードで次のコマンドを実行します。

ALTER EVENT SESSION AlwaysOn_health ON SERVER を (STARTUP_STATE=ON) にして変更します。
行く

ステップ4: 高可用性グループを作成する

SSMS ツールと T-SQL を使用できます。以下は T-SQL の例です。

次のスクリプトを実行して、主節點に可用性グループを作成します。 Pacemaker や Windows Server Failover Clustering などのクラスター管理プラットフォームなしでインストールされているためCLUSTER_TYPE = NONEオプションが選択されたことに注意してください。

Linux に AlwaysOn AG をインストールする場合は、Pacemaker に対して CLUSTER_TYPE = EXTERNAL を選択する必要があります。

可用性グループの作成 [AG1]
        (CLUSTER_TYPE = なし)
        レプリカ用
        N'sqlNode1'
            と (
            ENDPOINT_URL = N'tcp://sqlNode1:5022',
            可用性モード = 非同期コミット、
                SEEDING_MODE = 自動、
                FAILOVER_MODE = 手動、
            SECONDARY_ROLE (ALLOW_CONNECTIONS = ALL)
                )、
        N'sqlNode2'
            と (
            ENDPOINT_URL = N'tcp://sqlNode2:5022',
            可用性モード = 非同期コミット、
                SEEDING_MODE = 自動、
                FAILOVER_MODE = 手動、
            SECONDARY_ROLE (ALLOW_CONNECTIONS = ALL)
                )、
        N'sqlNode3'
            と (
            ENDPOINT_URL = N'tcp://sqlNode3:5022',
            可用性モード = 非同期コミット、
                SEEDING_MODE = 自動、
                FAILOVER_MODE = 手動、
            SECONDARY_ROLE (ALLOW_CONNECTIONS = ALL)
                );
行く

スレーブ ライブラリで次のコマンドを実行して、スレーブ ライブラリを AG グループに追加します。

ALTER AVAILABILITY GROUP [ag1] を (CLUSTER_TYPE = NONE) に結合します。
ALTER AVAILABILITY GROUP [ag1] GRANT CREATE ANY DATABASE;
行く

この時点で、Docker コンテナーへの SQL Server AlwaysOn クラスターのインストールは完了です。

注: 可用性グループを作成するためにCLUSTER_TYPE = NONE指定する場合、フェイルオーバーを実行するときに次のコマンドを実行する必要があります。

可用性グループの変更 [ag1] FORCE_FAILOVER_ALLOW_DATA_LOSS

テスト

プライマリ データベース上にデータベースを作成し、可用性グループ AG に追加します。

データベース agtestdb を作成します。
行く
ALTER DATABASE agtestdb SET RECOVERY FULL;
行く
データベース agtestdb をディスクにバックアップ = '/var/opt/mssql/data/agtestdb.bak';
行く
可用性グループを変更 [ag1] データベースを追加 [agtestdb];
行く

SSMS を使用して、同期ステータスが正常かどうかを確認します。

参考リンク

https://docs.microsoft.com/en-us/sql/linux/quickstart-install-connect-docker?view=sql-server-ver15
https://docs.microsoft.com/en-us/sql/linux/quickstart-install-connect-ubuntu?view=sql-server-ver15
可用性グループの作成
https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-configure-mssql-conf?view=sql-server-ver15
https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-configure-environment-variables?view=sql-server-ver15
https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-availability-group-cluster-ubuntu?view=sql-server-linux-ver15
Ubuntu 16.04 をインストールします。
詳しくはこちら

これで、SQL Server 2019 Always On クラスターの Docker デプロイメントの実装に関するこの記事は終了です。SQLServer クラスターの Docker デプロイメントに関する関連コンテンツの詳細については、123WORDPRESS.COM で以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Docker 経由で Linux システムに SQL Server データベースをインストールする
  • Docker を使用して Microsoft Sql Server を展開するための詳細な手順
  • DockerはMysql、.Net6、Sqlserverなどのコンテナをデプロイします
  • Docker を使用した SQL Server の実行の実装
  • Docker を使用して Microsoft SQL Server 2017 を実行する方法
  • DockerコンテナにMSSQLをデプロイする

<<:  フロア効果を実現するためのJavaScript

>>:  効率化に役立つ 20 の CSS コーディングのヒント (並べ替え)

推薦する

dockerfile-maven-plugin 使用ガイドの概要

目次pom 構成Setting.xml 構成ログインステータスログインが必要ですログインは必要ありま...

表示しているページのスナップショットを Baidu が保存できないように設定する方法

今日、Baidu でページを検索したところ、ページが削除されていたため、当然 Baidu スナップシ...

Jenkinsはマイクロサービスをパッケージ化してDockerイメージを構築し、実行します。

目次環境の準備始める1. GitLabリモートリポジトリがマイクロサービスプロジェクトを作成する2....

mysql ワイルドカード (sql 高度なフィルタリング)

目次まず、値の一部と一致させるために使用される特殊文字であるワイルドカードについて簡単に紹介します。...

JSでHTML本文のスタイルを変更する

目次1. 本来の定義2. JS操作、幅の変更を例に3. 効果: 幅が変更されました 1. 本来の定義...

Ubuntu環境でのPHP関連のパスと変更方法

Ubuntu環境におけるPHP関連パスPHP パス /usr/bin/php phpize5 /us...

MySQL インデックスの使用方法 (単一列インデックスと複数列インデックス)

1. 単一列インデックスどの列にインデックスを作成するかを選択することは、パフォーマンス最適化プロ...

互換性を維持しながら他のウェブページのデータを適用する iframe の使い方

以下は、Shiji Tiancheng が Tencent KartRider ページを呼び出すため...

Web2.0: 情報過多の原因と解決策

<br />情報の重複、情報過多、情報強迫、パーソナライズされたカスタマイズ、検索エンジ...

Docker クロスホストネットワーク (オーバーレイ) の実装

1. Dockerのホスト間通信Docker クロスホスト ネットワーク ソリューションには以下が含...

jQueryはクッキーを操作する

コードをコピーコードは次のとおりです。 jQuery.cookie = 関数(名前、値、オプション)...

Layuiはログインインターフェース検証コードを実装します

この記事の例では、ログインインターフェース検証コードを実装するためのlayuiの具体的なコードを参考...

テーブルタグ(テーブル)詳細

<br />テーブルは、昔から誰もが使ってきたタグで、今も使われています。しかし、現在の...

nginx のバージョン番号と WEB サーバー情報を隠すための解決策

Nginxはバージョン情報を隠すだけでなく、カスタムWebサーバー情報もサポートします。まずは最終的...

ノード スキャフォールディングを使用してトークン検証を実装するサーバーを構築する方法

コンテンツスキャフォールディングを使用してノードプロジェクトを素早く構築するデータベースとやり取りす...