Nginx+Keepalived高可用集群部署详细文档

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
EMR Serverless StarRocks,5000CU*H 48000GB*H
应用型负载均衡 ALB,每月750个小时 15LCU
简介: Nginx+Keepalived高可用集群部署详细文档

系统

两台Nginx:CentOS6.5 x86_64

两台tomcat:CentOS6.5 x86_64

拓扑

 

机器IP

安装软件

角色

虚拟ip

描述

192.168.15.132

Nginx、keepalived

Nginx主机

192.168.15.135

反向代理到tomcat1和tomcat2

192.168.15.133

Nginx、keepalived

Nginx备机

主机挂了切换虚拟ip 192.168.15.135

反向代理到tomcat1和tomcat2

192.168.15.128

Tomcat

Tomcat1

 

192.168.15.30

Tomcat

Tomcat2

 

IP地址

nginx(LB):192.168.15.132

nginx(备LB):192.168.15.133

VIP地址:192.168.15.135

Real1IP:192.168.15.128

Real2IP:192.168.15.30

 

一.修改启动web服务器

在192.168.15.128和192.168.15.30上分别解压修改tomcat的index页面:

vi webapps/ROOT/index.jsp

修改页面html部分

<html>
    <head>
    </head>
    <body>
SessionID:<%=session.getId()%>
<br/>
SessionIP:<%=request.getServerName()%>
<br/>
<h1>tomcat1 page</h1>
</body>
</html>1. <html>
2. 
3.     <head>
4. 
5.     </head>
6. 
7. 
8. 
9.     <body>
10. 
11. SessionID:<%=session.getId()%>
12. 
13. <br/>
14. 
15. SessionIP:<%=request.getServerName()%>
16. 
17. <br/>
18. 
19. <h1>tomcat1 page</h1>
20. 
21. </body>
22. 
23. </html>

这样可以通过访问index来判断访问是不是轮询的

 

二.安装配置nginx

1.安装GCC编译器等工具:

yum install -y gcc gcc-c++ autoconf automake libtool make openssl openssl-devel pcre pcre-devel

2.下载安装Nginx:

wget http://nginx.org/download/nginx-1.6.3.tar.gz

注:这里也可以下载tengine压缩包,比一般nginx多一些功能

tar -zxvf nginx-1.6.3.tar.gz
cd nginx-1.6.3/  

./configure --prefix=/usr/local/nginx

--sbin-path=/usr/local/nginx/sbin/nginx

--conf-path=/usr/local/nginx/conf/nginx.conf

--pid-path=/usr/local/nginx/logs/nginx.pid \

--with-http_ssl_module \

--with-http_stub_status_module \

--with-http_gzip_static_module \

make && make install

注:查询"./configure --help"相关模块,按需求指定启用

 

3.配置Nginx.conf

配置文件二个nginx负载均衡器的文件一样

 

 

user  nobody;

worker_processes  1;

error_log  /usr/local/nginx/logs/error.log notice;

pid        /usr/local/nginx/logs/nginx.pid;

worker_rlimit_nofile 51200;

events {

    use epoll;

    worker_connections  51200;

}

