Zabbixサーバーのディスク容量確保

投稿者: | 2016年3月1日

※実行環境はUbuntu12.04LTSとZABBIX2.2です。

Zabbixサーバーのディスク容量確保する。
なにも考えずZabbixサーバーをインストールして運用開始したところ、ディスク容量が逼迫してしまった時の対応をメモしておく。

→最終的には別のパーティションを追加してMySQLの領域にマウントしています。

問題点

Zabbixサーバーが自分自身のディスクアラートを挙げてきたので確認したところ、
「/var/lib/mysq/ibdata1」が 68Gも使用している模様。
対応策を検討する。

# ls -lh /var/lib/mysql
total 68G
-rw-r--r-- 1 mysql mysql    0 Jul 18 06:50 debian-5.5.flag
-rw-rw---- 1 mysql mysql  68G Sep 22 10:59 ibdata1
-rw-rw---- 1 mysql mysql 128M Sep 22 10:59 ib_logfile0
-rw-rw---- 1 mysql mysql 128M Sep 22 10:59 ib_logfile1
drwx------ 2 mysql mysql 4.0K Jul 18 06:50 mysql
-rw-rw---- 1 mysql mysql    6 Jul 18 06:50 mysql_upgrade_info
drwx------ 2 mysql mysql 4.0K Jul 18 06:50 performance_schema
drwx------ 2 mysql mysql 4.0K Jan 27  2014 test
drwx------ 2 mysql mysql 4.0K Jun 24 11:52 zabbix
#

1.メンテナンス実施その①(MySQLの設定だけで回避する)

〜参考URL〜
[MySQL] ibdata1のサイズを削減する手順 [InnoDB]
InnoDBのファイルサイズ管理

参考URL(上記)の記載の手順通り実施していく

1−1.テンポラリ用ディスクのマウント

(1) パーティションを設定
# fdisk /dev/sd
(2) esxt4にディスクをフォーマット
# mkfs -t ext4 /dev/sdb1
(3) パーティションをマウント
# mount -t ext4 /dev/sdb1 /mnt/workhdd

1−2.Zabbixの停止

(4) Zabbixを停止する。
# /etc/init.d/zabbix-server stop

1−3.Zabbixデータベースのバックアップ

(5) SQLにダンプする。
# mysqldump -uroot -pHOGEHOGE --all-databases --add-drop-database
 --add-drop-table --lock-all-tables --default-character-set=utf8 
> /mnt/workhdd/sqldump.sql
※一行で入力すること

1−4.Zabbix用データベースのDROP

(6) MySQLにログインする
# mysql -u root -p
※パスワードはMySQLのパスワードを入力する。
(7) DBをドロップする
> drop database zabbix;

1−5.MySQLの設定変更

(8) 念のためMySQLの設定ファイルをバックアップ
# cp -p /etc/mysql/my.cnf /etc/mysql/my.cnf.bk
(9) 設定ファイルを修正する。
# vi /etc/mysql/my.cnf
〜修正箇所〜
innodb_data_file_path=ibdata1:1G
innodb_file_per_table

1−6.MYSQLファイルの退避&削除

※小心者なので退避していますが、最終的には削除してます
(10) ディレクトリを変更
# cd /var/lib/mysql
(11) テンポラリ領域にファイルを退避
# mv ib_logfile0 /mnt/workhdd/
# mv ib_logfile1 /mnt/workhdd/
# mv ibdata1 /mnt/workhdd/

1−7.MYSQLのリストア

(12) MySQLを起動する。
# /etc/init.d/mysql start
(13) Zabbixデータベースの内容をリストア
# mysql -uroot -p < /mnt/workhdd/sqldump.sql
(14) テンポラリ領域のファイルを削除
※動作に問題なさそうなので削除する。
# rm /mnt/workhdd/*
一応これで作業完了。

問題点が解決できてないことを確認

