inotify+rsync+mysql主主复制+keepalived实现zabbix高可用

思路:主备机通过inotify+rsync实现文件同步,通过mysql主主复制实现数据同步,同一时刻只有一台服务器能对外提供zabbix服务,web端登陆虚ip访问,被监控主机通过配置虚ip来完成监控。

配置:

主机
ip
操作系统
zabbix版本
mysql版本
inotify版本 rsync版本 备注
zabbix-server01 172.27.9.80 Centos7.3.1611
zabbix_server (Zabbix) 3.4.10

5.7.22 3.14 3.1.2 关闭防火墙和selinux
zabbix-server02 172.27.9.81 Centos7.3.1611
zabbix_server (Zabbix) 3.4.10

5.7.22 3.14 3.1.2 关闭防火墙和selinux

Part 1 基础环境安装

zabbix安装

1.安装源码库配置部署包

这个部署包包含了yum配置文件:

[[email protected] ~]# rpm -ivh http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm

2.安装Zabbix-server部署包

[[email protected] ~]# yum -y install zabbix-server-mysql zabbix-web-mysql

3.安装初始化数据库

3.1下载并安装MySQL官方的 Yum Repository

[[email protected] ~]# rpm -ivh https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm

3.2查看当前可用的Mysql安装源

[[email protected] ~]# yum repolist enabled | grep "mysql.*-community.*"
mysql-connectors-community/x86_64 MySQL Connectors Community                  51
mysql-tools-community/x86_64      MySQL Tools Community                       63
mysql57-community/x86_64          MySQL 5.7 Community Server                 267

3.3安装MySQL数据库

[[email protected] ~]# yum -y install mysql-community-server

总下载量:205M,请耐心等待。

安装完成,系统自带的mariadb被覆盖。

3.4启动mysql服务并设置开机启动

[[email protected] ~]# systemctl start mysqld.service
[[email protected] ~]# systemctl enable mysqld.service

3.5登陆mysql

安装好后,会在my.cnf文件中自动生成一个密码

[[email protected] ~]# cat /var/log/mysqld.log | grep password
2018-06-20T09:40:53.666115Z 1 [Note] A temporary password is generated for [email protected]: )>b5dXb+sLei
[[email protected] ~]# mysql -uroot -p

输入密码“)>b5dXb+sLei”

3.6修改密码规则(默认密码规则太复杂不容易记忆)

mysql> set global validate_password_policy=0;
Query OK, 0 rows affected (0.01 sec)
mysql> set global validate_password_length=1;
Query OK, 0 rows affected (0.00 sec)

3.7重置密码(登录数据库后需首先重置密码才能进行后续操作)

mysql> set password = password('mysql123');
Query OK, 0 rows affected, 1 warning (0.00 sec)

3.8创建数据库和zabbix用户并授权

mysql> create database zabbix character set utf8 collate utf8_bin;
Query OK, 1 row affected (0.00 sec)
mysql> grant all privileges on zabbix.* to [email protected] identified by 'zabbix123';
Query OK, 0 rows affected, 1 warning (0.00 sec)

3.9导入初始架构(Schema)和数据

[[email protected] ~]# cd /usr/share/doc/zabbix-server-mysql-3.4.10/
[[email protected] zabbix-server-mysql-3.4.10]#  zcat create.sql.gz | mysql -uzabbix -pzabbix123 -D zabbix
mysql: [Warning] Using a password on the command line interface can be insecure.

执行过程中会有一个关于密码的告警,忽略。

查看执行结果:

mysql> show tables from zabbix;
mysql> select count(*) tables,table_schema from information_schema.tables  where table_schema = 'zabbix';

一共有140张表

4.启动Zabbix Server进程

4.1在zabbix_server.conf中编辑数据库配置

解注释DBHost:

[[email protected] zabbix]# sed -i 's/^ *# *DBHost=.*/DBHost=localhost/g' /etc/zabbix/zabbix_server.conf

修改zabbix密码:

[[email protected] zabbix]# sed -i 's/^ *# *DBPassword=.*/DBPassword=zabbix123/g' /etc/zabbix/zabbix_server.conf

4.2修改zabbix安装目录属主和权限

[[email protected] zabbix]# chown -R zabbix:zabbix /etc/zabbix/
[[email protected] zabbix]# chmod -R 755 /etc/zabbix/

4.3启动zabbix-server服务,并设置开机自启

