nginx负载均衡配置详解(从安装到负载均衡)

nginx负载均衡配置详解(从安装到负载均衡)(1)

1 Nginx搭建

服务器相关搭建就省略了,直接上ng。

❶服务器创建Nginx目录并进入:

[root@localhost]# mkdir /soft && mkdir /soft/nginx/ [root@localhost]# cd /soft/nginx/

❷下载Nginx安装包

可以服务器远程工具上传已经下载好的压缩包,也用wget命令服务器在线下载压缩包:

[root@localhost]# wget HTTPS://nginx.org/download/nginx-1.21.6.tar.gz wget命令的可通过yum命令安装:

不支持wget命令的,需要用yum命令安装wget支持:

[root@localhost]# yum -y install wget

❸命令解压Nginx压缩包:

[root@localhost]# tar -xvzf nginx-1.21.6.tar.gz

❹下载并安装nginx所需的依赖库和包:

[root@localhost]# yum install --downloadonly --downloaddir=/soft/nginx/ gcc-c [root@localhost]# yum install --downloadonly --downloaddir=/soft/nginx/ pcre pcre-devel4 [root@localhost]# yum install --downloadonly --downloaddir=/soft/nginx/ zlib zlib-devel [root@localhost]# yum install --downloadonly --downloaddir=/soft/nginx/ openssl openSSL-devel

也可yum命令一键安装:

[root@localhost]# yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel

然后用rpm命令依次构建每个依赖包;或用以下下指令一键安装全部依赖包:

[root@localhost]# rpm -ivh --nodeps *.rpm

❺cd到nginx目录,执行Nginx配置脚本,提前配置好环境便于后面安装,默认位于/usr/local/nginx/目录:

[root@localhost]# cd nginx-1.21.6 [root@localhost]# ./configure --prefix=/soft/nginx/

❻执行命令编译并安装Nginx:

[root@localhost]# make && make install

❼回到/soft/nginx/目录,用ls可看到安装nginx后生成的文件。

❽修改安装后conf目录下的nginx.conf:

[root@localhost]# vi conf/nginx.conf 修改端口号:listen 80; 修改IP地址:server_name 你当前机器的本地IP(线上配置域名);

❾制定Nginx配置文件并启动:

[root@localhost]# sbin/nginx -c conf/nginx.conf [root@localhost]# ps aux | grep nginx

Nginx其他操作命令:

sbin/nginx -t -c conf/nginx.conf # 检测配置文件是否正常 sbin/nginx -s reload -c conf/nginx.conf # 修改配置后平滑重启 sbin/nginx -s quit # 优雅关闭Nginx,会在执行完当前的任务后再退出 sbin/nginx -s stop # 强制终止Nginx,不管当前是否有任务在执行

❿放开80端口,刷新服务器防火墙:

[root@localhost]# firewall-cmd --zone=public --add-port=80/tcp --permanent [root@localhost]# firewall-cmd --reload [root@localhost]# firewall-cmd --zone=public --list-ports

⓫浏览器输入Nginx配的IP或域名访问:

如果你看到了Nginx欢迎界面,那么恭喜你安装成功。

2 配置HTTPS ssl证书

安装SSL支持

cd到nginx的解压目录:/home/software/nginx-*。

原来的不动,新增ssl模块。

./configure \ --prefix=/usr/local/nginx \ --pid-path=/var/run/nginx/nginx.pid \ --lock-path=/var/lock/nginx.lock \ --error-log-path=/var/log/nginx/error.log \ --http-log-path=/var/log/nginx/access.log \ --with-http_gzip_static_module \ --http-client-body-temp-path=/var/temp/nginx/client \ --http-proxy-temp-path=/var/temp/nginx/proxy \ --http-fastcgi-temp-path=/var/temp/nginx/fastcgi \ --http-uwsgi-temp-path=/var/temp/nginx/uwsgi \ --http-scgi-temp-path=/var/temp/nginx/scgi \ --with-http_ssl_module

