現在位置: ホーム / 製品・サービス / 統合システム監視 MIRACLE ZBX / MIRACLE ZBX - Zabbix テック・ラウンジ / MIRACLE ZBX と MariaDB Spider ストレージエンジンを利用した DB シャーディング構成の構築

MIRACLE ZBX と MariaDB Spider ストレージエンジンを利用した DB シャーディング構成の構築

MIRACLE ZBX やZabbix では大量の監視を行う場合、ヒストリデータを書き込む DB がボトルネックになってしまうことが多くあります。本ドキュメントでは、MariaDB 10.0.4 以降で実装された Spider ストレージエンジンを利用して、MIRACLE ZBX を DB シャーディング構成で構築する方法をご案内します。

概要

MIRACLE ZBX やZabbix では大量の監視を行う場合、ヒストリデータを書き込む DB がボトルネックになってしまうことが多くあります。MariaDB では 10.0.4 以降から複数のマシンへ DB 分割が可能な Spider ストレージエンジンが取り込まれました。本ドキュメントでは、この Spider ストレージエンジンを利用し、MIRACLE ZBX を DB シャーディング構成で構築する方法をご案内します。

 

動作環境

OS、パッケージパーティション

  • MIRACLE ZBX サーバー (1台): MIRACLE LINUX 7 / CentOS 7 / RHEL 7
  • Spider 接続先 MariaDB サーバー (今回の例では3台): MIRACLE LINUX 7 / CentOS 7 / RHEL 7
  • MIRACLE ZBX 3.0.x 
  • MariaDB 10.0.4 以降

 

本記事での環境情報

この記事では以下の環境を前提として記述します。

各マシンのDNS名

MIRACLE ZBX サーバー mlzbx-spider-server.miraclelinux.com
Spider 接続先 MariaDB サーバー 01 mlzbx-spider01.miraclelinux.com
Spider 接続先 MariaDB サーバー 02 mlzbx-spider02.miraclelinux.com
Spider 接続先 MariaDB サーバー 03 mlzbx-spider03.miraclelinux.com


構築するDBの設定情報

DB 名 zabbix
DB ユーザー名 zabbix
DB パスワード zabbix_password

 

Spider 接続先 MariaDB サーバーのセットアップ

Spider 接続先 MariaDB サーバー 01, 02, 03 の全てにおいて、以下セットアップをします。

パッケージのインストール

以下内容の yum リポジトリファイルを作成します。

/etc/yum.repos.d/MariaDB.repo

# MariaDB 10.1 CentOS repository list - created 2017-04-27 03:19 UTC 
# http://downloads.mariadb.org/mariadb/repositories/ 
[mariadb] 
name = MariaDB 
baseurl = http://yum.mariadb.org/10.1/centos7-amd64 
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB 
gpgcheck=1

 

以下コマンドを実行してパッケージをインストールします。

# yum install MariaDB-server MariaDB-client

 

MariaDB のセットアップ

以下の内容の MariaDB 設定ファイルを作成します。

/etc/my.cnf.d/zabbix.cnf

[mysqld] 
character-set-server=utf8 
skip-character-set-client-handshake 
innodb_file_per_table 
innodb_log_buffer_size=16M 
innodb_buffer_pool_size=1024M 
innodb_log_file_size=256M 
innodb_log_files_in_group=2 
key_buffer_size=200M 
max_allowed_packet=16MB

 

以下のコマンドを実行して MariaDBを起動します。

# systemctl start mariadb 
# systemctl enable mariadb

 

以下の内容を実行して MIRACLE ZBX 用データベースを作成します。

# mysql -uroot 

MariaDB [(none)]> create database zabbix; 
Query OK, 1 row affected (0.00 sec) 

MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix_password'; 
Query OK, 0 rows affected (0.01 sec) 

MariaDB [(none)]> grant all privileges on zabbix.* to 'zabbix'@'mlzbx-spider-server.miraclelinux.com' identified by 'zabbix_password'; 
Query OK, 0 rows affected (0.00 sec) 

MariaDB [(none)]> flush privileges; 
Query OK, 0 rows affected (0.00 sec) 

