严格意义上来说nginx实现的是反向代理版本的负载均衡
实现方式很简单
负载均衡
lb端:
在http区域中插入
# 默认池塘,这些服务器中放静态资源upstream default_pools {least_conn; # least_conn是同时考虑加权和连接数# 轮询算法:默认是rr轮询,加了weight是加权(wrr)轮询server 10.0.0.7:80 weight=1 max_fails=3 fail_timeout=15;# 向web服务器发送连接超过15s算失败,超过三次,认为你挂了,每15s在向你发送连接,成功了就接入server 10.0.0.8:80 weight=1 max_fails=3 fail_timeout=15;server 10.0.0.7:80 weight=1 max_fails=3 fail_timeout=15;server 10.0.0.8:80 weight=1 max_fails=3 fail_timeout=15;}# 动态池塘upstream active_pools {server 10.0.0.7:80 weight=1 max_fails=3 fail_timeout=15;server 10.0.0.8:80 weight=1 max_fails=3 fail_timeout=15;server 10.0.0.7:80 weight=1 max_fails=3 fail_timeout=15 backup;server 10.0.0.8:80 weight=1 max_fails=3 fail_timeout=15 down;}
在location中插入(proxy模块只能插入到 location 中)
location / {proxy_pass http://default_pools;proxy_set_header X-Forwarded-For $remote_addr/$proxy_add_x_forwarded_for;proxy_set_header Host $http_host ;}location ~*\.(jsp|php)$ {proxy_pass http://active_pools;proxy_set_header X-Forwarded-For $remote_addr/$proxy_add_x_forwarded_for;proxy_set_header Host $http_host;}
keepalived (实现HA
!!是不一样的地方
cat /etc/keepalived/keepalived.conf! Configuration File for keepalivedglobal_defs {router_id keepalived_lb01 # !!}vrrp_instance lb_vip01 {state MASTER # !!interface eth0virtual_router_id 51priority 100 # !!优先级advert_int 1 # 多久发一次数据authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {10.0.0.3/24 dev eth0 label eth0:1}}
cat /etc/keepalived/keepalived.conf! Configuration File for keepalivedglobal_defs {router_id keepalived_lb02 #!! keepalived名字}vrrp_instance lb_vip01 { # 家庭名state BACKUP # !!interface eth0 # vip指定网卡virtual_router_id 51priority 50 # !!优先级advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {10.0.0.3/24 dev eth0 label eth0:1}}
监听nginx(复制去预备手动搭建)
vim /server/scripts/check_lb.sh!/bin/bash#author: Rdymy#desc: check nginx port#1.检查端口是否存在,个数count=`ss -lntup|grep nginx |wc -l`#2.如果端口数量为0,则关闭keepalivedif [ $count -eq 0 ];thensystemctl stop keepalivedfichmod +x /server/scripts/check_lb.sh
# 1.vrrp_instance 实例上面,独立与其他的都是并列.
vrrp_script check_lb { chk_lb名字给脚本起个命令(keepalived使用)
script /server/scripts/check_lb.sh 指定脚本路径,要有执行权限.
interval 1 执行脚本的间隔,默认1秒
timeout 30 脚本执行的超时时间 一般用于curl/wget等操作
weight 1 权重(优先级) 如果仅仅1个脚本,可以忽略.一般用于keepalived中有多个监控脚本
}
# 2.vrrp_instance 内部与state 或virtual_ipaddress并列.
track_script { # 写在vrrp 实例部分 表示调用之前定义的监控脚本
check_lb # 名字 是上面vrrp_script 的名字
}
双主机
一台机器同时是active同时又是standby
脑裂
- 配置文件写错了
- 网线出问题了
- 网络原因等
备备模式
原机器活了也不会漂移vip 感觉从原理上来说不能和双主机一起使用,会把一台负载撑爆
云上实现
申请havip
创建havip
创建eip
havip绑定eip
创建esc实例,部署nginx,成为lb
havip绑定lb实例
keepalived配置书写
# 与物理/虚拟机不同的就这些
unicast_src_ip 192.168.0.209 #设置ECS实例的私网IP地址,本示例配置为192.168.0.209
unicast_peer {
192.168.0.210 #对端ECS实例的私网IP地址,本示例配置为192.168.0.210
}
virtual_ipaddress {
192.168.0.88 #设置HaVip的IP地址,本示例配置为192.168.0.88
