GNU/Linux >> Linux の 問題 >  >> Ubuntu

Ubuntu16.04LTSでHeartbeatとDRBDを使用してMariaDBの高可用性を設定する方法

ハートビートとDRBDはどちらも、2台のサーバーを使用するすべてのアプリケーションのクラスターソリューションに使用されます。両方のサーバーはアクティブモードとパッシブモードで動作し、一方のサーバーは同時に動作し、もう一方のサーバーはバックアップサーバーとして動作します。 DRBD(Distributed Replicated Block Device)は、2台のサーバー間でデータをリアルタイムで同期するカーネルレベルのサービスです。 Heartbeatは、プライマリLinuxサーバーとバックアップLinuxサーバーが他方が「稼働中」であるかどうかを判断し、プライマリが稼働していない場合はリソースをバックアップにフェイルオーバーできるようにするオープンソースプログラムです。また、サーバー内のIPの高可用性やその他のサービスも管理します。

このチュートリアルでは、Ubuntu16.04サーバーでHeartbeatとDRBDを使用してMariaDBの高可用性を実現する方法を学習します。

要件
  • Ubuntu16.04サーバーがインストールされている2つのノード。
  • 各ノードに2枚のネットワークカードがインストールされています。
  • 各ノードにインストールされている追加のパーティション化されていないハードドライブ。
  • 各ノードにsudo権限が設定されているroot以外のユーザー。
はじめに

開始する前に、各ノードでIPアドレスを設定する必要があります。各ノードで次のIPアドレスを使用します:

ノード1:

eth0では172.16.0.1、eth1では192.168.0.101

ノード2:

eth0では172.16.0.2、eth1では192.168.0.102

IP192.168.0.103が高可用性IPになります。

次に、各ノードでホスト名とホスト名の解決を設定する必要もあります。したがって、各ノードは相互に通信できます。最初のノードで、/ etc/hostsファイルと/etc/hostnameファイルを開きます。

sudo nano /etc/hosts

ファイルの最後に次の行を追加します。

172.16.0.1  Node1
172.16.0.2  Node2
sudo nano /etc/hostname

以下に示すようにファイルを変更します:

Node1

終了したら、ファイルを保存して閉じます。

2番目のノードで、/ etc/hostsファイルと/etc/hostnameファイルを開きます。

sudo nano /etc/hosts

ファイルの最後に次の行を追加します。

172.16.0.1  Node1
172.16.0.2  Node2
sudo nano /etc/hostname

以下に示すようにファイルを変更します:

Node2

終了したら、ファイルを保存して閉じます。

次に、次のコマンドを使用して、各ノードを最新バージョンに更新します。

sudo apt-get update -y
sudo apt-get upgrade -y

システムが更新されたら、システムを再起動してこれらの変更を適用します。

DRBDとハートビートをインストールする

次に、両方のノードにDRBDとHeartbeatをインストールする必要があります。デフォルトでは、どちらもUbuntu16.04のデフォルトリポジトリで利用できます。両方のノードで次のコマンドを実行するだけで、それらをインストールできます。

sudo apt-get install drbd8-utils heartbeat -y

次に、DRBDとハートビートサービスを開始し、起動時に開始できるようにします。

sudo systemctl start drbd
sudo systemctl start heartbeat
systemctl enable drbd
systemctl enable heartbeat

DRBDとハートビートを構成する

次に、各ノードでDRBDデバイスをセットアップする必要があります。各ノードの2番目のパーティション化されていないドライブ/dev/sdbに単一のパーティションを作成します。

これを行うには、各ノードで次のコマンドを実行するだけです。

sudo echo -e 'n\np\n1\n\n\nw' | fdisk /dev/sdb

次に、両方のノードでDRBDを構成する必要があります。これを行うには、各ノードに/etc/drbd.d/r0.resファイルを作成します。

sudo nano /etc/drbd.d/r0.res

次の行を追加します:

global {
usage-count no;
}
resource r0 {
protocol C;
startup {
degr-wfc-timeout 60;
}
disk {
}
syncer {
rate 100M;
}
net {
cram-hmac-alg sha1;
shared-secret "aBcDeF";
}
on Node1 {
device /dev/drbd0;
disk /dev/sdb1;
address 172.16.0.1:7789;
meta-disk internal;
}
on Node2 {
device /dev/drbd0;
disk /dev/sdb1;
address 172.16.0.2:7789;
meta-disk internal;
}
}

終了したらファイルを保存して閉じ、各ノードで別の構成ファイルを開きます。

sudo nano /etc/ha.d/ha.cf

次の行を追加します:

