2016年9月23日金曜日

DynamicDR(オンプレto AWS ディザスタリカバリ環境)の実現 (第3回)



こんにちは。SIOSの高田です。
DynamicDR3回目のブログです。

前回の第2回目では、VPNの設定とサーバーの配置について記載しました。今回の第3回目では、サーバーの設定とLifeKeeperを利用したDBサーバーのクラスタ化について記載します。

まずは、サーバーの設定から行います。

1 サーバーの設定

1.1     サーバーへのログイン

各サーバーへログインして作業します。AWS側のサーバーへのログインは、第2回のブログ内の手順でダウンロードしたキーペアを利用します。

以降の手順では、DBサーバーとWebサーバーで設定内容が異なります。

1.2     DBサーバーのOS設定

インストールしたOSの設定を行います。DBサーバーはLifeKeeperによるクラスタ環境を構築します。そのため、LifeKeeperの動作に必要な設定を行います。

(1)   GUIを利用するため、yumコマンドでパッケージをインストールします。
# yum groupinstall "Desktop" "Desktop Platform" "General Purpose Desktop"

(2)   LifeKeeperをインストールするために必要なパッケージをインストールします。
# yum install –y redhat-lsb

(3)   SELinuxが無効化されているか確認します。
# cat /etc/selinux/config

無効になっていない場合は以下のようにパラメータを変更して、サーバーを再起動してください。
SELINUX=disabled

(4)   ホスト名および名前解決の設定を行います。
本検証では、/etc/hostsファイルで名前解決をしています。オンプレミスとAWS
DBサーバー間でホスト名で通信できるように設定します。

(5)   ファイアウォール設定を変更します。
LifeKeeper GUIは、デフォルトの初期接続ポートである8182を含め、特定のTCPポートを使用します。またポート1024以降をオブジェクトの送受信に使用するリモートメソッド呼び出し(RMI)に使用します。これらすべてのポートを利用できるように設定を行ってください。

ファイアウォールを使用した状態でのLifeKeeperの実行


1.3     WebサーバーのOS設定

インストールしたOSの設定を行います。Webサーバーでは、WordPressを利用してWebサイトを作成します。そのため、WordPressの動作に必要な設定を行います。Webサーバーの設定は、オンプレミスとAWSのサーバーで同じ内容です。

(1)   WordPressに必要なパッケージをyumコマンドでインストールします。
# yum install –y httpd mysql-server php php-mysql php-mbstring wget

(2)   OS起動時のApacheの自動起動を有効にします。
# chkconfig httpd on

(3)   Apacheを設定を変更します。
# vi /etc/httpd/conf/httpd.conf

以下のようにDocumentRootWordPressのディレクトリに変更します。
DocumentRoot "/var/www/wordpress"
          
(4)   最新版のWordPressのパッケージをダウンロードします。ダウンロードしたファイルを展開します。
# tar zxvf wordpress-latest-ja.tar.gz

(5)   展開したWordPressのファイルを「/var/www/」配下へ移動して、移動先のディレクトリに所有権を変更します。
# cp -r wordpress /var/www/
# chown -R apache.apache /var/www/wordpress

(6)   Apacheを起動します。
# service httpd start

(7)   SELinuxが無効化されているか確認します。
# cat /etc/selinux/config

無効になっていない場合は以下のようにパラメータを変更して、サーバーを再起動してください。
SELINUX=disabled


1.4     DBサーバーでのデータベース設定

追加した増設ディスクをデータベースのデータ格納場所として利用します。オンプレミス側のDBサーバー(プライマリサーバー)AWS側のDBサーバー(セカンダリサーバー)ごとの、実施手順を以下に説明します。

オンプレミス側のDBサーバー(プライマリサーバー)での実施手順

(1)   MySQLの関連パッケージをインストールします。
[コマンド例]
# yum install –y mysql-server

