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

推薦する

Dockerイメージの圧縮と最適化操作

Docker が今日非常に人気がある理由は、主にその軽量性、迅速な展開、およびリソースの利用にありま...

MySQL スロークエリログの設定と使用方法のチュートリアル

序文MySQL スロー クエリ ログは、日常業務でよく遭遇する機能です。MySQL スロー クエリ ...

高品質なコードを書く Web フロントエンド開発実践書の抜粋

(P4) Web 標準は一連の標準で構成されています。中心となる概念は、Web ページの構造、スタイ...

vueプロジェクトのマルチ環境設定(.env)の実装

目次マルチ環境構成とは何ですか? また、なぜそれが必要なのですか? .env ファイルはどこで設定さ...

Docker と Intellij IDEA の融合により、Java 開発の生産性が 10 倍向上

目次1. 開発前の準備2. 新しいプロジェクトIdea は Java 開発のための強力なツールであり...

CSSファイルをインポートする3つの方法の詳細な説明

CSS を導入する方法には、インライン スタイル、内部スタイル シート、外部スタイル シートの 3 ...

CentOS8でルートパスワードを素早く変更する方法

Centos8仮想マシンを起動し、上下キーを押して図1のインターフェースの最初の行を選択します。図1...

jQueryは、マウスをドラッグしてdivの位置とサイズを変更する方法を実装しています。

Windows フォームと同様の効果を得るには、中央をドラッグして div の位置を変更し、端をド...

Docker Consul の概要とクラスター環境構築手順(グラフィカルな説明)

目次1. Dockerコンサルの概要2. nginxとconsulをベースにした自動検出と高可用性の...

Windows10システムにMySQL 5.7.17をインストールする

オペレーティング システム win10 MySQL は、公式 Web サイトからダウンロードした 6...

JS 開発効率を上げる4つの超実践的なヒント

目次1. 短絡判定2. オプション連鎖演算子 (?) 3. ヌル合体演算子 (??) 4. 終了関数...

Vueは開始時間と終了時間の範囲クエリを実装します

この記事では、Vueで開始時間と終了時間の範囲を照会する方法を参考までに紹介します。具体的な内容は次...

MySQL でシンプルな検索エンジンを実装するためのサンプルコード

目次序文導入ngram全文パーサー全文インデックスを作成する検索方法1. 自然言語検索(自然言語モー...

vsftpd ユーザーが ssh 経由でログインすることを禁止する方法

序文vsftp は使いやすく安全な FTP サーバー ソフトウェアです。システムユーザーまたは仮想ユ...

CocosCreatorオブジェクトプールの使い方

目次序文:特定の操作ステップ1: プレハブを準備するステップ2: オブジェクトプールを初期化するステ...