zabbix 5.0 keepalived+mysql主从+proxy完整搭建

目标:zabbix集群高可用,master集群,proxy集群,数据库集群
规划:测试阶段需2个master(主备),1个proxy,2个mysql(主从)

先关闭防火墙,selinux等
systemctl disable firewalld
systemctl stop firewalld
setenforce 0

一、数据库高可用

192.168.13.56和192.168.13.57的mysql的root密码为root1234
安装的mysql-server版本为8.0,采用绿色安装
先下载mysql-8.0.25-linux-glibc2.12-x86_64.tar.xz至/opt目录下,然后安装数据库 可以一键执行

#!/bin/bash

############################
# 本程序用于一键安装mysql8 前提是将mysql安装包放入/opt目录下。
# 本程序调用方法:./mysql一键安装.sh
# 作者:huang 2021年6月3日
############################

echo "设置mysql_base"
MYSQL_BASE=/home/mysql-8.0.25
echo "设置server-id,请务必输入数字"
read -p "输入server_id的值" SERVER_ID

if [ -z "$SERVER_ID" ]
then
    echo "为空,请重新执行脚本并输入正确的server-id"
    exit 1
fi
echo $SERVER_ID | grep -q '[^0-9]'
n1=$?
if [ $n1 -eq 0 ]
then
        echo "NOT NUMBER,请重新执行脚本并输入正确的server-id"
        exit 1
fi

echo $SERVER_ID


echo "安装依赖"
yum -y install libaio
yum -y install ncurses-compat-libs
yum -y install gcc 

echo "创建用户组"
groupadd mysql
useradd -r -g mysql -s /bin/false mysql
cd /opt/
tar xvf /opt/mysql-8.0.25-linux-glibc2.12-x86_64.tar.xz -C /home
mv /home/mysql-8.0.25-linux-glibc2.12-x86_64 $MYSQL_BASE
cd $MYSQL_BASE
mkdir etc var
cd etc
echo "写入配置文件"
cat >> my.cnf <<EOF
[client]
port = 3306
socket = $MYSQL_BASE/mysql.sock
[mysqld]
port = 3306
socket = $MYSQL_BASE/mysql.sock
basedir = $MYSQL_BASE
datadir = $MYSQL_BASE/data
pid-file = $MYSQL_BASE/var/mysql.pid
user = mysql
bind-address = 0.0.0.0
server-id = $SERVER_ID #表示是本机的序号为1,一般来讲就是master的意思
skip-name-resolve
back_log = 600
max_connections = 1000
max_connect_errors = 6000
open_files_limit = 65535
table_open_cache = 128
max_allowed_packet = 4M
binlog_cache_size = 1M
max_heap_table_size = 8M
tmp_table_size = 16M
read_buffer_size = 2M
read_rnd_buffer_size = 8M
sort_buffer_size = 8M
join_buffer_size = 8M
thread_cache_size = 8
#query_cache_size = 8M
#query_cache_limit = 2M
key_buffer_size = 4M
ft_min_word_len = 4
transaction_isolation = REPEATABLE-READ
log-bin = mysql-bin
binlog_format = mixed
expire_logs_days = 30 #超过30天的binlog删除
log_error = $MYSQL_BASE/var/mysql-error.log #错误日志路径
slow_query_log = 1
long_query_time = 1 #慢查询时间 超过1秒则为慢查询
slow_query_log_file = $MYSQL_BASE/var/mysql-slow.log
performance_schema = 0
explicit_defaults_for_timestamp
skip-external-locking #MySQL选项以避免外部锁定。该选项默认开启
default-storage-engine = InnoDB #默认存储引擎
innodb_file_per_table = 1
innodb_open_files = 500
innodb_data_file_path = ibdata1:1G:autoextend
innodb_buffer_pool_size = 4G
innodb_write_io_threads = 4
innodb_flush_method = O_DIRECT
innodb_read_io_threads = 4
innodb_thread_concurrency = 0
innodb_purge_threads = 1
innodb_flush_log_at_trx_commit = 2
innodb_log_buffer_size = 2M
innodb_log_file_size = 32M
innodb_log_files_in_group = 3
innodb_max_dirty_pages_pct = 90
innodb_lock_wait_timeout = 120
bulk_insert_buffer_size = 8M
myisam_sort_buffer_size = 8M
myisam_max_sort_file_size = 10G
myisam_repair_threads = 1
interactive_timeout = 28800
wait_timeout = 28800
[mysqldump]
quick
max_allowed_packet = 16M #服务器发送和接受的最大包长度
[myisamchk]
key_buffer_size = 8M
sort_buffer_size = 8M
read_buffer = 4M
write_buffer = 4M
EOF

