Percona XtraDB Cluster を用いた HA 環境

はじめに

Pandora FMS は、設定およびデータを保存するために MySQL データベースを利用しています。“水平方向に” スケール(拡張)するためには、必要なデバイスをすべて監視できるようにする Pandora FMS メタコンソールがあります。ただし、メタコンソールを使用するには小さすぎ管理が難しくなるものの、すべてのデータを単一のデータベースに格納するには大きすぎるといった特別な場面もありえます

この問題を解決するために、Percona XtraDB Cluster を使用します。これは、複数のサーバからの読み取りおよび書き込みタスクに対して、マルチマスターモード(複数のメインサーバ)で使用できるようにする環境を提供します。 このようにして、負荷はこのクラスターが実装されている複数のサーバに分散され、スタンドアロンノードが対応できるよりも多くの処理能力をデータベースに提供します。 このようにして、単一の Pandora FMS ノードで監視するメトリックの数を増やすことができます。

このスキームでは、Percona XtraDB Cluster のレプリケーションノードと同じサーバに Pandora FMS サーバおよび Web コンソールを一緒にインストールすることができます。または、分けてインストールすることもできます 。 Pandora FMS サーバーまたは Pandora FMS Webコンソールのそれぞれを、書き込みまたは読み取りノードにポイントするだけで十分です。各環境でより便利なように、環境の負荷を分散できます。


クラスタが機能するためのノードの最小数は 3ノードであり、データベースが機能するためには常に 2つのノードがアクティブである必要があります。

Percona XtraDB Cluster のインストール

Percona XtraDB Cluster を正しくインストールするには、最初に Percona XtraDB Cluster サーバとクライアントをすべてのノードにインストールする必要があります。

例で使用するノードの情報は次の通りです。

ノード1:

pandora001
192.168.80.111

ノード2:

pandora002
192.168.80.112

ノード3:

pandora003
192.168.80.113

全ノードでの実行

# yum install Percona-XtraDB-Cluster-server-57 Percona-XtraDB-Cluster-client-57

すべてのノードにインストールしたら、各ノードでサービスを開始し、root ユーザと、全ノード間のレプリケーションに使用されるユーザ(この場合は sstuser)に共通のパスワードを設定します。 以下を実行します:

# systemctl start mysqld

root の一時パスワードを取得し、それを使用して MySQL サーバにログインします(すべてのノードで実行することを忘れないでください)。

# mysql -uroot -p$(grep "temporary password" /var/log/mysqld.log | \ rev | cut -d' ' -f1 | rev)> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('Pandor4!');
> UNINSTALL PLUGIN validate_password;
> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('pandora');

続いて、ユーザ sstuser を作成します:

mysql> create user sstuser@'%' identified by 'pandora';> grant all on *.* to sstuser@'%';
> flush privileges;
> quit

ここまでの設定が終わったら、全ノードで mysql サービスを停止します。

# systemctl stop mysqld

すべてのサーバを停止したら、そのうちの 1つをブートストラップモードで起動して、他の 2つのノード間でレプリケーションを実行するメインサーバとして機能するようにする必要があります。

これを行うには、メインとして選択したノード(この場合は pandora001 ノード)に特定の設定を追加する必要があります。

pandora001 ノードの /etc/my.cnf ファイルを編集し、2行の # Modified for PFMS の間に示す設定を正しく追加します。

[mysqld]
# Modified for PFMS\
server-id=1
# Modified for PFMS/

datadir=/var/lib/mysql
character-set-server=utf8
skip-character-set-client-handshake

# Add configuration for Percona XtraDB Cluster.
# Cache size depends on the server resources. Recommended 1G - 10 GB.
# Modified for PFMS\
wsrep_provider_options="gcache.size=10G; gcache.page_size=10G"
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so

wsrep_cluster_name=pandora-cluster
wsrep_cluster_address=gcomm://
wsrep_node_name=pandora001
wsrep_node_address=192.168.80.111

wsrep_sst_method=xtrabackup-v2
wsrep_sst_auth=sstuser:pandora
# Modified for PFMS/

pxc_strict_mode=PERMISSIVE

