【zabbix】zabbix 高可用架构的实现

一、架构设计及环境规划:

架构设计图:

架构设计说明:

1. 基础架构为LAMP环境,采用keepalived实现zabbix服务器高可用,保证主server的mysql或者httpd宕掉后能切换到从server

2、数据库做主主同步,保证两边服务器数据的一致性,实现数据库的高可用。

3、采用unison同步软件保证不管修改那台服务器配置,zabbix配置目录及web目录内容的一致,实现文件双向同步。

网络环境说明:

软件版本说明:

二、软件安装配置(zabbix1同zabbix2)

配置两个节点的hosts文件,保证两个节点解析一致

# vim  /etc/hosts

10.10.1.101      zabbix1

10.10.1.99       zabbix2

LAMP环境安装

# yum -yinstall epel-release#yum -y  install gcc  gcc-c++

# yum  -y  install php php-gd php-mysql php-bcmath php-mbstring php-xml curl curl-devel net-snmp  net-snmp-devel perl-DBI

# yum -y  install   httpd

# yum -y  install  mariadb  mariadb-server

创建程序运行用户,zabbix默认以zabbix用户运行

# groupadd  -r zabbix

# useradd   -g zabbix  -r zabbix

注:  -r, --system   创建一个系统账户

-g, --gid GROU 新账户主组的名称或 ID

zabbix的安装和配置

# wgethttps://managedway.dl.sourceforge.net/project/zabbix/ZABBIX%20Latest%20Stable/3.2.6/zabbix-3.2.6.tar.gz

# tar -zxvfzabbix-3.2.6.tar.gz

# cd zabbix-3.2.6

# ./configure --with-mysql=/usr/bin/mysql_config --with-net-snmp --with-libcurl --enable-server --enable-agent --enable-proxy --prefix=/usr/local/zabbix

# make && make install

--prefix----> 指定zabbix安装目录

--enable-server----> 支持zabbix服务器

--enable-agent----> 支持zabbix代理

--enable-proxy----> 支持zabbix代理服务器

--with-libcurl----> 使用curl包

--with-net-snmp----> 使用net-snmp软件包,选择性地指定路径NET-SNMP配置

--with-mysql=/usr/bin/mysql_config 使用MySQL客户端库可以选择指定路径mysql_config

注:如出现configure: error: MySQL library not found错误,是因为缺少mariadb-devel该软件包,yum install mariadb-devel进行安装

导入数据库

#  systemctl start mariadb

# systemctl enable mariadb

# mysql -u root

MariaDB [(none)]>use zabbix;

MariaDB [zabbix]> source /root/zabbix-3.2.6/database/mysql/schema.sql

MariaDB [zabbix]> source /root/zabbix-3.2.6/database/mysql/images.sql

MariaDB [zabbix]> source /root/zabbix-3.2.6/database/mysql/data.sql

MariaDB [zabbix]> quit

注:导入请按以上顺序导入,否则会出现错误情况。

添加服务器对应的端口(可省略)

[root@localhost ~]# cat /etc/services |grep zabbix

zabbix-agent    10050/tcp               # Zabbix Agent      //客户端

zabbix-agent    10050/udp               # Zabbix Agent

zabbix-trapper  10051/tcp               # Zabbix Trapper    //服务端

zabbix-trapper  10051/udp               # Zabbix Trapper

拷贝相关的配置文件到/etc下并进行相关配置修改

[root@localhost ~]#  mkdir -p /etc/zabbix

[root@localhost ~]# cp -r zabbix-3.2.6/conf/*      /etc/zabbix/

[root@localhost ~]# ln -s /usr/local/zabbix/etc/*  /etc/zabbix/

[root@localhost ~]# chown -R zabbix:zabbix         /etc/zabbix

[root@localhost ~]# ln -s /usr/local/zabbix/bin/*  /usr/bin/

[root@localhost ~]# ln -s /usr/local/zabbix/sbin/* /usr/sbin/

a).修改zabbix_server.conf

[root@localhost ~]# vim  /etc/zabbix/zabbix_server.conf

修改后如下:

[root@localhost ~]# cat  /etc/zabbix/zabbix_server.conf|grep -n ^[^#]