[[email protected] ~]# systemctl restart zabbix-server
[[email protected] ~]# systemctl enable zabbix-server

5.编辑Zabbix前端的PHP配置

5.1设置时区为Asia/Shanghai:

[[email protected] ~]# sed -i.bak 's/^ *# *php_value date.timezone Europe\/Riga/php_value date.timezone Asia\/Shanghai/g' /etc/httpd/conf.d/zabbix.conf

5.2启动apache服务,并设置开机自启

[[email protected] conf.d]# systemctl restart httpd
[[email protected] conf.d]# systemctl enable httpd

6.登陆zabbix

访问地址:http://localhost/zabbix

下一步:

下一步:

输入密码“zabbix123”,下一步:

name填写为‘myzabbix81’和zabbix-server02的‘myzabbix82’区分,host和port默认,下一步:

信息汇总确认,下一步:

下载配置文件并另存为‘/etc/zabbix/web/zabbix.conf.php’,注意属主为zabbix:zabbix,权限为755:

[[email protected] ~]# cd /etc/zabbix/web/
[[email protected] web]# ll
总用量 8
-rwxr-xr-x. 1 zabbix zabbix 1036 6月   4 19:40 maintenance.inc.php
-rwxr-xr-x  1 zabbix zabbix  427 6月  20 22:38 zabbix.conf.php
[[email protected] web]# more zabbix.conf.php 
<?php
// Zabbix GUI configuration file.
global $DB;
$DB['TYPE']     = 'MYSQL';
$DB['SERVER']   = 'localhost';
$DB['PORT']     = '0';
$DB['DATABASE'] = 'zabbix';
$DB['USER']     = 'zabbix';
$DB['PASSWORD'] = 'zabbix123';
// Schema name. Used for IBM DB2 and PostgreSQL.
$DB['SCHEMA'] = '';
$ZBX_SERVER      = 'localhost';
$ZBX_SERVER_PORT = '10051';
$ZBX_SERVER_NAME = 'myzabbix81';
$IMAGE_FORMAT_DEFAULT = IMAGE_FORMAT_PNG;

单击‘Finish’跳转:

配置完成,登陆web主页:

初始用户名密码为'Admin/zabbix'

zabbix-server01完成zabbix安装,zabbix-server02按同样步骤安装即可。

Keepalived安装

1.keepalived安装

分别在主备机执行如下操作:

[[email protected] ~]# yum -y install keepalived

2.keepalived配置

主机配置如下:

[[email protected] ~]# more /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
   router_id lvs-nginx01      #router_id 机器标识,通常为hostname,但不一定非得是hostname。故障发生时,邮件通知会用到。
}

vrrp_script chk_zabbix {
  script "/etc/keepalived/check.sh zabbix_server"
  interval 2
  weight 30 
  fall 2        #尝试两次都成功才成功
  rise 2        #尝试两次都失败才失败
}

vrrp_script chk_mysql {
  script "/etc/keepalived/check.sh mysqld"
  interval 2
  weight 20 
  fall 2        #尝试两次都成功才成功
  rise 2        #尝试两次都失败才失败
}

vrrp_instance VI_1 {            #vrrp实例定义部分
    state MASTER               #设置lvs的状态,MASTER和BACKUP两种,必须大写 
    interface ens33               #设置对外服务的接口
    virtual_router_id 100        #设置虚拟路由标示,这个标示是一个数字,同一个vrrp实例使用唯一标示 
    priority 100               #定义优先级,数字越大优先级越高,在一个vrrp——instance下,master的优先级必须大于backup
    advert_int 1              #设定master与backup负载均衡器之间同步检查的时间间隔,单位是秒
    authentication {           #设置验证类型和密码
        auth_type PASS         #主要有PASS和AH两种
        auth_pass 1111         #验证密码,同一个vrrp_instance下MASTER和BACKUP密码必须相同
    }
    virtual_ipaddress {         #设置虚拟ip地址,可以设置多个,每行一个
        172.27.9.80 
    }
    track_script {
        chk_zabbix
    }
    track_script {
        chk_mysql
    }
notify_master "/etc/keepalived/zabbix.sh start" #指定当切换到master时,执行的脚本
notify_backup "/etc/keepalived/zabbix.sh stop" #指定当切换到backup时,执行的脚本
}

备机配置如下:

[[email protected] ~]# more /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
   router_id lvs-nginx01      #router_id 机器标识,通常为hostname,但不一定非得是hostname。故障发生时,邮件通知会用到。
}