http {

    include       mime.types;

    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '

                      '$status $body_bytes_sent "$http_referer" '

                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  logs/access.log  main;

    server_names_hash_bucket_size 128;

    client_header_buffer_size 32k;

    large_client_header_buffers 4 32k;

    client_max_body_size 8m;

    sendfile        on;

    tcp_nopush     on;

    server_tokens off;

    keepalive_timeout  60;

    fastcgi_connect_timeout 300;

    fastcgi_send_timeout 300;

    fastcgi_read_timeout 300;

    fastcgi_buffer_size 64k;

    fastcgi_buffers 4 64k;

    fastcgi_busy_buffers_size 128k;

    fastcgi_temp_file_write_size 128k;

    gzip  on;

   upstream backend

    {

    server 192.168.15.128;

    server 192.168.15.130;

    }

    server {

        listen       80;

        server_name  192.168.15.135;

        location / {

            root   html;

            index  index.php index.html index.htm;

            proxy_redirect off;

            proxy_set_header Host $host;

            proxy_set_header X-Real-IP $remote_addr;

            #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP

            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

            proxy_pass http://backend;

        }

        error_page   500 502 503 504  /50x.html;

        location = /50x.html {

            root   html;

        }

         

        location /nginx_status {

            stub_status on; 

            auth_basic "NginxStatus";

            auth_basic_user_file /usr/local/nginx/htpasswd;

            #allow 127.0.0.1;

            #deny all;

        }

        location ~* \.(ini|docx|txt|doc|pdf)$ {

        #禁止访问文档性文件

        root /usr/share/nginx/html;

        deny all;

        }

        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|html|htm|css)$ {

        root /home/image;

        proxy_store on;

        proxy_store_access user:rw group:rw all:rw;

        proxy_temp_path /home/image;

        if ( !-e $request_filename) {

           proxy_pass  http://backend;

        }

    }

}

}

这里面配置较多,其中比较有用的已经标红了,可以直接将此部分配置在默认的nginx的配置文件里面即可

三.安装及配置keepalived

1.安装keepalived

在两台nginx服务器张安装keepalived:

wget http://www.keepalived.org/software/keepalived-1.2.15.tar.gz

tar -zxvf keepalived-1.2.15.tar.gz

cd keepalived-1.2.15

./configure --sysconf=/etc/  --with-kernel-dir=/usr/src/kernels/2.6.32-573.8.1.el6.x86_64

make && make install

ln -s /usr/local/sbin/keepalived  /sbin/  

#这一步很重要,不执行ln -s会报错“Starting keepalived: /bin/bash: keepalived: command not found”

service keepalived start

 

上述步骤也可以直接通过yum –y install keepalived 来代替,不同安装方式而已,不是重点

二台Nginxkeepalived.conf配置文件如下配置完成后分别service keepalived start启动检验keepalived配置是否成功

两台keepalived的配置如下:可以看出两者之间的区别仅仅是主备的权重不同,主为100备为66,其余一些有作用的配置已经用红色标注

主:

 

 

global_defs {

   notification_email {

     test@163.com

   }

   notification_email_from keepalived@localhost 

   smtp_server 127.0.0.1

   smtp_connect_timeout 30

   router_id LVS_MASTER

}

vrrp_script chk_http_port {

script "/usr/local/src/check_nginx_pid.sh"

interval 2                           #(检测脚本执行的间隔)

weight 2

}

vrrp_instance VI_1 {

   #state MASTER

    state BACKUP

    nopreempt                       

    #设置非抢占模式时,修改“state MASTER”为“state BACKUP”,添加“nopreempt“

    interface bond0

    virtual_router_id 51

    priority 100

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

}

track_script {

chk_http_port            #(调用检测脚本)

}

    virtual_ipaddress {

        192.168.15.135

    }

}

备: 

 

 

global_defs {

   notification_email {

     test@163.com

   }

   notification_email_from keepalived@localhost 

   smtp_server 127.0.0.1

   smtp_connect_timeout 30

   router_id LVS_BACKUP

}

vrrp_script chk_http_port {

script "/usr/local/src/check_nginx_pid.sh"

interval 2                           #(检测脚本执行的间隔)

weight 2

}

vrrp_instance VI_1 {

    state BACKUP

    interface bond0

    virtual_router_id 51

    priority 66

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

}

track_script {

chk_http_port            #(调用检测脚本)

}

    virtual_ipaddress {

        192.168.15.135

    }

}

以下是针对nginx状态进行检测的脚本,第一次nginx服务死掉时,会重新启动,如果Nginx服务无法正常启动,则杀掉keepalived进程

vim  /usr/local/src/check_nginx_pid.sh

 

 

#!/bin/bash

A=`ps -C nginx --no-header |wc -l`        

