nginx-2-讲解与使用 Keepalived+LVS+nginx搭建nginx高可用集群

这篇具有很好参考价值的文章主要介绍了nginx-2-讲解与使用 Keepalived+LVS+nginx搭建nginx高可用集群。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

注意

1:配置文件优化,达到nginx最大性能。

2:日志文件 /usr/local/nginx/logs/access.log 会一直增大,所有日志都会记录在这。磁盘满了会出现各种问题。定时器脚本清除各种日志。

3:整个访问流程,负载均衡,主从搭建(keepalived)组合 , 单机+(keepalived)组合,邮件发送,静态资源访问(流程,缓存,防盗链,防爬虫,合并js/css请求)

4:配置文件一定要加 user root;  否则有的时候反向代理,请求别的服务器的静态资源权限不够

1 原理简单讲解

 nginx启动 ,会出现 多个进程 一个 master(管理者) 和多个 worker(工作者)。

worker进程的多少取决于你nginx.conf 中 worker_processes 配置的数量。

nginx-2-讲解与使用
Keepalived+LVS+nginx搭建nginx高可用集群

优点

   1: 热部署:执行命令nginx -s reload 可以不用重启nginx,即可加载新的配置

       原因:worker1执行任务的时候,其他worker可以加载完新配置再去执行任务。

                当worker1执行 完任务的时候,也会去加载新配置。 这样任务不会中断。

2:每一个worker都是独立的进程,出了问题也不会影响其他任务。

3:设置多少合适

     worker_processes(worker进程数) = 服务器cpu数

    worker_connections(每个worker最大连接数)=1024*cpu数

 一个nginx最大连接数=worker_processes*worker_connections;

一台nginx能承受大约5万个并发连接数。

2 使用场景

 正向代理,反向代理 +负载均衡,动静分离

2.1 正向代理 :

举例: 请求第三方接口时,第三方的网络和 我们的网络不通得,但是和总部的物理机通,

我们请求 ---->总部物理机 (nginx转发请求) ------>请求第三方接口。

nginx-2-讲解与使用
Keepalived+LVS+nginx搭建nginx高可用集群

2.2 反向代理 +负载均衡

nginx-2-讲解与使用
Keepalived+LVS+nginx搭建nginx高可用集群

2.3 动静分离

nginx-2-讲解与使用
Keepalived+LVS+nginx搭建nginx高可用集群

3 配置文件详解(nginx.conf)

参照了
Nginx 核心配置讲解_君泽随笔(JMC)的博客-CSDN博客_nginx核心配置

  3.1 全局块

   影响全局的配置:配置文件 开始 到 events 中间的内容都是

3.1.1 worker(工作进程)的数量

worker_processes auto; # 建议auto 自动根据服务器核数 变成相应进程数。 
# 默认值是1。一般设置为和 CPU 核数一样  
 # 也就是处理并发能力,数值越大处理越多,看服务器cpu数

这些可以保持默认即可

user  root;                        # 运行用户,一定设置root     
error_log  logs/error.log;   # Nginx 的错误日志存放目录
pid        logs/nginx.pid;      # Nginx 服务启动时的 pid 存放位置

3.2 events块

主要影响nginx服务器与⽤户的⽹络连接

events {
    #建议注释
    use epoll; # 使用epoll的I/O模型(如果你不知道Nginx该使用哪种轮询方法,
               #  会自动选择一个最适合你操作系统的) 可选值 :select、poll、kqueue、epoll、/dev/poll、eventport

    worker_connections 1024; # 每个进程允许最⼤并发数 ,每个 workderprocess进程
     ⽀持的最⼤连接数      ,4核8g 可配置为 4096
                  
}

  3.3 stream模块

  3.4 http块

   代理,缓存,日志定义等绝大多数功能和第三方模块的配置

     http块 又分为两个部分: http全局块,和server块

  3.4.1 http全局块

 http全局块的配置:文件引入,MIME-TYPE定义,日志自定义,连接超时时间,单链接请求数上限.等

 文档

wwModule ngx_http_proxy_module

