使用nginx作为HTTP负载均衡器
http://nginx.org/en/docs/http/load_balancing.html
介绍
负载平衡是一种常用的跨多个应用程序实例 技术优化资源利用率,最大化吞吐量, 减少延迟,并确保容错配置。
可以使用nginx作为非常有效的HTTP负载均衡器 将流量分发给几个应用程序服务器和改善 性能、可伸缩性和可靠性nginx的web应用程序。
负载平衡方法
以下负载平衡机制(或方法)的支持 nginx:
- 循环——请求分发到应用程序服务器 以循环的方式,
- least-connected——下一个请求分配给服务器的 的活跃连接数,
- ip-hash——一个哈希函数是用来确定哪些服务器应该 被选中下一个请求(基于客户机的IP地址)。
默认的负载平衡配置
最简单的配置负载平衡nginx看起来 如下:
http { 上游myapp1 { 服务器srv1.example.com; 服务器srv2.example.com; 服务器srv3.example.com; } 服务器{ 听80; 位置/ { proxy_pass http://myapp1; } } }
在上面的示例中,有三个相同的应用程序的实例 srv1-srv3上运行。 当负载平衡方法不是特别的配置, 它默认为循环。 所有请求都代理服务器组myapp1,nginx应用HTTP负载 平衡分配请求。
反向代理实现HTTP nginx包括负载平衡, HTTPS,FastCGI、uwsgi SCGI,memcached。
配置HTTPS而不是HTTP负载平衡,只使用“HTTPS” 的协议。
When setting up load balancing for FastCGI, uwsgi, SCGI, or memcached, use fastcgi_pass,uwsgi_pass, scgi_pass, and memcached_pass directives respectively.
至少连接负载均衡
另一个负载平衡的纪律是least-connected。 Least-connected允许控制应用程序的负载 实例的情况更公平一些请求 需要更长的时间来完成。
least-connected负载平衡,nginx将尽量不要超载 忙与过度的请求,应用服务器分发新 请求一个不太繁忙的服务器。
Least-connected负载平衡在nginx被激活 least_conn指令使用的服务器组配置:
上游myapp1 { least_conn; 服务器srv1.example.com; 服务器srv2.example.com; 服务器srv3.example.com; }
会话持久性
请注意,与循环或least-connected负载 平衡,可能每个后续客户的请求 分发给不同的服务器。 没有保证相同的客户端会永远 针对同一个服务器。
如果有需要将客户端与一个特定的应用程序服务器 换句话说,让客户的会话“粘性”或“持续” 方面,总是试图选择一个特定的服务器——ip-hash负载 可以使用平衡机制。
ip-hash,客户机的IP地址作为散列的关键 确定哪些服务器应该选择服务器组 客户的请求。 这个方法确保了来自相同客户机的请求 总是指向相同的服务器 除非该服务器不可用。
配置ip-hash负载平衡,只是添加ip_hash指令到服务器(上游)组配置:
上游myapp1 { ip_hash; 服务器srv1.example.com; 服务器srv2.example.com; 服务器srv3.example.com; }
加权负载平衡
也可以影响甚至nginx负载平衡算法 进一步通过使用服务器的权重。
在上面的例子中,这意味着服务器权重不配置 所有指定的服务器被视为同等资格 特定的负载平衡方法。
与特定的循环或多或少也意味着平等 分布在整个服务器的请求——提供有足够的 请求,请求以统一的方式处理 足够快的完成。
当重量参数指定一个服务器,重量是占一部分 负载均衡的决定。
上游myapp1 { 服务器srv1.example.com重量= 3; 服务器srv2.example.com; 服务器srv3.example.com; }
在这个配置中,每5新的请求将分布在 应用程序实例如下:3请求将被引导 srv1、一个请求将srv2 srv3和另一个。
它也同样可以使用与least-connected和权重 ip-hash nginx的负载平衡在最近的版本。
nginx 一个web软件
nagios 一个监控软件
url:http://202.102.10.10:80 统一资源定位符
uri:http://202.102.10.10:80/a/b/c.txt 统一资源标识符
安装nginx服务
cd /etc/yum.repos.d
ls 查看yum源在不在
systemctl stop firewalld 关闭防火墙 systemctl disable firewalld 开机也不启动防火墙,太粗暴
yum install epel -release -y 装一个扩展包,装后有epel.pepo和epel -testing.pepo源
yum install nginx -y 安装nginx软件
systemctl start nginx 启动nginx软件(启动后重新启动systemctl restart nginx,只能在实验环境用)
vim /etc/nginx/nginx.conf #查看nginx的配置文件
###{#配置文件内的信息
/var/log/nginx/error.log nginx的错误日志
/var/log/nginx/access.log nginx进程日志
server{
root /usr/share/nginx/html/ 默认访问路径
}
http://202.102.10.10:80/a/b/c.txt 第一段:http://----->server端是基于http协议给客户端发数据的
第二段:202.102.10.10:80---->定位到全世界范围内唯一一款软件是谁
第三段:/a/b/c.txt----》/usr/share/nginx/html/a/b/c.txt
###}
测试nginx服务
systemctl reload nginx 修改配置文件后,要重新加载一下nginx的配置文件
mkdir /usr/share/nginx/html/a/b -p 递归创建文件目录
echo "welcome oldboy" >>/usr/share/nginx/html/a/b/c.txt
systemctl status nginx 查看启动状态
然后在客户端进行访问http://202.102.10.10:80/a/b/c.txt
vim /etc/nginx/nginx.conf
自己定义访问路径,测试nginx
##{
location{
root /var/www/html:#指定访问路径
#index index.html 可以指定该路径下文件加载的顺序
}
##}
systemctl reload nginx 修改配置文件后,要重新加载一下nginx的配置文件
mkdir -p /var/www/html
touch /var/www/html/index. html
echo "welcom oldboy ">> /var/www/html/index.html
http://202.102.10.10:80/index.html
正向代理和反向代理:
配置反向代理
echo "web1 ">> /var/www/html/index.html 在服务端1
echo "web2 ">> /var/www/html/index.html 在服务端2
echo "web3 ">> /var/www/html/index.html 在服务端3
systemctl start nginx 启动nginx软件(启动后重新启动systemctl restart nginx)
vim /etc/nginx/nginx.conf 代理机修改配置
修改 http{
#轮询
upstream myapp1 { server srv1.example.com; server srv2.example.com; server srv3.example.com;
}
修改 location,因为是代理用的,所以改为 proxy_pass http://myapp1;
然后在客户端访问代理主机
http://202.102.10.10:80
nfs共享存储
yum install rpcbind nfs-utils -y
在服务端
mkdir /share 创建一个共享目录
mkfs.ext4 /dev/sdb1 #格式化一个盘
mount /dev/sdb1 /share #将盘挂载到共享目录下
ifconfig eno1677736(网卡名) 192.168.16.147 #配置临时IP
touch /share/share.txt
echo 'gongxiang' > /share/share.txt
vim /etc/exports 修改配置文件
/share 192.168.16.0/24(rw,sync,fsid=0)
systemctl start rpcbind.service #查看启动是否成功systemctl status rpcbind.service
systemctl start nfs-server.service#查看启动是否成功systemctl status nfs-server.service
systemctl enable rpcbind.service 设置为开机启动
systemctl enable nfs-server.service 设置为开机启动
chmod -R o+w /share 放开写权限,服务端才能写东西
exportfs 查看共享的目录
showmount -e #默认查看自己共享的服务,前提是要DNS能解析自己,不然容易报错
showmount -a #显示已经与客户端连接上的目录信息(几个客户端挂载到共享目录下)
在客户端
showmount -e 192.168.16.147 查看服务端共享的目录
mount -t nfs (指定文件系统)192.168.16.147:/share /var/www/html/ 完成挂载
ls /var/www/html/ 就能看到服务端/share下的内容
nginx反向代理+三台web+nfs共享存储实现集群配置
源码安装nginx,并按照作业一描述的那样去测试使用
http://blog.csdn.net/finded/article/details/51889914 源码安装nginx