miwaiwai

导航

统计

nginx搭建不同网段负载均衡

1.准备工作,准备源码包

       

 

网络规划:

  nginx1:192.168.192.128
  nginx2:
192.168.192.129
nginx:浮动ip 192.168.192.130
  tomcat1:192.168.193.128   
  tomcat1:192.168.194.128

 

操作系统环境:centos7

 

 2.修改操作系统yum源为阿里云(华为欧拉系统不需要这个步骤,但是在安装欧拉系统的时候需要安装兼容包和开发环境

  cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
  wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
  yum clean all
  yum makecache

  wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

  yum makecache

3.安装编译环境(华为欧拉系统不需要这个步骤,但是在安装欧拉系统的时候需要安装兼容包和开发环境)

  yum install zlib zlib-delvel
  yum install openssl openssl-devel
  yum install gcc-c++
  yum install zlib zlib-delvel
  yum install openssl openssl-devel
  yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel

4.分别解压源码包安装(本次app应用为web应用,以tomcat为例)

  4.1:tomcat和jdk为应用服务器的应用

                解压安装   

  tar -xvzf jdk-8u271-linux-x64.tar.gz
  mv  jdk1.8.0_271 /usr/local

    修改jdk环境变量

    

export JAVA_HOME=/usr/local/jdk1.8.0_271
export PATH=$JAVA_HOME/bin:$PATH

     service fireworkd stop

    source /etc/profile

   4.2解压tomcat

    tar -xvzf apache-tomcat-8.5.75.tar.gz

   并启动tomcat

    cd /root/apache-tomcat-8.5.75/bin

    ./start.sh(启动)

    ./stop(停止)

    配置tomcat自动启动:

              参考:https://www.cnblogs.com/miwaiwai/p/18445922

   4.3停止防火墙

    service fireworkd stop

    vi /etc/selinux/config 为disabled

    systemctl disable firewalld

     firewall-cmd --state

5.nginx安装

    5.1先安装流控插件pcre-8.45.zip

      解压:unzip pcre-8.45.zip

        cd pcre-8.45

         ./configure

         make

         make install

     5.2安装nginx  

        tar -xvzf nginx-1.24.0.tar.gz 

      cd nginx-1.24.0

        ./configure

        make

        make install

      5.3配置

      路径:/usr/local/nginx/conf/nginx.conf

复制代码
[root@localhost conf]# cat nginx.conf
#user  nobody;
worker_processes  8;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


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;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;
    gzip on;  
    gzip_min_length 1k;  
    gzip_buffers 16 64k;  
    gzip_http_version 1.1;  
    gzip_comp_level 6;  
    gzip_types text/xml text/javascript text/css text/plain application/json application/xml application/javascript;  
    gzip_vary on;  
  
    upstream app {
        server 192.168.193.128:8080; 
        server 192.168.194.128:8080; 
        #ip_hash;  
    }

    server {
        listen       8081;
        server_name  app;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            #root   html; #定义服务器的默认网站根目录位置  
            #index  index.html index.htm; #定义首页索引文件的名称 
            proxy_pass http://app; #请求转向backend_server 定义的服务器列表
            client_max_body_size 1000m;    #允许客户端请求的最大单文件字节数
            client_body_buffer_size 128k;  #缓冲区代理缓冲用户端请求的最大字节数

            proxy_connect_timeout 90s;  #nginx跟后端服务器连接超时时间(代理连接超时)
            proxy_send_timeout 120s;        #后端服务器数据回传时间(代理发送超时)
            proxy_read_timeout 90s;         #连接成功后,后端服务器响应时间(代理接收超时)
            proxy_buffer_size 128k;             #设置代理服务器(nginx)保存用户头信息的缓冲区大小
            proxy_buffers 4 256k;               #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
            #proxy_busy_buffers_size 256k;    #高负荷下缓冲大小(proxy_buffers*2)
            #proxy_temp_file_write_size 64k;  #设定缓存文件夹大小,大于这个值,将从upstream服务器传

            #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
            #proxy_set_header x-forwarded-for $remote_addr;  
            proxy_set_header x-real-ip $remote_addr;  
        }
        #location / {
            #root   /home/ftpuser/www;
            #index  index.html index.htm;
        #}

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}
[root@localhost conf]# 
复制代码

 

  5.4启动ngxin

   启动: /usr/local/nginx/sbin/nginx

   停止:/usr/local/nginx/sbin/nginx   -s stop

        5.5:测试

    1.通过nginx访问web应用

 通过app1:192.168.193.128:8080访问

  通过app1:192.168.194.128:8080访问

 

tomcat1服务器日志查看:

 tomcat2服务器日志查看:

   5.6nginx2的配置方法与nginx1一样,不在赘述了

    5.7将nginx加入到自启动

    

复制代码
[root@nginx1 conf]# cat /usr/lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target
 