(2)   2回のブログ内の手順で追加したディスクにMySQLをインストールするための準備します。
そのディスクをフォーマットしてから、ファイルシステムを作成しマウントします。
[コマンド例]
# fdisk –cu /dev/sdb
# mkfs –t ext4 /dev/sdb1
# mkdir /data
# mount /dev/sdb1 /data

(3)   MySQLのデータディレクトリ(/test_mysql)に存在するすべてのファイル権限と所有者を適切に設定します。
[コマンド例]
# chown –R mysql:mysql /data
# chmod 755 /data

(4)   コマンドラインから、MySQLデーモンを起動します
[コマンド例]
# service mysqld start

(5)   MySQLを新規にインストールする場合は、MySQLデータベースを初期化します。
[コマンド例]
# mysql_secure_installation
すべての質問をYで返します。途中パスワード設定も求められるが指示通り設定します。
(6)   mysqlユーザーにshutdown権限と全てのホストからのアクセス権限を付与します。また、データベースwp作成とwpへの全てのホストからのアクセス権限を付与します。
[コマンド例]
# mysql -u root
mysql> grant shutdown on *.* to mysql@localhost identified by '任意のpassword';
mysql> grant all privileges on *.* to mysql@'%' identified by '任意のpassword';
mysql> create database wp;
mysql> grant all privileges on wp.* to wp@'%' identified by '任意の password ';
mysql> flush privileges;                                                 
mysql> exit
          
(7)   作成したデータ、設定ファイルを含むMySQLのディレクトリを共有領域へ移動します。
[コマンド例]
# mv /var/lib/mysql /data/

(8)   /etc/my.cnf を編集します。
[my.cnf]
[mysqld]
datadir=/data/mysql
socket=/data/mysql /mysql.sock
user=mysql
port=3306
pid-file=/var/run/mysqld/mysqld.pid
character-set-server = utf8
symbolic-links=0

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

[client]
user=mysql
password=password
(9)   mysqlを再起動します。
[コマンド例]
# service mysqld restart

AWS側のDBサーバー(セカンダリサーバー)での実施手順

(1)   mysql-serverをインストールします。
[コマンド例]
# yum install –y mysql-server

(2)   5.2で追加したディスクにMySQLをインストールするために、準備します。
そのディスクをフォーマットしてから、ファイルシステムを作成します。
[コマンド例]
# fdisk –cu /dev/xvde
# mkfs –t ext4 /dev/xvde1

(3)   MySQLのデータディレクトリ(/test_mysql)に存在するすべてのファイル権限と所有者を適切に設定します。
[コマンド例]
# mkdir /datal
# chown –R mysql: mysql /data
# chmod 755 /data

 補足:AWSのプライベートサブネットからyumを実行する方法
AWSプライベートサブネット上に配置したサーバーは、外部へ通信できないためyumなどのパッケージ管理ツールが利用できません。本検証では、AWSNAT Gateway機能を利用しています。

(1)   NAT Gatewayを作成します。















(2)   プライベートサブネットを指定します。

















(3)   新しいEIPを作成します。















(4)   NAT Gatewayが作成されたことを確認します。
















(5)   ルートテーブルにNAT Gatewayを紐付けます。
















これでNAT Gateway経由でyumの実行が可能になりました。

DBサーバーとWebサーバーの合計4台の設定が完了しました。続いては、LifeKeeperを利用してDBサーバーのMySQLを冗長化します。

2 LifeKeeperによるHAクラスターの構築

作成した仮想サーバーにLifeKeeperをインストールし、HAクラスターを構築します。

2.1     LifeKeeperのインストール

DBサーバーにLifeKeeperをインストールします。

LifeKeeperのインストールにあたり、LifeKeeper for Linux v9.1の製品メディアおよびライセンスを各DBサーバーに配置しておく必要があります。評価目的のお客様の場合は、以下のURLから申請します。

体験版および評価版のお申し込み

インストールの手順につきましては、下記のLifeKeeper for Linuxスタートアップガイド(v9.1)を参照してください。