MariaDB [(none)]> quit 
Bye

 

以下のファイルを作成します。

create_history.sql

CREATE TABLE `history` ( 
       `itemid`                 bigint unsigned                           NOT NULL, 
       `clock`                  integer         DEFAULT '0'               NOT NULL, 
       `value`                  double(16,4)    DEFAULT '0.0000'          NOT NULL, 
       `ns`                     integer         DEFAULT '0'               NOT NULL 
) ENGINE=InnoDB; 
CREATE INDEX `history_1` ON `history` (`itemid`,`clock`); 
CREATE TABLE `history_uint` ( 
       `itemid`                 bigint unsigned                           NOT NULL, 
       `clock`                  integer         DEFAULT '0'               NOT NULL, 
       `value`                  bigint unsigned DEFAULT '0'               NOT NULL, 
       `ns`                     integer         DEFAULT '0'               NOT NULL 
) ENGINE=InnoDB; 
CREATE INDEX `history_uint_1` ON `history_uint` (`itemid`,`clock`); 
CREATE TABLE `history_str` ( 
       `itemid`                 bigint unsigned                           NOT NULL, 
       `clock`                  integer         DEFAULT '0'               NOT NULL, 
       `value`                  varchar(255)    DEFAULT ''                NOT NULL, 
       `ns`                     integer         DEFAULT '0'               NOT NULL 
) ENGINE=InnoDB; 
CREATE INDEX `history_str_1` ON `history_str` (`itemid`,`clock`); 
CREATE TABLE `history_log` ( 
       `id`                     bigint unsigned                           NOT NULL, 
       `itemid`                 bigint unsigned                           NOT NULL, 
       `clock`                  integer         DEFAULT '0'               NOT NULL, 
       `timestamp`              integer         DEFAULT '0'               NOT NULL, 
       `source`                 varchar(64)     DEFAULT ''                NOT NULL, 
       `severity`               integer         DEFAULT '0'               NOT NULL, 
       `value`                  text                                      NOT NULL, 
       `logeventid`             integer         DEFAULT '0'               NOT NULL, 
       `ns`                     integer         DEFAULT '0'               NOT NULL, 
       PRIMARY KEY (id) 
) ENGINE=InnoDB; 
CREATE INDEX `history_log_1` ON `history_log` (`itemid`,`clock`); 
CREATE UNIQUE INDEX `history_log_2` ON `history_log` (`itemid`,`id`); 
CREATE TABLE `history_text` ( 
       `id`                     bigint unsigned                           NOT NULL, 
       `itemid`                 bigint unsigned                           NOT NULL, 
       `clock`                  integer         DEFAULT '0'               NOT NULL, 
       `value`                  text                                      NOT NULL, 
       `ns`                     integer         DEFAULT '0'               NOT NULL, 
       PRIMARY KEY (id) 
) ENGINE=InnoDB; 
CREATE INDEX `history_text_1` ON `history_text` (`itemid`,`clock`); 
CREATE UNIQUE INDEX `history_text_2` ON `history_text` (`itemid`,`id`);

 

上記で作成したファイルを使用し、以下のコマンドでテーブルを作成します。

# cat create_history.sql | mysql zabbix -uzabbix -p 
Enter password:

 

Spider のために必要な SUPER 権限を以下のコマンドで付与します。

# mysql -uroot 
MariaDB [(none)]> UPDATE mysql.user SET Super_priv='Y' WHERE user='zabbix'; 
 
Query OK, 2 rows affected (0.00 sec) 
Rows matched: 2  Changed: 2  Warnings: 0 

MariaDB [(none)]> flush privileges; 
Query OK, 0 rows affected (0.00 sec) 

MariaDB [(none)]> quit 
Bye

 

ファイアウォールの設定

以下のコマンドを実行して MIRACLE ZBX サーバーからの接続を可能にします。<MIRACLE ZBX サーバーのIP>は適宜適切な IP アドレスに変更してください。

# firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="<MIRACLE ZBX サーバーのIP>/32" port protocol="tcp" port="3306" accept" 
success 
# firewall-cmd --reload 
success

 

MIRACLE ZBX サーバのセットアップ

