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 コーディングのヒント (並べ替え)

推薦する

Vue.js での $emit の使用に関する詳細な説明

1. 親コンポーネントは props を使用して子コンポーネントにデータを渡すことができます。 2....

React setStateデータ更新メカニズムの詳細な説明

目次setStateを使用する理由setStateの使用法非同期または同期更新要約するsetStat...

MySQLを水平から垂直に、垂直から水平に変換する方法

データの初期化 `test_01` が存在する場合はテーブルを削除します。 テーブル「test_01...

JS デコレータ パターンと TypeScript デコレータ

目次デコレータパターンの紹介TypeScript のデコレータデコレータの使用デコレーターファクトリ...

MySQLデータベースの基礎知識

目次1. データベースを理解する1.1 データベースとデータ構造の関係1.2 なぜデータベースが必要...

Vueモバイル端末の適応化問題の詳細説明

1. vue uiでプロジェクトを作成する 2. 基本設定項目を選択する 3. プロジェクトを実行す...

Mysqlクエリ条件で文字列の末尾にスペースがあっても一致しない問題の詳細な説明

1. テーブル構造テーブル人id名前1あなた2あなた(スペース) 3あなた(スペース2つ) 2. ク...

略語マークと頭字語マーク

<abbr>タグと<acronym>タグは、Web ページに表示される略語と...

MySQLにおけるSQLの実行順序についてのちょっとした質問

今日、仕事中に左結合に関するSQLの問題に遭遇しました。後で解決しましたが、この問題を通じてSQLの...

Dockerコンテナオーケストレーション実装プロセス分析

実際の開発環境や本番環境では、コンテナを独立して実行することはあまりなく、複数のコンテナを一緒に実行...

CSSセレクタを使用してラベルスタイルを設定するサンプルコード

CSS セレクターHTML タグにスタイルを設定すると、タグの属性を設定できます。 <div ...

docker ストレージを使用して Exit を実行すると、サーバーへのファイルのアップロードが失敗する問題と解決策

1. 問題の説明Docker コンテナにインストールされているストレージが終了状態になっているため、...

MySQL テーブルの読み取り、書き込み、インデックス作成、その他の操作の SQL ステートメントの効率最適化の問題を分析します。

前回は、Explain 実行プランの表示、インデックスの分析など、MySQL での SQL クエリの...

Ubuntu 18.04 のすべての Python ライブラリを一度にアップグレードする方法

ピップとは何かpip は、Python パッケージの検索、ダウンロード、インストール、アンインストー...

MySQL 5.7.21 解凍版インストール Navicat データベース操作ツールインストール

MySQL解凍版とNavicatデータベース操作ツールのインストールは、以下のとおりです。 1. M...