LogFile=/tmp/zabbix_server.log                        ##日志文件地址

SourceIP=10.10.1.98       #VIP虚拟IP

BHost=localhost                                            ##数据库主机

DBName=zabbix                                           ##数据库名

DBUser=zabbix                                             ##数据库用户名

DBPassword=zabbix                                     ##数据库密码

AlertScriptsPath=/usr/local/zabbix/share/zabbix/alertscripts

                                                                      ##zabbix运行脚本存放目录

b).修改zabbix_agentd.conf

[root@localhost ~]# vim /etc/zabbix/zabbix_agentd.conf

修改后如下:

[root@localhost ~]# cat  /etc/zabbix/zabbix_agentd.conf|grep -n ^[^#]

PidFile=/tmp/zabbix_agentd.pid                    ##进程PID

LogFile=/tmp/zabbix_agentd.log                   ##日志保存位置

EnableRemoteCommands=1                       ##允许执行远程命令

Server=10.10.1.98                                 #VIP

ServerActive=10.10.1.98                       #VIP

Hostname=zabbix1                                (zabbix2上写zabbix2)

                                                                  ##在web端添加监控主机时,必须与zabbix创建的hostname相同

Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/

                                                                   ##添加在定义Key时,存放的位置

UnsafeUserParameters=1                          ##启动自定义key

修改PHP相关参数

# vim /etc/php.ini

max_execution_time = 300

max_input_time = 300

memory_limit = 128M

upload_max_filesize = 2M

date.timezone = Asia/Shanghai

post_max_size = 28M

配置web站点

# cd zabbix-3.2.6/

# cp -r   frontends/php      /var/www/html/zabbix

# chown -R apache:apache/var/www/html/zabbix

②修改httpd.conf的参数

# vim /etc/httpd/conf/httpd.conf

164 DirectoryIndex index.htmlindex.php

③关闭SELinux和防火墙

# sed-i"s/SELINUX=enforcing/SELINUX=disabled/"/etc/selinux/config

# setenforce 0

# iptables -F

添加开机启动脚本

# cd zabbix-3.2.6/

# cp misc/init.d/fedora/core5/zabbix_server/etc/init.d/zabbix_server

# cp misc/init.d/fedora/core5/zabbix_agentd/etc/init.d/zabbix_agentd

修改脚本的默认设置,指定相关路径以及配置文件:

此步相当重要,不然会出现zabbi_server起不来的现象,查看日志显示

[Z3001] connection to database 'zabbix' failed: [1045] Access denied for user 'zabbix'@'localhost' (using password: NO)

# vim  /etc/init.d/zabbix_server

21 ZABBIX_BIN="/usr/local/zabbix/sbin/zabbix_server"

31daemon $ZABBIX_BIN-c /etc/zabbix/zabbix_server.conf

#vim /etc/init.d/zabbix_agentd

21 ZABBIX_BIN="/usr/local/zabbix/sbin/zabbix_agentd"

31  daemon $ZABBIX_BIN-c/etc/zabbix/zabbix_agentd.conf

# chmod    +x    /etc/init.d/zabbix_server

# chmod    +x   /etc/init.d/zabbix_agentd

#chkconfig  --add  zabbix_server

#chkconfig  --add  zabbix_agentd

# chkconfig   zabbix_server on

# chkconfig   zabbix_agentd on

MySQL 主主同步

修改数据库配置文件(除红色部分,zabbix1同zabbix2)

############################################

[mysqld]

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

# Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links=0

# Settings user and group are ignored when systemd is used.

# If you need to run mysqld under a different user or group,

# customize your systemd unit file for mariadb according to the

# instructions inhttp://fedoraproject.org/wiki/Systemd

server-id=1                                       #(zabbix2 设置为2)

log-bin=mysql-bin                               # 开启bin日志

expire_logs_days=365                      # bin日志过期清理时间

max_binlog_size=314572800              # 每个bin日志大小

auto-increment-increment = 2            #字段变化增量值

auto-increment-offset = 1                   #初始字段ID为1

slave-skip-errors = all                               #忽略所有复制产生的错误

binlog-do-db=zabbix                               # 同步原数据库名

binlog-ignore-db=mysql                          # 不同步数据库名