vrrp_script chk_zabbix {
  script "/etc/keepalived/check.sh zabbix_server"
  interval 2
  weight 5 
  fall 2        #尝试两次都成功才成功
  rise 2        #尝试两次都失败才失败
}

vrrp_script chk_mysql {
  script "/etc/keepalived/check.sh mysqld"
  interval 2
  weight 45 
  fall 2        #尝试两次都成功才成功
  rise 2        #尝试两次都失败才失败
}

vrrp_instance VI_1 {            #vrrp实例定义部分
    state BACKUP               #设置lvs的状态,MASTER和BACKUP两种,必须大写 
    interface ens33               #设置对外服务的接口
    virtual_router_id 100        #设置虚拟路由标示,这个标示是一个数字,同一个vrrp实例使用唯一标示 
    priority 90               #定义优先级,数字越大优先级越高,在一个vrrp——instance下,master的优先级必须大于backup
    advert_int 1              #设定master与backup负载均衡器之间同步检查的时间间隔,单位是秒
    authentication {           #设置验证类型和密码
        auth_type PASS         #主要有PASS和AH两种
        auth_pass 1111         #验证密码,同一个vrrp_instance下MASTER和BACKUP密码必须相同
    }
    virtual_ipaddress {         #设置虚拟ip地址,可以设置多个,每行一个
        172.27.9.80 
    }
    track_script {
        chk_zabbix
    }
    track_script {
        chk_mysql
    }
notify_master "/etc/keepalived/zabbix.sh start" #指定当切换到master时,执行的脚本
notify_backup "/etc/keepalived/zabbix.sh stop" #指定当切换到backup时,执行的脚本
}

注意主备中chk_zabbix和chk_mysql的weight值。该设置目的是保证主机的zabbix或者mysql服务异常时keepalived能正常发生切换,并且当主机的zabbix和mysql服务重新正常启动时keepalived能够回切。具体的切换机制可以查看Keepalived中Master和Backup主备切换机制浅析

vrrp_script中的脚本(主备机相同):

[[email protected] keepalived]# more check.sh 
#!/bin/bash
zabbix_server=`ps -C zabbix_server --no-header | wc -l`
mysqld=`ps -C mysqld --no-header | wc -l`
case $1 in
    zabbix_server)
        if [ $zabbix_server -gt 0 ];then
            exit 0 
        else
            exit 1
        fi
    ;;
    mysqld)
        if [ $mysqld -gt 0 ];then
            exit 0
        else
            exit 1 
        fi
    ;;
esac

该脚本为判断zabbix和mysql服务的状态。

notify_master和notify_backup执行的脚本(主备机相同):

[[email protected] keepalived]# more zabbix.sh 
#!/bin/bash
case $1 in
    start)
        systemctl start zabbix-server
    ;;
    stop)
        systemctl stop zabbix-server
    ;;
esac

该脚本作用为当主备发生切换或者回切时时钟保持有虚ip的机器有zabbix服务而另一台无zabbix服务,保证对外提供服务的只有一台机器。(若两台服务器都提供zabbix服务则每一次事件都会触发两次告警)

3.主备机分别重启keepalived服务并加入启动服务

[[email protected] ~]# systemctl restart keepalived
[[email protected] ~]# systemctl enable keepalived


至此完成zabbix-server、keepalived安装,通过虚拟IP访问:

http://172.27.9.80/zabbix/

Part 2 文件及数据同步

mysql数据库同步

1.编辑配置文件/etc/my.cnf

zabbix-server01:

[[email protected] ~]# more /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

symbolic-links=0

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

server-id=1                       #保证每个服务器不一样
log-bin=mysql-bin                 #开启bin日志
auto-increment-increment = 2      #步进值auto_imcrement。一般有n台主MySQL就填n
auto-increment-offset = 1         #起始值。一般填第n台主MySQL。此时为第一台主MySQL
binlog_format = mixed             #设置binlog格式为mixed
sync_binlog=1                     #事务特性每1次事务提交 
binlog-do-db=zabbix               #同步的据库名
binlog-ignore-db=mysql            #不同步数据库名
binlog-ignore-db=sys
binlog-ignore-db=performance_schema
binlog-ignore-db=information_schema
replicate-do-db=zabbix            #需要复制的数据库   
replicate-ignore-db=mysql         #不需要复制的数据库
replicate-ignore-db=sys
replicate-ignore-db=performance_schema
replicate-ignore-db=information_schema