以下内容の yum リポジトリファイルを作成します。

 /etc/yum.repos.d/MariaDB.repo

# MariaDB 10.1 CentOS repository list - created 2017-04-27 03:19 UTC 
# http://downloads.mariadb.org/mariadb/repositories/ 
[mariadb] 
name = MariaDB 
baseurl = http://yum.mariadb.org/10.1/centos7-amd64 
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB 
gpgcheck=1

 

以下のコマンドを実行してパッケージをインストールします。

# yum install MariaDB-server MariaDB-client 
# rpm --import http://ftp.miraclelinux.com/zbx/RPM-GPG-KEY-MIRACLE 
# rpm -ihv http://ftp.miraclelinux.com/zbx/3.0/miracle-zbx-release-3.0-1.noarch.rpm 
# yum install miracle-zbx-server-mysql miracle-zbx-agent miracle-zbx-get miracle-zbx-java-gateway miracle-zbx-sender miracle-zbx-web miracle-zbx-web-japanese miracle-zbx-web-mysql

 

MariaDB および Spider ストレージエンジンのセットアップ

以下の内容の MariaDB 設定ファイルを作成します。

 /etc/my.cnf.d/zabbix.cnf

[mysqld] 
character-set-server=utf8 
skip-character-set-client-handshake 
innodb_file_per_table 
innodb_log_buffer_size=16M 
innodb_buffer_pool_size=1024M 
innodb_log_file_size=256M 
innodb_log_files_in_group=2 
key_buffer_size=200M 
max_allowed_packet=16MB

 

以下のコマンドを実行して MariaDB を起動します。

# systemctl start mariadb 
# systemctl enable mariadb

 

以下のコマンドを実行して Spider ストレージエンジンをインストールします。

# mysql -uroot < /usr/share/mysql/install_spider.sql

 

以下のコマンドを実行して Spider ストレージエンジンがインストールされていることを確認します。

# mysql -uroot 
MariaDB [(none)]> SELECT engine, support, transactions, xa FROM information_schema.engines; 
+--------------------+---------+--------------+------+ 
| engine             | support | transactions | xa   | 
+--------------------+---------+--------------+------+ 
| SPIDER             | YES     | YES          | YES  | 
| MRG_MyISAM         | YES     | NO           | NO   | 
| CSV                | YES     | NO           | NO   | 
| Aria               | YES     | NO           | NO   | 
| MyISAM             | YES     | NO           | NO   | 
| MEMORY             | YES     | NO           | NO   | 
| InnoDB             | DEFAULT | YES          | YES  | 
| SEQUENCE           | YES     | YES          | NO   | 
| PERFORMANCE_SCHEMA | YES     | NO           | NO   | 
+--------------------+---------+--------------+------+ 
9 rows in set (0.00 sec)

MariaDB [(none)]> quit 
Bye

 

以下の内容を実行して MIRACLE ZBX 用データベースを作成します。 

# mysql -uroot 

MariaDB [(none)]> create database zabbix; 
Query OK, 1 row affected (0.00 sec) 

MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix_password'; 
Query OK, 0 rows affected (0.01 sec) 

MariaDB [(none)]> flush privileges; 
Query OK, 0 rows affected (0.00 sec) 

MariaDB [(none)]> quit 
Bye

 

以下の内容のファイルを作成します。

create_spider_sharding_history.sql

