Nginx高可用、高并发:Nginx+Keepalived部署

版权声明:版权声明:本文为博主原创文章,转载请标明出处! https://blog.csdn.net/qq_35457078/article/details/84879338

Nginx高可用、高并发:Linux上Nginx+Keepalived部署


Nginx简单介绍:


Nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP、POP3、SMTP代理服务器;Nginx可以作为一个HTTP服务器进行网站的发布处理,另外nginx可以作为反向代理进行负载均衡的实现。具体的介绍大家可以参见百度百科

  • Nginx安装

    1.1 环境准备
    选两台节点部署Nginx,如:192.169.213.128 Nginx1,192.169.213.129 Nginx2,两台节点Nginx的安装完全相同。
    创建下载及安装目录,进入创建目录

    [root@yanhl1 ~]# mkdir -p /usr/local/nginx/src && cd /usr/local/nginx/src
    

    安装c++编译环境,请确保yum服务正常

    [root@localhost src]#  yum install gcc-c++
    

    下载nginx及相关依赖组件 (请确保wget服务正常 )

    [root@localhost src]# wget http://nginx.org/download/nginx-1.10.2.tar.gz 
    [root@localhost src]# wget http://www.openssl.org/source/openssl-fips-2.0.10.tar.gz
    [root@localhost src]# wget http://zlib.net/zlib-1.2.11.tar.gz
    [root@localhost src]# wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.40.tar.gz
    

    依赖软件安装:

     注:以下命令中,./config or ./configure为执行配置脚本,make 为编译文件,make install为安装文件
     &&为串行执行其连接命令。
    

    openssl安装:

    [root@localhost src]# tar zxvf openssl-fips-2.0.10.tar.gz
    [root@localhost src]# cd openssl-fips-2.0.10
    [root@localhost openssl-fips-2.0.10]# ./config && make && make install
    

    pcre安装

    [root@localhost src]# tar zxvf pcre-8.40.tar.gz
    [root@localhost src]# cd pcre-8.40
    [root@localhost pcre-8.40]# ./configure && make && make install
    

    zlib安装

    [root@localhost src]# tar zxvf zlib-1.2.11.tar.gz
    [root@localhost src]# cd zlib-1.2.11
    [root@localhost zlib-1.2.11]# ./configure && make && make install
    

    1.2 Nginx安装(之前选定测试的两台机子上的安装步骤和配置均相同)

     指定安装路径:./configure --prefix=path
     如果不指定--prefix=path,默认安装路径为usr/local/nginx
    
    [root@localhost src]# tar zxvf nginx-1.10.2.tar.gz
    [root@localhost src]# cd nginx-1.10.2
    [root@localhost nginx-1.10.2]# ./configure --prefix=usr/local/nginx && make && make install
    

    配置nginx系统环境变量,这样执行ngnix脚本命令就不用切到nginx的安装目录下

    [root@localhost nginx]# vim /etc/profile
    

    加入安装路径到系统环境中

    export NGINX_HOME=/opt/software/nginx
    export PATH=$PATH:$NGINX_HOME/sbin
    

    使系统环境变量生效

    [root@localhost nginx]# source /etc/profile
    

    启动nginx并查看是否启动成功,查询到nginx进程即为启动成功

    [root@localhost nginx]# nginx 
    [root@localhost nginx]# ps aux | grep nginx | grep -v grep
    

    浏览器访问服务器ip.,出现以下内容即为安装成功在这里插入图片描述

     nginx命令:
     nginx -s reload|reopen|stop|quit  #重新加载配置|重启|停止|退出 nginx
     nginx -t   #测试配置是否有语法错误
     nginx [-?hvVtq] [-s signal] [-c filename] [-p prefix] [-g directives]
     -?,-h           : 打开帮助信息
     -v              : 显示版本信息并退出
     -V              : 显示版本和配置选项信息,然后退出
     -t              : 检测配置文件是否有语法错误,然后退出
     -q              : 在检测配置文件期间屏蔽非错误信息
     -s signal    	  : 给一个 nginx 主进程发送信号:stop(停止), quit(退出), reopen(重启), reload(重新		  加载配置文件)
     -p prefix       : 设置前缀路径(默认是:/usr/local/Cellar/nginx/1.2.6/)
     -c filename     : 设置配置文件(默认是:/usr/local/etc/nginx/nginx.conf)
     -g directives   : 设置配置文件外的全局指令
    

    1.3 Nginx负载均衡配置及启动

    修改nginx配置文件

    events
    {
    	use epoll;            #epoll是多路复用IO(I/O Multiplexing)中的一种方式,但是仅用于linux2.6以上内核,可以大大	提高nginx的性能
    
    	worker_connections  1024;    #单个后台worker process进程的最大并发链接数
    }
    #HTTP服务器
    http {
    #设定mime类型,类型由mime.type文件定义
    include       mime.types;
    default_type  application/octet-stream;
    #设定日志格式
    access_log    /var/log/nginx/access.log;
    
    #设定负载均衡的服务器列表
    upstream load_balance_server {
        #weigth参数表示权值,权值越高被分配到的几率越大
        server 192.168.213.128:8080   weight=5;
        server 192.168.213.129:8080   weight=5;
    }
    
     server {
        #侦听80端口
        listen       80;
        #定义使用www.xx.com访问,须将www.helloworld.com加到/etc/hosts中
        #server_name  www.helloworld.com;
        root /opt/software/apache-tomcat-8.5.35/webapps;
    
        #对所有请求进行负载均衡请求
        location / {
            index       index.html index.htm;  #定义首页索引文件的名称
            proxy_pass  http://load_balance_server ;#请求转向load_balance_server 定义的服务器列表
    
            #以下是一些反向代理的配置(可选择性配置)
            #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 $remote_addr;
            proxy_connect_timeout 90;          #nginx跟后端服务器连接超时时间(代理连接超时)
            proxy_send_timeout 90;             #后端服务器数据回传时间(代理发送超时)
            proxy_read_timeout 90;             #连接成功后,后端服务器响应时间(代理接收超时)
            proxy_buffer_size 4k;              #设置代理服务器(nginx)保存用户头信息的缓冲区大小
            proxy_buffers 4 32k;               #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
            proxy_busy_buffers_size 64k;       #高负荷下缓冲大小(proxy_buffers*2)
            proxy_temp_file_write_size 64k;    #设定缓存文件夹大小,大于这个值,将从upstream服务器传
    
            client_max_body_size 10m;          #允许客户端请求的最大单文件字节数
            client_body_buffer_size 128k;      #缓冲区代理缓冲用户端请求的最大字节数
        }
      }
    }
    

    重启nginx

    nginx -s reopen
    

    1.4 nginx负载均衡测试
    安装Tomcat 进行负载均衡验证测试(两台机子上的tomca安装要完全相同)

    #下载、解压(保证已安装JDK,我的tomcat安装目录:/opt/software/apache-tomcat-8.5.35/)
    wget https://www-us.apache.org/dist/tomcat/tomcat-8/v8.5.35/bin/apache-tomcat-8.5.35.tar.gz
    tar -xzvf apache-tomcat-8.5.35.tar.gz
    

    进入解压目录下的webapp/examples目录下,编辑index.html(另一台机子同样根据本机ip修改)

    [root@localhost  bin]# vim apache-tomcat-8.5.35/webapps/examples/index.html
    

    在这里插入图片描述
    安装好tomcat,进入tomcat安装目录的bin目录启动tomcat,保证tomat服务启动成功

    [root@localhost bin]# sh startup.sh 
    

    进入页面验证nginx负载均衡功能:
    快速刷新页面,页面的ip会交替变化,说明nginx将请求发送到了不同的服务器上的tomcat上,实现了服务的负载均衡。
    在这里插入图片描述
    在这里插入图片描述

  • Keepalived安装

    关于Keepalived的介绍及nginx与其组成高可用结构的原理可以看网友的这篇博客,感谢这位大佬,博客里说的很清楚
    https://www.cnblogs.com/kevingrace/p/6138185.html

    下面我们继续Keepalived的安装。
    我们选择192.169.213.128作为Keepalived的MASTER,192.169.213.129为BACKUP

    2.1 环境准备

    安装依赖包、下载Keepalived

    #之前如果安装过某些依赖包,可以再安装一次,防止安装Keepalived出错
    [root@localhost  src]# cd /usr/local/nginx/src
    [root@localhost  src]# yum install -y libnl*
    [root@localhost  src]# yum install -y libnfnetlink-devel zlib zlib-devel gcc gcc-c++ openssl openssl-devel openssh
    [root@localhost  src]# wget http://www.keepalived.org/software/keepalived-1.3.5.tar.gz
    

    2.2 安装Keepalived

    [root@localhost  src]# tar xvf keepalived-1.3.5.tar.gz
    [root@localhost  src]# cd keepalived-1.3.5 
    [root@localhost  keepalived-1.3.5]# ./configure --prefix=/usr/local/keepalived		  	
    [root@localhost  keepalived-1.3.5]# make 
    [root@localhost  keepalived-1.3.5]# make install
    

    2.3 配置、启动Keepalived
    安装完成后,一般会将Keepalived注册为系统服务,设置为开机启动,防止服务挂掉。

    进入安装目录的etc目录下,将keepalived相应的配置文件拷贝到系统相应的目录当中。keepalived启动时会从/etc/keepalived目录下查找keepalived.conf配置文件,如果没有找到则使用默认的配置。/etc/keepalived目录安装时默认是没有创建的,需要手动创建。

    [root@localhost  keepalived]# mkdir -p /etc/keepalived
    [root@localhost  keepalived]# cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
    # init.d/keepalived这个文件在解压包的目录下
    [root@localhost  keepalived]# cp /usr/local/nginx/src/keepalived-1.3.5/keepalived/etc/init.d/keepalived /etc/init.d/keepalived
    [root@localhost  keepalived]# cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/keepalived
    

    增加nginx状态检测脚本:

    [root@localhost  ~]# cd /usr/local/keepalived/
    [root@localhost  keepalived]# touch check_nginx.sh
    [root@localhost  keepalived]# chmod 755 check_nginx.sh
    [root@localhost  keepalived]# vim check_nginx.sh
    
    #!/bin/bash
    COUNT=$(ps -C nginx --no-header |wc -l)
    echo $COUNT
    #判断Nginx 是否都挂掉了
    if [ $COUNT -eq 0 ]
    then
        #nginx安装地址,如果挂掉了,就启动nginx(nginx命令的地址要写对)
        /usr/local/nginx/sbin/nginx
        echo "重启nginx"
        #等5秒钟后,再次查看是否 启动成功
        sleep 5
        #如果nginx没有启动起来,就直接干掉keepalived
        COUNT=$(ps -C nginx --no-header |wc -l)
        if [ $COUNT -eq 0 ]
        then
                echo "干掉keepalived"
                #如果killall命令不能使用,就需要安装psmisc工具了
                #yum install -y psmisc
                killall keepalived
        fi
    fi
    

    编辑配置文件:

    [root@localhost  ~]# vim /etc/keepalived/keepalived.conf 
    

    192.169.213.128 主节点:

     ````
     #配置文件
     ! Configuration File for keepalived
     global_defs {
         #唯一标识,一般为用户名
         router_id username1
     }
     #监控服务.NGINX mysql等
     vrrp_script chk_nginx {
         script "/usr/local/keepalived/check_nginx.sh"
         #每2s检查一次
         interval 2
         #每次检查-20
         weight -20
     }
     vrrp_instance VI_1 {
         ##主从设置 MASTER/BACKUP  
         state MASTER
         #网卡名称
         interface eth0
         #同一个集群下这个 router_id是一样的
         virtual_router_id 51
         #本机的ip,需要修改
         mcast_src_ip 192.168.213.129
         #优先级,从节点 配置,需要小于主节点
         priority 100
         #设定MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
         advert_int 1
         #认证的密码
         authentication {
             auth_type PASS
             #设定授权密码,密码相同的为一个集群
             auth_pass 1111
         }
         #触发的脚本
         track_script {
               chk_nginx  #检测脚本,上面配置的
         }
         #虚拟ip地址(同一个集群中的虚拟ip必须得相同,可配置多个)
         virtual_ipaddress {
             192.168.213.135
             192.168.213.136
         }
     }        
    

    192.169.213.129 从节点:

    #配置文件
    ! Configuration File for keepalived
    global_defs {
        #唯一标识,一般为用户名
        router_id username2
    }
    #监控服务.NGINX mysql等
    vrrp_script chk_nginx {
        script "/usr/local/keepalived/check_nginx.sh"
        #每2s检查一次
        interval 2
        #每次检查-20
        weight -20
    }
    vrrp_instance VI_1 {
        ##主从设置 MASTER/BACKUP  
        state BACKUP
        #网卡名称
        interface eth0
        #同一个集群下这个 router_id是一样的
        virtual_router_id 51
        #本机的ip,需要修改
        mcast_src_ip 192.168.213.129
        #优先级,从节点 配置,需要小于主节点
        priority 80
        #设定MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
        advert_int 1
        #认证的密码
        authentication {
           auth_type PASS
           #设定授权密码,密码相同的为一个集群
           auth_pass 1111
        }
        #触发的脚本
        track_script {
           chk_nginx  #检测脚本,上面配置的
        }
        #虚拟ip地址
        virtual_ipaddress {
           192.168.213.135
           192.168.213.136
        }
    }
    

    设置keepalived服务开机启动:

    [root@localhost  ~]# chmod 755 /etc/init.d/keepalived #权限
    [root@localhost  ~]# chkconfig keepalived on #开机启动
    [root@localhost  ~]# chkconfig --add keepalived  #加为系统服务
    [root@localhost  ~]# service keepalived start  #启动服务
    [root@localhost  ~]# service keepalived status  #查看服务状态
    

    查看启动情况:在这里插入图片描述

    想要停止服务,执行:

    [root@localhost  ~]# service keepalived stop #查看服务状态
    

    查看keepalived 虚拟出来的ip

    [root@localhost  keepalived]# ip a 
    

    在这里插入图片描述

    通过虚拟ip访问nginx,依然可以实现nginx的请求转发
    在这里插入图片描述
    在这里插入图片描述
    如果一台机子上的nginx挂了而且无法启动成功,检测脚本会停止这台机子上的keepalived服务,虚拟ip就会切到集群的另一台机子上,使用服务正常的这台机子上的keepalived和nginx,实现nginx高可用。

    2.4 测试Nginx高可用

    先是两台都开启keepalived,然后通过虚拟ip(192.168.213.135)访问, 再关掉第一台的keepalived

    service keepalived stop
    

    再通过虚拟ip(192.168.213.135)访问,如果一切正常,依然可以访问到tomcat的测试页面。

    启动失败问题:

    在这里插入图片描述
    执行 journalctl -xe 查看失败信息,也可查看/var/log/messages文件查看相关信息

    1.无法写入pid
    在这里插入图片描述

     vim  /lib/systemd/system/keepalived.service
    

    在这里插入图片描述
    /usr/local/program/keepalived/var/run/keepalived.pid不存在,写入失败,修改为默认路径:

    PIDFile=/var/run/keepalived.pid  
    systemctl daemon-reload    #重新载入 systemd,扫描新的或有变动的单元
    

    2.(VI_1): ip address associated with VRID 25 not present in MASTER advert : 192.168.213.136

    配置文件中的evirtual_router_id 设置问题。同个集群中的virtual_router_id 必须相同 ,默认为51,不同集群的中的virtual_router_id必须不同。

    参考文章:https://www.cnblogs.com/taiyonghai/p/6728707.html

猜你喜欢

转载自blog.csdn.net/qq_35457078/article/details/84879338