# Check Interval
keepalive 1
# Time before server declared dead
deadtime 10
# Secondary wait delay at boot
initdead 60
# Auto-failback
auto_failback off
# Heartbeat Interface
bcast eth1
# Nodes to monitor
node Node1
node Node2

ファイルを保存して閉じます。

次に、各ノードでリソースファイル/etc/ha.d/haresourcesを開きます。

sudo nano /etc/ha.d/haresources

次の行を追加します:

Node1 192.168.0.103/24 drbddisk::r0 Filesystem::/dev/drbd0::/var/lib/mysql::ext4::noatime

ここで、Node1はメインアクティブノードのホスト名、192.168.0.103は浮動小数点IPアドレス、/ var / lib / mysqlはマウントポイント、/ dev/drbd0はDRBDデバイスです。

次に、両方のノードで同一の認証キーを定義して保存する必要があります。これは、各ノードの/etc/ha.d/authkeysファイルで実行できます:

sudo nano /etc/ha.d/authkeys

次の行を追加します:

auth1
1 sha1 your-secure-password

ここで、your-secure-passwordは安全なパスワードです。両方のノードで同じパスワードを使用してください。

次に、Node1で次のコマンドを実行してDRBDを作成し、起動します。

sudo drbdadm create-md r0
sudo systemctl restart drbd
sudo drbdadm outdate r0
sudo drbdadm -- --overwrite-data-of-peer primary all
sudo drbdadm primary r0
sudo mkfs.ext4 /dev/drbd0
sudo chmod 600 /etc/ha.d/authkeys
sudo mkdir /var/lib/mysql

ノード1でDRBDディスクが作成されたら、次のコマンドを使用してノード2でDRBDディスクを作成します。

sudo drbdadm create-md r0
sudo systemctl restart drbd
sudo chmod 600 /etc/ha.d/authkeys
sudo mkdir /var/lib/mysql

これで、次のコマンドを実行して、DRBDディスクが接続され、正しく同期されていることを確認できます。

sudo cat /proc/drbd

すべてが正常であれば、次の出力が表示されます。

version: 8.4.5 (api:1/proto:86-101)
srcversion: F446E16BFEBS8B115AJB14H
0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r-----
ns:210413 nr:0 dw:126413 dr:815311 al:35 bm:0 lo:0 pe:11 ua:0 ap:0 ep:1 wo:f oos:16233752
[>....................] sync'ed: 3.3% (14752/14350)M
finish: 0:12:23 speed: 12,156 (16,932) K/sec

次に、両方のノードでハートビートを開始して、セットアップのフェイルオーバー部分を有効にします。

sudo systemctl start heartbeat

次に、Node1で次のコマンドを使用して、マウントされたDRBDパーティションを確認します。

sudo mount | grep drbd

次の出力が表示されます。

/dev/drbd0 on /var/lib/mysql type ext4 (rw,noatime,data=ordered)

次に、次のコマンドを使用して、フローティングIPがNode1にのみバインドされていることを確認します。

sudo ip addr show | grep 192.168.0.103

次の出力が表示されます。

inet 192.168.0.103/24 brd 192.168.0.255 scope global secondary eth1:0

MariaDBのインストールと構成

すべてが両方のノードで適切に構成されたら、MariaDBサーバーを両方のノードにインストールします。

両方のノードで次のコマンドを実行して、MariaDBサーバーをインストールします。

sudo apt-get install mariadb-server -y

次に、両方のノードでMariaDBサービスを無効にする必要があります:

sudo systemctl disable mysql

ここでは、Node1をプライマリとして使用し、Node2のデータベースは、Node1との同期によって作成および設定する必要があります。そのため、MariaDBサービスを停止し、Node2の/ var / lib/mysql内のコンテンツを削除する必要があります。これは、次のコマンドで実行できます。

