美文网首页
Nginx实现七层的负载均衡(不同类服务) + keepaliv

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

作者: 一剑仙人跪_ | 来源:发表于2019-08-02 20:51 被阅读0次

一、实施过程

1、选择两台nginx服务器作为代理服务器。
2、给两台代理服务器安装keepalived制作高可用生成VIP
3、配置nginx的负载均衡 以上两台nginx服务器配置文件一致 根据站点分区进行调度

配置upstream文件
[root@master ~]# cd /etc/nginx/conf.d/
[root@master conf.d]# ls
default.conf
[root@master conf.d]# vim upstream.conf 
upstream index {
    server 192.168.188.131:80 weight=1 max_fails=2 fail_timeout=2;
    server 192.168.188.130:80 weight=1 max_fails=2 fail_timeout=2;
}
upstream images{
    server 192.168.188.129:80 weight=1 max_fails=2 fail_timeout=2;
    server 192.168.188.135:80 weight=1 max_fails=2 fail_timeout=2;
}
配置server
[root@master conf.d]# cp default.conf default.conf.bak
[root@master conf.d]# ls
default.conf  default.conf.bak
[root@master conf.d]# vim default.conf
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 REMOTE-HOST $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    }

    location ~* \.(png|gif|jpg)$ {
        proxy_pass http://images;
        proxy_redirect default;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header REMOTE-HOST $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    }
}

[root@master conf.d]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@master conf.d]# nginx -s reload
将nginx的配置文件拷贝到另一台代理服务器中:
[root@master conf.d]# scp upstream.conf 192.168.188.128:/etc/nginx/conf.d/
The authenticity of host '192.168.188.128 (192.168.188.128)' can't be established.
ECDSA key fingerprint is SHA256:/ju7ydJfE+eQXpeptAQziEUNJ+/auM7DhgsWHtym6Zk.
ECDSA key fingerprint is MD5:db:7e:19:49:48:d0:36:4f:99:6c:ee:47:5a:58:34:c8.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.188.128' (ECDSA) to the list of known hosts.
root@192.168.188.128's password: 
upstream.conf                                           100%  306   239.3KB/s   00:00    
[root@master conf.d]# scp default.conf 192.168.188.128:/etc/nginx/conf.d/
root@192.168.188.128's password: 
default.conf                                            100%  736     1.0MB/s   00:00 

二、Keepalived实现调度器HA

注:主/备调度器均能够实现正常调度

1. 主/备调度器安装软件
[root@master conf.d]# yum install -y 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 master
}

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.188.110/24
    }
}
[root@backup conf.d]# cat /etc/keepalived/keepalived.conf 
! Configuration File for keepalived

global_defs {
   router_id BACKUP
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
     nopreempt 
    virtual_router_id 80
    priority 50
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.188.110/24
    }
}

2. 启动KeepAlived(主备均启动)

[root@master ~]# systemctl start keepalived
[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:e2:d8:e4 brd ff:ff:ff:ff:ff:ff
    inet 192.168.188.136/24 brd 192.168.188.255 scope global dynamic ens33
       valid_lft 1172sec preferred_lft 1172sec
    inet 192.168.188.110/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fee2:d8e4/64 scope link 
       valid_lft forever preferred_lft forever
到此: 可以解决心跳故障keepalived 不能解决Nginx服务故障

扩展对调度器Nginx健康检查(可选)两台都设置

思路: 让Keepalived以一定时间间隔执行一个外部脚本,脚本的功能是当Nginx失败,则关闭本机的Keepalived

(1) script

[root@master keepalived]# vim check_nginx_status.sh 
#!/bin/bash      
/usr/bin/curl -I http://localhost &>/dev/null   
if [ $? -ne 0 ];then                                            
    systemctl stop keepalived 
fi

(2). keepalived使用script

[root@master keepalived]# vim keepalived.conf
! Configuration File for keepalived

global_defs {
   router_id master
}
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.188.110/24
    }
     track_script {        
         check_nginx 
    }
}

注:必须先启动nginx,再启动keepalived

相关文章

网友评论

      本文标题:Nginx实现七层的负载均衡(不同类服务) + keepaliv

      本文链接:https://www.haomeiwen.com/subject/ofurdctx.html