nginx+keepalived高可用
原理:
keepaived通过脚本去判断ng的存活状态,通过关闭自身进程去实现vip地址漂移
keepalived也可实现其他服务或多个服务的高可用,如mysql集群等
一、安装部署nginx
1、解压缩、进入安装目录
tar -zxvf nginx.tar
cd ./nginx
2、执行环境检查脚本,make编译安装
./configure
make && make install
2.1、故障排除
2.1.1、编译安装出现PCRE的错误
yum install pcre ; yum install pcre-devel*
2.1.2、执行./configure 编译环境错误
yum install gcc gcc-c++
2.1.3、安装出现zlib的错误
yum install zlib ; yum install zlib-devel*
3、编写keepalived所用的nginx存活检测脚本
vim check_nginx.sh
count=$(ps -ef |grep nginx |egrep -cv "grep|$$")
if [ "$count" -eq 0 ];then
systemctl stop keepalived
fi
4、编写nginx.conf文件,做反向代理和负载均衡(用于测试)
http {
upstream nacos-cluster {
server 192.168.0.3:8848;
server 192.168.0.4:8848;
server 192.168.0.5:8848;
}
server {
listen 80;
server_name localhost;
location /nacos {
proxy_pass http://nacos-cluster;
}
}
}
二、安装部署keepalived,集群内机器都要安装
1、配置本地镜像yum源,安装keepalived
yum install keepalived -y
2、编辑配置文件
vim /etc/keepalived/keepalived.conf
#注释以下这条,否则无法ping通虚拟ip地址
#vrrp_strict
#增加vrrp_script,定义vrrp的脚本check_nginx
vrrp_script check_nginx {
script "/usr/local/nginx/check_nginx.sh" #上面所写的用于检测nginx存活的脚本的路径
}
#修改vrrp_instance中注释的部分
vrrp_instance VI_1 {
state BACKUP/MASTER #此处指定节点为master或backup,由优先级区分
interface ens33 #网卡名
virtual_router_id 51 #集群内机器都为统一的router id
priority 90 #优先级,MASTER为100, BACKUP为90,如有多个backup则优先级递归缩减
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.100 #配置虚拟IP,集群内机器都配置统一虚拟ip
}
track_script { #跟踪脚本,会调用此脚本
check_nginx
}
}
三、启动,测试
1、先启动nginx
./nginx/sbin -c ./nginx/conf/nginx.conf
2、启动keepalived
systemctl start keepalived
3、ip addr查看是否创建成功vip
注:ifconfig查看不到
2: ens33: <BROADCAST,MULTICAST,UP,LOWERUP> mtu 1500 qdisc pfifofast state UP group default qlen 1000
link/ether 00:0c:29:bf:35:ca brd ff:ff:ff:ff:ff:ff
inet 192.168.1.133/24 brd 192.168.1.255 scope global noprefixroute dynamic ens33
validlft 1285sec preferredlft 1285sec
inet 192.168.1.100/32 scope global ens33
4、关闭nginx测试IP地址漂移
kill -9 "nginx-pid"
ssh root@backup
ip addr #如有vip则漂移成功