Zabbix高可用搭建系列:
一、Zabbix高可用架構
二、編譯安裝Zabbix
三、實現Zabbix高可用
四、MySQL主主同步與高可用
1.主主同步
Master:192.168.164.152
~]# cat /etc/my.cnf #我們這兒使用GTID實現複製
[mysqld]
datadir = /opt/mysql/data
basedir = /opt/mysql
socket = /tmp/mysql.sock
symbolic-links = 0
skip-name-resolve
slave_skip_errors = 1062 #跳過1062錯誤, 1062錯誤是指一些主鍵重複
server_id = 1 #數據庫唯一ID,主從ID不能相同
log-bin = /opt/mysql/log/binary-log #開啓binlog日誌
relay-log = /opt/mysql/log/relay-log #開啓relay日誌
binlog_format = mixed #複製模式,混合複製
sync_binlog = 1 #開啓binlog日誌同步到磁盤
auto-increment-increment = 2 #自增步長
auto-increment-offset = 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
gtid_mode=on #啓用GTID複製
enforce_gtid_consistency=on
[mysqld_safe]
log-error=/opt/mysql/log/error.log
pid-file=/opt/mysql/data/mysql.pid
!includedir /etc/my.cnf.d
mysql> grant replication slave on *.* to 'zabbixM'@'192.168.164.153' identified by 'zabbixM'; #給backup同步master數據創建用戶
mysql> flush privileges;
~]# service mysqld restart
Backup:192.168.164.153
~]# cat /etc/my.cnf
[mysqld]
datadir = /opt/mysql/data
basedir = /opt/mysql
socket = /tmp/mysql.sock
symbolic-links = 0
skip-name-resolve
slave_skip_errors = 1062
server_id = 2
log-bin = /opt/mysql/log/binary-log
relay-log = /opt/mysql/log/relay-log
binlog_format = mixed
sync_binlog = 1
auto-increment-increment = 2
auto-increment-offset = 2
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
gtid_mode=on
enforce_gtid_consistency=on
[mysqld_safe]
log-error=/opt/mysql/log/error.log
pid-file=/opt/mysql/data/mysql.pid
!includedir /etc/my.cnf.d
mysql> grant replication slave on *.* to 'zabbixB'@'192.168.164.152' identified by 'zabbixB'; #給master同步backup創建用戶
mysql> flush privileges;
~]# service mysqld restart
實現同步:
mysql> change master to #master連接backup
master_host='192.168.164.153',
master_port=3306,
master_auto_position=1;
mysql> start slave user='zabbixB' password='zabbixB'; #啓動同步
mysql> show slave status\G; #看到IO與SQL線程起來就OK
...
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
...
mysql> show processlist;
mysql> change master to #backup連接master
master_host='192.168.164.152',
master_port='3306',
master_auto_position=1;
mysql> start slave user='zabbixM' password='zabbixM'; #開啓同步
2.實現MySQL故障轉移
Master:192.168.164.152
~]# yum install -y keepalived
~]# cat /etc/keepalived/keepalived.conf #給mysql做高可用
! Configuration File for keepalived
global_defs {
router_id mnode1
}
vrrp_script check_mysql {
script "/etc/keepalived/check_mysql.sh"
interval 2
weight -15
fall 2
rise 2
}
vrrp_instance mysql {
state MASTER
interface ens32
virtual_router_id 66
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass mysql.com
}
virtual_ipaddress {
192.168.164.200
}
track_script {
check_mysql
}
}
~]# cat /etc/keepalived/check_mysql.sh #mysql檢測腳本
#!/bin/bash
# check mysql is alived
# author by chuan
STATUS_1=`ps -C mysqld --no-header | wc -l`
if [ $STATUS_1 -eq 0 ];then
service mysqld start
sleep 10
STATUS_2=`ps -C mysqld --no-header | wc -l`
if [ $STATUS_2 -eq 0 ];then
exit 1
fi
fi
~]# systemctl restart keepalived
Backup:192.168.164.153
~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id mnode2
}
vrrp_script check_mysql {
script "/etc/keepalived/check_mysql.sh"
interval 2
weight -15
fall 2
rise 2
}
vrrp_instance mysql {
state BACKUP
interface ens32
virtual_router_id 66
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass mysql.com
}
virtual_ipaddress {
192.168.164.200
}
track_script {
check_mysql
}
}
~]# systemctl restart keepalived
至此,我們這套環境就已經搭建成功了!!