CREATE TABLE `history` ( 
       `itemid`                 bigint unsigned                           NOT NULL, 
       `clock`                  integer         DEFAULT '0'               NOT NULL, 
       `value`                  double(16,4)    DEFAULT '0.0000'          NOT NULL, 
       `ns`                     integer         DEFAULT '0'               NOT NULL 
) ENGINE=SPIDER 
PARTITION BY HASH(itemid) ( 
 PARTITION p1 COMMENT 'user "zabbix", password "zabbix_password",  host "mlzbx-spider01.miraclelinux.com", port "3306", table "history",', 
  PARTITION p2 COMMENT 'user "zabbix", password "zabbix_password",  host "mlzbx-spider02.miraclelinux.com", port "3306", table "history",', 
  PARTITION p3 COMMENT 'user "zabbix", password "zabbix_password",  host "mlzbx-spider03.miraclelinux.com", port "3306", table "history",' 
); 
CREATE INDEX `history_1` ON `history` (`itemid`,`clock`); 
CREATE TABLE `history_uint` ( 
       `itemid`                 bigint unsigned                           NOT NULL, 
       `clock`                  integer         DEFAULT '0'               NOT NULL, 
       `value`                  bigint unsigned DEFAULT '0'               NOT NULL, 
       `ns`                     integer         DEFAULT '0'               NOT NULL 
) ENGINE=SPIDER 
PARTITION BY HASH(itemid) ( 
 PARTITION p1 COMMENT 'user "zabbix", password "zabbix_password",  host "mlzbx-spider01.miraclelinux.com", port "3306", table "history_uint",', 
  PARTITION p2 COMMENT 'user "zabbix", password "zabbix_password",  host "mlzbx-spider02.miraclelinux.com", port "3306", table "history_uint",', 
  PARTITION p3 COMMENT 'user "zabbix", password "zabbix_password",  host "mlzbx-spider03.miraclelinux.com", port "3306", table "history_uint",' 
); 
CREATE INDEX `history_uint_1` ON `history_uint` (`itemid`,`clock`); 
CREATE TABLE `history_str` ( 
       `itemid`                 bigint unsigned                           NOT NULL, 
       `clock`                  integer         DEFAULT '0'               NOT NULL, 
       `value`                  varchar(255)    DEFAULT ''                NOT NULL, 
       `ns`                     integer         DEFAULT '0'               NOT NULL 
) ENGINE=SPIDER 
PARTITION BY HASH(itemid) ( 
 PARTITION p1 COMMENT 'user "zabbix", password "zabbix_password",  host "mlzbx-spider01.miraclelinux.com", port "3306", table "history_str",', 
  PARTITION p2 COMMENT 'user "zabbix", password "zabbix_password",  host "mlzbx-spider02.miraclelinux.com", port "3306", table "history_str",', 
  PARTITION p3 COMMENT 'user "zabbix", password "zabbix_password",  host "mlzbx-spider03.miraclelinux.com", port "3306", table "history_str",' 
); 
CREATE INDEX `history_str_1` ON `history_str` (`itemid`,`clock`); 
CREATE TABLE `history_log` ( 
       `id`                     bigint unsigned                           NOT NULL, 
       `itemid`                 bigint unsigned                           NOT NULL, 
       `clock`                  integer         DEFAULT '0'               NOT NULL, 
       `timestamp`              integer         DEFAULT '0'               NOT NULL, 
       `source`                 varchar(64)     DEFAULT ''                NOT NULL, 
       `severity`               integer         DEFAULT '0'               NOT NULL, 
       `value`                  text                                      NOT NULL, 
       `logeventid`             integer         DEFAULT '0'               NOT NULL, 
       `ns`                     integer         DEFAULT '0'               NOT NULL, 
       PRIMARY KEY (id) 
) ENGINE=SPIDER 
PARTITION BY HASH(id) ( 
 PARTITION p1 COMMENT 'user "zabbix", password "zabbix_password",  host "mlzbx-spider01.miraclelinux.com", port "3306", table "history_log",', 
  PARTITION p2 COMMENT 'user "zabbix", password "zabbix_password",  host "mlzbx-spider02.miraclelinux.com", port "3306", table "history_log",', 
  PARTITION p3 COMMENT 'user "zabbix", password "zabbix_password",  host "mlzbx-spider03.miraclelinux.com", port "3306", table "history_log",' 
);
CREATE INDEX `history_log_1` ON `history_log` (`itemid`,`clock`); 
CREATE UNIQUE INDEX `history_log_2` ON `history_log` (`itemid`,`id`); 
CREATE TABLE `history_text` ( 
       `id`                     bigint unsigned                           NOT NULL, 
       `itemid`                 bigint unsigned                           NOT NULL, 
       `clock`                  integer         DEFAULT '0'               NOT NULL, 
       `value`                  text                                      NOT NULL, 
       `ns`                     integer         DEFAULT '0'               NOT NULL, 
       PRIMARY KEY (id) 
) ENGINE=SPIDER 
PARTITION BY HASH(id) ( 
 PARTITION p1 COMMENT 'user "zabbix", password "zabbix_password",  host "mlzbx-spider01.miraclelinux.com", port "3306", table "history_text",', 
  PARTITION p2 COMMENT 'user "zabbix", password "zabbix_password",  host "mlzbx-spider02.miraclelinux.com", port "3306", table "history_text",', 
  PARTITION p3 COMMENT 'user "zabbix", password "zabbix_password",  host "mlzbx-spider03.miraclelinux.com", port "3306", table "history_text",' 
); 
CREATE INDEX `history_text_1` ON `history_text` (`itemid`,`clock`); 
CREATE UNIQUE INDEX `history_text_2` ON `history_text` (`itemid`,`id`);

 

 以下のコマンドを実行してテーブルを作成します。

