keepalived高可用+nginx负载均衡

keepalived高可用+nginx负载均衡

在这里插入图片描述

1、IP地址规划
hostnameip说明
KN0110.4.7.30keepalived MASTER节点 nginx负载均衡器
KN0210.4.7.31keepalived BACKUP节点 nginx负载均衡器
WEB0110.4.7.24web01节点
WEB0210.4.7.25web02节点
2、关闭防火墙,selinux,并安装nginx(四台虚拟机都要执行)
[root@web02 ~]# systemctl stop firewalld
[root@web02 ~]# sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/sysconfig/selinux
[root@web02 ~]# setenforce 0                              //
[root@web02 ~]# yum -y install epel-release               //安装nginx之前要先安装nginx源
[root@web02 ~]# yum install -y nginx
3、配置并启动两个web节点。
[root@web02 ~]# echo "`hostname` `ifconfig ens33 |sed -n 's#.*inet \(.*\)netmask.*#\1#p'`" > /usr/share/nginx/html/index.html                          //将hostname和ip地址写进index.html,这是nginx的默认目录,用于后面测试使用
[root@web02 ~]#systemctl restart nginx                    //重启nginx服务
[root@web01 ~]# curl 10.4.7.24                            //查看页面内容
web01 10.4.7.24  
[root@web01 ~]# curl 10.4.7.25                            //查看页面内容             
web02 10.4.7.25  
4、配置两个nginx负载局衡器
1)修改nginx配置文件(KN01、KN02)
#修改/etc/nginx/nginx.conf文件。
http {
    upstream backend {
    server 10.4.7.24:80 weight=1 max_fails=3 fail_timeout=20s;    //权重为1
    server 10.4.7.25:80 weight=1 max_fails=3 fail_timeout=20s;    //权重为1,理论上访问两个web服务应该间隔访问
    }
    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;
       location / {
             proxy_pass http://backend;
        }
   }
}
2)、检查nginx配置文件,然后启动nginx
[root@kn01 ~]# which nginx
/usr/sbin/nginx
[root@kn01 ~]# /usr/sbin/nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@kn01 ~]# systemctl restart nginx
[root@kn01 ~]# systemctl status nginx
● nginx.service - The nginx HTTP and reverse proxy server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
   Active: active (running) since 二 2021-01-26 02:33:53 EST; 5h 59min ago
 Main PID: 57976 (nginx)
   CGroup: /system.slice/nginx.service
           ├─57976 nginx: master process /usr/sbin/nginx
           ├─57977 nginx: worker process
           └─57978 nginx: worker process

1月 26 02:33:53 kn01 systemd[1]: Starting The nginx HTTP and reverse proxy server...
1月 26 02:33:53 kn01 nginx[57971]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
1月 26 02:33:53 kn01 nginx[57971]: nginx: configuration file /etc/nginx/nginx.conf test is successful
1月 26 02:33:53 kn01 systemd[1]: Started The nginx HTTP and reverse proxy server.
3)、查看两个节点nginx负载均衡器是否开启成功
[root@kn01 ~]# curl 10.4.7.30                                         //访问该服务的时候基本是1:1,说明负载均衡开启成功
web02 10.4.7.25  
[root@kn01 ~]# curl 10.4.7.30
web01 10.4.7.24  
[root@kn01 ~]# curl 10.4.7.31
web02 10.4.7.25  
[root@kn01 ~]# curl 10.4.7.31
web01 10.4.7.24  
5、安装、配置并启动keepalived,以KN01为例
[root@kn01 ~]# yum install keepalived -y
[root@kn01 ~]# vim /etc/keepalived/keepalived.conf       配置文件修改
[root@kn01 ~]# systemctl restart keepalived
1)MASTER节点配置(KN01)
vrrp_instance VI_1 {
    state MASTER                                     //修改为MASTER
    interface ens33                                  //改为要设置虚拟IP的网卡名字
    virtual_router_id 51
    priority 100                                     //优先级
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    nopreempt                                        //非抢占式,防止虚拟IP来回飘
    virtual_ipaddress {
        10.4.7.32/24 dev ens33 lable ens33:1         //设置虚拟IP
    }
}

2)BACKUP节点配置(KN02)
vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    nopreempt
    virtual_ipaddress {
        10.4.7.32/24 dev ens33
    }
}
3)查看虚拟IP地址飘逸情况
[root@kn01 ~]# ip a
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:11:af:f3 brd ff:ff:ff:ff:ff:ff
    inet 10.4.7.30/24 brd 10.4.7.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet 10.4.7.32/24 scope global secondary ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::b778:7955:18a9:b4d6/64 scope link 
       valid_lft forever preferred_lft forever
[root@kn01 ~]# systemctl stop keepalived
[root@kn01 ~]# ip a                                     //IP地址10.4.7.32飘走
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:11:af:f3 brd ff:ff:ff:ff:ff:ff
    inet 10.4.7.30/24 brd 10.4.7.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::b778:7955:18a9:b4d6/64 scope link 
       valid_lft forever preferred_lft forever
[root@kn02 ~]# ip a                                   //IP地址10.4.7.32飘到KN02节点
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:12:87:53 brd ff:ff:ff:ff:ff:ff
    inet 10.4.7.31/24 brd 10.4.7.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet 10.4.7.32/24 scope global secondary ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::961f:2027:a51:6df0/64 scope link 
       valid_lft forever preferred_lft forever
[root@kn01 ~]# systemctl start keepalived
[root@kn01 ~]# ip a                                     //IP地址10.4.7.32并没有飘过来,因为我们设置了nopreempt属性。是非抢占式的,所以IP地址不会飘走,只有再KN02节点出现异常的时候才会飘过来。
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:11:af:f3 brd ff:ff:ff:ff:ff:ff
    inet 10.4.7.30/24 brd 10.4.7.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::b778:7955:18a9:b4d6/64 scope link 
       valid_lft forever preferred_lft forever

6、keepalived中nginx运行状态监测脚本,

​ 当监控到nginx服务异常时,停止keepalived服务。这样虚拟IP就会飘到另外一个节点上,确保服务不断线,可靠运行。下面给出两种探测脚本

1)个人感觉下面脚本用来监测nginx运行状态比较实用。

优点:此脚本获得网页内容,然后判断nginx服务是否正常。
缺点:为判断获取的网页内容是否正确。待改进。

#!/bin/bash
curl 10.4.7.31 >> file
A=`cat file|wc -l`
if [ $A -eq 0 ];then
    /usr/sbin/nginx
    sleep 2
    curl 10.4.7.31 >> file
    if [ `cat file |wc -l` -eq 0 ];then
         killall keepalived
    fi
fi
cat /dev/null > file

运行killall命令需要安装psmisc包

yum install psmisc -y
2)此脚本检测nginx进程,不关注内容,若出现有进程但是页面加载不出来的情况,此脚本无用。
#!/bin/bash
A=`ps -C nginx --no-header|wc -l`
if [ $A -eq 0 ];then
    /usr/sbin/nginx
    sleep 2
    if [ `ps -C nginx --no-header|wc -l` -eq 0 ];then
        killall keepalived
    fi
fi
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值