Zabbix Advent Calendar 2020の25日目です。
今日は、先日のZabbix Conference Japan 2020の最後に質問として挙がっていたことに対する対応手順の紹介です。
経緯
Zabbixを使い始めたは良いけれど、サイジングへの考慮が不足していたり監視するホストや監視項目の急増などによって、MySQLのデータのサイズが膨れ上がってしまってディスクの空き領域が足らなくなってしまったなんてことになったことはありませんか?
急遽、新しいハードディスクを接続して、そのハードディスクに移動したらZabbixからアクセスできなくなって困ったりしませんでしたか?
そんなときの為に、どのような設定が必要であるのかをご紹介しようと思います。
環境の想定
今回は、以下のような環境での手順を紹介します。
- OS: CentOS 8.3.2011
- Zabbix: 5.0.7
- MySQL: 8.0.21 (CentOS 8標準)
- PHP: 7.2.24 (CentOS 8標準)
標準のパッケージのデフォルトでインストールすると、MySQLのデータディレクトリは、/var/lib/mysqlになります。
これを、/mnt/dataに新しくマウントしたディスク上に移動することとします。
/var/lib/mysqlディレクトリ自体を移動するとなると、単純にデータだけではなく、ローカルからアクセスする際に使用するソケットファイルも移動することになります。
この移動を行って正常に稼働させるためには、以下の設定ファイルを変更する必要があります。
- MySQL (サーバー側、クライアント側の両方)
- PHP
- Zabbixサーバー
詳細な手順は、以下で説明します。
移動手順
Zabbbixのインストール
CentOS 8上にバックエンドとしてMySQLを使用してZabbix 5.0の環境を構築する手順としては、以下のリンク先を参照してください。
各サービスの停止
使用している各サービスを停止します。
# systemctl stop httpd php-fpm zabbix-server zabbix-agent
Zabbixエージェント2を使用している場合は、「zabbix-agent」の代わりに「zabbix-agent2」のサービスを停止してください。
MySQLのデータディレクトリの移動
MySQLのサーバーデーモンを停止します。
# systemctl stop mysqld
新しいディスクを/mnt/dataにマウントします。正常にマウントできたら、MySQLのデータディレクトリを移動します。
安全のためには、正常に移行できるまでは取っておいて正常に移行できたら移行元のディレクトリを削除するようにした方が良いと思います。
ここでは再帰的にコピーして、移行元のディレクトリの名前を変更して誤ってアクセスしないようにしてみます。
# cp -pr /var/lib/mysql /mnt/data
# mv /var/lib/mysql /var/lib/mysql.org
MySQLの設定ファイルとして変更すべきなのは以下の2つのファイルです。
- /etc/my.cnf.d/mysql-server.cnf
- /etc/my.cnf.d/client.cnf
それぞれの修正内容は以下の通りです。
[mysqld]
datadir=/mnt/data/mysql
socket=/mnt/data/mysql/mysql.sock
mysqlx_socket=/mnt/data/mysql/mysqlx.sock
[client]
socket=/mnt/data/mysql/mysql.sock
設定を変更したら、MySQLサーバーを起動してmysqlコマンドでアクセスできるか確認してみてください。
# systemctl start mysqld
# mysql -uroot -p
PHP用の設定変更
PHPからローカルのMySQLサーバーにアクセスするときには、明示的に指定しないと各種プラグインのデフォルトのソケットのパスを使用してアクセスしようとします。
CentOS 8のPHPのデフォルトは、/var/lib/mysql/mysql.sockになっているので、ディレクトリを移動した場合は、明示的にPHPにも設定することが必要です。
Zabbixを使うだけであれば、mysqli用のソケットファイルのパスを指定するだけでよさそうです。
具体的には、/etc/php.ini内に以下のように設定します。
mysqli.default_socket = /mnt/data/mysql/mysql.sock
Zabbixサーバー用の設定変更
Zabbixサーバーは、設定ファイル内のDBSocketを設定します。
DBSocket=/mnt/data/mysql/mysql.sock
Zabbix関連のサービス起動
ここまで設定すれば、あとは各サービスを起動するだけです。
# systemctl start zabbix-agent zabbix-server php-fpm httpd
Webインターフェースにアクセスして正常に情報を参照できるかを確認してください。
Zabbixサーバーのログも異常が発生していないかを確認しておくと良いでしょう。
最後に
私自身も正確で具体的な手順を持っていたわけではなく、今回改めて、特定のOSやミドルウェアのバージョンだけでの確認となっていますが、異なるディストリビューションやバージョンでも考え方は利用できると思いますので、同様のことをしたいと思ったら、この投稿を思い出していただければと思います。
今回ご紹介した方法以外にも、新しいディスクを追加して新しいマウントポイントにマウントして使うのではなく、LVMを使用していればボリュームに追加して領域を拡張するような対応策もあるので、興味のある方は調べてみてください。
今後も是非Zabbixをご活用ください。
それでは、皆様良いお年をお迎えください。