log_format : 如果想配置了 $http_x_realip   则必须在 location 中加上东西。


http {
    include       mime.types;  # 外部有一个文件 mime.types 支持的数据类型
    default_type  application/octet-stream; #设置默认的类型,会提示下载不匹配的类型文件

    #   log_format 日志的格式以及打印哪些信息 ,"$http_x_realip" 获取转发到目标服务器的ip,而且location 
    # 还必须加proxy_set_header配置。 
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for" "$http_x_realip" ';

   
    # access_log  logs/access.log  main;  #  日志默认存储位置 。

    ########## 三个同时开启 减少了网络开销,并加快了文件发送的速度 ####
    sendfile        on;   #用于开启文件高效传输模式
    tcp_nopush     on;  #当有数据时,先别着急发送, 确保数据包已经装满数据, 避免了网络拥塞
    tcp_nodelay  on;
    ################
    
    keepalive_timeout  65; #连接超时时间,默认为75s
   
     types_hash_max_size 2048;

     server_names_hash_bucket_size 512;

     client_header_buffer_size 128k;  # 请求头缓冲区 
     large_client_header_buffers 8 256k;  # 请求头缓冲区不够时,使用他扩。 

     ##### 
    client_max_body_size 512m; # 请求体/文件  
    # client_max_body_size 0;   #如果设置为0,表示上传文件大小不受限制
    client_body_buffer_size 512M;  #请求体分配一个缓冲区 和client_max_body_size 设置成一样的值。上传文件小于buffer直接走内存,大于buffer会走临时文件,效率低点
     #####
     server_tokens off;
    proxy_connect_timeout   600; #Nginx服务器与后端被代理服务器尝试连接的超时时间 默认 60 
    proxy_send_timeout      600; #用于配置Nginx服务器向后端被代理服务器(组)发出write请求后,等待响应的超时时间 默认 60 
    proxy_read_timeout      600; #用于配置Nginx服务器向后端被代理服务器(组)发出read请求后,等待响应的超时时间 默认 60 
   
    ##### 解决后端服务传输数据过多,其实是header过大的问题
    proxy_buffer_size       128k; 
    proxy_buffers           2048 128k;  # 用于配置接收一次被代理服务器响应数据的Proxy Buffer个数和每个Buffer的大小.
    proxy_busy_buffers_size 512k;       # 
    ##### 解决后端服务传输数据过多,其实是header过大的问题
   
    proxy_temp_file_write_size 512k;

   #开启压缩 图片 html 等;
    gzip on;
    gzip_min_length  1k; #小于设置值的文件将不会压缩;
    gzip_buffers     16 8k;
    gzip_http_version 1.0 | 1.1; # 默认在http/1.0的协议下不开启gzip压缩。不能压缩,乱码
    gzip_comp_level 3;    # 压缩级别,1-9,数字越大压缩的越好,也越占用CPU时间
    gzip_types       text/plain application/javascript text/css image/png image/jpeg application/xml application/json application/octet-stream ;
    gzip_vary on;

  #加载自定义的nginx.conf  解耦 server块 
  include /etc/nginx/conf.d/*.conf;


    #负载均衡配置
    upstream test.com {
        #upstream的负载均衡 轮询(默认)。
        server 192.168.135.130:80 ;
        server 192.168.135.128:80 ;   
        #================== 
        
        #upstream的负载均衡,weight是权重,权值越高被分配到的几率越大。
        server 192.168.135.130:80 weight=4;
        server 192.168.135.128:80 weight=6;
         #================== 

        #每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题
            ip_hash;
            server 192.168.135.130:80;
            server 192.168.135.128:80;
         #==============================
         # Sticky是nginx的一个模块,它是基于cookie的一种nginx的负载均衡解决方案,
#通过分发和识别cookie,来使同一个客户端的请求落在同一台服务器上,默认标识名为route
           sticky;
            server 192.168.135.130:80;
            server 192.168.135.128:80;
        }

    server {
        listen       80; 设置监听的地址和端口
        server_name  localhost;   #设置server name,可以以空格隔开写多个并支持正则表达式,如*.magedu.com www.magedu.* 
        #charset koi8-r; #设置编码格式,默认是俄语格式,可以改为utf-8
        #access_log  logs/host.access.log  main;
       # 解耦 location块
       include /etc/nginx/default.d/*.conf;
     location / {
            root   html; # ngxin跟目录
            index helo.html index.html index.htm; # /usr/local/nginx/html 下先找到哪个就返回哪个 
            ######## 在这配置这4个 才好使 $http_x_realip ######
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            ######## 
        }
    }
}

  

  3.4.2 server块

 虚拟主机的配置,监听端⼝的配置,请求转发、反向代理、负载均衡

虚拟主机理解:从用户角度看,和一台独立的硬件主机完全一样,节省成本

    每一个http块可以包括多个server块,而每一个server块就相当于一个虚拟主机。

     而每一个server块,可以同时包含多个location

1  server块

   本虚拟机主机的监听配置,和本虚拟机主机的名称或IP配置。

2 location 块

一个server可以配置多个location 。主要作用是,基于nginx服务器接收到的请求一个匹配,对特定请求进行处理。地址重定向,数据缓存,应答控制,许多第三方配置也在这里配置。

5 案例实战

5.1 了解nginx的目录结构

nginx-2-讲解与使用
Keepalived+LVS+nginx搭建nginx高可用集群

 5.2默认配置解读

server_name:好像只能配置本机的ip ,不能写别的ip ,但是可以配置域名,域名下可以配置多个ip

 域名和ip是多对多关系

proxy_pass:支持ip 和域名, 但是不支持https方式代理。

 1:=     不含有正则,严格匹配url, 匹配成功就会停止向下搜索url

 2:   ~     正则 ,并且区分大小写

 3: ~*   正则,不区分大小写

 4:

 监听 server_name 的ip 和  listen的端口,访问的url 匹配规则符合,则直接执行符合的 location 
 
  server {
        listen       80; #监听80端口
       # listen ip:端口 # 当listen出现了ip时,server_name就失去了意义。所以不配置也罢了。
        server_name  localhost; #好像只能监听本机地址
        location / {
            root   html; # 根目录是 html
            index  index.html index.htm; #从左到右依次匹配,先匹配上谁就展示谁
        }
        location = /50x.html {
            root   html;
        }
     
    #正则方式 不区分大小写 路径带有 js或img或css都会走这个
     location ~*/(js|img|css) {
	       root   /home/web/html ;
            index  home.html;
        }

      }

