nginx跨多个应用程序实例的负载均衡介绍

[复制链接]

826

主题

826

帖子

446

积分

中级会员

Rank: 3Rank: 3

积分
446
分享到:
发表于 2022-6-7 10:46:26 | 显示全部楼层 |阅读模式
下文给大家带来,希望能够给大家在实际运用中带来一定的帮助,负载均衡涉及的东西比较多,理论也不多,网上有很多书籍,今天我们就用Vecloud在行业内累计的经验来做一个解答。
环境介绍配置nginx负载均衡器因会用到多台云服务器来进行,所以下面我会用到docker,具体docker的使用请移步docker实战
系统环境:root@ubuntu:~# lsb_release -a     #查看系统版本No LSB modules are available.Distributor ID: UbuntuDescription:  Ubuntu 19.10Release:  19.10Codename:  eoanroot@ubuntu:~# uname -a     #查看系统是多少位Linux ubuntu 5.3.0-18-generic #19-Ubuntu SMP Tue Oct 8 20:14:06 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
docker版本和相关操作系统版本docker版本:root@ubuntu:~# docker --version     #查看docker版本Docker version 19.03.3, build a872fc2f86操作系统版本:[root@57b669db1de1 /]# cat /etc/redhat-release   #查看系统版本CentOS Linux release 8.0.1905 (Core) [root@57b669db1de1 /]# uname -aLinux 57b669db1de1 5.3.0-18-generic #19-Ubuntu SMP Tue Oct 8 20:14:06 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux软件版本:nginx版本:root@ubuntu:~# nginx -v    查看nginx版本nginx version: nginx/1.16.1 (Ubuntu)docker中nginx版本:[root@57b669db1de1 /]# nginx -v   #查看nginx版本nginx version: nginx/1.14.1安装nginx具体nginx的安装请参考nginx安装部署
安装依赖软件更新软件包:root@ubuntu:~# apt-get update安装依赖软件:root@ubuntu:~# apt -y install openssl libssl-dev libpcre3 libpcre3-dev zlib1g-dev make gcc编译安装nginx下载nginx:root@ubuntu:~# wget http:#nginx.org/download/nginx-1.17.6.tar.gz解压:root@ubuntu:/opt# tar zxf nginx-1.17.6.tar.gz root@ubuntu:/opt# cd nginx-1.17.6/root@ubuntu:/opt/nginx-1.17.6# ls    #列出目录auto CHANGES CHANGES.ru conf configure contrib html LICENSE man README srcroot@ubuntu:/opt/nginx-1.17.6# 配置:root@ubuntu:/opt/nginx-1.17.6# ./configure --prefix=/usr/local/nginx编译以及部署:root@ubuntu:/opt/nginx-1.17.6# make && make installroot@ubuntu:/opt/nginx-1.17.6# cd /usr/local/nginx/root@ubuntu:/usr/local/nginx# lsconf html logs sbin启动:root@ubuntu:/usr/local/nginx# ln sbin/nginx /usr/local/sbin/    #创建nginx软连接,设置为命令root@ubuntu:/usr/local/nginx# nginx   #启动nginxroot@ubuntu:/usr/local/nginx# netstat -anpl | grep nginx    #查看nginx端口是否开启root@ubuntu:/usr/local/nginx# lsof -i:80      #查看80端口是否开启docker安装nginx创建容器下载镜像:root@ubuntu:~# docker pull registry.cn-beijing.aliyuncs.com/blxt/centos创建容器并启动:root@ubuntu:~# root@ubuntu:~# docker run -itd --name nginx1 --privileged registry.cn-beijing.aliyuncs.com/blxt/centos /sbin/initroot@ubuntu:~# docker ps -a   #查看容器是否创建并启动CONTAINER ID    IMAGE                     COMMAND       CREATED       STATUS            PORTS        NAME6801d55682a3    registry.cn-beijing.aliyuncs.com/blxt/centos  "/sbin/init"    5 minutes ago    Up 5   minutes              nginx1相同方法创建第二个容器:root@ubuntu:~# docker run -itd --name nginx2 --privileged registry.cn-beijing.aliyuncs.com/blxt/centos /sbin/initroot@ubuntu:~# docker ps -a root@ubuntu:~# root@ubuntu:~# docker ps -aCONTAINER ID    IMAGE                     COMMAND       CREATED       STATUS            PORTS        NAMES1d31d3fc0ec1    registry.cn-beijing.aliyuncs.com/blxt/centos  "/sbin/init"    4 minutes ago    Up 4   minutes              nginx26801d55682a3    registry.cn-beijing.aliyuncs.com/blxt/centos  "/sbin/init"    5 minutes ago    Up 5   minutes              nginx1连接到容器:root@ubuntu:~# docker exec -it nginx1 /bin/bashroot@ubuntu:~# docker exec -it nginx2 /bin/bash   [root@6801d55682a3 /]# hostname nginx1     #更改主机名称[root@6801d55682a3 /]# bash     #使更改的名称生效[root@1d31d3fc0ec1 /]# hostname nginx2[root@1d31d3fc0ec1 /]# bash安装nginx更新软件包:[root@nginx1 /]# yum clean all   #清空缓存[root@nginx1 /]# yum makecache   #更新软件包安装nginx:[root@nginx1 /]# yum -y install nginx[root@nginx1 /]# rpm -qa | grep nginx    #查看是否已经安装启动nginx:[root@nginx1 /]# systemctl start nginx[root@nginx1 /]# netstat -anpl | grep nginx   #查看nginxnn端口是否开启[root@nginx1 /]# lsof -i:80   #查看80端口是否开启安装第二个nginx使用相同方法即可!此处省略!!!访问nginx:[root@nginx1 /]# curl 127.0.0.1修改网页内容查看网页存在目录:[root@nginx1 nginx]# more nginx.conf    #查看配置文件在配置文件中找到下面root行,后面目录即网页文件存放目录root     /usr/share/nginx/html;[root@nginx1 html]# cd /usr/share/nginx/html/[root@nginx1 html]# ls   #列出目录内容404.html 50x.html index.html nginx-logo.png poweredby.png[root@nginx1 html]# echo nginx1 > index.html    #清空nginx主页文件内容,并重新写入内容为nginx1nginx2如同,注意不要设置一样的主页内容访问nginx:[root@nginx1 html]# curl 127.0.0.1nginx1[root@nginx2 ~]# curl 127.0.0.1nginx2修改配置文件nginx1修改内容如下: server {listen    80;server_name www.nginx1.com;      //设置域名#charset koi8-r;#access_log logs/host.access.log main;location / {  root  html;  index index.html index.htm;  }}nginx2修改内容如下: server {listen    80;server_name www.nginx2.com;      //设置域名#charset koi8-r;#access_log logs/host.access.log main;location / {  root  html;  index index.html index.htm;  }}配置http负载均衡器要开始使用NGINX Plus或NGINX开源对一组服务器的HTTP流量进行负载均衡,使用upstream指令定义该组,该指令放置在http上下文中,proxy_pass指令用来转发请求到后端一般指定在loction上下文中
基本配置方法:
http {  upstream nginx {      #test为组名    server www.nginx1.com ;   #server用来指定后端服务器的访问地址,一般指定域名、ip、端口,域名和ip二选一,端口可忽略    server www.nginx2.com weight=5;   #weight指定权重值    server www.nginx3.com down;     #down用来停止对此服务器的转发    ......省略其他配置  }  server{    location / {      proxy_pass http://nginx;    #http://nginx为转发那个组的后端服务器      ......省略其他配置    }    ......省略其他配置  }}nginx做负载均衡官方提供了4种方法,下面逐一介绍这四种方法:
Round Robin请求在服务器之间平均分配,同时考虑了服务器权重。默认情况下使用此方法(没有启用它的指令)
默认配置就是Round Robin,配置方法:
http {upstream nginx {      #test为组名  server www.nginx1.com ;   #server用来指定后端服务器的访问地址  server www.nginx2.com ;   #weight指定权重值  ......省略其他配置}server{  location / {    proxy_pass http://nginx;    #http://nginx为转发那个组的后端服务器    ......省略其他配置  }  ......省略其他配置}}最少连接将活动连接最少的请求发送到服务器,也是在考虑到服务器的权重问题才设置的这种方法
配置方法:
http {upstream nginx {      #test为组名    less_conn ;   server www.nginx1.com ;   #server用来指定后端服务器的访问地址  server www.nginx2.com ;   #weight指定权重值  ......省略其他配置}server{  location / {    proxy_pass http://nginx;    #http:#nginx为转发那个组的后端服务器    ......省略其他配置  }  ......省略其他配置}}ip_hash从客户端IP地址确定向其发送请求的服务器。在这种情况下,可以使用IPv4地址的前三个八位位组或整个IPv6地址来计算哈希值。该方法保证了来自同一地址的请求将到达同一服务器,除非它不可用。
配置方法:
http {upstream nginx {      #test为组名    ip_hash ;   server www.nginx1.com ;   #server用来指定后端服务器的访问地址  server www.nginx2.com ;   #weight指定权重值  ......省略其他配置}server{  location / {    proxy_pass http://nginx;    #http:#nginx为转发那个组的后端服务器    ......省略其他配置  }  ......省略其他配置}}hash向其发送请求的服务器是根据用户定义的键确定的,该键可以是文本字符串,变量或组合。
配置方法:
http {upstream nginx {      #test为组名   hash $request_uri consistent;  server www.nginx1.com ;   #server用来指定后端服务器的访问地址  server www.nginx2.com ;   #weight指定权重值  ......省略其他配置}server{  location / {    proxy_pass http://nginx;    #http://nginx为转发那个组的后端服务器    ......省略其他配置  }  ......省略其他配置}}
云专线_海外IDC http://www.vecloud.com/

使用高级回帖 (可批量传图、插入视频等)快速回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则   Ctrl + Enter 快速发布  

发帖时请遵守我国法律,网站会将有关你发帖内容、时间以及发帖IP地址等记录保留,只要接到合法请求,即会将信息提供给有关政府机构。
快速回复 返回顶部 返回列表