Nginx+Lvs+keepAlived构建高可用集群环境
1.知识点介绍
LVS基本介绍:
LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。
LVS的核心可以实现虚拟vip,实现对Nginx负载均衡功能
keepAlived基本介绍:
keepAlived对服务器状态检测和故障隔离基于LVS+keepAlived可以高可用的集群环境
lvs与Nginx与keepAlived 的工作原理:
LVS是四层负载均衡基于ip+端口实现负载均衡,用作管理我们nginx的集群通过vip转发到对应nginx做负载均衡
Nginx是基于应用层Http层实现负载均衡,Nginx 管理的是我们的服务器集群
LVS相比Nginx实现负载均衡抗负载能力更加强、稳定、配置低
keepAlived 是对我们的lvs实现扩展功能,对我们应用程序监听、心跳检测、自动重启脚本;
总结: 客户端请求先达到LVS虚拟vip地址,在通过lvs实现负载均衡转发到nginx服务器,nginx服务器在转发到真实上游服务器;
Keepalived监听我们的nginx是否宕机,如果是为宕机状态自动帮助我们重启;如果重启多次情况还是失败的情况下,以发送邮件的形式通知给运维人员(报警)
2.Linux环境下载keepAlived
linux下安装nginx请参考https://blog.youkuaiyun.com/jzc12345611/article/details/100702335
1.下载keepalived
wget http://www.keepalived.org/software/keepalived-1.2.18.tar.gz
2.解压安装:
tar -zxvf keepalived-1.2.18.tar.gz -C /usr/local/
3.下载插件openssl
yum install -y openssl openssl-devel(需要安装一个软件包)
4.开始编译keepalived
cd keepalived-1.2.18/ && ./configure --prefix=/usr/local/keepalived
5.make一下
make && make install
常见错误1
执行yum install 报错如下:
File contains no section headers.
解决方案:
步骤1
删除yum.repos.d目录下所有文件
rm -f /etc/yum.repos.d/*
步骤2
然后重新下载阿里的镜像
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
步骤3
清理缓存
yum clean all
步骤4
测试下载安装
yum install gcc
常见错误2
报错: eepalived执行./configure --prefix=/usr/local/keepalived时报错:configure: error: Popt libraries is required
出现此错误的原因:
未安装popt的开发包
解决方法:
yum install popt-devel
安装好popt的开发包。重新./configure 即可。
3.keepalived安装成Linux系统服务
将keepalived安装成Linux系统服务,因为没有使用keepalived的默认安装路径(默认路径:/usr/local),安装完成之后,需要做一些修改工作:
首先创建文件夹,将keepalived配置文件进行复制:
mkdir /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
然后复制keepalived脚本文件:
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/sbin/keepalived /usr/sbin/
ln -s /usr/local/keepalived/sbin/keepalived /sbin/
可以设置开机启动:
chkconfig keepalived on,
到此我们安装完毕!
Keepalived常用的命令
service keepalived start
service keepalived stop
systemctl stop firewalld
启动报错Starting keepalived (via systemctl): Job for keepalived.service failed. See ‘systemctl status keepalived.service’ and ‘journalctl -xn’ for details. 解决办法
cd /usr/sbin/
rm -f keepalived
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
4.配置Keepalived虚拟vip功能
vi /etc/keepalived/keepalived.conf
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh" #运行脚本,脚本内容下面有,就是起到一个nginx宕机以后,自动开启服务
interval 2 #检测时间间隔
weight -20 #如果条件成立的话,则权重 -20
}
5.添加启动脚本nginx_check.sh
vi /etc/keepalived/nginx_check.sh
#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
注意:第4步的脚本地址指向的路径要与创建nginx_check.sh的该脚本地址相同
6.定义虚拟路由,VI_1 为虚拟路由的标示符,自己定义名称
vrrp_instance VI_1 {
state MASTER #来决定主从
interface ens33 # 绑定虚拟 IP 的网络接口,根据自己的机器填写 用ifconfig或addr 查看自己的网路接口
virtual_router_id 121 # 虚拟路由的 ID 号, 两个节点设置必须一样
mcast_src_ip 192.168.133.120 #填写本机ip
priority 100 # 节点优先级,主要比从节点优先级高
nopreempt # 优先级高的设置 nopreempt 解决异常恢复后再次抢占的问题
advert_int 1 # 组播信息发送间隔,两个节点设置必须一样,默认 1s
authentication {
auth_type PASS
auth_pass 1111
}
# 将 track_script 块加入 instance 配置块
track_script {
chk_nginx #执行 Nginx 监控的服务
}
virtual_ipaddress {
192.168.133.110 # 虚拟ip,也就是解决写死程序的ip怎么能切换的ip,也可扩展,用途广泛,可配置多个。
}
}
7.nginx+keepalived简单双机主从热备
双机主从热备概述:
可以两台机子互为热备,平时各自负责各自的服务。在做上线更新的时候,关闭一台服务器的tomcat后,nginx自动把流量切换到另外一台服务的后备机子上,从而实现无痛更新,保持服务的持续性,提高服务的可靠性,从而保证服务器7*24小时运行。
Nginx+keepalived简单双机主从热备
每个服务虚拟安装keepalived 虚拟一个VIP ,配置主从关系,当主挂了,直接走备机。
虚拟VIP 192.168.133.110 vip虚拟地址的ip不能被占用且网段要与服务器网段一致
A 服务器 192.168.133.120
B 服务器 192.168.133.121
Nginx+keepalived实现高可用需要修改脚本访问权限
chmod 777 nginx_check.sh
注意阿里云默认不支持虚拟VIP技术
阿里云默认不支持虚拟VIP技术,
https://yq.aliyun.com/ask/61502
注:本文资源来源于蚂蚁课堂www.mayikt.com