在nginx里面配置一个upstream,然后把相关的服务器ip都配置进去。然后采用轮询的方案,然后在nginx里面的配置项里,proxy-pass指向这个upstream,这样就能实现负载均衡.
nginx的负载均衡有4种模式:
1)、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
2)、weight
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
3)、ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
4)、fair , url_hash(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
docker pull nginx ( docker pull daocloud.io/nginx 这个稍微快点 )
docker run -itd --name nginx1 -p 8080:80 nginx /bin/bash -- 主
docker run -itd --name nginx2 nginx /bin/bash
docker run -itd --name nginx3 nginx /bin/bash
docker ps 查看
docker network ls
docker nerwork inspect d530da7ebbd3
进入nginx1 (主)
docker exec -it d530da7ebbd3 /bin/bash
安装 vim 编辑器 (如有其他、尽可随意) --- 注意:nginx2、nginx3 均安装 编辑器、下文不再赘述
1. apt update 2. apt install vim
cd /etc/nginx/
vim nginx.conf
进入nginx2
docker exec -it e59de010efff /bin/bash
cd /usr/share/nginx/html/
vim index.html
Welcome to nginx! 后添加: From 172.17.0.3:80 即可
进入nginx3
docker exec -it 0f12240cb622 /bin/bash
cd /usr/share/nginx/html/
vim index.html
Welcome to nginx! 后添加: From 172.17.0.4:80 即可
重启三个nginx服务 service nginx restart
此时如果 docker容器会关闭、因此需要再次重启
docker start d530da7ebbd3
docker start e59de010efff
docker start 0f12240cb622
测试结果
补充:
上述说到 负载均衡有4种模式、
配置分别如下:
轮询模式:
upstream webname {
server192.168.0.1:8080
server192.168.0.2:8080
}
weight 模式:
upstream webname {
server192.168.0.1:8080 weight=2
server192.168.0.2:8080 weight=1
}
ip_hash模式:
upstream webname {
ip_hash
server192.168.0.1:8080
server192.168.0.2:8080
}
其他配置:
设置某一个节点为backup,那么一般情况下所有请求都访问server1,当server1挂掉或者忙的的时候才会访问server2
upstream webname {
server192.168.0.1:8080
server192.168.0.2:8080 backup
}
设置某个节点为down,那么这个server不参与负载。
upstream webname {
server192.168.0.1:8080
server192.168.0.2:8080 down
}
简单的说两种方案:1,一台 nginx 服务器做反向代理,第二台文件服务器,第三台做数据库服务器
2, 一台 nginx 脚本服务器,第二台做主库数据库服务器,第三台做从库数据库服务器加静态服务器。
这三台服务使用一个静态 IP,它们之间的关系为局域网,主服务器挂静态IP,nginx.conf 设置域名 sever,访问直接到主服务器,主库数据库服务器限制数据库的读权限,端口为3306,从库数据库限制写权限,端口为 3307;两台数据库服务器进行数据同步,实现数据库读写分离,从库挂载网站静态内容,如 CSS ,JS, images, flash 等静态文件,实现动静分离。
集群的作用主要就是负载均衡,分流负压流量,数据库读写分离也是为了减缓数据库读写压力,动静分离的好处自然是更科学地规划文件分类,便于服务器文件的管理。
但一般来说,这些静态的东西全部用第三方的 SDN 来负载掉。
注意: htpasswd命令由httpd-tools提供
配置示例:
原理
通过网络地址转换的方法来实现调度的。首先调度器(DR)接收到客户的请求数据包时(请求的目的IP为VIP),根据调度算法决定将请求发送给哪个后端的真实服务器(RS)。然后调度就把客户端发送的请求数据包的目标IP地址及端口改成后端真实服务器的IP地址(RIP),这样真实服务器(RS)就能够接收到客户的请求数据包了。真实服务器响应完请求后,查看默认路由(NAT模式下我们需要把RS的默认路由设置为DR服务器。)把响应后的数据包发送给DR,DR再接收到响应包后,把包的源地址改成虚拟地址(VIP)然后发送回给客户端。
客户机Client: 192.168.44.108
lvs负载均衡Director
VIP:192.168.30.99 DIP:192.168.163.128
RealServer: 两台
RS1: 192.168.163.11
RS2: 192.168.163.12
RS服务器均配置httpd服务,并经由RS做轮询调度
同时在RS1&RS2上安装httpd服务,为了掩饰区别做对应html的修改,并启动.
安装ipvsadm,开启核心转发功能,添加规则
原理
DR模式是通过改写请求报文的目标MAC地址,将请求发给真实服务器的,而真实服务器响应后的处理结果直接返回给客户端用户。同TUN模式一样,DR模式可以极大的提高集群系统的伸缩性。而且DR模式没有IP隧道的开销,对集群中的真实服务器也没有必要必须支持IP隧道协议的要求。但是要求调度器LB与真实服务器RS都有一块网卡连接到同一物理网段上,必须在同一个局域网环境。
客户机Client: 192.168.44.108
lvs负载均衡Director
VIP:192.168.30.99 DIP:192.168.30.100
RealServer: 两台
RS1: 192.168.30.11
RS2: 192.168.30.12
RS服务器均配置httpd服务,并经由RS做轮询调度
配置脚本写入内核,对arp_ignore&&arp_announce做调整
脚本传输给RS2,做同样的 *** 作
在RS上添加VIP并限制响应报文从lo端口流出
安装httpd服务,编辑不同的配置页并且启动
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)