Docker Nginx反向代理配置web负载均衡实践
笔者做web服务器时使用apache较多,但对于 Nginx反向代理特别感兴趣,于是利用两块安装好LAMP的树莓派来测试验证一番。因为有docker,使用整个测试下来非常顺利方便。 笔者以前是使用keepalived通过VIP来保证高可用性,但是不能提供负载均衡。Nginx反向代理可以提供负载均衡并保证高可用性。
测试平台为虚拟机centos7和两块树莓派。
centos7为nginx做代理,两块树莓派做web服务器。
VirtualBox虚拟机centos7 IP地址:192.168.31.120
树莓派1 LAMP IP地址:192.168.31.234
树莓派2 LAMP IP地址:192.168.31.82
1、安装Nginx容器
搜索镜像: docker search nginx
下载镜像:docker pull nginx
运行容器,映射到centos7的8080端口:docker run -itd --name nginx -p 8080:80 nginx
在浏览器中输入192.168.31.120:8080可以测试Nginx容器安装成功。
2、进入容器配置Nginx
进入容器:docker exec -it nginx bash,容器需要先apt update更新,然后安装编辑器nano(你喜欢哪个装哪个)
打开/etc/nginx/nginx.conf配置文件,在http区块里添加upstream块内容。
upstream mysvr {
server 192.168.31.82;
server 192.168.31.234;
}
再打开/etc/nginx/conf.d/default.conf这个配置文件,在server区块里,添加location里面的内容。
#请求转向上面mysvr 定义的服务器列表
proxy_pass http://mysvr;
配置文件配置好以后,使用nginx -t命令测试一下配置文件是正常的。会显示nginx: the configuration file /etc/nginx/nginx.conf syntax is ok。nginx: configuration file /etc/nginx/nginx.conf test is successful
3、退出容器重启 Nginx容器使配置生效
docker restart nginx
4、在两块树莓派 LAMP 上新建个ip.php来验证测试
在树莓派上的/var/www/html下新建ip.php写入ip信息来区分服务器。
5、浏览器验证
在浏览器输入http://192.168.31.120:8080/ip.php ,然后点击刷新,IP地址会循环变化。注意Nginx服务器要加8080端口号。
如果不加ip.php,那么页面会显示/var/www/html目录下index.html的信息。
6、故障转移配置
如果后端的服务器返回502、504、执行超时等错误,自动将请求转发到upstream负载均衡池中的另一台服务器,实现故障转移。 将下面的添加location,与proxy_pass放置在一起。
proxy_next_upstream http_502 http_504 error timeout invalid_header;
同时启用该功能需要在nginx.conf中添加
proxy_next_upstream on
7、nginx配置4种均衡算法
7.1、上面的nginx默认就是轮询其权重都默认为1。
7.2、通过weight配置权重的大小,weight和访问比率成正比,用于后端服务器性能不均的情况。
upstream mysvr {
server 192.168.31.82 weight=1;
server 192.168.31.234 weight=2;
}
7.3、热备
upstream mysvr {
server 192.168.31.82;
server 192.168.31.234 backup;
}
7.4、ip_hash:nginx会让相同的客户端ip请求相同的服务器,固定访问一个后端服务器,可以解决session的问题。
upstream mysvr {
server 192.168.31.82;
server 192.168.31.234;
ip_hash;
}
8、设备的状态
1.down表示单前的server暂时不参与负载
2.weight默认为1.weight越大,负载的权重就越大。
3.max_fails:允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream模块定义的错误
4.fail_timeout:max_fails次失败后,暂停的时间。
5.backup:其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。