echo "修改用户属组"
chown -R mysql:mysql $MYSQL_BASE 
chmod 750 etc var
echo "初始化myql  defaults-file必须是第一个参数"
$MYSQL_BASE/bin/mysqld  --defaults-file=$MYSQL_BASE/etc/my.cnf --initialize --user=mysql --basedir=$MYSQL_BASE --datadir=$MYSQL_BASE/data  

sleep 10

echo "获取mysql初始密码"
PASSWORD=`cat $MYSQL_BASE/var/mysql-error.log |grep "temporary password"|awk -F"root@localhost: " '{print $2}'`

$MYSQL_BASE/bin/mysql_ssl_rsa_setup  --datadir=$MYSQL_BASE/data/
$MYSQL_BASE/bin/mysqld_safe  --defaults-file=$MYSQL_BASE/etc/my.cnf  --user=mysql --basedir=$MYSQL_BASE --datadir=$MYSQL_BASE/data &
# Next command is optional
sleep 180

echo "修改mysql密码"
$MYSQL_BASE/bin/mysql --socket=$MYSQL_BASE/mysql.sock --connect-expired-password -uroot -p${PASSWORD} -e "ALTER USER 'root'@'localhost' IDENTIFIED BY 'root1234';"

$MYSQL_BASE/bin/mysql --socket=$MYSQL_BASE/mysql.sock -uroot -proot1234 -e "create database zabbix character set utf8 collate utf8_bin;"
$MYSQL_BASE/bin/mysql --socket=$MYSQL_BASE/mysql.sock -uroot -proot1234 -e "create user zabbix@localhost identified by 'zabbix';"
$MYSQL_BASE/bin/mysql --socket=$MYSQL_BASE/mysql.sock -uroot -proot1234 -e "create user zabbix@'%' identified by 'zabbix';"
$MYSQL_BASE/bin/mysql --socket=$MYSQL_BASE/mysql.sock -uroot -proot1234 -e "grant all privileges on *.* to zabbix@localhost;"
$MYSQL_BASE/bin/mysql --socket=$MYSQL_BASE/mysql.sock -uroot -proot1234 -e "grant all privileges on *.* to zabbix@'%';"

两个数据库server-id注意不能设置成一致
zabbix为复制账号
查看master状态
show master status\G
±-----------------±---------±-------------±-------------------------±------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
±-----------------±---------±-------------±-------------------------±------------------+
| mysql-bin.000001 | 154 | | mysql,information_schema | |
±-----------------±---------±-------------±-------------------------±------------------+
从库上配置
change master to
master_host=‘192.168.13.57’,
master_user=‘zabbix’,
master_password=‘zabbix’,
master_log_file=‘mysql-bin.000001’,
master_log_pos=154;
start slave;
show slave status\G
查看主从状态
并且主库可以建个test库测试

二、zabbix_server高可用

1、配置部署keepalived
在192.168.13.54和192.168.13.55上配置
apt-get install keepalived
apt-get install open-jdk
查看是否加载ip_vs模块到内核,如果没有加载会导致VIP转移失败
lsmod | grep ip_vs
modprobe ip_vs
modprobe ip_vs_wrr

vim /etc/keepalived/zabbix.sh


#!/bin/bash
#
#
status1=$(ps aux|grep -w "zabbix_server" | grep -v grep | grep -v bash | wc -l)

if [ "${status1}" = "0" ]; then

        /etc/init.d/zabbix-server start
        sleep 3

        status2=$(ps aux|grep zabbix_server | grep -v grep | grep -v bash |wc -l)
        if [ "${status2}" = "0"  ]; then
                /etc/init.d/keepalived stop
        fi
fi

配置192.168.13.54的keepalived
vi /etc/keepalived/keepalived.conf

! Configuration File for keepalived
global_defs {
notification_email {
t1@t2.com
 }
notification_email_from  iot@iot.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id ZABBIX_HA
 }
vrrp_instance VI_1 {
 state MASTER
 interface eth0
 virtual_router_id 55
 priority 100
 advert_int 1
 nopreempt
 authentication {
 auth_type PASS
 auth_pass 1111
 }
 virtual_ipaddress {
 192.168.13.59
 }
}
virtual_server 192.168.13.59 10051 {
 delay_loop 2
 persistence_timeout 50
 protocol TCP
 real_server 192.168.13.54 10051 {
 weight 3
 notify_down /etc/keepalived/zabbix.sh
 TCP_CHECK {
 connect_timeout 3
 nb_get_retry 3
 delay_before_retry 3
  }
}
}

配置192.168.13.55的keepalived
vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived
global_defs {
notification_email {
t1@t2.com
 }
notification_email_from  iot@iot.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id ZABBIX_HA
 }