编译和安装。

make make install

配置HTTPS SSL证书支持

把ssl证书 *.crt 及 私钥 *.key 复制到/usr/local/nginx/conf目录中。

修改server 配置,新增监听 443 端口:

server { listen 443; server_name www.imoocdsp.com; # 开启ssl ssl on; # 配置ssl证书 ssl_certificate 1_www.imoocdsp.com_bundle.crt; # 配置证书秘钥 ssl_certificate_key 2_www.imoocdsp.com.key; # ssl会话cache ssl_session_cache shared:SSL:1m; # ssl会话超时时间 ssl_session_timeout 5m; # 配置加密套件,写法遵循 openssl 标准 ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; ssl_prefer_server_ciphers on; location / { proxy_pass http://tomcats/; index index.html index.htm; } }

3 upstream命令配置参数

slow_start:单位秒,权重在指定时间内从1上升到指定值,不适用于hash负载均衡、随机负载均衡; 如果在 upstream 中只有一台 server,则该参数失效 max_conns:限制最大同时连接数 1.11.5之前只能用于商业版 down:禁止访问 max_fails:表示失败几次,则标记server已宕机,剔除上游服务 默认值1 fail_timeout:表示失败的重试时间 默认值10 backup:备用机 只有在其他服务器无法访问的时候才能访问到 不适用于hash负载均衡、随机负载均衡

keepalived:保持连接数

upstream [proxyName] { server 192.168.110.110:8080 weight=1; server 192.168.110.111:8080 weight=10; keepalive 50; #保持的连接数 } server { listem 80; server_name www.tomcats.com; location / { proxy_pass http://tomcats; proxy_http_version 1.1; #连接的协议版本 proxy_set_header Connection ""; 清空连接请求头 } }

浏览器缓存控制

server { listem 80; server_name www.tomcats.com; location / { proxy_pass http://tomcats; expires 10s; #浏览器缓存10秒钟 #expires @22h30m #在晚上10点30的时候过期 #expires -1h #缓存在一小时前时效 #expires epoch #不设置缓存 #expires off #缓存关闭,浏览器自己控制缓存 #expires max #最大过期时间 } }

反向代理缓存

upstream [proxyName] { server 192.168.1.173:8080 weight=1; server 192.168.1.174:8080 weight=5; server 192.168.1.175:8080 weight=2; } #proxy_cache_path 设置缓存保存的目录的位置 #keys_zone设置共享内以及占用的空间大小 #mas_size 设置缓存最大空间 #inactive 缓存过期时间,错过此时间自动清理 #use_temp_path 关闭零时目录 proxy_cache_path /usr/local/nginx/upsteam_cache keys_zone=mycache:5m max_size=1g inactive=8h use_temp_path=off; server { listem 80; server_name www.tomcats.com; #开启并使用缓存 proxy_cache mycache; #针对200和304响应码的缓存过期时间 proxy_cache_valid 200 304 8h; location / { proxy_pass http://tomcats; } }

4 配置反向代理

upstream配置

upstream [proxyName] { server 192.168.110.108:8080; server 192.168.110.110:8080; }

server配置

server { listem 80; server_name www.baidu.com; location / { proxy_pass http://baidu; } }

5 配置负载均衡

nginx默认的负载均衡是轮训。

加权轮询负载均衡

upstream [proxyName] { server 192.168.110.110:8080 weight=1; server 192.168.110.111:8080 weight=10; }

权重越高,轮询的几率越大。

hash负载均衡

upstream [proxyName] { ip_hash server 192.168.110.110:8080; server 192.168.110.111:8080; }

hash算法实际上只会计算 192.168.110这段做哈希

url hash负载均衡

upstream [proxyName] { hash $request_url; server 192.168.110.110:8080; server 192.168.110.111:8080; }

最小连接负载均衡

upstream [proxyName] { least_conn; server 192.168.110.110:8080; server 192.168.110.111:8080; }

6 HA NGINX(双机热备)

keepalived安装

下载。

https://www.keepalived.org/download.html

解压。

tar -zxvf keepalived-2.0.18.tar.gz

用configure命令配置安装目录与核心配置文件所在位置。

./configure --prefix=/usr/local/keepalived --sysconf=/etc

prefix:keepalived安装的位置sysconf:keepalived核心配置文件所在位置,固定位置,改成其他位置则keepalived启动不了,/var/log/messages中会报错 sysconf:keepalived核心配置文件所在位置,固定位置,改成其他位置则keepalived启动不了,/var/log/messages中会报错

配置中可能会出现警告信息,如下:

*** WARNING - this build will not support IPVS with IPv6. Please install libnl/libnl-3 dev libraries to support IPv6 with IPVS. # 安装libnl/libnl-3依赖 yum -y install libnl libnl-devel

keepalived编译安装。

make && make install

配置文件位置: /etc/keepalived/keepalived.conf

也可以以用一下命令查看配置文件位置。

whereis keepalived

进入sbin目录,启动keepalived。

./keepalived

keepalived配置nginx自动重启

在/etc/keepalived/下创建脚本check_nginx_alive_or_not

#!/bin/bash A=`ps -C nginx --no-header |wc -l` # 判断nginx是否宕机,如果宕机了,尝试重启 if [ $A -eq 0 ];then /usr/local/nginx/sbin/nginx # 等待一小会再次检查nginx,如果没有启动成功,则停止keepalived,使其启动备用机 sleep 3 if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then killall keepalived fi fi

赋予运行权限

chmod x /etc/keepalived/check_nginx_alive_or_not.sh

配置keepalived监听nginx脚本

vrrp_script check_nginx_alive { script "/etc/keepalived/check_nginx_alive_or_not.sh" interval 2 # 每隔两秒运行上一行脚本 weight 10 # 如果脚本运行失败,则升级权重 10 }

在vrrp_instance中新增监控的脚本

track_script { check_nginx_alive # 追踪 nginx 脚本 }

重启Keepalived使得配置文件生效

systemctl restart keepalived

keepalived 主机配置

vim keepalived.conf 编辑keepalived配置文件

global_defs { # 路由id:当前安装keepalived的节点主机标识符,保证全局唯一 router_id keep_171 } vrrp_instance VI_1 { # 表示状态是MASTER主机还是备用机BACKUP state MASTER # 该实例绑定的网卡 interface ens33 # 保证主备节点一致即可 virtual_router_id 51 # 权重,master权重一般高于backup,如果有多个,那就是选举,谁的权重高,谁就当选 priority 100 # 主备之间同步检查时间间隔,单位秒 advert_int 2 # 认证权限密码,防止非法节点进入 authentication { auth_type PASS auth_pass 1111 } # 虚拟出来的ip,可以有多个(vip) virtual_ipaddress { 192.168.1.161 } }

查看网卡信息命令

ip addr

重启keepalived

查看进程

ps -ef|grep keepalived

查看vip(虚拟ip):网卡ens33下,多了一个192.168.110.110,这个就是虚拟ip

把keepalived注册为系统服务

拷贝配置文件

将keepalived目录下etc/init.d/keepalived拷贝到/etc/init.d/下 将keepalived目录下etc/sysconfig/keepalived拷贝到/etc/sysconfig/下

刷新systemctl

systemctl daemon-reload

启动、停止、重启keepalived命令

#启动 systemctl start keepalived.service #停止 systemctl stop keepalived.service #重启 systemctl restart keepalived.service

实现双机主备高可用

双机主备就是配置两台nginx,互相为主备,当主机宕机了,自动启用备机。

修改备机配置

global_defs { router_id keep_172 } vrrp_instance VI_1 { # 备用机设置为BACKUP state BACKUP interface ens33 virtual_router_id 51 # 权重低于MASTER priority 80 advert_int 2 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { # 注意:主备两台的vip都是一样的,绑定到同一个vip 192.168.110.110 } }

启动 Keepalived。

访问vip即可访问主机,当主机失效时访问vip就会访问到备机。

keepalived双主热备

配置DNS轮询,在同一个域名下配置两个ip。

第一台主机配置如下

global_defs { router_id keep_171 } vrrp_instance VI_1 { state MASTER i nterface ens33 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.110.110 } } vrrp_instance VI_2 { state BACKUP interface ens33 virtual_router_id 52 priority 80 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.110.111 } }

第二台主机配置如下

global_defs { router_id keep_172 } vrrp_instance VI_1 { state BACKUP interface ens33 virtual_router_id 51 priority 80 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.110.110 } } vrrp_instance VI_2 { state MASTER interface ens33 virtual_router_id 52 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.110.111 } }

重启两台Keepalived

systemctl restart keepalived

4 LVS实现Nginx高可用负载均衡

LVS是Linux Virtual Server简称。

LVS Nginx的好处

1、Nginx接收请求来回,LVS可以只接受不响应 2、lvs基于四层负载均衡,工作效率较Nginx的七层负载更高,使用LVS搭建Nginx集群,可以提高性能 3、四层负载均衡无法对信息处理,只能通过ip 端口的形式转发,所以需要七成负载进行数据的处理

LVS的三种模式

nginx负载均衡配置详解(从安装到负载均衡)(2)

LVS-DR模式搭建

1、先关闭掉服务器上网络配置管理器,避免网络接口冲突

systemctl stop NetworkManager systemctl disable NetworkManager

2、创建子接口(创建LVS的虚拟ip)

进入网卡配置目录/etc/sysconfig/network-scripts/,找到网卡配置文件,这里以ifcfg-ens33为例,拷贝并创建子接口

cp ifcfg-ens33 ifcfg-ens33:1

修改子接口配置如下

nginx负载均衡配置详解(从安装到负载均衡)(3)

3、安装ipvsadm

centos已集成LVS,安装ipvsadm即可

ipvsadm是管理集群的工具,通过ipvs可以管理集群,查看集群等操作

yum install ipvsadm

4、配置服务器(RS)的虚拟ip

进入网卡配置目录/etc/sysconfig/network-scripts/,找到ifcfg-lo,拷贝并创建子接口

cp ifcfg-lo ifcfg-lo:1

修改子接口配置如下

DEVICE="lo:1" IPADDR=192.168.110.110 NETMASK=255.255.255.255 NETWORK=127.0.0.0 BROADCAST=127.255.255.255 ONBOOT="yes" NAME=loopback

重启网络服务成功后,ip addr 查看一下,你会发现多了一个ip,也就是虚拟ip(vip)

5、为服务器(RS)配置arp

ARP响应级别与通告行为参数说明

arp-ignore:ARP响应级别(处理请求) 0:只要本机配置了ip,就能响应请求 1:请求的目标地址到达对应的网络接口,才会响应请求 arp-announce:ARP通告行为(返回响应) 0:本机上任何网络接口都向外通告,所有的网卡都能接受到通告 1:尽可能避免本网卡与不匹配的目标进行通告2:只在本网卡通告

打开sysctl.conf:

vim /etc/sysctl.con

配置所有网卡、默认网卡以及虚拟网卡的arp响应级别和通告行为,分别对应:all,default,lo

# configration for lvs net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.default.arp_ignore = 1 net.ipv4.conf.lo.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2 net.ipv4.conf.default.arp_announce = 2 net.ipv4.conf.lo.arp_announce = 2

刷新配置文件

sysctl -p

增加一个网关,用于接收数据报文,当有请求到本机后,会交给lo去处理

route add -host 192.168.110.110 dev lo:1

将网关添加至开机启动

echo "route add -host 192.168.110.110 dev lo:1" >> /etc/rc.local

6、使用ipvsadm配置集群规则

创建LVS节点,用户访问的集群调度者

ipvsadm -A -t 192.168.110.110:80 -s rr -p 5

-A:添加集群 -t:tcp协议ip地址:设定集群的访问 ip:也就是LVS的虚拟ip -s:设置负载均衡的算法, rr:表示轮询 -p:设置连接持久化的时间,在指定时间内同一个用户的请求会访问到同一个服务器中

创建多台RS真实服务器

ipvsadm -a -t 192.168.110.110:80 -r 192.168.110.111:80 -g ipvsadm -a -t 192.168.110.110:80 -r 192.168.110.111:80 -g

-a:添加真实服务器 -t:tcp协议 -r:真实服务器的ip地址 -g:设定DR模式

保存到规则库,否则重启失效

ipvsadm -S

检查集群

#查看集群列表 ipvsadm -Ln #查看集群状态 ipvsadm -Ln --stats

一些其他命令

# 重启ipvsadm,重启后需要重新配置 service ipvsadm restart # 查看持久化连接 ipvsadm -Ln --persistent-conn # 查看连接请求过期时间以及请求源ip和目标ip ipvsadm -Lnc # 设置tcp tcpfin udp 的过期时间(一般保持默认) ipvsadm --set 1 1 1 # 查看过期时间 ipvsadm -Ln --timeout

7、访问虚拟ip,完成LVS搭建

LVS的负载均衡算法

nginx负载均衡配置详解(从安装到负载均衡)(4)

4 Keepalived Lvs Nginx实现高可用集群负载均衡搭建

服务器配置了LVS Nginx,要清空ipvsadm配置

ipvsadm -C

服务器配置了Keepalived Nginx双主集群,要除掉Keepalived中原先的配置。

keepalived配置Master LVS

修改keepalived的配置

global_defs { router_id keep_151 } vrrp_instance VI_1 { state MASTER interface ens33 virtual_router_id 41 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.110.110 } } #配置集群访问的ip 端口,端口和nginx保持一致 virtual_server 192.168.110.110 80{ #健康检查的时间,单位:秒 delay_loop 6 #配置负载均衡的算法,默认的轮询 lb_algo rr #设置LVS的模式 NAT|TUN|DR lb-kind DR #设置会话持久化的时间 persistence_timeout 5 #协议 protocol TCP #配置负载均衡的真实服务器,也就是nginx节点的具体的ip地址 real_server 192.168.110.111 80{ #轮询权重配比 weight 1 #设置健康检查 TCP_CHECK { #检查80端口 connect_port 80 #超时时间 connect_timeout 2 #重试次数 nb_get_retry 2 #重试间隔时间 delay_before_retry 3 } } real_server 192.168.110.111 80{ weight 1 TCP_CHECK { connect_port 80 connect_timeout 2 nb_get_retry 2 delay_before_retry 3 } } }

启动/重启keepalived

systemctl restart keepalived

keepalived配置Backup LVS

在备用机上如下配置

global_defs { router_id keep_152 } vrrp_instance VI_1 { state BACKUP interface ens33 virtual_router_id 41 priority 50 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.110.110 } } #配置集群访问的ip 端口,端口和nginx保持一致 virtual_server 192.168.110.110 80{ #健康检查的时间,单位:秒 delay_loop 6 #配置负载均衡的算法,默认的轮询 lb_algo rr #设置LVS的模式 NAT|TUN|DR lb-kind DR #设置会话持久化的时间 persistence_timeout 5 #协议 protocol TCP #配置负载均衡的真实服务器,也就是nginx节点的具体的ip地址 real_server 192.168.110.111 80{ #轮询权重配比 weight 1 #设置健康检查 TCP_CHECK { #检查80端口 connect_port 80 #超时时间 connect_timeout 2 #重试次数 nb_get_retry 2 #重试间隔时间 delay_before_retry 3 } } real_server 192.168.110.111 80{ weight 1 TCP_CHECK { connect_port 80 connect_timeout 2 nb_get_retry 2 delay_before_retry 3 } } }

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页