innoDBの領域である/var/lib/mysq/ibdata1の容量は1GBに削減できたが、
未だに/var/lib/mysq/zaddixディレクトリ配下が*67GB*もあり別の方法の検討が必要と判明(泣)
# cd /var/lib/mysql
#
# ls -l
total 1310752
-rw-r--r-- 1 mysql mysql 0 Oct 16 06:27 debian-5.5.flag
-rw-rw---- 1 mysql mysql 1073741824 Nov 6 09:45 ibdata1
-rw-rw---- 1 mysql mysql 134217728 Nov 6 09:45 ib_logfile0
-rw-rw---- 1 mysql mysql 134217728 Nov 6 09:45 ib_logfile1
drwx------ 2 mysql mysql 4096 Nov 5 18:25 mysql
-rw-rw---- 1 mysql mysql 6 Oct 16 06:27 mysql_upgrade_info
drwx------ 2 mysql mysql 4096 Oct 16 06:27 performance_schema
drwx------ 2 mysql mysql 4096 Nov 5 18:25 test
drwx------ 2 mysql mysql 12288 Nov 5 21:44 zabbix
#
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 95G 73G 18G 81% /
udev 3.9G 4.0K 3.9G 1% /dev
tmpfs 799M 272K 799M 1% /run
none 5.0M 0 5.0M 0% /run/lock
none 3.9G 0 3.9G 0% /run/shm
/dev/sdb1 197G 124G 63G 67% /mnt/workhdd

#
# du -h
0 debian-5.5.flag
1.1G ibdata1
128M ib_logfile0
128M ib_logfile1
1.1M mysql
4.0K mysql_upgrade_info
212K performance_schema
8.0K test
67G zabbix
#

2.メンテナンス実施その②(MySQLのデータを別ディスクへの退避)

これではどうしようもないので、/var/lib/mysq/zaddixディレクトリ配下を別のマウントポイントに移す。
ZABBIXのデータ自体は365日の保存期間なので、200GBあれば十分と想定される。
⇒稼働して半年で67GB→1年で154GBという想定から
※確認箇所:ZABBIXメニューから「管理」→「一般」→右プルダウンから「データ保存期間」

2−1.Zabbixの完全停止

(1)まずはZabbixサーバーを停止
# /etc/init.d/zabbix-server stop
(2) 続いてMySQLを停止
# /etc/init.d/mysql stop

2−2.MySQL領域退避

(3) 退避用のディスクにMySQLのデータを一旦移す
# cp -rp /var/lib/mysql/* /mnt/workhdd/
※このデータを退避させたディスクは別のマウント名で後から利用します
(4) 元のファイルを削除
# rm -fr /var/lib/mysql/*

2−3.パーティションのマウント

(5) 退避用のディスクを一旦アンマウント
# umount /mnt/workhdd
(6) マウント状態を確認(ちゃんとアンマウントされているか確認)
# df -h
(7) ディスクを正式な場所にマウントする
# mount -t ext4 /dev/sdb1 /var/lib/mysql
(8) マウント状態の確認(ちゃんとマウントされているか確認)
# df -h
(9) マウントポイントに元のMySQLのデータファイルが存在することを確認
# ls -l /var/lib/mysql

2−4.Zabbixの完全起動

(10) MySQLを起動する
# /etc/init.d/mysql start
(11) Zabbixサーバーを起動する
# /etc/init.d/zabbix-server start
(12) Zabbixサーバーの起動状態を確認
# ps aux |grep zabbix
(13) ZabbixのWebコンソールにアクセスできることを確認

2−5.自動マウント設定

※(3) でファイルを退避させたディスクを正式なディレクトリ「/var/lib/mysql」にマウントします
(14) ブロックデバイスのUUIDを確認
# blkid /dev/sdb1
〜エビデンス〜
# blkid /dev/sdb1
/dev/sdb1: UUID="741c644a-9405-48a1-bda1-0f5d7aeaca45" TYPE="ext4"
#
(15) 自動起動設定を実施
# vi /etc/fstab
〜詳細〜
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# proc /proc proc nodev,noexec,nosuid 0 0
# / was on /dev/sda1 during installation
UUID=b01e170e-a674-4a5e-b423-d6df32b527c4 / ext4 errors=remount-ro 0 1
UUID=741c644a-9405-48a1-bda1-0f5d7aeaca45 /var/lib/mysql ext4 defaults 0 2 ←★追加
# swap was on /dev/sda5 during installation
UUID=2d1bfb99-914e-4a98-99be-5c23db382c7e none swap sw 0 0
/dev/fd0 /media/floppy0 auto rw,user,noauto,exec,utf8 0 0
(16) サーバー(OS自体)をリブートする
# reboot

作業完了

OSのリブート後、以下を確認して作業完了。

①「/var/lib/mysql」が別のパーティションとしてマウントされていること。
②ZABBIXのウェブコンソールに正常にログインできること

コメントを残す