Zabbix サーバーを仮想マシンから実機に移動する
ちょっと仮想マシンを別のことに使いたくなったので、Zabbix サーバーを実機に移動してみました。
今までだとまっさらな環境からスタートするのですが、今回は保存されているデータごとごっそり移動してみた記録です。
ざっくりとした移行プランは次のような感じ。
- 新サーバーに Zabbix と MySQL をセット
- 旧サーバーの Zabbix を停止
- 旧サーバーのデータベースをエクスポート
- スクリプトを新サーバーにコピー
- 旧サーバーをシャットダウン
- 新サーバーへデータベースをリストア & Zabbix Server の再起動
- 新サーバーの IP アドレスを旧サーバーのものにセット
クッソ長いので注意。 あとパスワードは適当な文字列なのでちゃんとセットしないとひどい目に遭います。
準備
その前に新サーバーもリモートマシンなのでフロントエンドにアクセスできるように SoftEther のお知らせ VPN クライアントをインストールする。
ビルドが必要なので関連ツールをインストールしてソースを取得
$ cd /tmp $ sudo apt-get install build-essential -y $ wget http://jp.softether-download.com/files/softether/v4.21-9613-beta-2016.04.24-tree/Linux/SoftEther_VPN_Client/32bit_-_Intel_x86/softether-vpnclient-v4.21-9613-beta-2016.04.24-linux-x86-32bit.tar.gz
ビルドして適当なディレクトリにセット
$ tar zxvf softether-vpnclient-v4.21-9613-beta-2016.04.24-linux-x86-32bit.tar.gz $ cd vpnclient/ $ make $ cd ../ $ sudo mv ./vpnclient /usr/local/
SoftEther で接続、設定は他のマシンからインポート
$ cd /usr/local/vpnclient/ $ sudo ./vpnclient start $ sudo ./vpncmd localhost VPN Client>accountimport Import Source File Name: /tmp/zoarvpn.vpn VPN Client>accountconnect zoarvpn VPN Client>niccreate vnic VPN Client>accountconnect zoarvpn VPN Client>exit $ sudo ip a add 192.168.30.70/24 dev vpn_vnic
起動スクリプトを作成
$ cd /tmp $ touch ./vpnclient $ vi ./vpnclient #!/bin/sh ### BEGIN INIT INFO # Provides: vpnclient # Required-Start: $syslog # Required-Stop: $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: SoftEther VPN Client ### END INIT INFO DAEMON=/usr/local/vpnclient/vpnclient LOCK=/var/lock/subsys/vpnclient test -x $DAEMON || exit 0 case "$1" in start) $DAEMON start touch $LOCK ;; stop) $DAEMON stop rm $LOCK ;; restart) $DAEMON stop sleep 5 $DAEMON start ;; *) echo "Usage: $0 {start|stop|restart}" exit 1 esac exit 0 $ chmod +x ./vpnclient $ sudo mv ./vpnclient /etc/init.d/ $ sudo systemctl enable vpnclient
ネットワークの設定も足しておきます
$ sudo vi /etc/network/interfaces allow-hotplug vpn_vnic iface vpn_vnic inet static address 192.168.30.70 network 192.168.30.0 netmask 255.255.255.0 broadcast 192.168.30.255
新サーバーに Zabbix と MySQL をセット
まずは MySQL のインストール
$ db_pass='minna-niwa-naisyo-dayo' $ sudo DEBIAN_FRONTEND=noninteractive apt-get install mysql-server-5.5 -y $ mysql -uroot -e "UPDATE mysql.user SET Password=PASSWORD('${db_pass}') WHERE User='root';" $ mysql -uroot -e "FLUSH PRIVILEGES;"
次に Zabbix Server をインストール
$ cd /tmp $ wget http://repo.zabbix.com/zabbix/3.2/debian/pool/main/z/zabbix-release/zabbix-release_3.2-1+jessie_all.deb $ sudo dpkg -i zabbix-release_3.2-1+jessie_all.deb $ sudo apt-get update $ apt-get install zabbix-server-mysql -y
MySQL を準備する
$ zabbix_pass='hannin-wa-yasu' $ mysql -u root -p ${db_pass} -e "CREATE DATABASE zabbix CHARACTER SET utf8;" $ mysql -u root -p ${db_pass} -e "GRANT ALL PRIVILEGES ON zabbix.* TO zabbix@localhost identified by '${zabbix_pass}';" $ mysql -u root -p ${db_pass} -e "FLUSH PRIVILEGES;" $ zcat /usr/share/doc/zabbix-server-mysql/create.sql.gz | mysql -uroot -p${db_pass} zabbix
zabbix_server.conf にデータベースのパスワードをセットする
$ sudo sh -c "sed -ie \"s/# DBPassword=/DBPassword=${zabbix_pass}/\" /etc/zabbix/zabbix_server.conf"
エージェントとフロントエンドをインストールする。 依存関係として Apache2 やら PHP も入る
$ sudo apt-get install zabbix-frontend-php zabbix-agent -y $ sudo sh -c "sed -ie 's|# php_value date.timezone Europe/Riga|php_value date.timezone Asia/Tokyo|' /etc/apache2/conf-enabled/zabbix.conf" $ sudo service apache2 reload
フロントエンドにアクセスして動いているか確認
Zabbix サーバーが動作していたらとめておく
$ pgrep zabbix $ sudo service zabbix-server stop
旧サーバーからスクリプトをもらってくる
$ scp 192.168.10.11:/usr/lib/zabbix/alertscripts/slack.sh /tmp $ sudo mv /tmp/slack.sh /usr/lib/zabbix/alertscripts/
旧サーバーの Zabbix を停止してデータベースをダンプする
ここは旧サーバーの作業になります。
まずはサーバーとエージェントの停止
$ sudo service zabbix-agent stop $ sudo service zabbix-server stop
データベースのダンプを作成
$ mysqldump -u root -p zabbix > /tmp/zabbix.sql Enter password: #ここは旧サーバーのパスワードを入れる
ダンプが完了したら新サーバーにデータを送る
$ scp /tmp/zabbix/sql 192.168.10.19:/tmp/
旧サーバーをシャットダウンする
$ sudo shutdown -h now
新サーバーの仕上げをする
ダンプデータをインポートする
$ mysql -u root -p ${db_pass} zabbix < /tmp/zabbix.sql Enter password: #ここは新サーバーのパスワードを入れる
旧サーバーが停止ていることを確認して旧サーバーが使っていた IP アドレスを新サーバーに割り当てる
$ sudo sh -c "sed -ie 's|192.168.10.19|192.168.10.11|' /etc/network/interfaces"
再起動
$ sudo reboot
フロントエンドにアクセスして動作や過去のデータを確認する
補足
スクリプトで使っているパッケージなどもちゃんと追加しないとアラートが送られてこないので注意。
今回は curl がなかったためにアラートが Slack に飛ばずにログの調べ直しとかしました。