English

お問い合わせ

BLOG

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日 新規作成

サイバートラストのテレワークソリューション
採用情報ページ リニューアル
組込み Linux にプラスして 長期間の製品ライフサイクルをサポート EM+PLS