binlog-ignore-db=test

replicate-do-db=zabbix

replicate-ignore-db=mysql

replicate-ignore-db=test

[mysqld_safe]

log-error=/var/log/mariadb/mariadb.log

pid-file=/var/run/mariadb/mariadb.pid

#

# include all files from the config directory

#

!includedir /etc/my.cnf.d

#####################################################

# systemctl restart mariadb

建立同步数据同步账号

zabbix1上操作:

mysql> grant replication slave on *.* to 'tongbu'@'10.10.1.99' identified by 'tongbu@123';

mysql> flush privileges;

zabbix2上操作:

mysql> grant replication slave on *.* to 'tongbu'@'10.10.1.101' identified by 'tongbu@123';

mysql> flush privileges;

在zabbix1和zabbix2上

查看同步账号:

mysql> use mysql;

Database changed

mysql> select user,host from user;

在zabbix1上

获取zabbix2 binlog 文件 和 id:

+------------------+----------+--------------+-------------------------------+

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB              |

+------------------+----------+--------------+-------------------------------+

| mysql-bin.000002 |     1512 | zabbix       | mysql,test,information_schema |

+------------------+----------+--------------+-------------------------------+

在zabbix2上

获取zabbix1 binlog 文件 和 id:

mysql> show master status;

+------------------+----------+--------------+-------------------------------+

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB              |

+------------------+----------+--------------+-------------------------------+

| mysql-bin.000002 |     1510 | zabbix       | mysql,test,information_schema |

+------------------+----------+--------------+-------------------------------+

启动互为主从的模式

zabbix1上操作:

mysql> change master tomaster_host='10.10.1.99',master_user='tongbu',master_password='tongbu@123',master_log_file='mysql-bin.000002',master_log_pos=1512;

mysql>start  slave;

zabbix1上查看同步状态

mysql>  show slave status\G

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 10.10.1.99

Master_User: tongbu

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysql-bin.000003

Read_Master_Log_Pos: 40294

Relay_Log_File: mysqld-relay-bin.000002

Relay_Log_Pos: 1088

Relay_Master_Log_File: mysql-bin.000003

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Replicate_Do_DB: zabbix

Replicate_Ignore_DB: mysql,test,information_schema

zabbix2上操作:

mysql> change master to master_host='10.10.1.101', master_user='tongbu', master_password='tongbu@123', master_log_file='mysql-bin.000002',master_log_pos=1510;

mysql>start  slave;

zabbix2上查看同步状态:

mysql>  show slave status\G

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 10.10.1.101

Master_User: tongbu

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysql-bin.000002

Read_Master_Log_Pos: 4587

Relay_Log_File: mysqld-relay-bin.000002

Relay_Log_Pos: 3328

Relay_Master_Log_File: mysql-bin.000002

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Replicate_Do_DB: zabbix

Replicate_Ignore_DB: mysql,test,information_schema

安装keepalived实现主从切换

keepalived的安装,我们可以用yum也可以源码编译安装,我们这里用yum

# yum install keepalived

创建keepalived状态检查脚本:

# vi /etc/keepalived/keepalived_check.sh

###############################################

#!/bin/bash

mysql_check=`ps -C mysqld --no-header | wc -l`

httpd_check=`ps -C httpd  --no-header | wc -l`

case $1 in

mysqld)

if [ $mysql_check -eq 0 ];then

systemctl start mariadb

sleep 3

if [ $mysql_check -eq 0 ];then

systemctl stop  keepalived

fi

fi

;;

httpd)

if [ $httpd_check -eq 0 ];then

systemctl start httpd

sleep 3

if [ $httpd_check -eq 0 ];then

systemctl stop  keepalived

fi

fi

;;

esac

#######################################################

# chmod 755 /etc/keepalived/keepalived_check.sh

创建zabbix重启脚本:

当主从切换的时候执行此脚本,必须在keepalived配置文件中增加此脚本,否则,主从切换后,web查看host的状态是错误,但是后台可以获得数据!如下图所示:

具体原因不明,可能是因为hosts中主机的items选项中”Update interval (in sec) 60”更新时间默认设置为60秒,所以切换后相当于重新连接切换的从server数据,造成此现象。所以下面脚本中增加了 60秒的睡眠时间。