5.3 访问tomcat下的接口

 信息:

nginx安装的ip http://192.168.135.4
访问就要加项目名了 demotomcat。jar命令部署就不用加了
​项目是在tomcat下:访问接口 http://192.168.135.4:8080/demotomcat/test/test

  普通转发

http://192.168.135.4/demotomcat/test/test 
通过nginx 访问到tomcat接口  就等于 http://192.168.135.4:8080/demotomcat/test/test 
 server {
        listen       80;
        server_name  192.168.135.4;
        location / {
            root   html;
            index hello.html  index.html index.htm;
            proxy_pass http://127.0.0.1:8080; #  代理到 本机的8080 , 
# 上面两行没事的,不起作用好像
                   }
        }

正则路径匹配:~

128上,8080,8081 是jar命令方式部署的。不用加项目名。

路径匹配上了,并且把路径上的pro带到了  代理的url上了。

http://192.168.135.4:9999/pro/test1 等于  http://192.168.135.128:8080/pro/test1
 server {
        listen       9999;
        server_name  192.168.135.4;
        location ~ /pro {
            proxy_pass http://192.168.135.128:8080; #  代理到别的机器的 jar包上
                    }
        location ~ /dev {
            proxy_pass http://192.168.135.128:8081; #  代理到别的机器的8081 
                    }
        }

后端接口

 nginx-2-讲解与使用
Keepalived+LVS+nginx搭建nginx高可用集群

按照我们以往的逻辑 应该这样访问:http://192.168.135.4:9999/pro/pro/test1 才对 
但是 ~ /pro 会带到url来  我们可以配置项目访问路径 context-path ,替换 ~ /pro 的它

