nginx代理几台web服务器的实现负载均衡

1:准备工作    

准备三台主机: 

系统为:CentOS7.4(系统和IP自己定义修改以此为例) 

CentOS 7.4 192.168.194.100 服务端 

CentOS 7.4 192.168.194.10  客户端1 

CentOS 7.4 192.168.194.20  客户端2 

方便使用,修改好主机名保证服务端192.168.194.100和客户端1 192.168.194.10和客户端2 192.168.194.20能通保证三台主机能通外网(安装nginx所需要的依赖包时,要用到) 


安装nginx流程 

1:yum innstall gcc gcc-c++ glibc automake pcre zlip zlib-devel openssl-devel pcre-devel wget lrzsz 

2:wget -chttp://nginx.org/download/nginx-1.16.1.tar.gz 

3:tar -xzvf nginx-1.16.0.tar.gz -C /usr/local/ 

4:nginx-1.16.0/ 

5:./configure --prefix=/usr/local/nginx--with-http_ssl_module --with-http_stub_status_module 

6:make && make install 

7:/usr/local/nginx/sbin/nginx -t 

8:/usr/local/nginx/sbin/nginx 

9:/usr/local/nginx/sbin/nginx -s reload  

10:netstat -lntup | grep nginx       

1:安装nginx所需要的依赖包 

2:下载ngnix软件 

3:解压缩包到你要安装的路径 

4:cd切换到解压后的路径 

5-6:编译安装 

7:测试ngnix是否安装成功 

8:启动ngnix

9:修改任何nginx配置文件之后要reload重新加载服务 

10:查看nginx对应端口是否起来,有无异常   

1:安装系统所需要的依赖包 

yum install gcc gcc-c++ glibc automake pcre zlib zlib-developenssl-devel pcre-devel wget lrzsz   


 2:登录nginx官网下载nginx  


1:下载到桌面,rz命令传到系统 

2:复制软件链接下载 


3:解压缩包到你要安装的路径(我的所有服务都安装在/usr/local下以此为例)  


4:切换到你解压后的路径  


5-6:编译安装./configure--prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module  


7:安装完毕,测试:/usr/local/nginx/sbin/nginx  -t出现test is successful ,说明你的nginx已经安装成功 

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

9:netstat -lntup 或者ss -lntup 查看端口有没有起来。Nginx默认端口为80也修改默认端口路径,可以把端口改为其他端口,提高安全性Vim /usr/local/nginx/conf/nginx.conf 

10:查看服务对应的端口是否起来    


浏览器输入:http://192.168.194.10:80另外两台重复这样操作 


自动化安装nginx:     

人工安装耗时耗力,尤其要安装的达到几十台甚至上百台,不可能还是人工安装,可以用脚本安装,可以用自动化工具ansible等推送脚本安装,可以在服务端192.168.194.100上用ansible等自动化运维工具推送远程执行脚本安装,这样不用登陆客户端192.168.194.10和20,就可以完成在客户端的安装,这样既可以完成自动化运维工作省时省力,又可以锻炼自己自动化运维能力。Ansible工具是轻量级自动化工具,适合中小型企业,相比比zabbix以及其他自动化工具,比较好的优点就是不用每台客户端服务器系统上安装agent客户端工具,知道客户端系统的IP 用户名密码。。即可,基于SSH协议来开发的。

下面我们以ansible为例  能通外网,即可用yum安装ansible

要用ansible往其他客户端推送各种功能,必须保证服务端要能登录客户端系统,实现的方式有2种 

1:ssh免密钥登录 

2:在服务端ansible配置文件hosts里面添加客户端的IP、端口号、用户名、密码   

1:服务器和客户端系统之间免密钥登录方法:

在服务端ansible192.168.194.100端 执行名ssh-keygen 生产公钥和私钥的密钥对:密钥对默认存放路径在cd /root/.ssh/  


将公钥传送到客户端: ssh-copy-id root@192.168.194.10 ssh-copy-id root@192.168.194.10 输入客户端密码  

正常ssh远程其他主机要用户名密码, 

将公钥传送到客户端之后,会发现ssh远程主机直接免密码就登陆了 

ssh root@192.168.194.10  


然后在host里添加客户端的IP即可   


2:用户密码登录:在服务端 ansible服务的hosts文件里面:/etc/ansible/hosts里面添加客户端的端口号、用户名、密码   


 Ansible基本用法 

 -m:要执行的模块,默认为command shell 

-a:模块的参数 

ansible 常用模块详解 

ansible 常用的模块有:ping、yum、template、copy、user、group、service、raw、command、shell、script 

ansible raw 、command 、shell 的区别: 

shell 模块调用的/bin/sh指令执行 

1.command 模块不是调用的shell的指令,所以没有bash’的环境变量

2.raw很多地方和shell类似,更多的地方建议使用shell和command模块

模板:ansible (单个IP或者分组)-m (模块名称) -a (模块的参数)


执行单个IP,远程操作只在这一个IP系统上操作   


如果有多个IP系统同时操作,一个一个执行比较费时间,可以把多个IP加到分组,然后远程操作执行这个分组,那么分组下的IP都操作


Nginx自动安装脚本 

 #!/bin/bash 