# Mysql optimizations for Pandora FMS node with 4G RAM
max_allowed_packet = 64M
innodb_buffer_pool_size = 1G
innodb_lock_wait_timeout = 90
innodb_file_per_table innodb_flush_log_at_trx_commit = 0
innodb_flush_method = O_DIRECT
innodb_log_file_size = 64M
innodb_log_buffer_size = 16M
innodb_io_capacity = 100
innodb_autoinc_lock_mode=2
thread_cache_size = 8192
thread_stack = 256K
max_connections = 8192
wait_timeout = 900
key_buffer_size=4M
read_buffer_size=128K
read_rnd_buffer_size=128K
sort_buffer_size=128K
join_buffer_size=4M
query_cache_type = 0
query_cache_size = 0
sql_mode=""
binlog_format=ROW
expire_logs_days=1

pandora001 ノードにて、bootstrap モードで mysql サービスを起動します。

# systemctl start mysql@bootstrap

pandora002 および pandora003 ノードで /etc/my.cnf を編集し、次に示す 2行の # Modified for PFMS の間の設定を追加します。

  • ノード pandora002:
[mysqld]
server-id=2
datadir=/var/lib/mysql
character-set-server=utf8
skip-character-set-client-handshake
# add configuration for Percona XtraDB Cluster.
# Cache size depends on the server resources. Recommended 1G - 10 GB.
# Modified for PFMS\
wsrep_provider_options="gcache.size=10G; gcache.page_size=10G"
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so

wsrep_cluster_name=pandora-cluster
wsrep_cluster_address=gcomm:pandora001,pandora003

wsrep_node_name=pandora002
wsrep_node_address=192.168.80.112

wsrep_sst_method=xtrabackup-v2
wsrep_sst_auth=sstuser:pandora

pxc_strict_mode=PERMISSIVE
# Modified for PFMS/

# Mysql optimizations for Pandora FMS
max_allowed_packet = 64M
innodb_buffer_pool_size = 1G
innodb_lock_wait_timeout = 90
innodb_file_per_table
innodb_flush_log_at_trx_commit = 0
innodb_flush_method = O_DIRECT
innodb_log_file_size = 64M
innodb_log_buffer_size = 16M
innodb_io_capacity = 100
innodb_autoinc_lock_mode=2
thread_cache_size = 8192
thread_stack    = 256K
max_connections = 8192
wait_timeout = 900
key_buffer_size=4M
read_buffer_size=128K
read_rnd_buffer_size=128K
sort_buffer_size=128K
join_buffer_size=4M
query_cache_type = 0
query_cache_size = 0
sql_mode=""
binlog_format=ROW
expire_logs_days=1
  • ノード pandora003:
[mysqld]
server-id=3
datadir=/var/lib/mysql
character-set-server=utf8
skip-character-set-client-handshake
# add configuration for Percona XtraDB Cluster.
# Cache size depends on the server resources. Recommended 1G - 10 GB.
# Modified for PFMS\
wsrep_provider_options="gcache.size=10G; gcache.page_size=10G"
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so

wsrep_cluster_name=pandora-cluster
wsrep_cluster_address=gcomm:pandora001,pandora003

wsrep_node_name=pandora002
wsrep_node_address=192.168.80.112

wsrep_sst_method=xtrabackup-v2
wsrep_sst_auth=sstuser:pandora

pxc_strict_mode=PERMISSIVE
# Modified for PFMS/

# Mysql optimizations for Pandora FMS
max_allowed_packet = 64M
innodb_buffer_pool_size = 1G
innodb_lock_wait_timeout = 90
innodb_file_per_table
innodb_flush_log_at_trx_commit = 0
innodb_flush_method = O_DIRECT
innodb_log_file_size = 64M
innodb_log_buffer_size = 16M
innodb_io_capacity = 100
innodb_autoinc_lock_mode=2
thread_cache_size = 8192
thread_stack    = 256K
max_connections = 8192
wait_timeout = 900
key_buffer_size=4M
read_buffer_size=128K
read_rnd_buffer_size=128K
sort_buffer_size=128K
join_buffer_size=4M
query_cache_type = 0
query_cache_size = 0
sql_mode=""
binlog_format=ROW
expire_logs_days=1

pandora002 および pandora003 ノードで、同期するために mysqld サービスを起動します。

#systemctl start mysqld

この時点で、ノード1 に Pandora FMS データベースのインストールを実行し、他の 2つのサーバ間でデータベースがどのように正しく複製されるかを観察できます。

レプリケーションの正しい動作を確認したら、bootstrap モードで開始したノード(この場合は pandora001 ノード)を停止します。

