随笔- 310  文章- 1  评论- 0  阅读- 85837 

keepalived简介

反向代理及负载均衡参考:nginx反向代理与负载均衡
当你了解会搭建nginx负载均衡后,需要考虑nginx这台服务器的安全性啦,如果只有一台,这台nginx一出问题,web就会无法访问的情况,所以为了应对这种情况,就需要两台nginx做主备服务器。
nginx+keepalived如下图所示

 在nginx服务安装keepalived

如何配置
1、需要的环境
两台 Linux 并各自安装 Nginx 和 keepalived

2、配置高可用的准备工作
(1)需要两台服务器 192.168.17.129 、192.168.17.131
(2)在两台服务器安装 Nginx
(3)在两台服务器安装 keepalived

安装基础依赖包

1
yum install -y gcc openssl-devel libnl libnl-devel libnfnetlink-devel net-tools vim

两台服务器都安装 keepalived

1
yum install keepalived –y
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#在官网下载最新版
wget https://www.keepalived.org/software/keepalived-2.2.2.tar.gz
#解压到指定目录,并重命名
tar -zxvf keepalived-2.2.2.tar.gz
mv keepalived-2.2.2 /usr/local/keepalived
#进入目录编译安装
cd /usr/local/keepalived/
./configure
make && make install
 
#复制相关文件到系统中
mkdir /etc/keepalived
cp /usr/local/keepalived/keepalived/etc/init.d/keepalived /etc/init.d/
cp /usr/local/keepalived/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
cp /usr/local/keepalived/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
cp /usr/local/sbin/keepalived /usr/sbin/
 
#启动测试
/etc/init.d/keepalived start

  

完成高可用配置(主从配置)

基础三个模块,global_defs全局模块,vrrp_instance配置vip模块,vrrp_script 脚本模块,用来检测nginx服务

  • global_defs模块参数
1
2
notification_email : keepalived在发生诸如切换操作时需要发送email通知地址,后面的 smtp_server 相比也都知道是邮件服务器地址。也可以通过其它方式报警,毕竟邮件不是实时通知的。
router_id : 机器标识,通常可设为hostname。故障发生时,邮件通知会用到。

  

  • vrrp_instance模块参数
1
2
3
4
5
6
7
8
9
state : 指定instance(Initial)的初始状态, MASTER 或者BACKUP,不是唯一性的,跟后面的优先级priority参数有关。
interface : 实例绑定的网卡,因为在配置虚拟IP的时候必须是在已有的网卡上添加的,(注意自己系统,我的默认是ens33,有的是eth0)
mcast_src_ip : 发送多播数据包时的源IP地址,这里注意了,这里实际上就是在那个地址上发送VRRP通告,这个非常重要,一定要选择稳定的网卡端口来发送,这里相当于heartbeat的心跳端口,如果没有设置那么就用默认的绑定的网卡的IP,也就是interface指定的IP地址
virtual_router_id : 这里设置VRID,这里非常重要,相同的VRID为一个组,他将决定多播的MAC地址
priority: 设置本节点的优先级,优先级高的为master(1-255)
advert_int : 检查间隔,默认为1秒。这就是VRRP的定时器,MASTER每隔这样一个时间间隔,就会发送一个advertisement报文以通知组内其他路由器自己工作正常
authentication : 定义认证方式和密码,主从必须一样
virtual_ipaddress : 这里设置的就是VIP,也就是虚拟IP地址,他随着state的变化而增加删除,当state为master的时候就添加,当state为backup的时候删除,这里主要是有优先级来决定的,和state设置的值没有多大关系,这里可以设置多个IP地址
track_script: 引用VRRP脚本,即在 vrrp_script 部分指定的名字。定期运行它们来改变优先级,并最终引发主备切换。

  

  • vrrp_script模块参数

告诉 keepalived 在什么情况下切换,所以尤为重要。可以有多个 vrrp_script

1
2
3
4
5
script : 自己写的检测脚本。也可以是一行命令如killall -0 nginx
interval 2: 每2s检测一次
weight -5 : 检测失败(脚本返回非0)则优先级 -5
fall 2: 检测连续 2 次失败才算确定是真失败。会用weight减少优先级(1-255之间)
rise 1 : 检测 1 次成功就算成功。但不修改优先级

  

修改/etc/keepalived/keepalivec.conf 配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
global_defs {
     notification_email {
         acassen@firewall.loc
         failover@firewall.loc
         sysadmin@firewall.loc
     }
     notification_email_from Alexandre.Cassen@firewall.loc
     smtp_server 192.168.17.129
     smtp_connect_timeout 30
     # 通过它,可以访问到主机,在hosts文件中,要做映射关系,类似于 127.0.0.1 LVS_DEVEL
     router_id LVS_DEVEL 
}
 
vrrp_script chk_http_port {
     script "/usr/local/src/nginx_check.sh"  # 执行脚本所在的位置
     interval 2     #检测脚本执行的间隔,单位秒,每个2秒执行一次脚本
     weight 2
}
     
vrrp_instance VI_1 {
     state MASTER    # 备份服务器上将 MASTER 改为 BACKUP
     interface ens33     # 绑定的网卡
     virtual_router_id 51    # 主、备机的 virtual_router_id 必须相同
     priority 90    # 主、备机取不同的优先级,主机值较大,备份机值较小
     advert_int 1   #每隔一秒发送一次心跳,确保从服务器是否还活着
     authentication {       # 心跳检测需要的密码
         auth_type PASS
         auth_pass 1111
    }
     virtual_ipaddress {
     192.168.17.50  # VRRP H 虚拟地址
     }   track_script {     check_nginx    }
}

在/usr/local/src 添加检测脚本,检查Nginx是否还活着 

1
2
3
4
5
6
7
8
9
#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
 /usr/local/nginx/sbin/nginx    #Nginx启动命令的位置
 sleep 2
 if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
 killall keepalived
 fi
fi

把两台服务器上 nginx 和 keepalived 启动 

1
2
启动 nginx:   ./nginx
启动 keepalived:  systemctl start keepalived.service

可以使用ipconfig,查看虚拟Ip的绑定

 最终测试

在浏览器地址栏输入 虚拟 ip 地址 192.168.17.50

 

 把主服务器上的(192.168.17.129)Nginx 和 keepalived 停止,再输入 192.168.17.50,依旧可以访问Nginx

 

 

 posted on   boye169  阅读(817)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
点击右上角即可分享
微信分享提示