zabbix-server02:

[[email protected] ~]# more /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
server-id=2                       #保证每个服务器不一样
log-bin=mysql-bin                 #开启bin日志
auto-increment-increment = 2      #步进值auto_imcrement。一般有n台主MySQL就填n
auto-increment-offset = 2         #起始值。一般填第n台主MySQL。此时为第一台主MySQL
binlog_format = mixed             #设置binlog格式为mixed
sync_binlog=1                     #事务特性每1次事务提交 
binlog-do-db=zabbix               #同步的据库名
binlog-ignore-db=mysql            #不同步数据库名
binlog-ignore-db=sys
binlog-ignore-db=performance_schema
binlog-ignore-db=information_schema
replicate-do-db=zabbix            #需要复制的数据库   
replicate-ignore-db=mysql         #不需要复制的数据库
replicate-ignore-db=sys
replicate-ignore-db=performance_schema
replicate-ignore-db=information_schema

分别重启mysql服务:

[[email protected] ~]# systemctl restart mysqld


2.新建备份用户

zabbix-server01上新建备机可以登录的MySQL用户‘zabbix82’:

mysql> GRANT REPLICATION SLAVE ON *.* TO 'zabbix82'@'172.27.9.82' IDENTIFIED BY 'zabbix82';
mysql> FLUSH PRIVILEGES;

zabbix-server02上新建主机可以登录的MySQL用户‘zabbix81’:

mysql> GRANT REPLICATION SLAVE ON *.* TO 'zabbix81'@'172.27.9.81' IDENTIFIED BY 'zabbix81';
mysql> FLUSH PRIVILEGES;

3.查看二进制日志名和位置

mysql> show master status;

zabbix-server01:

zabbix-server02:

4.启动同步

4.1主从同步

构建zabbix-server01到zabbix-server02的主从同步

以下操作都在zabbix-server02上执行:

mysql> CHANGE MASTER TO
    -> MASTER_HOST='172.27.9.81',
    -> MASTER_USER='zabbix82',
    -> MASTER_PASSWORD='zabbix82',
    -> MASTER_LOG_FILE='mysql-bin.000002',
    -> MASTER_LOG_POS=50334;
Query OK, 0 rows affected, 2 warnings (0.38 sec)

开启复制:

mysql> START SLAVE;

查看主从复制是否配置成功:

mysql> SHOW SLAVE STATUS\G

Slave_IO_Running: YES和Slave_SQL_Running状态都为‘Yes’,复制状态正常。

4.2主主同步

再做一次zabbix-server02到zabbix-server01的主从同步即完成了主主同步

以下操作都在zabbix-server01上执行:

mysql> CHANGE MASTER TO
    -> MASTER_HOST='172.27.9.82',
    -> MASTER_USER='mysql81',
    -> MASTER_PASSWORD='mysql81',
    -> MASTER_LOG_FILE='mysql-bin.000001',
    -> MASTER_LOG_POS=4362658;
Query OK, 0 rows affected, 2 warnings (0.46 sec)

开启复制:

mysql> START SLAVE;

查看主从复制是否配置成功:

mysql> SHOW SLAVE STATUS\G

Slave_IO_Running: YES和Slave_SQL_Running状态都为‘Yes’,复制状态正常。

主主复制配置完成。

文件同步

之前公司异地灾备时用rsync做程序的同步,不过由于生产环境不会随意动且变更都是在晚上,程序的同步实时性要求不高,所以采用每天晚上通过定时任务方式进行同步。本文中由于zabbix-server两台主机配置文件需实时同步,所以通过定时任务方式不可行,本文采用inotify工具对同步数据目录信息的监控,结合rsync完成对数据信息的实时同步。

Rsync

1.rsync安装

zabbix-server01和zabbix-server02上执行:

[[email protected] ~]# yum -y install rsync

2.rsync配置

zabbix-server01配置如下:

[[email protected] ~]# cd /etc && ll|grep rsync

注意pwd文件的权限为600