路径匹配方式 

     http://192.168.135.4:9999/pro/test1
     http://192.168.135.128:8080/pro/test1
 server {
        listen       9999;
        server_name  192.168.135.4;
        location /pro/ {
            proxy_pass http://192.168.135.128:8080/pro/; #  代理到别的机器的 jar包上
                    }
        location /dev/ {
            proxy_pass http://192.168.135.128:8081/dev/; #  代理到别的机器的8081 
                    }
        }

负载均衡:

http://192.168.135.4/pro/test1  轮询访问
         #负载均衡配置
       upstream myserver {
        #upstream的负载均衡 轮询(默认)。
        server 192.168.135.128:8080 ;
        server 192.168.135.128:8081 ;   
        }

       server {
        listen       9999;
        server_name  192.168.135.4;
        location /  {
            proxy_pass http://myserver; 
            proxy_connect_timeout 600;
                    }
        } 

5.9 静态资源访问

 html,css,image 等访问

 expires 设置缓存时间。

 防盗链(图片等)

 两种方式:nginx的root、alias指令区别

说明 示例值
现有照片名称 a.png
root方式 location上路径自动带到url上
alias方式 location上路径不会带到url上
访问图片的地址为 http://192.168.135.4:9002/image/a.png或者 http://192.168.135.4:9001/image/a.png

 root配置信息:

     server {
        listen       9001;
        server_name  192.168.135.4;
          location /image/ {
            root   /html/;  #方式一 必须根目录下创建 html/image/
           # root   html;   #方式二 nginx安装目录下 创建 html/image/
           # root   html/;   #方式三 nginx安装目录下 创建 html/image/
                           }

        }

alias配置信息:


server {
        listen       9002;  
        server_name  192.168.135.4;
 
          location /image/ {  
            alias /html/image/;#方式一 根目录下创建 /html/image/
            alias  html/image/;#方式二 nginx安装目录下创建 /html/image/
                           } 
        }

autoindex : 访问目录即可查看,该目录下的静态资源。

server {
        listen       9002;  
        server_name  192.168.135.4;
 
          location /image/ {  
            alias /html/image/;
            autoindex on; 

                           } 
        }

nginx-2-讲解与使用
Keepalived+LVS+nginx搭建nginx高可用集群

前端部署 rewrite/try_files

 #方式一:直接让你访问静态文件   
location / {
	    root   /data/admin ;
            index  home.html;
	    proxy_set_header Host $http_host;
    	    proxy_set_header X-Real-IP $remote_addr;
    	    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    	    proxy_set_header X-Forwarded-Proto $scheme;
        }

nginx安装目录下 html/image/b.png
#方式二:1 访问的没有一个匹配的,会有一个兜底的 。/image/b.png
      例如:访问 http://192.168.135.4/a   就会出现 图片
      2 直接访问 http://192.168.135.4   会依次查看 index是否有符合的。有则展示,无则走兜底
      3 只要你访问的路径是有东西的,并且写的对 就会展示。(try_files)
      
   location / {
            root   html;
            index hello.html  index.html index.htm;
               try_files $uri $uri/ /image/b.png;
           }

===============================
 location / {
 
        root /opt/dist;
        index index.html;
        # 尝试解析文件/文件夹,解析不到,跳到后端处理
        try_files $uri $uri/ @mq;
 
        }
 
         location @mq {
                # 负载均衡的配置
                proxy_pass http://mydjango;
              # 重定向也可以
           #  rewrite ^/(.*)$   http://www.baidu.com;       # 跳转到百度页面
        }

 防盗链:

 原因:

 我们访问网站首页 home.html, 但是home.html 内 用了背景图 b.png  。浏览器会在发送一次请求,但是请求头会带  Referer:你nginx服务器的ip 。这样获取 b.png。

nginx-2-讲解与使用
Keepalived+LVS+nginx搭建nginx高可用集群