(NODO1) # systemctl stop mysql@bootstrap

ノード1 の my.cnf ファイル内でパラメータ wsrep_cluster_address を変更し、クラスタの他の 2つのノードを追加します。次のようにする必要があります。

wsrep_cluster_address=gcomm:pandora002,pandora003

ノード pandora001mysqld サービスを再開しますが、今回は通常モードで、すでにアクティブになっている他の 2つのノードと同期します。

systemctl start mysqld

正しい動作のための Pandora FMS スキーマの変更

並行して行われる書き込みと読み取りによるデッドロックの問題を回避するために、以下に示す内容で Pandora FMS の該当テーブルを変更する必要があります。

alter table tagent_access add column `id_tagent_access` bigint(20) unsigned NOT NULL;
alter table tagent_access add primary key (id_tagent_access);
alter table tagent_access modify id_tagent_access bigint(20) auto_increment;
alter table tagente_datos add column `id_tagente_datos` bigint(20) unsigned NOT NULL;
alter table tagente_datos add primary key (id_tagente_datos);
alter table tagente_datos modify id_tagente_datos bigint(20) auto_increment;
alter table tagente_datos_inc add column `id_tagente_datos_inc` bigint(20) unsigned NOT NULL;
alter table tagente_datos_inc add primary key (id_tagente_datos_inc);
alter table tagente_datos_inc modify id_tagente_datos_inc bigint(20) auto_increment;
alter table tagente_datos_string add column `id_tagente_datos_string` bigint(20) unsigned NOT NULL;
alter table tagente_datos_string add primary key (id_tagente_datos_string);
alter table tagente_datos_string modify id_tagente_datos_string bigint(20) auto_increment;
alter table tagente_datos_inventory add column `id_tagente_datos_inventory` bigint(20) unsigned NOT NULL;
alter table tagente_datos_inventory add primary key (id_tagente_datos_inventory);
alter table tagente_datos_inventory modify id_tagente_datos_inventory bigint(20) auto_increment;
alter table torigen add primary key (`origen`);
alter table tusuario add primary key (`id_user`);

正しく動作させるには、これらの変更をスキーマのみのデータが入っていないデータベースに適用する必要があります。

以前のデータがある環境における変更の適用

このシナリオは、デッドロックを回避するために、すでにデータが入っているテーブルに対して変更を適用して再構築する場合の例です。処理は次のようになります。

1.- DROP および create TABLE フィールドを除く、個別に関係するすべてのテーブルを DUMP (データのエクスポート) します。

#mysqldump -u root -p pandora tagent_access --skip-add-drop-table --complete-insert --no-create-info> tagent_access.sql
#mysqldump -u root -p pandora tagente_datos --skip-add-drop-table --complete-insert --no-create-info> tagente_datos.sql
#mysqldump -u root -p pandora tagente_datos_inc --skip-add-drop-table --complete-insert --no-create-info> tagente_datos_inc.sql
#mysqldump -u root -p pandora tagente_datos_string --skip-add-drop-table --complete-insert --no-create-info> tagente_datos_string.sql
#mysqldump -u root -p pandora tagente_datos_inventory --skip-add-drop-table --complete-insert --no-create-info> tagente_datos_inventory.sql

2.- 影響のあるテーブルを削除します。

mysql>drop table tagent_access;
mysql>drop table tagente_datos;
mysql>drop table tagente_datos_inc;
mysql>drop table tagente_datos_string;
mysql>drop table tagente_datos_inventory;

3.- 環境が問題なく動作するように、新しい列を含むすべてのテーブルを ALTER で再度作成します。 テーブルを再度作成するには、テーブル作成が記載されているファイル /var/www/html/pandora_console/pandoradb.sqltagent_accesstagente_datostagente_datos_inctagente_datos_stringtagente_datos_inventory を利用し、正しい動作のための Pandora FMS スキーマの変更 の内容を実施します。

4.- 手順1 で作成したすべての DUMP データを source で読み込みます。

#mysql -u root -p pandora
mysql> source tagent_access.sql:
mysql> source tagente_datos.sql:
mysql> source tagente_datos_inc;
mysql> source tagente_datos_string;
mysql> source tagente_datos_inventory;

処理が終わると、すべてのテーブルに、最初から作成されたインクリメンタル ID が含まれます。

Pandora FMS ドキュメント一覧に戻る