sudo systemctl stop mysql
sudo rm -rf /var/lib/mysql/*

次に、MySQLメンテナンス構成ファイルをNode1からNode2にコピーする必要があります。これを行うには、次のコマンドを実行します。

sudo scp /etc/mysql/debian.cnf [email protected]:/etc/mysql/debian.cnf

次に、高可用性MySQLインスタンス上のデータベースをリモート管理してアクセスするためのrootユーザーを作成する必要があります。

これを行うには、Node1で次のコマンドを実行します。

mysql -u root -p

rootパスワードを入力し、次のコマンドを使用してrootユーザーを作成します。

MariaDB [(none)]> CREATE USER 'root'@'192.168.0.%' IDENTIFIED BY 'password';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.0..%' WITH GRANT OPTION;
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> QUIT;

次に、次のコマンドを使用して、両方のノードでMySQLのバインドアドレスを設定します。

sudo sed -i 's/127.0.0.1/0.0.0.0/g' /etc/mysql/mariadb.conf.d/*.cnf

MariaDBサービスのハートビートを開始します

次に、両方のノードのハートビートインスタンスにMariaDBサービスを追加する必要があります。これを行うには、/ etc / ha.d/haresourcesファイルを編集します。

sudo nano /etc/ha.d/haresources

次の行を変更します:

Node1 192.168.0.103/24 drbddisk::r0 Filesystem::/dev/drbd0::/var/lib/mysql::ext4::noatime mysql

終了したら、ファイルを保存して閉じます。

ハートビートを設定したら、両方のノードでハートビートを再起動する必要があります。

まず、Node1でheartbeaを再起動します:

sudo systemctl restart heartbeat

次に、50秒間待ってから、Node2でハートビートサービスを再起動します。

sudo systemctl restart heartbeat
ハートビートとDRBDをテストする

これですべてが適切に構成されました。一連のテストを実行して、アクティブサーバーに何らかの障害が発生したときに、ハートビートがアクティブサーバーからパッシブサーバーへの転送を実際にトリガーすることを確認します。

まず、Node1で次のコマンドを使用してNode1がプライマリdrbdノードであることを確認します。

sudo cat /proc/drbd

次の出力が表示されます。

version: 8.4.5 (api:1/proto:86-101)
srcversion: F446E16BFEBS8B115AJB14H
O cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
ns:22764644 nr:256 dw:529232 dr:22248299 al:111 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

次に、次のコマンドを使用してDRBDディスクがマウントされていることを確認します。

sudo mount | grep drbd
/dev/drbd0 on /var/lib/mysql type ext4 (rw,noatime,data=ordered)

次に、次のコマンドを使用してMariaDBサービスを確認します。

sudo systemctl status mysql

次に、フローティングIPを使用してリモートマシンからMariaDBサーバーにアクセスし、テストデータベースを作成します。

mysql -h 192.168.0.103 -u root -p
MariaDB [(none)]> create database test;
MariaDB [(none)]> quit

次に、Node1でハートビートを再起動します:

sudo systemctl restart heartbeat

これで、heartbeatはこの再起動をNode1でのMariaDBの障害として解釈し、フェイルオーバーをトリガーしてNode2をプライマリサーバーにする必要があります。

Node1で次のコマンドを実行すると、DRBDがNode1をセカンダリサーバーとして処理していることを確認できます。

sudo cat /proc/drbd

次の出力が表示されます。

version: 8.4.5 (api:1/proto:86-101)
srcversion: F446E16BFEBS8B115AJB14H
0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r-----
ns:22764856 nr:388 dw:529576 dr:22248303 al:112 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

次に、Node2で次のコマンドを実行して、Node2がプライマリdrbdノードであることを確認します。

sudo cat /proc/drbd

次の出力が表示されます。

version: 8.4.5 (api:1/proto:86-101)
srcversion: F446E16BFEBS8B115AJB14H
0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
ns:412 nr:20880892 dw:20881304 dr:11463 al:7 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

次に、MariaDBがNode2で実行されていることを確認します:

sudo systemctl status mysql

次に、リモートユーザーからNode2のフローティングIPを使用してMariaDBサーバーに接続します。

mysql -h 192.168.0.103 -u root -p

次に、Node1がプライマリサーバーであったときに以前に作成したテストデータベースを表示します。

MariaDB [(none)]> show databases;

次の出力が表示されます。

 +--------------------+
| Database |
+--------------------+
| test |
| information_schema |
| lost+found |
| mysql |
| performance_schema |
+--------------------+
5 rows in set (0.04 sec)

Ubuntu
  1. Ubuntu20.04LTSにMariaDBをインストールする方法

  2. Ubuntu18.04LTSでKerberosサーバーとクライアントをセットアップする方法

  3. Ubuntu20.04LTSにNginxを使用してSeafileをインストールする方法

  1. Ubuntu 16.04でPacemaker、Corosync、およびCrmshを使用してNginx高可用性を設定する方法

  2. Ubuntu 16.04 LTSにNginx、MariaDB、HHVMを使用してWordpressをインストールする方法

  3. Ubuntu18.04LTSでJenkinsマスターとスレーブをセットアップする方法

  1. Ubuntu16.04でVarnishとApacheを使用してMagento2をセットアップする方法

  2. Ubuntu18.04LTSにOrangeScrumをインストールして構成する方法

  3. Ubuntu18.04LTSにPHP-FPM7とMySQL5.7を使用してLighttpdをインストールする方法