一、双击主备集群
a82c0d4.png)
用户通过浏览器访问keepalived提供的虚拟ip,keepalived会将所有请求默认转到主服务器的nginx,当主服务器的nginx在某一时刻挂掉后,keepalived便将请求切换到备服务器的nginx,当主服务的keepalived启动后,便将请求主动切换到主服务器上。
实现:
- 安装nginx和keepalived
- 启动nginx
- 编辑keepalived的配置文件,路径在root下的/etc/keepalived/ 的keepalive.conf文件
主keepalived配置
! Configuration File for keepalived
# 全局配置
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.31.132 # 主机ip
smtp_connect_timeout 30
router_id LVS_DEVEL # 服务器域名,可以在etc/host中查看
}
# 检测脚本
vrrp_script chk_http_port {
script "/usr/local/src/nginx_check.sh" # 脚本路径
interval 2 # (检测脚本执行间隔,每2秒检测一次)
weight 2 # 设置服务器权重
}
# 虚拟IP配置
vrrp_instance VI_1 {
state MASTER # 备份服务器上将MASTER 改为BACKUP
interface ens33 # 网卡,可用 ip addr查看网卡名
virtual_router_id 51 # 主、备机的virtual_router_id必须相同
priority 100 # 主、备机取不同的的优先级,主机值较大,备份机值较小
advert_int 1 # 每一秒发送一次心跳
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.31.50 # VRRP H虚拟地址, 虚拟ip地址,用户浏览器访问,暴露给用户的,多台keepalived绑定一个ip;必须同一网段。
}
}
备份服务器配置
! Configuration File for keepalived
# 全局配置
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.31.131 # 主机ip
smtp_connect_timeout 30
router_id LVS_DEVEL # 服务器域名,可以在etc/host中查看
}
# 检测脚本
vrrp_script chk_http_port {
script "/usr/local/src/nginx_check.sh" # 脚本路径
interval 2 # (检测脚本执行间隔,每2秒检测一次)
weight 2 # 设置服务器权重
}
# 虚拟IP配置
vrrp_instance VI_1 {
state BACKUP # 备份服务器上将MASTER 改为BACKUP
interface ens33 # 网卡,可用 ip addr查看网卡名
virtual_router_id 51 # 主、备机的virtual_router_id必须相同
priority 90 # 主、备机取不同的的优先级,主机值较大,备份机值较小
advert_int 1 # 每一秒发送一次心跳
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.31.50 # VRRP H虚拟地址, 虚拟ip地址,用户浏览器访问,暴露给用户的,多台keepalived绑定一个ip;必须同一网段。
}
}
/usr/local/src/nginx_check.sh 脚本代码
#!/bin/bash
A=`ps -C nginx --no-header |wc -l`
# 判断 nginx 是否宕机,如果宕机了尝试重启
if [ $A -eq 0 ]; then
/usr/local/nginx/sbin/nginx
sleep 2
# 等待一小会,再次检查nginx, 如果没有启动成功,则停止keepalived 使其启用备用机器
if [ `ps -C nginx --no-header |wc -l` -eq 0];then
killall keepalived
fi
fi
- 启动主服务器和备份服务器的keepalived
systemctl start keepalived.service
启动之后执行ip addr
,就会看到此时的虚拟ip挂载到keepalived上了 - 访问虚拟ip,可见访问的是主服务器
- 将主服务器的keepalived 进程杀掉,再次访问虚拟ip
- 当备服务器检测到主服务器的keepalived的有或者时,下次请求将直接请求到主服务器上。
二、双主热备集群架构
双机主备已经实现,这样会产生一个问题,如果主服务器一直不宕机,那么备份服务器一直处于空闲
双主热备的实现原理:生成两个虚拟ip,两个虚拟ip,将由DNS轮询(在云服务上配置,云服务器通过轮询+权重访问对于的虚拟ip),
如图:虚拟ip120的主服务器为128,备服务器为129
虚拟ip121的主服务器为129,备服务器为128
128 和 129 互为主备的关系。就不会造成空闲虚拟机
实现
- 编辑keepalive的配置文件 /etc/keepalived/keepalived.conf
100主,101备
! Configuration File for keepalived
# 全局配置
global_defs {
# 路由id:当前安装的keepalived节点主机的表示符,全局唯一
router_id keep_136
}
vrrp_script chk_http_port {
script "/usr/local/src/nginx_check.sh"
interval 2
weight 2
}
# 虚拟ip 100 主机
vrrp_instance VI_1 {
# 表示状态,当前的136 为nginx的主节点 ,MASER/BACKUP
state MASTER
# 当前实例绑定的网卡
interface ens33
# 保证主备节点一致
virtual_router_id 51
# 优先级/ 权重,谁的优先级高,在master挂掉以后,他将称为master
priority 90
# 主备之间同步检查的时间问题,默认1s
advert_int 1
# 认证权限授权密码,防止非法节点的加入
authentication {
auth_type PASS
auth_pass 1111
}
# 定义虚拟ip
virtual_ipaddress {
192.168.31.100
}
}
# 虚拟ip 101 备机
vrrp_instance VI_2 {
# 表示状态,当前的136 为nginx的主节点 ,MASER/BACKUP
state BACKUP
# 当前实例绑定的网卡
interface ens33
# 保证主备节点一致
virtual_router_id 52
# 优先级/ 权重,谁的优先级高,在master挂掉以后,他将称为master
priority 80
# 主备之间同步检查的时间问题,默认1s
advert_int 1
# 认证权限授权密码,防止非法节点的加入
authentication {
auth_type PASS
auth_pass 1111
}
# 定义虚拟ip
virtual_ipaddress {
192.168.31.101
}
}
100 备,101主
! Configuration File for keepalived
# 全局配置
global_defs {
# 路由id:当前安装的keepalived节点主机的表示符,全局唯一
router_id keep_136
}
vrrp_script chk_http_port {
script "/usr/local/src/nginx_check.sh"
interval 2
weight 2
}
# 虚拟ip 100 主机
vrrp_instance VI_1 {
# 表示状态,当前的136 为nginx的主节点 ,MASER/BACKUP
state MASTER
# 当前实例绑定的网卡
interface ens33
# 保证主备节点一致
virtual_router_id 51
# 优先级/ 权重,谁的优先级高,在master挂掉以后,他将称为master
priority 90
# 主备之间同步检查的时间问题,默认1s
advert_int 1
# 认证权限授权密码,防止非法节点的加入
authentication {
auth_type PASS
auth_pass 1111
}
# 定义虚拟ip
virtual_ipaddress {
192.168.31.100
}
}
# 虚拟ip 101 备机
vrrp_instance VI_2 {
# 表示状态,当前的136 为nginx的主节点 ,MASER/BACKUP
state BACKUP
# 当前实例绑定的网卡
interface ens33
# 保证主备节点一致
virtual_router_id 52
# 优先级/ 权重,谁的优先级高,在master挂掉以后,他将称为master
priority 80
# 主备之间同步检查的时间问题,默认1s
advert_int 1
# 认证权限授权密码,防止非法节点的加入
authentication {
auth_type PASS
auth_pass 1111
}
# 定义虚拟ip
virtual_ipaddress {
192.168.31.101
}
}
- 分别启动两个虚拟机的keepalived
systemctl start keepalived.service