解决办法:

 例如:前端的页面中home.html 中首页背景图片不想被别人访问,盗用。

 直接返回错误码方式

  #请求路径结尾 这些都 拦截 
   location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ {
      expires 30d; #缓存30天
      access_log off; #不记录日志
     valid_referers localhost; #有域名最好写域名, 检测来源的网址是不是填写的该地址
     if ($invalid_referer){#如果是无效的 返回403
      return 403;
         } 
	    root   /home/web/html ;
            index  home.html;
        }

  反会自定义错误页面

  # 请求路径结尾 这些都 拦截 
   location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ {
      expires 30d; #缓存30天
      access_log off; #不记录日志
     # 防盗链
     valid_referers localhost; #有域名最好写域名, 检测来源的网址是不是填写的该地址
     if ($invalid_referer){#如果是无效的 返回403
      return 403; # 会走底下 ---> error_page --> location = /50x.html
         } 

	    root   /home/web/html ;
            index  home.html;
        }

      error_page   403  /50x.html;
        location = /50x.html {
            root   html; 
        } 

静态资源优化,防止爬虫

 静态资源优化,可以减少连接请求数,同时也不需要对这些资源请求打印日志。但副作用是资源更新可能无法及时。

expires 30s;   #缓存30秒
expires 30m;  #缓存30分钟   
expires 2h;     #缓存2小时
expires 30d;    #缓存30天