[[email protected] ~]# more /etc/rsyncd.conf
uid=root
gid=root
max connections=100
use chroot=true
log file=/var/log/rsyncd.log
motd file = /etc/rsyncd.motd
transfer logging = true
hosts allow=172.27.9.82
[zabbix]
path=/etc/zabbix/
exclude = web
comment = etc zabbix 
read only = no 
list = yes 
auth users = root 
secrets file=/etc/rsyncd.pwd
[web1]
path=/etc/httpd/conf/
comment = httpd conf
read only = no
list = yes
auth users = root
secrets file=/etc/rsyncd.pwd
[web2]
path=/etc/httpd/conf.d/
comment = httpd conf.d
read only = no
list = yes
auth users = root
secrets file=/etc/rsyncd.pwd

zabbix-server02配置如下:

rsyncd.conf文件与主机相同,只是‘hosts allow=172.27.9.81’

同步的文件为/etc/zabbix/(不包括web)、/etc/httpd/conf/和/etc/httpd/conf.d/,可根据实际情况增减。

3.启动rsync

主备机上同时运行:

[[email protected] ~]# rsync --daemon --config=/etc/rsyncd.conf

4.参数说明

uid=root        #服务器端传输文件时,要发哪个用户和用户组来执行
gid=root        #服务器端传输文件时,要发哪个用户和用户组来执行
max connections=100      #客户端最多连接数
use chroot=true          #用chroot,在传输文件之前,服务器守护程序在将chroot到文件系统中的目录中,这样做的好处是可能保护系统被安装漏洞侵袭的可能。缺点是需要超级用户权限。另外对符号链接文件,将会排除在外。也就是说,你在rsync服务器上,如果有符号链接,你在备份服务器上运行客户端的同步数据时,只会把符号链接名同步下来,并不会同步符号链接的内容
log file=/var/log/rsyncd.log        #rsync服务器的日志
motd file=/etc/rsyncd.motd          #定义motd file路径,rsyncd.motd内容是定义服务器信息的,用户登录时会看到这个信息
transfer logging = true             #传输文件日志
hosts allow=172.27.9.82             #允许的ip地址
[zabbix]                  #模块名
path=/etc/zabbix/     #同步的目录
exclude = web                 #同步目录中去除的目录,即web不同步
comment = etc zabbix    #注释,注释内容可自己定义,起提示作用
read only = no          #只读选择,如为yes则不让客户端上传文件到服务器上
list = yes              #服务器上提供同步数据的目录是否显示
auth users = root       #认证用户是root
secrets file=/etc/rsyncd.pwd        #密码文件保存路径

注意:配置文件里不能有注释信息


5.开机自启动

主备机分别执行:

[[email protected] ~]# sed -i '$a rsync --daemon --config=/etc/rsyncd.conf' /etc/rc.d/rc.local

inotify

1.inotify安装

主备机同时执行:

添加eprl源:

[[email protected] /]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

安装inotify:

[[email protected] /]# yum -y install inotify-tools

2.编写监控同步脚本

[[email protected] ~]# more /root/scripts/inotify.sh
#!/bin/bash
ZabbixPath=/etc/zabbix/
WebPath=/etc/httpd/conf/
WebPath2=/etc/httpd/conf.d/
Server=172.27.9.82

/usr/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e close_write,delete,create,attrib,move  $WebPath $WebPath2 $ZabbixPath |
while read line
do
    if [[ $line =~ $ZabbixPath ]];then
    rsync -vzrtopg --progress --delete  $ZabbixPath  [email protected]$Server::zabbix  --password-file=/etc/rsyncd.pwd2
    elif [[ $line =~ $WebPath2 ]];then
    rsync -vzrtopg --progress --delete  $WebPath2  [email protected]$Server::web2 --password-file=/etc/rsyncd.pwd2
    elif [[ $line =~ $WebPath ]];then
    rsync -vzrtopg --progress --delete  $WebPath  [email protected]$Server::web1  --password-file=/etc/rsyncd.pwd2
    else
    echo $line >> /var/log/inotify.log
    fi
done

该脚本首先是用inotify分别监控‘$WebPath $WebPath2 $ZabbixPath’三个文件的状态,若有变化则分别触发对应的rsync同步。备机配置同主机,只是‘Server’项为82。

注意Path后的路径有‘/’。

3.参数说明

-m, –monitor        #始终保持事件监听
-r, –recursive      #递归监控目录数据信息变化
-q, –quiet          #输出信息少(只打印事件信息)
–timefmt            #指定时间输出格式
–format             #打印使用指定的输出类似格式字符串,即实际监控输出内容
-e                  #指定监听指定的事件,如果省略,表示所有事件都进行监听
close_write         #文件或目录关闭,在写入模式打开之后关闭的
delete              #文件或目录被删除在监控目录中
create              #文件或目录创建在监控目录中
attrib              #文件或目录属性改变
move                #文件或目录不管移动到或是移出监控目录都触发事件