LifeKeeperのインストール途中で「Select optional kits for SPS for Linux」画面が表示されます。MySQLを保護する「lkSQL」とDataReplication によるクラスターサーバー間のデータ共有を行う「lkDR」を選択してインストールします。

LifeKeeper for Linuxスタートアップガイド(v9.1)

セットアップが完了したら、LifeKeeperを起動します。

# /opt/LifeKeeper/bin/lkstart

2.2     LifeKeeper GUIの管理画面へのアクセス

オンプレミス側のDBサーバーにてLifeKeeperGUIを起動します。

# /opt/LifeKeeper/bin/lkGUIapp

AWS側のDBサーバーでLifeKeeperGUIを表示させる場合は、SSHXフォワーディングを使用します。SSHXフォワーディングを使用して手順の詳細については、以下の資料を参照してください。


2.3     コミュニケーションパスの作成

VPNの経路を利用して1本のコミュニケーションパスを作成します。コミュニケーションパスの作成手順の詳細については、以下の資料を参照してください。

コミュニケーションパスの作成

LifeKeeperはコミュニケーションパスが1本のみの設定となっている場合、警告の表示となります。コミュニケーションパス作成後、警告の表示を解除します。





 




















2.4     Data Replicationリソース階層の作成
オンプレミス側のサーバーが仮想環境で動作している場合は、Data Replication リソース階層の作成前に、次のファイルに下記のエントリーを追加してください。

ファイル:/opt/LifeKeeper/subsys/scsi/resources/DEVNAME/device_pattern
追加エントリー:/dev/sd*

詳細については、次のURLをご参照ください。

[Linux]ERROR 104052: Cannot get the hardware ID of device "デバイス名" について

LifeKeeper GUI管理画面より”Create Resource Hierarchy”を選択して、Data Replicationリソースを作成します。リソース作成ウィザードで入力する内容は以下の通りです。
Select Recovery Kit
Data Replication
Switchback Type
intelligent
Server
ONPREDB6B
Hierarchy Type
Replication Existing Filesystem
Existing Mount Point
/data
Data Replication Resource Tag
datarep-data
Filesystem Resource Tag
/data
Bitmap File
/opt/LifeKeeper/bitmap__data
Enable Asynchronous Replication
no (本検証では同期モードを使用)

ターゲット(セカンダリ)サーバーに Extendするとき、入力する内容は以下の通りです。
Target Server
AWSDB6B
Switchback Type
intelligent
Template Priority
1
Target Priority
10
Target Disk
/dev/xvde1
Data Replication Resource Tag
datarep-data
Bitmap File
/opt/LifeKeeper/bitmap__data
Replication Path
10.124.128.14 – 10.10.2.20
Mount Point
/data
Root Tag
/data

Data Replicationリソースの作成が完了するとLifeKeeperGUI画面では以下のように表示されます。

























2.5     MySQLリソース階層の作成

LifeKeeper GUI管理画面より”Create Resource Hierarchy”を選択して、MySQLリソースを作成します。リソース作成ウィザードで入力する内容は以下の通りです。

重要
   MySQLはプライマリサーバー上でのみ実行している必要があります。セカンダリサーバー上で実行しないでください。
Select Recovery Kit
MySQL Database
Switchback Type
intelligent
Server
ONPREDB6B
Location of my.cnf
/etc
Location of MySQL executables
/usr/bin
Database Tag
mysql

ターゲット(セカンダリ)サーバーにExtendするとき、入力する内容は以下の通りです。
Target Server
AWSDB6B
Switchback Type
intelligent
Template Priority
1
Target Priority
10
Location of my.cnf
/etc
Location of MySQL executables
/usr/bin
Database Tag
mysql

MySQLリソースの作成が完了するとLifeKeeperGUI画面では以下のように表示されます。

























これでMySQLの冗長化が完了です。次回は、WordPressの設定とAWS側のWebサーバーをAMIから起動する設定を行います。次回の第4回目がDynamicDRの最終回です。