Nginx+keepalived 实现负载均衡

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

配置安装 nginx, 所有的机器,关闭防火墙和selinux

[root@nginx-proxy ~]# cd /etc/yum.repos.d/
[root@nginx-proxy yum.repos.d]# vim nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
[root@nginx-proxy yum.repos.d]# yum install nginx -y

一、实施过程

1、选择两台nginx服务器作为代理服务器。
2、给两台代理服务器安装keepalived制作高可用生成VIP
3、配置nginx的负载均衡
以上两台nginx服务器配置文件一致
根据站点分区进行调度
配置upstream文件
[root@nginx-proxy ~]# cd /etc/nginx/nginx.conf

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http{
        upstream static{
        server 192.168.86.149:80;
        server 192.168.86.147:80;
        }


 server {
        listen      80;
        server_name     localhost;
        location / {
            proxy_pass http://static;
            proxy_set_header Host $host:$server_port;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
           }

        }
}

二、Keepalived实现调度器HA

注:主/备调度器均能够实现正常调度
1./备调度器安装软件
[root@nginx-proxy-master ~]# yum install -y keepalived
[root@nginx-proxy-slave ~]# yum install -y keepalived
[root@nginx-proxy-master ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   router_id directory1   #辅助改为directory2
}

vrrp_script check_nginx {
   script "/etc/keepalived/check_nginx_status.sh"
   interval 5 #每隔 5 秒检查一次
}

vrrp_instance VI_1 {
    state MASTER        #定义主还是备
    interface ens33     #VIP绑定接口
    virtual_router_id 80  #整个集群的调度器一致
    priority 100         #back改为50
    advert_int 1         #检查间隔,默认为1s
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.86.100/32
    }
    track_script {
        check_nginx
    }

}
[root@nginx-proxy-slave ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   router_id directory2
}

vrrp_instance VI_1 {
    state BACKUP    #设置为backup
    interface ens33
    virtual_router_id 80
    priority 50   #辅助改为50
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.86.100/32
    }
}

[root@nginx-proxy-master ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    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
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:44:92:0d brd ff:ff:ff:ff:ff:ff
    inet 192.168.86.145/24 brd 192.168.86.255 scope global noprefixroute dynamic ens33
       valid_lft 1719sec preferred_lft 1719sec
    inet 192.168.86.100/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::b2b4:4249:705d:4ff7/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

到此:
可以解决因为 master keepalived 服务不可用①,或者 master 主机宕机②导致的负载均衡服务不可用的情况,但是 keepalived 不能解决因为负载均衡服务(Nginx/LVS)本身不可用导致的服务中断的问题
①因为目前对外服务的 VIP 是 keepalived 维护的,假如 master keepalived 服务本身不可用,BACKUP 就会把 VIP 配置到自己的机器上。
② master 这个机器整个挂掉,相应的 BACKUP 也会把 VIP 配置到自己的机器上。

  1. 扩展对调度器Nginx健康检查(可选)两台都设置
    思路:
    让Keepalived以一定时间间隔执行一个外部脚本,脚本的功能是当Nginx失败,则关闭本机的Keepalived
[root@nginx-proxy-master ~]# vim /etc/keepalived/check_nginx_status.sh
#!/bin/bash												        
/usr/bin/curl -I http://localhost &>/dev/null	
if [ $? -ne 0 ];then										    
   systemctl stop keepalived
fi															        	
[root@nginx-proxy-master ~]# chmod a+x /etc/keepalived/check_nginx_status.sh

(2). keepalived使用script
! Configuration File for keepalived

global_defs {
  router_id director1
}


#定义脚本, check_nginx 是自定义的名称,需要在下方的配置中使用
vrrp_script check_nginx {
  script "/etc/keepalived/check_nginx_status.sh"
  interval 5 #每隔 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.246.16/24
   }
   
   # 使用检测脚本
   track_script {
       check_nginx
   }
}

注:必须先启动nginx,再启动keepalived,如果 keepalived已经启动,则重启 keepalived 服务

测试

  1. 先在 master 上手动关闭 nginx 服务
  2. 之后观察 keepalived 服务是否停止, VIP 是否已经释放;
  3. 最后观察 backup 服务器上是否已经自动绑定了 VIP
  4. 上面的结果正常后,再来到 master 服务器上依次启动 nginx 和 keepalived 服务
  5. 服务启动成功后,观察 VIP 是否已经回到 master 服务器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值