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
安装基础依赖包
yum install -y gcc openssl-devel libnl libnl-devel libnfnetlink-devel net-tools vim
两台服务器都安装 keepalived
yum install keepalived –y
#在官网下载最新版 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模块参数
notification_email : keepalived在发生诸如切换操作时需要发送email通知地址,后面的 smtp_server 相比也都知道是邮件服务器地址。也可以通过其它方式报警,毕竟邮件不是实时通知的。 router_id : 机器标识,通常可设为hostname。故障发生时,邮件通知会用到。
- vrrp_instance模块参数
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
script : 自己写的检测脚本。也可以是一行命令如killall -0 nginx interval 2: 每2s检测一次 weight -5 : 检测失败(脚本返回非0)则优先级 -5 fall 2: 检测连续 2 次失败才算确定是真失败。会用weight减少优先级(1-255之间) rise 1 : 检测 1 次成功就算成功。但不修改优先级
修改/etc/keepalived/keepalivec.conf 配置文件
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是否还活着
#!/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 启动
启动 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
标签:script,etc,keepalived,nginx,主备,usr,local From: https://www.cnblogs.com/boye169/p/18570294