NGINX_SOFT="nginx-1.16.1.tar.gz" 

NGINX_URL="http://nginx.org/download/" 

NGINX_MAKE="./configure--prefix=/usr/local/nginx --with-http_ssl_module--with-http_stub_status_module" 

NGINX_DES="/usr/local/nginx" 

NGNIX_DIR=`echo$NGINX_SOFT|sed 's#.tar.*##g'` 

yum install gccgcc-c++ glibc automake pcre zlip zlib-devel openssl-devel pcre-devel wget lrzsz 

 if [ -e$NGINX_DES/sbin/nginx ];then        

echo "The nginx server is alreadyexists"        

exit 0 

 fi 

 wget -c$NGINX_URL/$NGINX_SOFT

 tar -xzvf$NGINX_SOFT

 cd $NGNIX_DIR 

 $NGINX_MAKE 

 if [ $? -eq 0];then        

make && make install        

$NGINX_DES/sbin/nginx -t        

$NGINX_DES/sbin/nginx 

else        

echo "The nginx configurefailed" 

exit 

fi 

netstat -lntup|grep nginx


NGINX_SOFT="nginx-1.16.1.tar.gz"    指定软件版本NGINX_URL="http://nginx.org/download/"   指定下载路径  

NGINX_MAKE="./configure --prefix=/usr/local/nginx--with-http_ssl_module --with-http_stub_status_module"    编译安装命令 

NGINX_DES="/usr/local/nginx"   切换安装后的路径  

NGNIX_DIR=`echo $NGINX_SOFT|sed 's#.tar.*##g'   sed截取文件名字 

yum install gcc gcc-c++ glibc automake pcre zlip zlib-developenssl-devel pcre-devel wget lrzsz    安装软件所需要的依赖包 

 if [ -e $NGINX_DES/sbin/nginx ];then   if判断,如果这个路径已经有安装nginx,exit退出安装        

echo "Thenginx server is already exists"   提示nginx已经存在,exit退出,不安装;如果没有安装,脚本继续往下走        

exit 0fiwget -c $NGINX_URL/$NGINX_SOFT    下载软件版本 

tar -xzvf $NGINX_SOFT   解压软件压缩包 

cd $NGNIX_DIR   切换到解压后的路径 

$NGINX_MAKE   编译安装 

if [ $? -eq 0 ];then   如果$?=0.说明上一个命令安装成功,执行编译安装,脚本继续往下走      make &&make install          

$NGINX_DES/sbin/nginx -t     测试是否成功成功                                    $NGINX_DES/sbin/nginx       启动Nginx服务else          

echo "Thenginx configure failed"    如果$不=0,说明上个命令没有执行成功,脚本执行停止,退出,输入安装失败 

 exit

 fi 

netstat -lntup| grep nginx   查看端口是否起来 

ansible test -m script -a '/root/nginx.sh' -m script:    是执行存在ansible服务端系统上的的脚本  

-m shell:  是执行存在客户端系统上的脚本说 

脚本存在/root/下,执行用全路径 


ansible test -m script -a '/root/nginx.sh' 


Ngnix默认访问的页面是一样的,两台页面一样,观察不方便,为了后面负载均衡轮询时候看的更清楚,随便修改两台客户端index.html页面,nginx默认网页是/usr/local/nginx/html/index.html我们改为10 10  和 20 20 ,后面负载均衡轮询时候看的更清楚;


服务端见建两个文件目录,防两个index.html 

client1 为192.168.194.10服务器的网页 

client2 为192.168.194.20服务器的网页  


我们用ansible命令删除/usr/local/nginx/html/下的index.htm默认网页,然后copy推送本机建的index到两个客户端  


修改配置文件之后,要重新加载nginx服务


浏览两个客户端的网页  


修改服务端192.168.194.100的nginx配置文件 

vim/usr/local/nginx/conf/nginx.conf  

upstream webserver{        

server 192.168.194.10:80 weight=8;        

server 192.168.194.20:80 weight=8;} 

Weight:权重,权重设置一样,轮询时候处理请求次数一样 

server 192.168.194.10:80 weight=8;        

server 192.168.194.20:80 weight=10; 

Webserver:是负载均衡的名字server192.168.194.10:80:两台web服务器的IP和端口 如果权重设置的大,那么nginx会自动多转发到192.168.194.20,即192.168.194.20处理请求的次数比192.168.194.10要多


这时我们输入IP就不能输入客户端的IP了,要出输入反向代理服务器的IP,即服务端的IP:192.168.194.100,这样做的目的,是当我们网站负载量、并发量、访问量过大时候,我们一台服务器的网站完全负载不了那么多请求,我们就要做好几台一样的服务器网站,将网站访问进行平衡、分摊到多个服务器上进行运行,例如FTP服务器、Web服务器、企业核心应用服务器和其它主要任务服务器等,从而多台协同完成工作任务。  

输入代理服务器的IP:http://192.168.194.100:80 

第一次转发到192.168.194.10 

摁F5刷新,模拟访问,第2次转发到192.168.194.20 

摁F5刷新,模拟访问,第3次转发到192.168.194.10 

摁F5刷新,模拟访问,第4次转发到192.168.194.20 

代理服务器自动进行轮询转发访问。。  


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。