centos7部署nginx高可用
Keepalived 简要介绍
Keepalived 是一种高性能的服务器高可用或热备解决方案, Keepalived 可以用来防止服务器单点故障的发生,通过配合 Nginx 可以实现 web 前端服务的高可用。
Keepalived 以 VRRP 协议为实现基础,用 VRRP 协议来实现高可用性(HA)。 VRRP(Virtual RouterRedundancy Protocol)协议是用于实现路由器冗余的协议, VRRP 协议将两台或多台路由器设备虚拟成一个设备,对外提供虚拟路由器 IP(一个或多个),而在路由器组内部,如果实际拥有这个对外 IP 的路由器如果工作正常的话就是 MASTER,或者是通过算法选举产生, MASTER 实现针对虚拟路由器 IP 的各种网络功能,如 ARP 请求, ICMP,以及数据的转发等;其他设备不拥有该虚拟 IP,状态是 BACKUP,除了接收 MASTER 的VRRP 状态通告信息外,不执行对外的网络功能。当主机失效时, BACKUP 将接管原先 MASTER 的网络功能。VRRP 协议使用多播数据来传输 VRRP 数据, VRRP 数据使用特殊的虚拟源 MAC 地址发送数据而不是自身网卡的 MAC 地址, VRRP 运行时只有 MASTER 路由器定时发送 VRRP 通告信息,表示 MASTER 工作正常以及虚拟路由器 IP(组), BACKUP 只接收 VRRP 数据,不发送数据,如果一定时间内没有接收到 MASTER 的通告信息,各 BACKUP 将宣告自己成为 MASTER,发送通告信息,重新进行 MASTER 选举状态。
一、部署Web,这里使用openresty
cd /usr/local/src/openresty yum -y install pcre-devel openssl openssl-devel yum install -y gcc gcc-c++ zlib-devel pcre-devel openssl-devel readline-devel wget https://openresty.org/download/openresty-1.9.7.5.tar.gz tar xzvf openresty-1.9.7.5.tar.gz cd openresty-1.9.7.5 ./configure --prefix=/opt/openresty --with-pcre --with-http_ssl_module --with-openssl --with-luajit ./configure --prefix=/data/openresty --with-luajit --with-http_iconv_module --with-http_realip_module --with-http_stub_status_module --with-http_ssl_module --with-http_sub_module gmake && gmake install
二、配置nginx代理后端应用
省略
三、配置keepalived
yum install -y keepalived
配置keepalived
3.1、主nginx配置
more /etc/keepalived/keepalived.conf
! Configuration File for keepalived global_defs { notification_email { root@localhost #定义邮箱报警的邮箱地址 } notification_email_from root@localhost #定义发送报警信息的地址 smtp_server 127.0.0.1 #定义发送邮件的邮件服务器地址 smtp_connect_timeout 30 #定义发送邮件的超时时间 router_id ha_nginx #全局标识 } vrrp_script chk_nginx { #定义检查nginx服务的脚本 script "/etc/keepalived/chk_nginx.sh" #脚本重启nginx,如果进程还是无法检测到,则强制停止keepalived interval 2 #检查的间隔时间 weight -2 #检查失败的话权重减2 fall 2 #检查失败2次才认为是真正的检查失败 } vrrp_instance VI_1 { state MASTER interface ens33 virtual_router_id 51 priority 100 #备用机器的keepalived的权重要小于这个权重,并且当nginx服务挂掉后100-2要小于备用机器的权重。 advert_int 1 smtp_alert #比较重要 定义使用邮件发送,不然上面的邮件定义都是没有用的,使用了这个当状态发生改变就会发送邮件报警 authentication { auth_type PASS auth_pass 1111 } track_script { #定义使用哪个脚本来检查。 chk_nginx } virtua 4fc0 l_ipaddress { 10.0.0.100/16 } }
3.2、从nginx配置
more /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { notification_email { root@localhost #定义邮箱报警的邮箱地址 } notification_email_from root@localhost #定义发送报警信息的地址 smtp_server 127.0.0.1 #定义发送邮件的邮件服务器地址 smtp_connect_timeout 30 #定义发送邮件的超时时间 router_id ha_nginx #全局标识 } vrrp_script chk_nginx { #定义检查nginx服务的脚本 script "/etc/keepalived/chk_nginx.sh" #脚本重启nginx,如果进程还是无法检测到,则强制停止keepalived interval 2 #检查的间隔时间 weight -2 #检查失败的话权重减2 fall 2 #检查失败2次才认为是真正的检查失败 } vrrp_instance VI_1 { state BACKUP interface eno16777736 virtual_router_id 51 priority 99 #备用机器的keepalived的权重要小于这个权重,并且当nginx服务挂掉后100-2要小于备用机器的权重。 advert_int 1 smtp_alert #比较重要 定义使用邮件发送,不然上面的邮件定义都是没有用的,使用了这个当状态发生改变就会发送邮件报警 authentication { auth_type PASS auth_pass 1111 } track_script { #定义使用哪个脚本来检查。 chk_nginx } virtual_ipaddress { 10.0.0.100/16 } }
需要授权644;不然会报错
chmod 644 /etc/keepalived/keepalived.conf
解决nginx进程和keepalived不同时存在问题
keepalived是通过检测keepalived进程是否存在判断服务器是否宕机,如果keepalived进程在但是nginx进程不在了那么keepalived是不会做主备切换,所以我们需要写个脚本来监控nginx进程是否存在,如果nginx不存在就将keepalived进程杀掉。
四、配置检测nginx进程脚本
more /etc/keepalived/chk_nginx.sh
#!/bin/bash # 如果进程中没有nginx则将keepalived进程kill掉 A=`ps -C nginx --no-header |wc -l` ## 查看是否有 nginx进程 把值赋给变量A if [ $A -eq 0 ];then ## 如果没有进程值得为 零 systemctl stop keepalived.service ## 则结束 keepalived 进程 fi 或者使用这个脚本(因为上面那个脚本不完善;没有自动启动nginx) #!/bin/bash A=`ps -C nginx --no-heading | wc -l` if [ $A -eq 0 ];then /home/www/nginx/sbin/nginx sleep 2 if [ `ps -C nginx --no-heading | wc -l` -eq 0 ];then killall keepalived fi fi
添加执行权限
chmod +x /etc/keepalived/nginx_check.sh
说明:
check_nginx.sh 要在/etc/keepalived目录下
脚本测试:
将nginx停止,将keepalived启动,执行脚本:sh /etc/keepalived/check_nginx.sh
会自动杀掉keepalived进程
一旦主节点恢复,则VIP会直接漂回去,因为我们配置的抢占模式
验证web
for i in {1..10};do curl -I http://10.0.0.100/index.html;done
五、配置supervisor守护keepalived
more /etc/supervisor/conf.d/keepalived.conf [program:keepalived] command=keepalived -n stderr_logfile=/data/keepalived/log/keepalived.error.log stdout_logfile=/data/keepalived/log/keepalived.log user=root stopsignal=INT autostart=true autorestart=true startsecs=5
生效配置文件
supervisorctl update supervisorctl restart keepalived
- 013.Kubernetes二进制部署worker节点Nginx实现高可用
- nginx高可用实现部署详细文档
- CentOS7安装Nginx并部署
- Centos7部署nginx+keepalived负载均衡高可用+linux开机nginx自动开启及开放nginx端口
- keepalived入门之nginx高可用部署 (应用篇)
- 全面掌握Nginx配置+快速搭建高可用架构 一 Centos7 安装Nginx
- nginx高可用实现部署详细文档
- 使用ansible结合keepalived高可用,nginx反向代理部署小型企业环境
- CentOS7安装部署Shipyard管理系统(亲测可用)
- Centos7部署keepalived高可用架构
- Centos7部署springboot+vue前后端分离项目的环境准备(MySQL8.0+JDK11+nginx)
- nginx,keepalived高可用部署
- Centos7部署nginx
- keepalived+nginx实现高可用负载均衡部署
- Centos7部署Nginx负载均衡Tomcat服务器及session共享架构
- 转发【CentOS7搭建NGINX+KEEPALIVEDG高可用服务器实验结果】
- Centos7部署zabbix4.4 + mysql5.7 + nginx
- Centos 7部署docker+nginx+keepalived实现高可用web集群
- centos7下部署Django(nginx+uwsgi+python3+django)
- 实践:在CentOS7.3部署 keepalived 高可用nginx(负载均衡)