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 に飛ばずにログの調べ直しとかしました。