4.主备机分别启动监控同步脚本

[[email protected] ~]# nohup sh /root/scripts/inotify.sh &

Part 3 高可用测试

文件及数据同步测试

1.文件同步测试

主机上执行新建目录操作:

[[email protected] ~]#  cd /etc/httpd/conf && mkdir dropme1 && cd /etc/httpd/conf.d/ && mkdir dropme2 && cd /etc/zabbix/ && mkdir dropme3

查看备机对应文件:

发现自动生成了dropme1、dropme2、dropme3

在备机上删除新建的drop文件,在主机上查找相应文件,发现文件被删除:

[[email protected] /]# find /* -name dropme* |xargs rm -rf \{}
[[email protected] ~]# find /* -name dropme*
[[email protected] ~]#

文件同步测试成功

2.数据库同步测试

登陆主机web控制台,新增主机,查看备机是否同步。

查看备机是否同步:

同样的如果在备机上删除监控主机的话主机也会对应的自动删除。

数据同步测试完成。

高可用测试

测试前配置

1.服务端配置

修改服务端配置,将‘SourceIP’项修改为虚ip:

[[email protected] ~]# sed -i 's/^ *# *SourceIP=.*/SourceIP=172.27.9.80/g' /etc/zabbix/zabbix_server.conf

该操作主备机都执行

2.客户端配置

修改客户端配置,将‘Server’项也修改为虚ip:

[[email protected] ~]# sed -i 's/^ *# *Server=.*/Server=172.27.9.80/g' /etc/zabbix/zabbix_agentd.conf

zabbix-server端启用SourceIP,被监控的主机Server参数也配置为虚ip而不是实际地址81或82。

高可用测试

正常状态下主机有zabbix、mysql、inotify、rsync、keepalived五个服务,备机只有mysql、inotify、rsync、keepalived四个服务,这也是高可用的初始状态。

1.mysql异常测试

停止主机mysql服务,模拟异常

[[email protected] ~]# systemctl stop mysqld
[[email protected] keepalived]# ps -C mysqld --no-header | wc -l
0

查看主机日志/var/log/message:

发现发生切换,检查zabbix进程:

[[email protected] keepalived]# ps -C zabbix_server --no-header | wc -l
0

发现主机zabbix进程被kill,查看备机状态:

虚ip已经漂移至备机,并且启动了zabbix服务,web访问:

访问正常且主机为82.

回切测试:

重拉主机的zabbix和mysql进程,查看是否回切

发现虚ip回切且zabbix和mysql服务正常,查看备机zabbix状态:

[[email protected] ~]# ps -C zabbix_server --no-header | wc -l
0

此时备机zabbix服务挂起。

mysql高可用测试完成

2.zabbix异常测试

停止主机zabbix服务,模拟异常

[[email protected] keepalived]# systemctl stop zabbix-server
[[email protected] keepalived]# ps -C zabbix_server --no-header | wc -l
0

查看主机日志/var/log/message:

发现发生切换,查看备机状态和zabbix进程:

主备切换完成,回切:

启动主机zabbix服务:

[[email protected] keepalived]# systemctl start zabbix-server

查看主机日志:

发现完成回切,查看web也访问的为81,zabbix服务高可用测试完成。

总结:本文为zabbix高可用搭建提供了一种思路,其它高可用项目也可做参看,如果是B/S架构还可加入lvs和nginx,本文的文件和数据库的同步也可以采用共享存储和nfs的方式,通过数据库和配置文件放在共享目录里来实现高可用。

原文地址:http://blog.51cto.com/3241766/2137303

时间: 2024-11-13 22:59:42

inotify+rsync+mysql主主复制+keepalived实现zabbix高可用的相关文章

Memcached 主主复制+ Keepalived 实现 Memcached 高可用架构集群

Memcached +keepalived 高可用集群 Memcached 主主复制这种架构,在程序连接时不知道应该连接哪个主服务器,所以需要在前端增加 VIP 地址,实现高可用架构.这里用 Keepalived 实现,因而 Keepalived 的作用就是用来检测 Memcached 服务器的状态是否正常. Keepalived 不断检测 Memcached 主服务器的11211端口,如果检测到 Memcached 服务发生宕机或者死机等情况,就会将 VIP 从主服务器移至从服务器,从而实现