[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
PrivateTmp=true
 
[Install]
WantedBy=multi-user.target
[root@nginx1 conf]# 
复制代码

 

   加入服务

  systemctl enable nginx

  systemctl daemon-reload

  停止服务

  systemctl stop nginx(如果不能停止,请用这个命令/usr/local/nginx/sbin/nginx -s stop停止)

  启动服务

        systemctl start nginx

6.keepalived配置

  网络规划:

  nginx1:192.168.192.128
  nginx2:192.168.192.129
   nginx:浮动ip 192.168.192.130

  6.1更新为网易的yum源这几个rpm包,或者直接安装rpm包(未测试)

  

keepalived-2.2.4-2.oe2203.x86_64      
lm_sensors-3.6.0-5.oe2203.x86_64      
net-snmp-1:5.9.1-5.oe2203.x86_64      
net-snmp-libs-1:5.9.1-5.oe2203.x86_64      
pcre-8.45-2.oe2203.x86_64(这个在之前安装nginx已经安装过,再装一遍也没有关系)

   rpm -ivh 

rpm -ivh  pcre-devel-8.45-5.oe2203sp3.x86_64.rpm
rpm -ivh keepalived-2.2.4-2.oe2203sp3.x86_64.rpm
rpm -ivh lm_sensors-3.6.0-7.oe2203sp3.x86_64.rpm
rpm -ivh net-snmp-5.9.1-6.oe2203sp3.x86_64.rpm
rpm -ivh net-snmp-libs-5.9.1-6.oe2203sp3.x86_64.rpm

 

  如果需要通过yum安装,yum源用网易的yum,本人是通过yum方式安装

复制代码
 mv /etc/yum.repos.d/openEuler.repo /etc/yum.repos.d/openEuler.repo.bak
rm -rf /etc/yum.repos.d/openEuler.repo

[  vi   /etc/resolv.conf
    # Generated by NetworkManager
    nameserver 8.8.8.8
    nameserver 8.8.4.4

  yum clean all

  yum makecache

 

复制代码

  修改yum源配置文件:

[root@nginx1 cache]#  vi /etc/yum.repos.d/openEuler.repo
复制代码
[root@nginx1 cache]# cat /etc/yum.repos.d/openEuler.repo
#generic-repos is licensed under the Mulan PSL v2.
#You can use this software according to the terms and conditions of the Mulan PSL v2.
#You may obtain a copy of Mulan PSL v2 at:
#    http://license.coscl.org.cn/MulanPSL2
#THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
#IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
#PURPOSE.
#See the Mulan PSL v2 for more details.
 
[OS]
name=OS
baseurl=https://mirrors.163.com/openeuler/openEuler-22.03-LTS/OS/$basearch/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.163.com/openeuler/openEuler-22.03-LTS/OS/$basearch/RPM-GPG-KEY-openEuler
 
[everything]
name=everything
baseurl=https://mirrors.163.com/openeuler/openEuler-22.03-LTS/everything/$basearch/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.163.com/openeuler/openEuler-22.03-LTS/everything/$basearch/RPM-GPG-KEY-openEuler
 
[EPOL]
name=EPOL
baseurl=https://mirrors.163.com/openeuler/openEuler-22.03-LTS/EPOL/main/$basearch/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.163.com/openeuler/openEuler-22.03-LTS/OS/$basearch/RPM-GPG-KEY-openEuler
 
[debuginfo]
name=debuginfo
baseurl=https://mirrors.163.com/openeuler/openEuler-22.03-LTS/debuginfo/$basearch/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.163.com/openeuler/openEuler-22.03-LTS/debuginfo/$basearch/RPM-GPG-KEY-openEuler
 
[source]
name=source
baseurl=https://mirrors.163.com/openeuler/openEuler-22.03-LTS/source/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.163.com/openeuler/openEuler-22.03-LTS/source/RPM-GPG-KEY-openEuler
 
[update]
name=update
baseurl=https://mirrors.163.com/openeuler/openEuler-22.03-LTS/update/$basearch/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.163.com/openeuler/openEuler-22.03-LTS/OS/$basearch/RPM-GPG-KEY-openEuler
[root@nginx1 cache]# 
复制代码

 

 

  yum install keepalived

 

配置检查脚本:

/usr/local/nginx/conf/CheckNginx.sh
复制代码
[root@nginx2 ~]# cat /usr/local/nginx/conf/CheckNginx.sh
#!/bin/bash
systemctl status nginx | grep "active (running)" > /dev/null
 
if [ $? -ne 0 ]; then
    systemctl restart nginx &> /dev/null
    sleep 1
    systemctl status nginx | grep "active (running)" > /dev/null
    if [ $? -ne 0 ]; then
        systemctl stop keepalived
    fi
fi
复制代码

 

 修改keepalived的配置文件(keepalived1和keepalived2配置一样)
复制代码
[root@nginx1 ~]#   cat /etc/keepalived/keepalived.conf
global_defs {
   router_id LVS_DEVEL2
}
vrrp_script chk_ngx {
        script "/usr/local/nginx/conf/CheckNginx.sh"
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.192.130
    }
    track_script {
        chk_ngx
    }

}
systemctl start keepalived
systemctl start nginx
复制代码

 

 

 启动停止命令:

systemctl start keepalived
systemctl stop keepalived
systemctl restart keepalived
systemctl status keepalived
 

 查看keeepalived的浮动ip是否已经绑定好

复制代码
[root@nginx1 ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:71:a8:fa brd ff:ff:ff:ff:ff:ff
    inet 192.168.192.128/24 brd 192.168.192.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet 192.168.192.130/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe71:a8fa/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
[root@nginx1 ~]#
复制代码

 

 最后做检查:
重启所有keepalive +nginx机器
  1>ps -ef |grep nginx
  2>ps -ef|grep keepalived
  3>通过页面访问nginx的浮动地址192.168.192.130
    3.1》是否够能正常访问
    3.2》关闭一个nginx+keepalived机器看看,nginx浮动ip是否能访问正常,浮动ip是否在2台机器之间进行切换(命令 ip add)
以上2个步骤需要在2台nginx分别进行测试
我在自己机器测试都是ok的,不在截图了

 ouler系统的网络命令

复制代码
systemctl stop NetworkManager
systemctl start NetworkManager
systemctl status NetworkManager
systemctl restart NetworkManager
nmcli connection down ens33
nmcli connection up ens33
nmcli connection show
 
复制代码

 

posted on   米歪歪  阅读(77)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示