zabbix目前已经是很多公司采用的比较常见的一种系统监控工具,单从个人经验来讲,安装zabbix应该将数据库和zabbix-server分开安装到不同两台机器,然后通过网络(最好是内网)连接访问数据库是一种比较好的方式。
将数据库和zabbix-server分开安装的好处是:降低zabbix-server的系统性能,不需要单独的消耗机器资源来安装databse。
系统环境:
zabbix-server:192.168.31.1
database: 192.168.31.2
database:postgresql
1、先备份数据库:
在zabbix-server上,先停止zabbix-server服务,这样停止主机对数据库的写入操作:
sudo service zabbix-server stop
通过sudo service zabbix-server status命令确认zabbix-server服务已经处于停止状态。
2、备份数据库:切换到postgres用户,用pg_dump工具来对全库进行一个备份。
pg_dump zabbix -f /home/ubuntu/pg_back
其中zabbix是数据库名称,pg_back是备份好的文件,备份到ubuntu用户的家目录下。
备份好数据库后,可以将zabbix-server服务启动,这样又可以保存一部分数据到192.168.31.1这台原来的主机上。
3、将备份好的数据库文件拷贝到192.168.31.2这台主机上
sudo scp /home/ubuntu/pg_back ubuntu@192.168.31.2:/home/ubuntu
4、登陆192.168.31.2这台主机,安装postgres数据库:
注意安装数据库的条件,在这里我没有安装不同版本的数据库,安装了zabbix-server一模一样的数据库:postgres9.5
sudo apt-get update
sudo apt-get install postgresql-9.5
5、创建数据库角色,赋值权限相关
pg_dump命令只会备份数据库的数据内容,但是不会备份数据库角色和权限相干的内容,包括数据表索引。如果要全量备份这些内容,可以使用pg_dumpall命令,但是此命令会比较耗时。
create user zabbix;
\password zabbix
grant all privileges on database zabbix to zabbix;
6、在192.168.31.2主机上恢复备份的数据库文件:
su postgres
psql -u zabbix -d zabbix -f /home/ubuntu/pg_back
7、数据库性能设置
调节数据库连接数&监听的地址类型:
# - Connection Settings -
listen_addresses = '*' # what IP address(es) to listen on;
# comma-separated list of addresses;
# defaults to 'localhost'; use '*' for all
# (change requires restart)
port = 5432 # (change requires restart)
max_connections = 600 # (change requires restart)
#superuser_reserved_connections = 3 # (change requires restart)
unix_socket_directories = '/var/run/postgresql' # comma-separated list of directories
# (change requires restart)
#unix_socket_group = '' # (change requires restart)
#unix_socket_permissions = 0777 # begin with 0 to use octal notation
# (change requires restart)
#bonjour = off # advertise server via Bonjour
# (change requires restart)
#bonjour_name = '' # defaults to the computer name
修改完成后,重启postgresql服务
sudo service postgresql restart
----------------------------------------------------------------------------------------------------------------------------------------------------
至此,数据库的迁移基本上已经完成,接下来将zabbix-server的数据库配置指向新安装的数据库端
8、修改zabbix-server的配置文件,将数据库指向新的database
### Option: DBHost
# Database host name.
# If set to localhost, socket is used for MySQL.
# If set to empty string, socket is used for PostgreSQL.
#
# Mandatory: no
# Default:
DBHost=192.168.31.2
### Option: DBName
# Database name.
# For SQLite3 path to database file must be provided. DBUser and DBPassword are ignored.
#
# Mandatory: yes
# Default:
# DBName=
DBName=zabbix
### Option: DBSchema
# Schema name. Used for IBM DB2 and PostgreSQL.
#
# Mandatory: no
# Default:
# DBSchema=
### Option: DBUser
# Database user. Ignored for SQLite.
#
# Mandatory: no
# Default:
# DBUser=
DBUser=zabbix
### Option: DBPassword
# Database password. Ignored for SQLite.
# Comment this line if no password is used.
#
# Mandatory: no
# Default:
DBPassword=1qaz2wsx
### Option: DBSocket
# Path to MySQL socket.
#
# Mandatory: no
# Default:
# DBSocket=/tmp/mysql.sock
### Option: DBPort
# Database port when not using local socket. Ignored for SQLite.
#
# Mandatory: no
# Range: 1024-65535
# Default (for MySQL):
DBPort=5432
修改完成之后,重启zabbix-server,重启完成后,发现zabbix界面提示database is down,可是又发现192.168.31.2这台新的server中的database确实有数据进来,并且已经192.168.31.1这台机器已经连接到新的database中了。
到底是为什么?所以,此处有坑。
后来查了一些资料,发现zabbix-server显示的database数据是通过web来配置定义,配置文件在如下位置。
sudo vim /etc/zabbix/web/zabbix.conf.php
配置以下内容:
// Zabbix GUI configuration file.
global $DB;
$DB['TYPE'] = 'POSTGRESQL';
$DB['SERVER'] = '192.168.31.2';
$DB['PORT'] = '0';
$DB['DATABASE'] = 'zabbix';
$DB['USER'] = 'zabbix';
$DB['PASSWORD'] = '1qaz2wsx';
// Schema name. Used for IBM DB2 and PostgreSQL.
$DB['SCHEMA'] = '';
$ZBX_SERVER = 'localhost';
$ZBX_SERVER_PORT = '10051';
$ZBX_SERVER_NAME = '';
$IMAGE_FORMAT_DEFAULT = IMAGE_FORMAT_PNG;
基于以上配置完成,重启zabbix-server服务
sudo service zabbix-server restart
重启完成后,发现zabbix界面已经指向新的database,此时将192.168.31.1这台server上的database数据库停止,也不会影响zabbix的界面显示。
至此,zabbix数据库和server分开到两台server上,数据库迁移完成!