#vim  /etc/keepalived/keepalived_zabbix.sh

###########################

#!/bin/bash

sleep 60

/etc/init.d/zabbix_server restart

##############################

# chmod 777 /etc/keepalived/keepalived_zabbix.sh

修改keepalived配置文件(红色标示部分为zabbix2需要修改地方,其他配置zabbix1同zabbix2)

# vi /etc/keepalived/keepalived.conf

#############################################

! Configuration File for keepalived

global_defs {

notification_email {

acassen@firewall.loc

failover@firewall.loc                #设置报警地址,可以设置多个,每行1个

sysadmin@firewall.loc             #需安装sendmail,并开启邮件报警

}

notification_email_from Alexandre.Cassen@firewall.loc

smtp_server 127.0.0.1                 #设置SMTP Server地址

smtp_connect_timeout 30

router_id LVS_DEVEL

}

vrrp_script mysqld                                            #vrrp脚本命名

{

script "/etc/keepalived/keepalived_check.sh mysqld"     #要执行的脚本

interval 2         #脚本指定间隔,单位为秒

weight -30      #优先级(如果脚本执行结果为0,并且weight配置的值大于0,则优先级相应的增加,如果脚本执行结果非0,并且weight配置的值小于0,则优先级相应的减少)

fall   2        #尝试两次都成功才成功

rise   2        #尝试两次都失败才失败

}

vrrp_script httpd

{

script "/etc/keepalived/keepalived_check.sh httpd"

interval 2

weight -20

fall   2     #尝试两次都成功才成功

rise   2     #尝试两次都失败才失败

}

vrrp_instance zabbix_server{

stateMASTER#指定Keepalived的角色,MASTER为主,BACKUP为备

interface eth0                           #绑定真实的物网卡

virtual_router_id 51                   #虚拟路由编号,主备要一致

priority100  #定义优先级,数字越大,优先级越高,主DR必须大于备用DR,zabbix2写90

advert_int 1                              #检查间隔,默认为1s

authentication {

auth_type PASS                      #认证方式,PASS或AH两种

auth_pass 1111                        #认证密码,主备服务器要一致

}

track_script                                 #调用上面定义的检查脚本

{

mysqld

}

track_script

{

httpd

}

virtual_ipaddress {

10.10.1.98  #定义虚拟IP(VIP),可多设,每行一个,注意和zabbix1 zabbix2在同一网端(掩码问题)

}

notify_master  "/etc/keepalived/keepalived_zabbix.sh"          #指定当切换到master时,执行的脚本,歇60秒

notify_backup  "/etc/keepalived/keepalived_zabbix.sh"          #指定当切换到backup时,执行的脚本,歇60秒

#notify_fault  "/sbin/service zabbix_server stop"                       #故障时执行的脚本

}

#######################################################

# systemctl start  keepalived

# systemctl enablekeepalived

启动服务,查看监听端口

# service  zabbix_server  start

# service  zabbix_agentd  start

# ss -tln

三、实现web目录双向同步

配置zabbix1和zabbix2免密码验证

ssh端口默认的22,如果你修改ssh服务默认连接端口,两边用秘钥连接的时候分别在脚本里面指定对端正确端口。

zabbix1上操作:

#ssh-keygen (回车后再按三下回车)

#ssh-copy-id  root@10.10.1.99

zabbix2上操作:

#ssh-keygen (回车后再按三下回车)

#ssh-copy-id   root@10.10.1.101

安装unison同步工具(zabbix1同zabbix2)

安装unison

http://www.seas.upenn.edu/~bcpierce/unison//download/releases/stable/

# wgethttp://www.seas.upenn.edu/~bcpierce/unison//download/releases/stable/unison-2.48.4.tar.gz

# tar zxvf unison-2.13.16.tar.gz

# cd  unison-2.48.4

# make UISTYLE=text THREADS=true STATIC=true

# cp ./unison /usr/local/bin/

# /usr/local/bin/unison

生成的这个文件之后,首先需要执行一次,会在当前登陆的用户家目录下生成一个.unison的目录,并且在目录下生成一个defualt.prf文件,以后unison的使用都是通过修改稿配置文件,执行unison这个命令进行。