# zcat /usr/share/doc/miracle-zbx-server-mysql-3.0.*/create.sql.gz | mysql zabbix -uzabbix -p 
Enter password:

# mysql -uzabbix -p zabbix 
Enter password: 

MariaDB [zabbix]> drop table history; 
Query OK, 0 rows affected (0.06 sec) 

MariaDB [zabbix]> drop table history_log; 
Query OK, 0 rows affected (0.09 sec) 

MariaDB [zabbix]> drop table history_str; 

Query OK, 0 rows affected (0.15 sec) 

MariaDB [zabbix]> drop table history_text; 

Query OK, 0 rows affected (0.04 sec) 

MariaDB [zabbix]> drop table history_uint; 

Query OK, 0 rows affected (0.06 sec)

MariaDB [zabbix]> quit
Bye

# cat create_spider_sharding_history.sql | mysql zabbix -uzabbix -p
Enter password:

 

ファイアウォールの設定

以下のコマンドを実行し、MIRACLE ZBX に必要なファイアウォールを設定します。

# firewall-cmd --permanent --add-port=10051/tcp 
# firewall-cmd --permanent --add-port=10050/tcp
# firewall-cmd --permanent --add-port=162/udp
# firewall-cmd --permanent --add-port=80/tcp
# firewall-cmd --reload

MIRACLE ZBX サーバー、エージェントのセットアップ

/etc/zabbix/zabbix_server.conf を編集し、以下のように DBPassword を設定してください。

/etc/zabbix/zabbix_server.conf (以下一行追加)

DBPassword=zabbix_password
以下のコマンドを実行し、MIRACLE ZBX サーバーとエージェントを起動します。
# systemctl start zabbix-server
# systemctl enable zabbix-server
# systemctl start zabbix-agent
# systemctl enable zabbix-agent

Webサーバのセットアップ

以下のコマンドを1回実行し、Web サーバーの設定をしてください。
# sed -i 's/^#//' /etc/httpd/conf.d/zabbix.conf
以下のコマンドを実行し、Web サーバーを起動します。
# systemctl start httpd 
# systemctl enable httpd
以下 URL へアクセスし、メッセージに従い MIRACLE ZBX の Web フロントエンドの設定を完了してください。
http://mlzbx-spider-server.miraclelinux.com/zabbix/
以上で全てのセットアップは完了し、通常の MIRACLE ZBX と同様に操作が可能になります。

注意事項

本ドキュメントの内容は、予告なしに変更される場合があります。
本ドキュメントは、限られた評価環境における検証結果をもとに作成しており、全ての環境での動作を保証するものではありません。
本ドキュメントの内容に基づき、導入、設定、運用を行なったことにより損害が生じた場合でも、当社はその損害についての責任を負いません。あくまでお客さまのご判断にてご使用ください。

更新履歴

2017年4月30日 新規作成

 

MIRACLE ZBX 製品・サポートサービス 詳しくはこちら

MIRACLE ZBX Virtual Appliance V3.0 評価版のお申し込み

製品・サービスについてのお問い合わせ

お問い合わせフォームMIRACLE ZBX製品やサポートサービスについてのご相談やご質問は、「お問い合わせフォーム」よりお気軽にお問い合わせください。