MySQL+Heartbeat+DRBD+LVS+keepalived实现数据库高可用群集

DRBD  概述 一.DRBD简介          DRBD 的全称为:Distributed ReplicatedBlock Device(DRBD)分布式块设备复制,DRBD 是由内核模块和相关脚本而组成,用来构建数据的高可用性集群.其实现方式是通过网络来镜像整个磁盘设备(数据).你可以把它看作是一种基于网络的 RAID1.它允许用户在远程机器上建立一个本地块设备的实时镜像. 二.DRBD工作原理          (DRBD Primary)负责接收数据,把数据写到本地磁盘并发送给另一台

keepalived + nginx实现高可用

1. Keepalived介绍 Keepalived是一个基于VRRP协议来实现的服务高可用方案,可以利用其来避免IP单点故障,类似的工具还有heartbeat.corosync.pacemaker.但是它一般不会单独出现,而是与其它负载均衡技术(如lvs.haproxy.nginx)一起工作来达到集群的高可用. 1.1 VRRP协议 VRRP全称 Virtual Router Redundancy Protocol,即 虚拟路由冗余协议.可以认为它是实现路由器高可用的容错协议,即将N台提供相同

Nginx+Keepalived实现站点高可用

Nginx+Keepalived实现站点高可用 Posted on 2015-05-18   |   In Linux, Nginx  |   15条评论 公司内部 OA 系统要做线上高可用,避免单点故障,所以计划使用2台虚拟机通过 Keepalived 工具来实现 nginx 的高可用(High Avaiability),达到一台nginx入口服务器宕机,另一台备机自动接管服务的效果.(nginx做反向代理,实现后端应用服务器的负载均衡)快速搭建请直接跳至 第2节. 1. Keepalived

LVS+KeepAlived,RabbitMQ高可用负载均衡

最近团队准备对项目进行重构,其中用到了RabbitMQ,也考虑了几个方案,下边着重介绍在项目中即将采用的方案.关于RabbitMQ就不在这里详细说明,具体查看 RabbitMQ中文手册.直接看架构图: 如图所示: 前端采用keepalived+lvs实现高可用负载均衡, RabbitMQ HA 队列(镜像队列)进行消息队列结构复制.本方案中搭建两个节点,并且都是磁盘节点(所有节点状态保持一致,节点完全对等),只要有任何一个节点能够工作,RabbitMQ 集群对外就能提供服务.任务处理进程同时监控

LVS+Keepalived搭建MyCAT高可用负载均衡集群

LVS+Keepalived 介绍 LVS LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统.本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一.目前有三种IP负载均衡技术(VS/NAT.VS/TUN和VS/DR),十种调度算法(rrr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq). Keepalvied Keepalived在这里主要用作RealServer的健康状态检查以及Mast

基于keepalived的Haproxy高可用配置

一.概述: HAProxy是一个用于4层或7层的高性能负载均衡软件,在大型网站的大型Web服务器群集中,HAProxy可用来替代专业的硬件负载均衡设备,节省大量的开支. 通常情况下,为了避免整个体系中出现单点故障,在至关重要的架构中,都需要部署备份设备,同样,负载均衡设备也不能部署单台,一旦主设备出现问题之后,备份设备可对主设备进行接管.实现不间断的服务,这便是Keepalived的作用. 于是,HAProxy和Keepalived的组合便成了省钱高效的Web服务器负载均衡架构. 拓扑图: 二.

RHEL 5.4下部署LVS(DR)+keepalived实现高性能高可用负载均衡

原文地址:http://www.cnblogs.com/mchina/archive/2012/05/23/2514728.html 一.简介 LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统.本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一. 目前有三种IP负载均衡技术(VS/NAT.VS/TUN和VS/DR):十种调度算法(rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq). K

keepalived+nginx实现高可用and负载均衡集群

keepalived+nginx实现高可用and负载均衡集群 前言 因生产环境需要,现需要搭建一个前端为nginx的HA双向互备.后端为nginx代理的loadbalance负载均衡集群.nginx进程基于于Master+Slave(worker)多进程模型,自身具有非常稳定的子进程管理功能.在Master进程分配模式下,Master进程永远不进行业务处理,只是进行任务分发,从而达到Master进程的存活高可靠性,Slave(worker)进程所有的业务信号都 由主进程发出,Slave(work