server {

       # 防爬虫 文件夹下有 agent_deny.conf
      include /etc/nginx/default/*.conf;      

    # 后缀结尾 视频 图片
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ {
      expires 30d;
      access_log off;
    # 防盗链
     valid_referers localhost; #有域名最好写域名, 检测来源的网址是不是填写的该地址
     if ($invalid_referer){#如果是无效的 返回403
      return 403; # 会走底下 ---> error_page --> location = /50x.html
         } 

     }

    # 字体
    location ~ .*\.(eot|ttf|otf|woff|svg)$ {
      expires 30d;
      access_log off;
    }

    # js、css
    location ~ .*\.(js|css)?$ {
      expires 7d;
      access_log off;
    }

    # 禁止访问的文件或目录
    location ~ ^/(\.user.ini|\.ht|\.git|\.svn|\.project|LICENSE|README.md)   {
            deny all;
        } 
             
         location /.well-known  {
            allow all;
        } 

}

 agent_deny.conf

#禁止Scrapy等工具的抓取
if ($http_user_agent ~* (Scrapy|Curl|HttpClient)) {
   return 403;
}
#禁止指定UA及UA为空的访问
if ($http_user_agent ~ "WinHttp|WebZIP|FetchURL|node-superagent|java/|FeedDemon|Jullo|JikeSpider|Indy Library|Alexa Toolbar|AskTbFXTV|AhrefsBot|CrawlDaddy|Java|Feedly|Apache-HttpAsyncClient|UniversalFeedParser|ApacheBench|Microsoft URL Control|Swiftbot|ZmEu|oBot|jaunty|Python-urllib|lightDeckReports Bot|YYSpider|DigExt|HttpClient|MJ12bot|heritrix|EasouSpider|Ezooms|BOT/0.1|YandexBot|FlightDeckReports|Linguee Bot|^$" ) {
   return 403;
}
#禁止非GET|HEAD|POST方式的抓取
if ($request_method !~ ^(GET|HEAD|POST)$) {
  return 403;
}

 合并客户端请求(concat模块)

 例如:加载一个html可能要加载很多js,假如需要三个js,就会多3个请求js的请求。为了提高效率,可以合并为一个请求,同时获取这三个js.  淘宝就是这样的。因为是淘宝开发的。

nginx-2-讲解与使用
Keepalived+LVS+nginx搭建nginx高可用集群

 安装过程在我的文章 nginx安装里:简单应用

location /static/css/ {
    concat on; #开启
    concat_max_files 20; #最多20个
}
    
location /static/js/ {
    concat on;
    concat_max_files 30;#最多30个
}

合并文件输出(ssi模块)

文档讲解

Module ngx_http_ssi_module

 支持插入另一个html

<!--#include virtual="head.html" -->
  a.html内容
<!--#include virtual="footer.html" -->

三个作用域下面(http, server, location)

server {
...
ssi on; #开启
ssi_last_modified on;# 有缓存的时候用合适
}

很多命令 比如判断等。

高可用集群模式

单机版(keepalived)

单机模式下也可以考虑安装keepalived  他可以检测nginx是否启动,执行脚本让nginx自动启动。短暂的访问失效

主从版(keepalived)

优点:容灾 

缺点:资源浪费,从机基本用不到。主机挂掉也会脚本重启。

nginx-2-讲解与使用
Keepalived+LVS+nginx搭建nginx高可用集群

1:准备两台服务器 ,192.168.135.4,192.168.135.128

2:在这两台服务器上都需要安装nginx,和keppalived

3:主机和从机的keppalived,只有 priority ,state

4:先启动nginx 在启动keppalived。

5:对外访问的ip:  192.168.135.9

yum安装方式:默认安装位置 etc/keepalived/keepalived.conf

yum install keepalived -y

keepalived.conf

主从配置 修改属性位置:priority,state ,mtp_server

注意:每个模块名和 { 要有一个空格,

日志文件默认位置是系统日志:/var/log/messages  查看脚本不启动等等都需要看日志

! Configuration File for keepalived
#全局定义
global_defs { 
#######################邮件配置可以删除################
   # 发送邮件报警 不建议用。需系统开启sendmail服务,建议用第三方独立监控服务。
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   #指定发件人,可选配置。
   notification_email_from Alexandre.Cassen@firewall.loc
   # 指定发送邮件的smtp服务器地址,可选配置。写本服务器ip
   smtp_server 192.168.200.1
   smtp_connect_timeout 30   # 连接smtp的超时时间
######################邮件配置可以删除######################

   router_id LVS_DEVEL   #用户标识本节点的名称
}
#声明检查脚本
vrrp_script chk_nginx { 
    
 script "/etc/keepalived/nginx_check.sh"
 interval 2 #检测脚本执行的间隔 监控脚本的执行时间要大于advert_int(3秒不行就5秒
 weight 2
}



# 定义一个vrrp_install实例,名称为VI_1
vrrp_instance VI_1 {
    state MASTER  # 实例的角色状态,主机 AMSTER 从机 BACKUP
    interface ens33 # 对外提供服务的网络接口,如eth0,eth1. ifconfig查看
    virtual_router_id 51 #虚拟路由ID标识,主备服务器配置中相同实例的ID必须一致,否则将出现脑裂问题。
    priority 100      # priority表示实例优先级,数字越大,优先级越高 主机高于从机
    advert_int 1   # advert_int为同步通知间隔。主备之间通信检查的时间间隔,默认为1秒。    
    # 权限认证配置。
    authentication { #设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信
        auth_type PASS
        auth_pass 1111
    }
    
    # 虚拟IP地址;可以配置多个IP,每个IP占一行。注意,这里的IP就是在工作中需要和域名绑定的ip,
    # 即可配置的高可用服务监听的ip保持一致。
    virtual_ipaddress {
        192.168.135.9 # 对外访问的ip
    }

   # 启动脚本 必须和上面的声明 名称一致
    track_script {
        chk_nginx #执行 Nginx 监控的服务
    }
      

    # 下面是配置的邮件发送脚本,不想使用此功能 可以删除########### 
    #定义通知脚本,当前节点成为主节点时触发的脚本
    notify_master "/etc/keepalived/notify.sh master"
    #定义通知脚本,当前节点转为备节点时触发的脚本
    notify_backup "/etc/keepalived/notify.sh backup"
    #定义通知脚本,当前节点转为“失败”状态时触发的脚本
    notify_fault "/etc/keepalived/notify.sh fault"

    #上面 配置的邮件发送脚本,不想使用此功能 可以删除########### 

}

nginx_check.sh

1:脚本加权限: chmod u+x nginx_check.sh

                            chmod 744 nginx_check.sh

2:先执行一下脚本,看是否是可执行脚本。

3:脚本详解,先查看nginx是否启动,没有启动会执行启动命令,过了2秒还没有启动成功,会关闭 keepalived 服务,因为不关闭它,无法从主服务器切换到从服务器

4 解决脚本不执行 参考 keepalived配置检测脚本问题 - 知乎

#!/bin/bash
# echo 1 >> myid
A=`ps -C nginx --no-header |wc -l`
# 如果等于0 就 nginx没有启动
if [ $A -eq "0" ];then
cd /usr/local/nginx/sbin/
./nginx
sleep 2
# 如果等于0 就 nginx没有启动  keepalived也必须关闭,否则依然访问不到从nginx
if [ `ps -C nginx --no-header |wc -l` -eq 0 ]; then
 #  killall keepalived
   systemctl stop keepalived.service
    fi
    fi

启动服务前必须执行命令

1:脚本必须执行: chmod u+x nginx_check.sh

                               chmod 744 nginx_check.sh

2:暂时版:setenforce 0  

     永久版:  sed -i "s/^SELINUX=.*/SELINUX=disabled/g" /etc/selinux/config

启动服务

启动nginx 和 keepalived

./nginx 

启动 keepalived   

systemctl start keepalived.service

停止 keepalived  

systemctl stop keepalived.service

重启

systemctl restart keepalived.service

验证

直接访问 http://192.168.135.9/
关闭主服务器上的 nginx 不关闭 keepalived 。依然不能访问到从nginx. 报错。所以脚本上必须也要关闭keepalived
关闭主服务器上的nginx,和 keepalived  。可以访问到从服务器的nginx

邮件配置

1:邮箱要开启所有服务,要不收不到邮件。

2:邮件脚本也要按照上面的脚本方式赋予权限等操作

yum install mailx -y
 vim ~/.mailrc 或 /etc/mail.rc

 nginx-2-讲解与使用
Keepalived+LVS+nginx搭建nginx高可用集群

set from=861157070@qq.com  # aa@163.com
set smtp=smtp.qq.com       # .163.com 
set smtp-auth-user=861157070@qq.com #aa@163.com
set smtp-auth-password=授权码  #邮箱需要开启POP3/SMTP服务并 填写授权码
set smtp-auth=login
set ssl-verify=ignore

测试:echo test mail | mail -s testa 收件人id@qq.com

  

  notify.sh   可以执行一下脚本测试发邮件

#!/bin/bash
#
contact='861157070@qq.com'  #可以结合邮件设置向QQ发送邮件,在全局中的notification_email也要设置
notify() {
mailsubject="$(hostname) to be $1, vip floating" # 邮件标题
mailbody="$(date +'%F %T'): vrrp transition, $(hostname) changed to be $1"
echo "$mailbody" | mail -s "$mailsubject" $contact
}
case $1 in
master)
notify master
;;
backup)
notify backup
;;
fault)
notify fault
;;
*)
 