安装inotify工具inotify-tools:

http://inotify-tools.sourceforge.net

确认Linux系统内核为2.6.13以上,如果Linux内核低于2.6.13版本,就需要重新编译内核加入inotify的支持。

# wgethttp://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz

# tar xvf inotify-tools-3.14.tar.gz

# cd inotify-tools-3.14

# ./configure

# make

# make install

# ll /usr/local/bin/inotifywa*

-rwxr-xr-x 1 root root 37264 04-14 13:42 /usr/local/bin/inotifywait

-rwxr-xr-x 1 root root 35438 04-14 13:42 /usr/local/bin/inotifywatch

inotify-tools安装完成后,会生成inotifywait和inotifywatch两个指令:

inotifywait用于等待文件或文件集上的一个特定事件,它可以监控任何文件和目录设置,并且可以递归地监控整个目录树

inotifywatch用于收集被监控的文件系统统计数据,包括每个inotify事件发生多少次等信息

修改unison配置文件,编写同步脚本进行实施监控同步(除红色表明外,zabbix1同zabbix2)

整个过程是通过使用innotify对目录和文件进行检查,然后根据变动调用unison工具进行同步

创建同步zabbix配置的prf文件(zabbix1上操作)

# cd /root/.unison

# vim zabbix.prf

注意:同步zabbix配置,有几个注意的地方,不同版本的zabbix版本切记不要同步他的二进制文件,因为每个版本的zabbix编译所产难过的二进制文件不是一定是一样的。这样会造成一边zabbix运行出问题!

#################################################

# Unison preferences file

#unison服务端配置文件

root=/usr/local/zabbix/

#本地文件夹

root=ssh://root@10.10.1.99//usr/local/zabbix/    #zabbix2换成zabbix1的IP

#格式:ssh://$user@$IP//$DIR

#远程文件夹

batch = true

#表示全自动模式,接受并执行默认动作。

owner = true

#表示保持同步的文件属主信息。

group = true

#表示保持同步的文件属组信息。

perms = -1

#表示保持同步的文件读写权限。

fastcheck = false

#true表示同步时通过文件的创建时间来比较两地文件;false表示同步时通过比较两地文件内容。

rsync = false

#默认值是true,用于激活rsync传输模式。

sshargs = -C

#使用ssh的压缩传输方式。

xferbycopying = true

#优化传输参数,默认值为true。

#confirmbigdel = false

#默认值为true,表示当需要同步的两个目录有一个为空时,unison将停止。设置为false可以保证当需要同步的某个目录为空时,unison不会停止运转。

log = true

#表示在终端输出运行信息。

logfile = /root/.unison/unison.log

#指定同时输出写入log文件。

maxthreads = 300

#指定同步时最大线程数。

#repeat = 1

#表示间隔1秒后开始一次新的同步检查

retry = 3

#指定失败重试次数

#force = /wwwroot

#指定force表示以本地/wwwroot为标准,指定了则变成单项同步了,所以在这里不指定。

path=bin#这下面了自定义的检查脚本

path=sbin

path=etc

path=lib

path=share/zabbix/#这下面放了告警脚本

#同步指定的子目录及文件,而非整个目录。可以写多个path,如在下面再写一个path = wwwbak。

ignore = Path etc/zabbix_agentd.conf

#忽略/wwwroot下面的WEB-INF/tmp目录,即同步时不同步它。注意,这里是"Path",而不是"path"。

######################################

创建同步Web文件的prf文件(zabbix1上操作)

# vim webapps.prf

###########################

# Unison preferences file

#unison服务端配置文件

root=/var/www/html/zabbix/

#本地文件夹

root=ssh://root@10.10.1.99//var/www/html/zabbix/#zabbix2换成zabbix1的IP

#远程文件夹

batch = true

#表示全自动模式,接受并执行默认动作。

owner = true

#表示保持同步的文件属主信息。

group = true

#表示保持同步的文件属组信息。

perms = -1

#表示保持同步的文件读写权限。

fastcheck = false

#true表示同步时通过文件的创建时间来比较两地文件;false表示同步时通过比较两地文件内容。

rsync = false

#默认值是true,用于激活rsync传输模式。