if [ $A -eq 0 ];then                            

      /usr/local/nginx/sbin/nginx        

      if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then  

              killall keepalived                    

      fi

fi

 

Ok,开始nginx负载均衡测试,停掉其中一台的任何服务,不影响整个系统的运作

四.测试

依次启动两个tomcat=》启动两个nginx=》启动两个keepalived,查看主机上是否有虚拟ip 192.168.15.135

通过虚拟ip访问nignx,看页面是不是轮询两个tomcat

将主机的nginx进程kill掉,看看vip是不是切换到备机器上了

访问虚拟ip是不是还能轮询访问tomcat


相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
6月前
|
负载均衡 应用服务中间件 Linux
高可用系列文章之三 - NGINX 高可用实施方案
高可用系列文章之三 - NGINX 高可用实施方案
|
6月前
|
运维 应用服务中间件 Linux
keepalived详解(三)——keepalived与Nginx配合实战
keepalived详解(三)——keepalived与Nginx配合实战
207 1
|
3月前
|
Java 应用服务中间件 Shell
Nginx+Keepalived+Tomcat 实现Web高可用集群
Nginx+Keepalived+Tomcat 实现Web高可用集群
115 0
|
3月前
|
运维 负载均衡 监控
Nginx加Keepalived实现高可用
使用Nginx和Keepalived来实现高可用性的方案,对于确保关键服务的稳定性和可靠性来说是非常有效的。此配置涉及多个步骤,包括各个服务的安装、设置及测试,目标是在主服务器故障时能无缝切换,以确保服务的持续可用。正确的配置和充分的测试是实现高可用性的保证,这也要求管理员对这些工具和它们背后的原理有深入的了解。
73 1
|
4月前
|
存储 缓存 前端开发
(三)Nginx一网打尽:动静分离、压缩、缓存、黑白名单、跨域、高可用、性能优化...想要的这都有!
早期的业务都是基于单体节点部署,由于前期访问流量不大,因此单体结构也可满足需求,但随着业务增长,流量也越来越大,那么最终单台服务器受到的访问压力也会逐步增高。时间一长,单台服务器性能无法跟上业务增长,就会造成线上频繁宕机的现象发生,最终导致系统瘫痪无法继续处理用户的请求。
141 1
|
6月前
|
监控 负载均衡 应用服务中间件
Keepalive 解决nginx 的高可用问题
Keepalive 解决nginx 的高可用问题
|
5月前
|
负载均衡 应用服务中间件 开发工具
技术笔记:nginx和keeplive实现负载均衡高可用
技术笔记:nginx和keeplive实现负载均衡高可用
|
6月前
|
存储 运维 负载均衡
Heartbeat+Nginx实现高可用集群
通过Heartbeat与Nginx的结合,您可以建立一个高可用性的负载均衡集群,确保在服务器故障时仍能提供无中断的服务。这种配置需要仔细的计划和测试,以确保系统在故障情况下能够正确运行。
86 2
|
6月前
|
Kubernetes 搜索推荐 应用服务中间件
通过keepalived+nginx实现 k8s apiserver节点高可用
通过keepalived+nginx实现 k8s apiserver节点高可用
380 17
|
6月前
|
负载均衡 网络协议 应用服务中间件
【亮剑】在Linux中构建高可用性和高性能网络服务的负载均衡工具HAProxy、Nginx和Keepalived。
【4月更文挑战第30天】本文介绍了在Linux中构建高可用性和高性能网络服务的负载均衡工具HAProxy、Nginx和Keepalived。HAProxy是一个高性能的开源TCP和HTTP负载均衡器,适合处理大量并发连接;Nginx是一个多功能Web服务器和反向代理,支持HTTP、HTTPS和TCP负载均衡,同时提供缓存和SSL功能;Keepalived用于监控和故障切换,通过VRRP实现IP热备份,保证服务连续性。文中详细阐述了如何配置这三个工具实现负载均衡,包括安装、配置文件修改和启动服务,为构建可靠的负载均衡系统提供了指导。
155 0