代理和负载均衡的区别
代理负责把连接请求直接转发到后台某个web节点
负载均衡负责把请求使用某种调度算法分散发布给后台所有web节点
1.配置nginx代理服务器lb1
lb1: 192.168.8.10 web1:192.168.8.20 web2:192.168.8.30
(1)启动lb1,安装nginx
yum -y install epel-release yum -y install nginx systemctl start nginx systemctl enable nginx
(2)创建代理配置文件,添加优化项(或直接使用第(4)步的配置)
vim /etc/nginx/conf.d/lb1.conf
添加:
server { listen 80; server_name blog.benet.com; location / { proxy_pass http://192.168.8.20; proxy_set_header Host $http_host; #重新定义或者添加发往后端服务器的请求头,添加域名 proxy_set_header X-Real-IP $remote_addr; #启用客户端真实地址(否则日志中显示的是代理在访问网站) proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #记录代理地址 proxy_connect_timeout 30; #代理和后端服务器连接超时时间 proxy_send_timeout 60; #后端服务器传回代理的超时时间 proxy_read_timeout 60; #代理等待后端服务器的响应时间 proxy_buffering on; #启用缓存,后端返回内容先缓存,再给客户端,收到多少转多少 proxy_buffer_size 32k; #代理缓存用户头信息的缓存区大小 proxy_buffers 4 128k; #缓存区的设置 proxy_busy_buffers_size 256k; #从proxy_buffers划出一部分缓冲区来专门向客户端传送数据的地方 proxy_max_temp_file_size 256k; #超大的响应头存储成文件。 } }
保存退出
systemctl restart nginx
(3)客户端修改hosts文件指向lb1,测试访问
(4)扩展:创建优化项文件,网站配置文件直接调用(选做,但推荐)
vim /etc/nginx/nginx_params
添加:
proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_connect_timeout 30; proxy_send_timeout 60; proxy_read_timeout 60; proxy_buffering on; proxy_buffer_size 32k; proxy_buffers 4 128k;
保存退出
网站配置调用
vim /etc/nginx/conf.d/lb1.conf
修改为:
server { listen 80; server_name blog.benet.com; location / { proxy_pass http://192.168.8.20; include nginx_params; } } }
保存退出
重启nginx:systemctl restart nginx
2.负载均衡(Load Balance),简写LB
面对高并发web请求,使用各种调度算法(rr,wrr,lc,wlc,ip_hash),分散转发到后台web群集节点,提高数据吞吐量,高容灾
常见的LB:
软件:lvs nginx haproxy
硬件:F5
云LB:阿里云SLB 腾讯云CLB 青云QLB ucloud ULB
四层负载:ip地址 tcp/udp 端口号
七层负载:HTTP https ftp SMTP
(1)修改lb1的配置文件,添加负载均衡功能
vim /etc/nginx/conf.d/lb1.conf
修改为:
upstream web_cluster { server 192.168.8.20:80; server 192.168.8.30:80; } server { listen 80; server_name blog.benet.com; location / { proxy_pass http://web_cluster; include nginx_params; } } }
保存退出
重启nginx:systemctl restart nginx
(2)客户端访问验证,浏览器如果判断不出来,就看web节点上的日志。
(3)nginx负载均衡后端状态
weight 权重,默认为1
down 当前节点服务器不参与负载均衡
backup 备份服务器
max_fails 允许请求失败的次数
fail_timeout 经过max_fails失败后,服务的暂停时间
max_conns 同一ip最大连接数
例子:
vim /etc/nginx/conf.d/lb1.conf
修改为:
upstream web_cluster { server 192.168.8.20:80 max_fails=2 fail_timeout=10s max_conns=1; server 192.168.8.30:80 down; #一般用于停机维护 }
#################################################################################
1.配置4层负载均衡,发布内部服务器的ssh和mysql
lb:192.168.8.10
web1: 192.168.8.20
mysql: 192.168.8.30
vim /etc/nginx/nginx.conf
插入数据到http字段上方:
stream { upstream sshweb1 { server 192.168.8.20:22; } upstream mysql { server 192.168.8.30:3306; } server { listen 5555; proxy_pass sshweb1; proxy_connect_timeout 30; proxy_timeout 60; } server { listen 7777; proxy_pass mysql; proxy_connect_timeout 30; proxy_timeout 60; } }
保存退出
重启服务:systemctl restart nginx
客户端访问验证ssh:
xshell: ssh root@192.168.8.10 5555
linux: ssh root@192.168.8.10 -p 5555
客户端访问验证mysql:
安装navicat,建立连接192.168.8.10,端口7777
#############################################################################
高可用-增加容错性(HA:High availability)
协议:VRRP(虚拟路由冗余协议) 公有协议 224.0.0.18
HSRP(热备份路由协议) 私有协议,Cisco公司 224.0.0.5 224.0.0.6
高可用软件:
keepalived:使用vrrp实现多台主机高可用群集
高可用角色:master 主服务器
backup 备服务器
实施步骤:
目的:实现两台负载均衡器的高可用
环境:两台负载均衡器
lb1:192.168.8.10
lb2:192.168.8.40
(1)安装keepalived(两台都装)
yum -y install keepalived
(2)配置keepalived
主服务器:lb1
vim /etc/keepalived/keepalived.conf
修改为:
global_defs { router_id lb1 #删除vrrp_strict行 } vrrp_instance VI_1 { state MASTER interface ens33 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.8.254 } }
保存退出
启动服务:
systemctl restart keepalived
systemctl enable keepalived
备服务器:lb2
vim /etc/keepalived/keepalived.conf
修改为:
global_defs { router_id lb2 #路由id号,和主服务器必须不同(删除vrrp_strict行) } vrrp_instance VI_1 { state BACKUP #状态:BACKUP备 MASTER主 interface ens33 virtual_router_id 51 priority 99 #优先级:备比主要小 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.8.254 #虚拟路由ip,公共ip } }
保存退出
启动服务:
systemctl restart keepalived
systemctl enable keepalived
(3)查看虚拟ip(漂移ip地址)
ip a show dev ens33
(4)复制lb1(192.168.8.10)关于nginx的配置到lb2(192.168.8.40)
现在lb2安装nginx:yum -y install nginx
在lb1上scp复制nginx的所有配置:
scp -rp /etc/nginx/* root@192.168.8.40:/etc/nginx
然后,在lb2上启动nginx服务:
systemctl restart nginx
(5)客户端修改hosts文件,访问验证(访问成功,关闭主服务器,再访问)
vim /etc/hosts
修改为:
192.168.8.254 blog.benet.com
保存退出
3.高可用裂脑
高可用节点之间互相失去联系,自认为自己是主服务器,就会出现多主现象,即裂脑现象
裂脑出现的原因:
心跳线松动或网卡故障
服务器硬件故障,崩溃
节点服务器开启防火墙,却没有做vrrp例外
nginx服务死掉,不会出现裂脑现象,但整个集群都无法正常运作
(1)检测裂脑脚本(在备用服务器:192.168.8.132运行)
vim split_brain.sh #!/bin/sh while true do ping -c 2 -W 3 192.168.8.10 &> /dev/null if [ $? -eq 0 -a `ip add|grep 192.168.8.254|wc -l` -eq 1 ] then echo "split brain....." else echo "HA is ok" fi sleep 5 done 保存退出 chmod +x split_brain.sh source split_brain.sh
开启防火墙验证:systemctl start firewalld
解决因为防火墙出现的裂脑现象:
firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
firewall-cmd --reload
(2)解决nginx故障造成群集无法工作
编辑nginx监控脚本
vim /sh/check_nginx_proxy.sh #!/bin/bash killall -0 nginx if [ $? -ne 0 ];then systemctl stop keepalived fi chmod +x /sh/check_nginx_proxy.sh
添加脚本追踪模块到keepalived配置文件
vim /etc/keepalived/keepalived.conf global_defs { router_id lb1 } vrrp_script check_nginx_proxy { script “/sh/check_nginx_proxy.sh” interval 2 weight 5 } vrrp_instance VI_1 { state MASTER interface ens33 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.1.254 } track_script { check_nginx_proxy } }
保存退出
重启服务:systemctl restart keepalived
(3)主服务器添加计划任务
crontab -e * * * * * /bin/bash /sh/check_nginx_proxy.sh
(4)主服务器关闭nginx,测试keepalived地址漂移