sshargs = -C

#使用ssh的压缩传输方式。

xferbycopying = true

#优化传输参数,默认值为true。

#confirmbigdel = false

#默认值为true,表示当需要同步的两个目录有一个为空时,unison将停止。设置为false可以保证当需要同步的某个目录为空时,unison不会停止运转。

log = true

#表示在终端输出运行信息。

logfile = /root/.unison/unison.log

#指定同时输出写入log文件。

maxthreads = 300

#指定同步时最大线程数。

#repeat = 1

#表示间隔1秒后开始一次新的同步检查

retry = 3

#指定失败重试次数

#force = /wwwroot

#指定force表示以本地/wwwroot为标准,指定了则变成单项同步了,所以在这里不指定。

#path = /usr/local/zabbix/bin/

#同步指定的子目录及文件,而非整个目录。可以写多个path,如在下面再写一个path = wwwbak。

#ignore = Path WEB-INF/tmp

#忽略/wwwroot下面的WEB-INF/tmp目录,即同步时不同步它。注意,这里是"Path",而不是"path"。

#################################################

------------------------------------------------------参数含义--------------------------------------------------------

# Unison preferences file

#unison服务端配置文件

root=/Data/apps/zabbix/

#本地文件夹

root=ssh://root@10.3.6.42//Data/apps/zabbix/       #格式:ssh://$user@$IP//$DIR

#远程文件夹

batch = true

#表示全自动模式,接受并执行默认动作。

owner = true

#表示保持同步的文件属主信息。

group = true

#表示保持同步的文件属组信息。

perms = -1

#表示保持同步的文件读写权限。

fastcheck = false

#true表示同步时通过文件的创建时间来比较两地文件;false表示同步时通过比较两地文件内容。

rsync = false

#默认值是true,用于激活rsync传输模式。

sshargs = -C

#使用ssh的压缩传输方式。

xferbycopying = true

#优化传输参数,默认值为true。

#confirmbigdel = false

#默认值为true,表示当需要同步的两个目录有一个为空时,unison将停止。设置为false可以保证当需要同步的某个目录为空时,unison不会停止运转。

log = true

#表示在终端输出运行信息。

logfile = /root/.unison/unison.log

#指定同时输出写入log文件。

maxthreads = 300

#指定同步时最大线程数。

#repeat = 1

#表示间隔1秒后开始一次新的同步检查

retry = 3

#指定失败重试次数

#force = /wwwroot

#指定force表示以本地/wwwroot为标准,指定了则变成单项同步了,所以在这里不指定。

path=bin/custom/    #这下面了自定义的检查脚本

path=etc

path=sbin

path=lib

path=share/zabbix/     #这下面放了告警脚本

#同步指定的子目录及文件,是相对路径,而非整个目录。可以写多个path,如在下面再写一个path = wwwbak。

ignore = Path etc/zabbix_agentd.conf

#忽略/wwwroot下面的WEB-INF/tmp目录,即同步时不同步它。注意,这里是"Path",而不是"path"。

---------------------------------------------------------------------------------------------------------------

创建同步脚本(zabbix1同zabbix2):

# vim /root/.unison/unison.sh

######################################

#/bin/bash

dir1="/var/www/html/zabbix/"#需要检测的目录#

dir2="/app/zabbix/"#需要检测的目录#

/usr/local/bin/inotifywait -mrq -e create,delete,modify,move $dir1 $dir2 | while read line; do

#通过inotifywait来检测这个两个目录的改动情况#

/usr/local/bin/unison   webapps           #调用配置文件webapps.prf同步#

/usr/local/bin/unison    zabbix                   #调用配置文件zabbix.prf同步#

echo -n "`whoami` `date | cut -d " " -f1-5` " >> /var/log/inotify.log

#记录目录被更改的时间到日志,并记录当前登陆的用户#

echo  "$line" >> /var/log/inotify.log    #记录目录哪些文件被更改情况#

done

########################################################

脚本放后台执行:

# /usr/bin/nohup bash/root/.unison/unison.sh&

放后台,不会因为关闭窗口断开,查看进程

[root@zabbix1 ~]# ps aux | grep unison.sh

root      18733  0.0  0.1 113132  1368 pts/0    S    09:57   0:00 bash /root/.unison/unison.sh

