Nginx-+-keepalived实现七层的负载均衡(同类服务)

Nginx通过 Upstream 模块实现负载均衡

upstream 支持的负载均衡算法:

  • 轮询(默认):可以通过weight指定轮询的权重,权重越大,被调度的次数越多
  • ip_hash:可以实现会话保持,将同一客户的IP调度到同一样后端服务器,可以解决session的问题,不能使用weight
  • fair:可以根据请求页面的大小和加载时间长短进行调度,使用第三方的upstream_fair模块
  • url_hash:按请求的url的hash进行调度,从而使每个url定向到同一服务器,使用第三方的url_hash模块

###1. 准备工作
准备四台虚拟机
全部配置安装nginx
关闭防火墙以及selinux

  • 选择两台nginx服务器作为代理服务器
    192.168.181.134
    192.168.181.128
    vip:192.168.181.188
  • 另外两台nginx服务器配置文件可以不一致方便查看
    192.168.181.129
    192.168.181.130

###2. 修改两台代理服务器的nginx配置文件

[root@master ~]# vim /etc/nginx/conf.d/default.conf
upstream index {
        server 192.168.181.129:80 weight=1 max_fails=2 fail_timeout=2;
        server 192.168.181.130:80 weight=1 max_fails=2 fail_timeout=2;
}

server {
        listen 80;
        server_name     localhost;
        access_log  /var/log/nginx/host.access.log  main;

        location / {
         proxy_pass http://index;
         proxy_redirect default;
         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;
        }
}

# 另一台代理服务器改为相同配置
[root@slave ~]# cd /etc/nginx/conf.d/

[root@slave conf.d]# rm -rf *

[root@master ~]# scp /etc/nginx/conf.d/default.conf 192.168.181.134:/etc/nginx/conf.d/

[root@slave conf.d]# ls
default.conf

###3. Keepalived实现调度器HA

# 安装keppalived
[root@master ~]# yum -y install keepalived
[root@slave ~]# yum -y install keepalived

# 编辑keepalived配置文件
[root@master ~]# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
[root@master ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   router_id directory1   #辅助改为directory2
}

vrrp_instance VI_1 {
    state MASTER        #定义主还是备
    interface ens33     #VIP绑定接口(网卡名称)
    virtual_router_id 80  #整个集群的调度器一致
    priority 100         #优先级 50一间隔    
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.181.188/24     #设置VIP
    }
}

[root@slave ~]# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
[root@slave ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   router_id directory2
}

vrrp_instance VI_1 {
    state BACKUP    #设置为backup
    interface ens33
    nopreempt        #设置到back上面,不抢占资源
    virtual_router_id 80
    priority 50   #辅助改为50
    advert_int 1        #检测间隔1s
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.181.188/24
    }
}

# 启动服务
[root@master ~]# systemctl start keepalived
[root@master ~]# systemctl enable keepalived
[root@slave ~]# systemctl start keepalived
[root@slave ~]# systemctl enable keepalived

# 查看ip
[root@master ~]# ip a 
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:01:30:e0 brd ff:ff:ff:ff:ff:ff
    inet 192.168.181.128/24 brd 192.168.181.255 scope global dynamic ens33
       valid_lft 1038sec preferred_lft 1038sec
    inet 192.168.181.188/24 scope global secondary ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::2cd7:d24:f917:70b0/64 scope link 
       valid_lft forever preferred_lft forever

[root@slave ~]# ip a 
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:48:1a:fe brd ff:ff:ff:ff:ff:ff
    inet 192.168.181.134/24 brd 192.168.181.255 scope global dynamic ens33
       valid_lft 1042sec preferred_lft 1042sec
    inet6 fe80::9db3:1c86:27b7:1225/64 scope link 
       valid_lft forever preferred_lft forever

###4. 访问 vip:192.168.181.188 进行测试

image.png

image.png

此时可以正常访问
将keepalived主节点关机测试vip是否漂移

[root@master ~]# init 0

[root@slave ~]# ip a 
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:48:1a:fe brd ff:ff:ff:ff:ff:ff
    inet 192.168.181.134/24 brd 192.168.181.255 scope global dynamic ens33
       valid_lft 1583sec preferred_lft 1583sec
    inet 192.168.181.188/24 scope global secondary ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::9db3:1c86:27b7:1225/64 scope link 
       valid_lft forever preferred_lft forever

###5. 对调度器Nginx健康检查(可选)两台都设置
思路:
让Keepalived以一定时间间隔执行一个外部脚本,脚本的功能是当Nginx失败,则关闭本机的Keepalived

#(1) script
[root@master ~]# vim /etc/keepalived/check_nginx_status.sh
#!/bin/bash					        
/usr/bin/curl -I http://localhost &>/dev/null
if [ $? -ne 0 ];then								    
#	/etc/init.d/keepalived stop
	systemctl stop keepalived
fi					
										        	
[root@master ~]# chmod a+x /etc/keepalived/check_nginx_status.sh


#(2). keepalived使用script
[root@master ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   router_id director1
}
vrrp_script check_nginx {
   script "/etc/keepalived/check_nginx_status.sh"
   interval 5
}

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 80
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.181.188/24
    }
    track_script {
        check_nginx
    }
}
注:必须先启动nginx,再启动keepalived

测试访问:
将keepalived集群的主节点的nginx服务关闭,查看vip是否漂移,如果漂移,即成功
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值