sql >> データベース >  >> RDS >> MariaDB

WireGuardを使用したMariaDBレプリケーションのマルチクラウド展開

    このブログ投稿では、マルチクラウド環境でMariaDBレプリケーションセットアップをデプロイする方法を検討します。プライマリアプリケーションがAWSにあるとすると、MariaDBマスターをホストするプライマリデータセンターとしてAWSを設定するのが最善の方法です。 MariaDBスレーブはGCPでホストされ、ClusterControlはオフィス内の会社のプライベートクラウドインフラストラクチャ内に配置されます。これらはすべて、192.168.50.0/24のIP範囲でWireGuardのシンプルで安全なVPNトンネルを介して接続されています。 ClusterControlは、このVPNインターフェースを使用して、すべてのデータベースノードで展開、管理、および監視をリモートで実行します。

    ホストは次のとおりです:

    • アマゾンウェブサービス(AWS):
      • ホスト:MariaDBマスター
      • パブリックIP:54.151.183.93
      • プライベートIP:10.15.3.170/24(VPC)
      • VPN IP:192.168.50.101
      • OS:Ubuntu 18.04.4 LTS(バイオニック)
      • 仕様:t2.medium(2 vCPU、4 GBメモリ)
    • Google Cloud Platform(GCP):
      • ホスト:MariaDBスレーブ
      • パブリックIP:35.247.147.95
      • プライベートIP:10.148.0.9/32
      • VPN IP:192.168.50.102
      • OS:Ubuntu 18.04.4 LTS(バイオニック)
      • 仕様:n1-standard-1(1 vCPU、3.75 GBメモリ)
    • VMwareプライベートクラウド(Office):
      • ホスト:ClusterControl
      • パブリックIP:3.25.96.229
      • プライベートIP:192.168.55.138/24
      • VPN IP:192.168.50.100
      • OS:Ubuntu 18.04.4 LTS(バイオニック)
      • 仕様:プライベートクラウドVMWare(2 CPU、2 GB RAM)

    最終的なアーキテクチャは次のようになります:

    すべてのノードの/etc/hostsの下にあるホストマッピングは次のとおりです。

    3.25.96.229     cc clustercontrol office.mydomain.com
    54.151.183.93   aws1 db1 mariadb1 db1.mydomain.com
    35.247.147.95   gcp2 db2 mariadb2 db2.mydomain.com

    ホストマッピングを設定すると、ホスト間の名前解決管理が簡素化され、Wireguardピアを構成するときにIPアドレスの代わりにホスト名が使用されます。

    VPN用WireGuardのインストール

    すべてのサーバーは3つの異なる場所にあり、パブリックネットワーク経由でのみ接続されているため、Wireguardを使用してすべてのノード間にVPNトンネリングを設定します。次の内部IP構成を使用して、この通信用にすべてのノードに新しいネットワークインターフェイスを追加します。

    • 192.168.50.100-ClusterControl(Officeプライベートクラウド)
    • 192.168.50.101-MariaDBマスター(AWS)
    • 192.168.50.102-MariaDBスレーブ(GCP)

    このページに示すように、3つのノードすべてにWireguardをインストールします。

    $ sudo add-apt-repository ppa:wireguard/wireguard
    $ sudo apt-get upgrade
    $ sudo apt-get install wireguard

    Ubuntuホストの場合、wireguardのインストール中にプロンプ​​トが表示されたら、デフォルト値を受け入れるだけです。 Wireguardを機能させるには、OSを最新バージョンにアップグレードすることが非常に重要であることに注意してください。

    ホストを再起動して、Wireguardカーネルモジュールをロードします。

    $ reboot

    起動したら、すべてのノードの/ etc/hosts内のホストマッピングを次のように構成します。

    $ cat /etc/hosts
    3.25.96.229     cc clustercontrol office.mydomain.com
    54.151.183.93   aws1 db1 mariadb1 db1.mydomain.com
    35.247.147.95   gcp2 db2 mariadb2 db2.mydomain.com
    127.0.0.1       localhost
    Wireguardのセットアップ

    **このセクションのすべての手順は、特に指定がない限り、すべてのノードで実行する必要があります。

    1)rootユーザーとしてのすべてのノードで、秘密鍵を生成し、安全なアクセス許可を割り当てます

    $ umask 077
    $ wg genkey > /root/private

    2)次に、wg0:

    という新しいインターフェースを追加します。
    $ ip link add wg0 type wireguard

    3)対応するIPアドレスをwg0インターフェースに追加します:

    ホスト「cc」の場合:

    $ ip addr add 192.168.50.100/32 dev wg0
    ホスト「aws1」の場合:

    $ ip addr add 192.168.50.101/32 dev wg0

    ホスト「gcp2」の場合:

    $ ip addr add 192.168.50.102/32 dev wg0

    4)リスニングポートを55555にし、生成された秘密鍵をWireguardインターフェースに割り当てます。

    $ wg set wg0 listen-port 55555 private-key /root/private

    5)ネットワークインターフェースを起動します:

    $ ip link set wg0 up

    6)インターフェースが起動したら、「wg」コマンドで確認します。

    (cc1)$ wg
    interface: wg0
      public key: sC91qhb5QI4FjBZPlwsTLNIlvuQqsALYt5LZomUFEh4=
      private key: (hidden)
      listening port: 55555
    (aws1) $ wg
    interface: wg0
      public key: ZLdvYjJlaS56jhEBxWGFFGprvZhtgJKwsLVj3zGonXw=
      private key: (hidden)
      listening port: 55555
    (gcp2) $wg
    interface: wg0
      public key: M6A18XobRFn7y7u6cg8XlEKy5Nf0ZWqNMOw/vVONhUY=
      private key: (hidden)
      listening port: 55555

    これで、すべてを接続する準備が整いました。

    Wireguardインターフェースを介したホストの接続

    次に、すべてのノードをピアとして追加し、それらが相互に通信できるようにします。このコマンドには、4つの重要なパラメーターが必要です。

    • ピア :ターゲットホストの公開鍵。
    • 許可されたips :通信が許可されているホストのIPアドレス。
    • エンドポイント :ホストとWireguardおよびリスニングポート(ここでは、ポート55555を使用するようにすべてのノードを構成します)。
    • 永続的-キープアライブ :NATおよびステートフルファイアウォールは「接続」を追跡するため、NATの背後にあるピアまたはファイアウォールが着信パケットを受信する場合は、キープアライブパケットを定期的に送信することにより、NAT/ファイアウォールマッピングを有効に保つ必要があります。デフォルト値は0(無効)です。

    したがって、ホストccで、「aws1」と「gcp2」を追加する必要があります。

    $ wg set wg0 peer ZLdvYjJlaS56jhEBxWGFFGprvZhtgJKwsLVj3zGonXw= allowed-ips 192.168.50.101/32 endpoint aws1:55555 persistent-keepalive 25
    $ wg set wg0 peer M6A18XobRFn7y7u6cg8XlEKy5Nf0ZWqNMOw/vVONhUY= allowed-ips 192.168.50.102/32 endpoint gcp2:55555 persistent-keepalive 25
    ホスト「aws1」で、ccとgcp2を追加する必要があります:

    $ wg set wg0 peer sC91qhb5QI4FjBZPlwsTLNIlvuQqsALYt5LZomUFEh4= allowed-ips 192.168.50.100/32 endpoint cc:55555 persistent-keepalive 25
    $ wg set wg0 peer M6A18XobRFn7y7u6cg8XlEKy5Nf0ZWqNMOw/vVONhUY= allowed-ips 192.168.50.102/32 endpoint gcp2:55555 persistent-keepalive 25
    ホスト「gcp2」で、ccとaws1を追加する必要があります:

    $ wg set wg0 peer sC91qhb5QI4FjBZPlwsTLNIlvuQqsALYt5LZomUFEh4= allowed-ips 192.168.50.100/32 endpoint gcp2:55555 persistent-keepalive 25
    $ wg set wg0 peer ZLdvYjJlaS56jhEBxWGFFGprvZhtgJKwsLVj3zGonXw= allowed-ips 192.168.50.101/32 endpoint aws1:55555 persistent-keepalive 25

    すべてのホストから、お互いにpingを実行し、返信が届くようにします。

    (cc)$ ping 192.168.50.101 # aws1
    (cc)$ ping 192.168.50.102 # gcp2
    (aws1)$ ping 192.168.50.101 # cc
    (aws1)$ ping 192.168.50.102 # gcp2
    (gcp2)$ ping 192.168.50.100 # cc
    (gcp2)$ ping 192.168.50.101 # aws1

    「wg」出力をチェックして、現在のステータスを確認します。ホストccの観点からの出力は次のとおりです。

    interface: wg0
      public key: sC91qhb5QI4FjBZPlwsTLNIlvuQqsALYt5LZomUFEh4=
      private key: (hidden)
      listening port: 55555
    
    peer: M6A18XobRFn7y7u6cg8XlEKy5Nf0ZWqNMOw/vVONhUY=
      endpoint: 35.247.147.95:55555
      allowed ips: 192.168.50.102/32
      latest handshake: 34 seconds ago
      transfer: 4.70 KiB received, 6.62 KiB sent
      persistent keepalive: every 25 seconds
    
    peer: ZLdvYjJlaS56jhEBxWGFFGprvZhtgJKwsLVj3zGonXw=
      endpoint: 54.151.183.93:55555
      allowed ips: 192.168.50.101/32
      latest handshake: 34 seconds ago
      transfer: 3.12 KiB received, 9.05 KiB sent
      persistent keepalive: every 25 seconds

    すべてのステータスは良好に見えます。ノード間のエンドポイント、ハンドシェイクステータス、および帯域幅ステータスを確認できます。この構成を構成ファイルに永続化して、WireGuardで簡単にロードできるようにします。 /etc/wireguard/wg0.confにあるファイルに保存します。まず、ファイルを作成します:

    $ touch /etc/wireguard/wg0.conf

    次に、インターフェイスwg0のランタイム構成をエクスポートし、「wg-quick」コマンドを使用してwg0.confに保存します。

    $ wg-quick save wg0

    構成ファイルの内容を確認します(ホスト「cc」の例):

    (cc)$ cat /etc/wireguard/wg0.conf
    [Interface]
    Address = 192.168.50.100/24
    ListenPort = 55555
    PrivateKey = UHIkdA0ExCEpCOL/iD0AFaACE/9NdHYig6CyKb3i1Xo=
    
    [Peer]
    PublicKey = ZLdvYjJlaS56jhEBxWGFFGprvZhtgJKwsLVj3zGonXw=
    AllowedIPs = 192.168.50.101/32
    Endpoint = 54.151.183.93:55555
    PersistentKeepalive = 25
    
    [Peer]
    PublicKey = M6A18XobRFn7y7u6cg8XlEKy5Nf0ZWqNMOw/vVONhUY=
    AllowedIPs = 192.168.50.102/32
    Endpoint = 35.247.147.95:55555
    PersistentKeepalive = 25

    コマンドwg-quickは、WireGuardインターフェースを管理および構成するためのいくつかの優れたショートカットを提供します。このツールを使用して、ネットワークインターフェイスを上下させます。

    (cc)$ wg-quick down wg0
    [#] ip link delete dev wg0
    
    (cc)$ wg-quick up wg0
    [#] ip link add wg0 type wireguard
    [#] wg setconf wg0 /dev/fd/63
    [#] ip -4 address add 192.168.50.100/24 dev wg0
    [#] ip link set mtu 8921 up dev wg0

    最後に、起動時にこのインターフェースをロードするようにsystemdに指示します:

    $ systemctl enable [email protected]
    Created symlink /etc/systemd/system/multi-user.target.wants/[email protected] → /lib/systemd/system/[email protected]

    この時点で、VPN構成が完了し、展開を開始できます。

    MariaDBレプリケーションのデプロイ

    アーキテクチャ内のすべてのノードが相互に通信できるようになったら、ClusterControlを使用してMariaDBレプリケーションをデプロイするための最後のステップに進みます。

    ClusterControlをccにインストールします:

    (cc)$ wget https://severalnines.com/downloads/cmon/install-cc
    (cc)$ chmod 755 install-cc
    (cc)$ ./install-cc

    インストールが完了するまで、指示に従ってください。次に、ClusterControlホストから両方のMariaDBノードへのパスワードなしのSSHを設定する必要があります。まず、ユーザーrootのSSHキーを生成します:

    (cc)$ whoami
    root
    (cc)$ ssh-keygen -t rsa # press Enter for all prompts

    /root/.ssh/id_rsa.pubの公開鍵コンテンツを/root/.ssh/authorized_keysの下のMariaDBノードにコピーします。これは、rootがホストへのSSHを許可されていることを前提としています。それ以外の場合は、それに応じてこれを許可するようにSSHデーモンを構成します。パスワードなしのSSHが正しく設定されていることを確認します。 ClusterControlノードで、リモートSSHコマンドを実行し、パスワードプロンプトなしで正しい応答が返されることを確認します。

    (cc)$ ssh 192.168.50.101 "hostname"
    aws1
    (cc)$ ssh 192.168.50.102 "hostname"
    gcp2

    これで、MariaDBレプリケーションをデプロイできます。 Webブラウザーを開き、http:// public_ip_of_CC /clustercontrolのClusterControlUIに移動して、スーパー管理者ユーザーのログインを作成します。 「デプロイ」->「MySQLレプリケーション」に移動し、以下を指定します:

    次に、バージョン10.4のベンダーとして「MariaDB」を選択します。 MariaDBのルートパスワードも指定します。 [トポロジの定義]セクションで、次のスクリーンショットのように、MariaDBノードのWireguard IPアドレス(wg0)を指定します。

    [展開]をクリックして、展開が完了するまで待ちます。完了すると、次のように表示されます。

    現在、MariaDBレプリケーションのセットアップは3つの異なる場所(オフィス、AWS、GCP)で実行されており、ノード間の安全なVPNトンネリングに接続されています。


    1. Androidのsqliteデータベースに大量のデータを挿入する方法

    2. 典型的なWordPressエラーを修正する方法

    3. パッチポリシー

    4. Postgresが配列にありません