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