MySQL + KeepAlived 双机热备搭建 + 邮件通知
搭建 MySQL 双主模式(互为主备模式),并使用 keepalived 进行对外服务。
注意:
1、这里准备的是两台机器(centos 7
),两台服务器同时互为对方的主节点(master
)和从节点(slave
)
两台服务器的 IP
分别为:192.168.12.64(mysql01)
、 192.168.12.65(mysql02)
,实际情况请自行对应。
2、搭建过程中请先关闭防火墙,以避免由于防火墙的问题导致无法访问的问题,实际生产环境中请根据需要机型开放防火墙。
安装 mysql
mysql安装对于大家来说都已经是轻车熟路了吧,这里我就不再赘述了。如有不清楚的小伙伴可以参照我之前的 mysql安装记录 进行安装。
配置主从关系
到这里意味着你的两台机器上的 mysql 实例已经安装完成,也可以正常使用了,接下来开始配置 mysql 实例之间的关系。
在两台机器上 添加如下所示配置
vi /etc/my.cnf
mysql01
添加如下所示配置信息
[mysqld]
#服务节点id,任意写,只要与组成节点的其他mysql配置中不同就可以
server-id=1
# 二进制文件名称,可设置为其他名称
log_bin=master-bin
# 自增步长,一般是集群由多少台组成就填写多少
auto_increment_increment=2
# 起始值
auto_increment_offset=1
# 忽略mysql安装时候已有的四个库,如果不在乎也可以不写一下四行
binlog_ignore_db=sys
binlog_ignore_db=mysql
binlog_ignore_db=information_schema
binlog_ignore_db=performance_schema
#希望同步的数据库,我这里写的是test,请根据实际情况修改,若不写此项则默认同步所有库
replicate_do_db=test
mysql02
添加如下所示配置信息
[mysqld]
server-id=2
log_bin=master-bin
auto_increment_increment=2
auto_increment_offset=2
binlog_ignore_db=sys
binlog_ignore_db=mysql
binlog_ignore_db=information_schema
binlog_ignore_db=performance_schema
replicate_do_db=test
使用mysql客户端登录mysql,添加并设置将用来拷贝的用户
- 两台服务器都需要执行以下操作(创建用户,重启mysql服务)
[root@mysql01 ~]# mysql -uroot -p
Enter password:
# 输入密码进入mysql 客户端
- 创建用户(如果使用root用户作为 拷贝数据的用户可以忽略此步,但不建议这么做)
use mysql;
# 创建一个名为test的用户,密码也为test,并且允许所有ip登录,实际情况请自行进行修改
create user 'test'@'%' identified by 'test';
# 这里图省事,直接赋予test所有的权限,实际情况请自行进行修改
grant all privileges on *.* to 'test'@'%';
# 服务 test 作为slave 拷贝的权限
grant replication slave on *.* to 'test'@'%';
# 刷新权限
flush privileges;
#退出mysql客户端并重启mysql
exit;
systemctl restrat mysqld
重启完成后,再次进入mysql,开始添加主从关系
信息同步:这里两台机器都应该在mysql客户端界面,确保已经都在客户端界面中,然后进行下面的操作
在 mysql01
中输入如下命令,查看主节点状态信息
show master status\G;
执行结果如下:
在 mysql02
上输入以下语句
# 先说明一下参数:MASTER_HOST 就是主节点的ip(这里是mysql01的ip地址)
# MASTER_USER 和 MASTER_PASSWORD 是之前创建的用户名和密码,这里也是mysql01上创建的
# MASTER_LOG_FILE 和 MASTER_LOG_POS 就是上图中框出来的数据,请对应修改
CHANGE MASTER TO
MASTER_HOST='192.168.12.64',
MASTER_USER='test',
MASTER_PASSWORD='test',
MASTER_LOG_FILE='master-bin.000005',
MASTER_LOG_POS=154;
# 开启从库
start slave;
# 查看工作状态
show slave status\G;
如果看到如下信息,那就证明你的主从配置已经成功生效了。
到此,一主一从的模式已经完成了。接下来需要配置 mysql02
为 mysql01
的主节点
在 mysql02
中输入如下命令,查看主节点状态信息
show master status\G;
在 mysql01
上输入以下语句(记得修改对应的数据)
CHANGE MASTER TO
MASTER_HOST='192.168.12.65',
MASTER_USER='test',
MASTER_PASSWORD='test',
MASTER_LOG_FILE='master-bin.000004',
MASTER_LOG_POS=394;
start slave;
到此两台mysql实例的互为主从已经配置完成。
安装 keepalived
keepalived 可以选择使用yum 命令安装或着 使用二进制包进行安装,这里就直接使用命令进行安装了
关闭安全监测模块
vi /etc/selinux/config
将SELINUX=enforcing
改为SELINUX=disabled
,退出保存。重启后生效。
输入命令 setenforce 0
,先临时生效。
- keepalived 安装命令
yum install -y keepalived
安装完成后,会在 /etc/keepalived
目录下有个名为 keepalived.conf
配置文件
mysql 状态监测脚本
# 创建一个脚本,用于监测mysql是否正常运行, 存放的目录请随意,只要你自己知道就行
vi mysql_check.sh
# 文件内容(不要漏掉 #!/bin/bash)
#!/bin/bash
C=`ps -C mysqld --no-header | wc -l`
if [ $C -eq 0 ];then
systemctl kill keepalived
fi
修改配置文件(两台都要修改)
vi /etc/keepalived/keepalived.conf
# 修改配置如下就可完成双机热备的 IP 漂移配置
global_defs {
vrrp_mcast_group4 224.0.0.18
}
vrrp_script check_mysql {
script "/opt/mysql-check.sh" #脚本存放位置
internal 2 #执行时间(周期,单位:秒)
}
vrrp_instance DB {
state MASTER #这里主节点为 MASTER,其余的节点(备用节点)修改为 BACKUP
interface ens192 #网卡名称根据实际情况修改
virtual_router_id 51
priority 100 #节点的权重,主节点需要大于备用节点(数字越大,权重越高,优先级越高)
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
192.168.12.70 #这里是 漂移地址,主备节点一致
}
track_script {
check_mysql
}
}
启动 keepalived
systemctl start keepalived
# 查看一下主节点的ip地址时候多出了新增的虚拟地址
ifconfig
到此,双击热备(互为主从的mysql集群)已经搭建完成,可以手动关闭主节点看看,是否可以正常的切换无感知。
增加邮件通知功能
当实际生产环境中出现机器切换时,应该需要通知到对应的人员,所以这里再添加一个邮件通知的功能
安装邮件发送服务
yum install -y mailx
配置发件人信息
vi /etc/mail.rc
set from=xxx@163.com
set smtp=smtp.163.com
set smtp-auth-user=xxx@163.com
set smtp-auth-password=xxxx #163的邮箱要求填写的是授权码,其他邮箱请另作修改
set smtp-auth=login
set ssl-verify=ignore
邮件发送脚本
vi sendMail.sh
# 文件内容(不要漏掉 #!/bin/bash)
#!/bin/bash
contact='destnation' # 收件人
notify() {
mailsubject="$(hostname) to be $1, vip floating"
mailbody="$(date +'%F %T'): vrrp transition, $(hostname) changed to be $1"
echo "$mailbody" | mail -s "$mailsubject" $contact
}
case $1 in
master)
notify master
;;
backup)
notify backup
;;
*)
echo "Usage: $(basename $0) {master|backup}"
exit 1
;;
esac
修改keepalived配置
其实只是添加两行配置 (邮件发送位置自行修改)
notify_master "/bin/bash /opt/sendMail.sh master"
notify_backup "/bin/bash /opt/sendMail.sh backup"
完整的配置文件如下:
global_defs {
vrrp_mcast_group4 224.0.0.18
}
vrrp_script check_mysql {
script "/opt/mysql-check.sh" #脚本存放位置
internal 2 #执行时间(周期,单位:秒)
}
vrrp_instance DB {
state MASTER #这里主节点为 MASTER,其余的节点(备用节点)修改为 BACKUP
interface ens192 #网卡名称根据实际情况修改
virtual_router_id 51
priority 100 #节点的权重,主节点需要大于备用节点(数字越大,权重越高,优先级越高)
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
192.168.12.70 #这里是 漂移地址,主备节点一致
}
track_script {
check_mysql
}
notify_master "/bin/bash /opt/sendMail.sh master"
notify_backup "/bin/bash /opt/sendMail.sh backup"
}
修改完配置之后被忘记重启 keepalived 服务!!!
到此,mysql(双主)+keepalived(热备) + 邮件通知 已经完成搭建!
欢迎给位大佬留言、交流!!!