root      18735  0.0  0.0 113136   864 pts/0    S    09:57   0:00 bash /root/.unison/unison.sh

root      26974  0.0  0.0 112680   984 pts/0    S+   15:48   0:00 grep --color=auto unison.sh

# echo    "/usr/bin/nohup/root/.unison/unison.sh  &"      >> /etc/rc.local

两边都运行脚本后,可以创建文件测试下,同时可以跟踪nohup.out文件查看同步情况

# tailf nohup.out

在centos7上,我们可以将其注册为系统服务,用systemd控制:

# chmod +x/root/.unison/unison.sh

# vimunison.service

##############################

[Unit]

Description=Files rsync script

[Service]

ExecStart=/usr/bin/nohup /root/.unison/unison.sh &

[Install]

WantedBy=multi-user.target

##############################

# mvunison.service/etc/systemd/system

# systemctl daemon-reload

# systemctl  startunison.service

# systemctl  enableunison.service

# systemctl  status unison.service

四、测试高可用效果

vip的位置一开始在zabbix1上面:

登录web新建一个hosts:

停掉zabbix1的httpd服务,可以看到VIP飘到zabbix2上面了:

再通过vip地址打开web页面,发现依然可以使用,且新建主机一样,到此zabbix的高可用已完全实现!

五、故障排查和注意事项:

1、DNS解析要确保一致,防止切换后会出现问题。

vim /etc/resolv.conf

当在zabbix监控项中使用dns域名解析监控主机时,要考虑zabbix服务器是否能够解析这个域名,不然则会获取不到数据(确保两边的zabbix服务器都可以解析域名)

2.zabbix_get 问题

实施完zabbix高可用后,大批量的zabbix_agent超时的报警,后来手动使用zabbix_get用agent.ping这个key做测试,发现确实无法获取数据,通过抓包和查看建立连接,默认建立连接都是用的物理网卡的真实IP(10.10.1.101)去与客户端的10050去建立连接得,Server并没有使用虚IP(10.10.1.98)去与10050建立连接,后来使zabbix_get -h 查看帮助信息,得知-I 参数后,使用zabbix_get -I 指定源IP为虚IP才能获取到数据

问题原因:

事后分析,为什么告警得只有agent.ping 这种告警,我们得环境都监控项都是主动模式,但是监控agent得当然还是采用被动模式Server去检测agent端的agent启动状态,但是只有这钟告警,我初步定位到是被动方式受影响了,相关得配置项也就“Server= ”这个但是我这里配置是对的,和更具上面得表现形式Server  zabbix_get 加 “-I”参数能get到值,不加get不到值;那么Server在哪里能够把“-I”能配置吗?

后来得知Server配置文件中有一项:“SourceIP=” 这项默认是没有配置的,那么他就会走通过物理网卡得IP去请求客户端建立连接。在这个三次握手中源IP自然是物理网卡IP,没有用虚IP去请求,所以当10.10.1.101请求客户端建立连接得时候,对方看一下自己的“Server=”配置是10.10.1.98  对比一下发现不匹配,然后拒绝10.10.1.101得请求,所以Server请求失败了。

解决方法:

修改Server配置文件

# vim zabbix_server.conf

SourceIP=10.10.1.98   #修改为VIP

那么再次去请求的时候就是通过这个虚IP去请求,对应agent端“Server=VIP”项配置。匹配OK  故障恢复!

六、参考

http://blog.51cto.com/yigemeng/1738174

http://www.jiagoumi.com/work/618.html

http://caml.inria.fr/pub/distrib/ocaml-3.10/

https://github.com/rvoicilas/inotify-tools/wiki

http://www.seas.upenn.edu/~bcpierce/unison//download/releases/stable/

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 162,306评论 4 370
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,657评论 2 307
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 111,928评论 0 254
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,688评论 0 220
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 53,105评论 3 295
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 41,024评论 1 225
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,159评论 2 318
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,937评论 0 212
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,689评论 1 250
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,851评论 2 254
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,325评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,651评论 3 263
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,364评论 3 244
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,192评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,985评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,154评论 2 285
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,955评论 2 279

推荐阅读更多精彩内容