一、双击主备集群

keepalived出现主备机同时绑定vip_运维


a82c0d4.png)

用户通过浏览器访问keepalived提供的虚拟ip,keepalived会将所有请求默认转到主服务器的nginx,当主服务器的nginx在某一时刻挂掉后,keepalived便将请求切换到备服务器的nginx,当主服务的keepalived启动后,便将请求主动切换到主服务器上。

实现:

  1. 安装nginx和keepalived
  2. 启动nginx

keepalived出现主备机同时绑定vip_运维_02

  1. 编辑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
  1. 启动主服务器和备份服务器的keepalived systemctl start keepalived.service 启动之后执行ip addr,就会看到此时的虚拟ip挂载到keepalived上了
  2. keepalived出现主备机同时绑定vip_优先级_03

  3. 访问虚拟ip,可见访问的是主服务器
  4. keepalived出现主备机同时绑定vip_服务器_04

  5. 将主服务器的keepalived 进程杀掉,再次访问虚拟ip
  6. keepalived出现主备机同时绑定vip_服务器_05


  7. keepalived出现主备机同时绑定vip_运维_06

  8. 当备服务器检测到主服务器的keepalived的有或者时,下次请求将直接请求到主服务器上。

二、双主热备集群架构

双机主备已经实现,这样会产生一个问题,如果主服务器一直不宕机,那么备份服务器一直处于空闲

keepalived出现主备机同时绑定vip_服务器_07

双主热备的实现原理:生成两个虚拟ip,两个虚拟ip,将由DNS轮询(在云服务上配置,云服务器通过轮询+权重访问对于的虚拟ip),
如图:虚拟ip120的主服务器为128,备服务器为129
虚拟ip121的主服务器为129,备服务器为128
128 和 129 互为主备的关系。就不会造成空闲虚拟机

实现

  1. 编辑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
    }
}
  1. 分别启动两个虚拟机的keepalived systemctl start keepalived.service
  2. keepalived出现主备机同时绑定vip_nginx_08


keepalived出现主备机同时绑定vip_运维_09