vrrp_instance VI_1 {
 state BACKUP
 interface eth0
 virtual_router_id 55
 priority 90
 advert_int 1
 authentication {
 auth_type PASS
 auth_pass 1111
 }
 virtual_ipaddress {
 192.168.13.59
 }
}
virtual_server 192.168.13.59 10051 {
 delay_loop 2
 persistence_timeout 50
 protocol TCP
 real_server 192.168.13.55 10051 {
 weight 3
 notify_down /etc/keepalived/zabbix.sh
 TCP_CHECK {
 connect_timeout 3
 nb_get_retry 3
 delay_before_retry 3
  }
}
}

为防止脑裂,在备机上运行一个检测脚本,主备之间做了SSH互信,也可以将此脚本放入keepalived中检测。此处略;

n2=`ps aux|grep zabbix|grep server |grep -v grep |wc -l`
n=`ssh 192.168.13.54 "ps aux|grep zabbix|grep server " |grep -v grep |wc -l`
echo $n
echo $n2
if [ $n2 -gt 1 ]
then
{
echo "192.168.13.55 BACKUP server is alived ,plz chech 192.168.13.54 MASTER STATUS"
if [ $n -gt 1 ]
then
{
echo $n
echo `date`
echo "192.168.13.54 master server is alived"
echo "Will shut down zabbix-server on localhost"
systemctl stop zabbix-server

}
else
{
echo "192.168.13.54 master server is not alived"
echo `date`
}
fi
}
fi

配置完keepalived,再分别两台服务器上安装zabbix-server
按照官方文档一步步安装
rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
yum clean all
yum install zabbix-server-mysql zabbix-agent
yum install centos-release-scl
sed -i ‘s/enabled=0/enabled=1/g’ /etc/yum.repos.d/zabbix.repo
yum install zabbix-web-mysql-scl zabbix-apache-conf-scl
导入数据库
zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix
修改/ect/zabbix/zabbix_server.conf配置文件,关键部分
DBHost=192.168.13.57
DBName=zabbix
DBSchema=zabbix
DBUser=zabbix
DBPassword=zabbix
修改php配置文件/etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf

echo "php_value[date.timezone] = Asia/Shanghai" >> /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf

搞定
systemctl restart zabbix-server zabbix-agent httpd rh-php72-php-fpm
systemctl enable zabbix-server zabbix-agent httpd rh-php72-php-fpm

三、安装proxy,类似server

##https://www.zabbix.com/documentation/5.0/zh/manual/installation/install_from_packages/rhel_centos
rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
yum clean all
yum install -y zabbix-proxy-mysql
yum -y install mariadb mariadb-server
systemctl start mariadb
###mariadb 5.5 root 默认密码为空,也可以用上面的一键安装脚本(mysql8)
mysql -e "create database zabbix default character set utf8;"
mysql -e "grant all privileges on zabbix.* to zabbix@'localhost' identified by 'zabbix';"
mysql -e "grant all privileges on zabbix.* to zabbix@'%' identified by 'zabbix';"

zcat /usr/share/doc/zabbix-proxy-mysql*/schema.sql.gz | mysql -uzabbix -pzabbix zabbix

sed -i 's/Server=127.0.0.1/Server=192.168.13.59/g' /etc/zabbix/zabbix_proxy.conf
sed -i 's/ServerActive=127.0.0.1/ServerActive=192.168.13.59/g' /etc/zabbix/zabbix_proxy.conf
echo "Timeout=30" >>/etc/zabbix/zabbix_proxy.conf
sed -i "s/Hostname=Zabbix proxy/Hostname="`hostname`"/g" /etc/zabbix/zabbix_proxy.conf
sed -i 's/DBName=zabbix_proxy/DBName=zabbix/g' /etc/zabbix/zabbix_proxy.conf
sed -i 's/StatsAllowedIP=127.0.0.1/StatsAllowedIP=0.0.0.0/g' /etc/zabbix/zabbix_proxy.conf
cat >> /etc/zabbix/zabbix_proxy.conf <<EOF
StartPollers=500
StartPollersUnreachable=50
StartTrappers=30
StartDiscoverers=6
CacheSize=1G
StartDBSyncers=20
HistoryCacheSize=512M
DBPassword=zabbix
EOF


service zabbix-proxy start
systemctl enable zabbix-proxy


yum -y install wget telnet net-tools sysstat psmisc
yum -y install libaio
yum -y install ncurses-compat-libs
yum -y install gcc
systemctl disable firewalld
systemctl stop firewalld
setenforce 0

echo "* soft nofile 65535"  >> /etc/security/limits.conf
echo "* hard nofile 65535"  >> /etc/security/limits.conf

最后web页面添加代理,完成各种配置

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值