echo "Usage: $(basename $0) {master|backup|fault}"
exit 1
;;
esac
chmod +x /etc/keepalived/notify.sh

keepalived互为主备

nginx-2-讲解与使用
Keepalived+LVS+nginx搭建nginx高可用集群文章来源地址https://www.toymoban.com/news/detail-461496.html

Keepalived+LVS+nginx搭建nginx高可用集群

到了这里,关于nginx-2-讲解与使用 Keepalived+LVS+nginx搭建nginx高可用集群的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 部署LVS+Keepalived高可用集群

    目录 一、keepalived概述 1.1管理LVS负载均衡软件 1.2VRRP(Virtual Router Redundancy Protocol) 原理 二、keepalived服务的重要功能 2.1自动切换(failover) 2.2健康检查(health checking) 2.3高可用(HA) 三、L4和L7负载均衡的区别 四、keepalive故障自动切换 4.1抢占与非抢占 五、keeplived体系主要模块

    2024年02月13日
    浏览(41)
  • Keepalived+LVS部署高可用集群

    集群环境 主机 角色 服务 192.168.110.134 MASTER Keepalived 192.168.110.137 BACKUP Keepalived 192.168.110.136 Real server1 HTTPD 192.168.110.145 Real server2 HTTPD MASTER配置 BACKUP配置 检查Virtual IP是否漂移 IPVS检查 前提下载ipvsadm MASTER BACKUP Real Server配置 附上个人写的小脚本 大家可以根据自己需要做调整。

    2024年02月12日
    浏览(44)
  • Keepalived高可用集群、Keepalive+LVS

    什么是高可用集群? 高可用集群 (High Availability;Cluster,简称HA Cluster) ,是指以减少服务中断时间为目的的服务器集群技术。它通过保护用户的业务程序对外不间断提供的服务,把因软件、硬件、人为造成的故障对业务的影响降低到最小程度。 自动切换/故障转移(FailOver) 自

    2024年02月10日
    浏览(34)
  • LVS+KeepAlived高可用负载均衡集群

    高可用集群只需要在调度器上多进行一台或两台(服务器本身的价格比较昂贵,一般备用的服务器的数量会和当前业务创造的价值对等)的设置,就可避免因调度器瘫痪业务中断的风险,所以实现了真正的高可用的效果。 1.普通群集 普通的群集的部署是通过一台度器控制调配

    2024年02月09日
    浏览(80)
  • LVS+Keepalived架构(负载均衡高可用集群)

    普通的群集的部署是通过 一台调度器控制调配多台节点服务器 进行业务请求的处理,但是仅仅是一台调度器,就会存在极大的单点故障风险,当该调度器的链路或则调度器本身出现故障时,就会导致整个业务的无法正常进行  而高可用集群是由 一台主调度器和一台或多台备

    2024年02月12日
    浏览(58)
  • 如何部署LVS + keepalived 负载均衡高可用集群

    一、LVS架构 概念 L4和L7负载均衡的区别 keepalive故障自动切换 抢占与非抢占 二、keepalived管理LVS负载均衡器 LVS集中节点的健康检查 三、部署LVS + keeplived 高可用集群 第一步 关闭防火墙和安全机制          第二步 安装工具 第三步 手动配置模块 第四步 编辑策略配置文件 第五

    2024年02月13日
    浏览(45)
  • 基于lvs+keepalived+nginx的web高性能集群项目

    模拟企业里的web项目需求,最终目的是构建一个高性能高可用的web集群系统。部署lvs负载均衡系统和keepalived高可用软件,后端使用nginx做web服务器,同时搭建内部的一套基于prometheus的监控系统。使用ansible实现整个集群系统的自动化运维工作。 ceotos7 nginx1.25.3 node_exporter-1.4.0

    2024年02月20日
    浏览(55)
  • LVS-DR模式+keepalived+nginx+tomcat实现动静分离、负载均衡、高可用实验

    实验条件: test2——20.0.0.20——主服务器——ipvsadm、keepalived服务 test3——20.0.0.30——备服务器——ipvsadm、keepalived服务 nginx5——20.0.0.51——后端真实服务器1(tomcat的代理服务器)——nginx服务 nginx6——20.0.0.61——后端真实服务器2(tomcat的代理服务器)——nginx服务 tomcat——

    2024年02月08日
    浏览(68)
  • lvs DR模式+基于五台服务器部署keepalived + lvs DR模式架构(前端带路由)负载均衡的高可用集群

    lvs DR 模式+基于五台服务器部署keepalived + lvs DR模式架构(前端带路由)负载均衡的高可用集群 DR 模式一: 客户端:172.20.26.167 LVS服务器:172.20.26.198 后端服务器:172.20.26.218 后端服务器:172.20.26.210 两台后端服务器 yum install nginx tcpdump -y echo \\\"this is 26.218 page\\\" /usr/share/nginx/html/index

    2024年02月19日
    浏览(51)
  • Keepalived实现Nginx的高可用集群案例

    服务器规划:                          serverb(nginx2):192.168.233.144                     serverc(客户端):192.168.233.140                     serverd(nginx1):192.168.233.141 结构图: serverd(nginx1): serverb(nginx2): serverc(客户端): 日志查看:

    2024年02月20日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包