keepalived+LVS+nginx搭建高可用负载均衡(二)

操作系统:CentOS-7.8
keepalived版本:2.0.20
nginx版本:1.18.0

本篇是《keepalived+LVS+nginx搭建高可用负载均衡》的第二篇,上一篇主要是介绍了这些组件和基础知识,以及基础演示,本篇将把这三个组件进行结合做一个演示,对这三个组件不熟悉的朋友请先看上一篇文章《keepalived+LVS+nginx搭建高可用负载均衡(一)》传送门

一、准备工作

1.环境说明

该演示总共需要4台服务机器(可使用虚拟机),分别取名字:LVS1,LVS2,Server1、Server2。每台机器说明如下:

  • LVS1:LVS复杂均衡调度器,安装keepalived,配置LVS调度策略。真实IP:192.168.56.121,keepalived主实例虚拟IP:192.168.56.131,keepalived备用实例虚拟IP:192.168.56.132

  • LVS2:LVS复杂均衡调度器,安装keepalived,配置LVS调度策略,真实IP:192.168.56.122,keepalived主实例虚拟IP:192.168.56.132,keepalived备用实例虚拟IP:192.168.56.131

  • Server1:服务器集群服务器,安装nginx,keepalived。真实IP:192.168.56.101,keepalived主实例虚拟IP:192.168.56.121,keepalived备用实例虚拟IP:192.168.56.122,回环虚拟IP(对外隐藏):192.168.56.131、192.168.56.132

  • Server2:服务器集群服务器,安装nginx,keepalived。真实IP:192.168.56.102,keepalived主实例虚拟IP:192.168.56.122,keepalived备用实例虚拟IP:192.168.56.121,回环虚拟IP(对外隐藏):192.168.56.131、192.168.56.132

注意:两台LVS1服务器构成双主热备作为负载均衡,两台Server作为真实服务器提供nginx的web服务采用双主热备。(更深层次可以将nginx集群继续作为负载均衡集群,搭建多级负载均衡,在这里就不进行这种拓展了)

2.服务主机关系图

如下图即为本次演示的一个主机关系图,从图中可以清晰看出四台服务器的关系。

lvs_keepalive_nginx

二、配置与操作

1.准备工作

nginx活跃检测脚本

由于nginx和keepalived是两个独立的服务,默认情况下keepalived仅仅是检测集群中节点的keepalived服务是否存活来判断主机是否正常服务。而在keepalived服务正常,而nginx服务down掉了,这种情况下,keepalived服务是不会判定当前服务器宕机,也就不会进行虚拟IP绑定转移,所以此时使用虚拟IP访问服务会访问到nginx服务不可用的服务器,为了解决这种情况,我们需要配置keepalived使其可以坚持nginx状态来决定是否进行虚拟IP绑定转移。

nginx服务活跃检测脚本如下,建议将该脚本放在keepalived的配置目录便于配置使用。


#!/bin/bash

#判断当前服务器是否有nginx的进程
if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then
       #若没有则尝试启动nginx
        /usr/local/nginx/sbin/nginx
        sleep 5
        #继续判断当前服务器是否有nginx进程
        if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then
                #若仍然没有nginx进程,则停止当前节点的keepalived
                systemctl stop keepalived
        fi
fi

脚本写好先放着,后面再配置使用

配置真实服务器的回环虚拟IP

由于我们演示lvs是使用DR的工作模式,所以在server1和server2上需要将虚拟IP:192.168.56.131和192.168.56.132绑定在两台主机的lo回环接口上,具体理论请参加上一篇文章《keepalived+LVS+nginx搭建高可用负载均衡(一)》

server1和server分别在 /etc/sysconfig/network-scripts目录下,将ifcfg-lo复制两份

cd /etc/sysconfig/network-scripts

cp ifcfg-lo ifcfg-lo:1

cp ifcfg-lo ifcfg-lo:2

然后编辑网络配置文件


#ifcfg-lo:1配置如下
DEVICE=lo:1
IPADDR=192.168.56.131
NETMASK=255.255.255.255
NETWORK=127.0.0.0
# If you're having problems with gated making 127.0.0.0/8 a martian,
# you can change this to something else (255.255.255.255, for example)
BROADCAST=127.255.255.255
ONBOOT=yes
NAME=loopback

#ifcfg-lo:2配置如下
DEVICE=lo:2
IPADDR=192.168.56.132
NETMASK=255.255.255.255
NETWORK=127.0.0.0
# If you're having problems with gated making 127.0.0.0/8 a martian,
# you can change this to something else (255.255.255.255, for example)
BROADCAST=127.255.255.255
ONBOOT=yes
NAME=loopback

修改完成后,重启网络服务:systemctl restart network.service

随后使用:ifconfig lo:1 和 ifconfig lo:2 两个命令即可查看配置的虚拟IP

之后Server1和Server2增加路由(单次生效):route add -host 192.168.56.131 dev lo:1 和 route add -host 192.168.56.132 dev lo:2

2.nginx+keepalive双主热备配置

首先配置Server1的keepalived,我的配置文件在/etc/keepalived/keepalived.conf,该配置文件我仅说明新增的一些属性含义,没有说明的属性含义,请参加上一篇文章《keepalived+LVS+nginx搭建高可用负载均衡(一)》。Server1的配置如下


! Configuration File for keepalived

global_defs {
   router_id keep_101
}

#nginx活跃检测脚本配置
vrrp_script check_nginx_alive{
    #脚本所在位置
    script "/etc/keepalived/check_nginx_auto_pull.sh"
    #脚本执行间隔
    interval 3
    #脚本执行后权重增加1
    weight 1
}

#使用虚拟Ip:192.168.56.111的主实例
vrrp_instance VI_1 {
    state MASTER
    interface enp0s8
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        #两个实例使用了不同的密码
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.56.111
    }
    #引用上方配置的脚本,检测nginx是否活跃
    track_script{
        check_nginx_alive
    }
}

#使用虚拟Ip:192.168.56.112的备用实例
vrrp_instance VI_2 {
    state BACKUP
    interface enp0s8
    virtual_router_id 52
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        #两个实例使用了不同的密码
        auth_pass 2222
    }
    virtual_ipaddress {
        192.168.56.112
    }
    #引用上方配置的脚本,检测nginx是否活跃
    track_script{
        check_nginx_alive
    }
}


Server2的keepalived配置与Server1的keepalived配置类似,不同点就是主备实例调换,Server2的配置如下


! Configuration File for keepalived

global_defs {
   router_id keep_102
}


vrrp_script check_nginx_alive{
    script "/etc/keepalived/check_nginx_auto_pull.sh"
    interval 3
    weight 1
}

#使用虚拟Ip:192.168.56.111的备用实例
vrrp_instance VI_1 {
    state BACKUP
    interface enp0s8
    virtual_router_id 51
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.56.111
    }
    track_script{
        check_nginx_alive
    }
}

#使用虚拟Ip:192.168.56.112的主实例
vrrp_instance VI_2 {
    state MASTER
    interface enp0s8
    virtual_router_id 52
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 2222
    }
    virtual_ipaddress {
        192.168.56.112
    }
    track_script{
        check_nginx_alive
    }
}

配置完成后启动keepalived和nginx,这样配置完成后就保证了nginx的高可用,同时nginx可以作为负载均衡继续给更多的集群进行负载均衡。

3.LVS+keepalived双主热备配置

首先配置LVS1的keepalived,keepalived的配置中集成了对lvs的管理,所以在使用LVS+keepalived的时候,不用再使用上一篇文章讲的用命令配置了,我们直接将lvs的配置写在keepalived的配置文件中即可。

我仅说明新增的一些属性含义,没有说明的属性含义,请参加上一篇文章《keepalived+LVS+nginx搭建高可用负载均衡(一)》

LVS1服务器的keepalived配置如下:


! Configuration File for keepalived

global_defs {
   router_id keep_101
}


vrrp_instance VI_1 {
    state MASTER
    interface enp0s8
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 3333
    }
    virtual_ipaddress {
        192.168.56.131
    }
}

vrrp_instance VI_2 {
    state BACKUP
    interface enp0s8
    virtual_router_id 52
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 4444
    }
    virtual_ipaddress {
        192.168.56.132
    }
}

#lvs虚拟服务器,虚拟IP 端口号
virtual_server 192.168.56.131 80 {
    
    delay_loop 6
    #负载均衡策略,wrr代表加权轮询
    lb_algo wrr
    #lvs工作模式,DR模式
    lb_kind DR
    #连接持久化,超时时间,单位:秒
    persistence_timeout 5
    #连接类型,TCP
    protocol TCP

    #真实服务器信息,真实服务器IP 端口
    real_server 192.168.56.111 80 {
           #当前服务器的权重
        weight 1
        #TCP连接的检查配置
        TCP_CHECK {
                #检查端口为 80
                connect_port 80
                #检查连接超时时间,单位:秒
                connect_timeout 2
                #超时后重试次数
                nb_get_retry 2
                #被认为宕机后,间隔多久继续重试,单位:秒
                delay_before_retry 3
        }
    }

    real_server 192.168.56.112 80 {
        weight 1
        TCP_CHECK {
                connect_port 80
                connect_timeout 2
                nb_get_retry 2
                delay_before_retry 3

        }
    }

}

virtual_server 192.168.56.132 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 5
    protocol TCP

    real_server 192.168.56.111 80 {
        weight 1
        TCP_CHECK {
                connect_port 80
                connect_timeout 2
                nb_get_retry 2
                delay_before_retry 3
        }
    }

    real_server 192.168.56.112 80 {
        weight 1
        TCP_CHECK {
                connect_port 80
                connect_timeout 2
                nb_get_retry 2
                delay_before_retry 3

        }
    }

}

LVS2的keepalived的配置与LVS1的不同之处仅在于keepalived的实例配置不同,lvs虚拟服务配置相同,所以我在下面仅列出不同的配置,相同的配置就不在写出来,LVS2服务器的keepalived的不同的配置如下:


! Configuration File for keepalived

global_defs {
   router_id keep_101
}

#主要是连个keepalived实例的主备配置与lvs1中配置相反

vrrp_instance VI_1 {
    state BACKUP
    interface enp0s8
    virtual_router_id 51
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 3333
    }
    virtual_ipaddress {
        192.168.56.131
    }
}

vrrp_instance VI_2 {
    state BACKUP
    interface enp0s8
    virtual_router_id 52
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 4444
    }
    virtual_ipaddress {
        192.168.56.132
    }
}

#下面是lvs虚拟服务器配置,这里就不在贴代码了

经过以上配置后,启动lvs1和lvs2两台服务器的keepalived

4.验证

通过浏览器访问效果如下

浏览器访问nginx

查看两条lvs上的虚拟服务状态

ipvsadm -Ln查看信息

总结

到此一个实验keepalived+nginx+lvs搭建的高可用负载服务就完成了,在本演示案例中是将nginx作为web服务来使用的,其实在生成中可以将nginx作为层负载均衡是用,这样这就是一个基于lvs四层负载+nginx七层负载的高可用负载均衡集群,更多的搭配架构还需在实际使用时多探索,本演示案例仅仅是提供了一个简单思路,便于在学习的时候,可以快速理解

个人公众号【爱做梦的锤子】,全网同id,个站 http://te-amo.site,欢迎关注,里面会分享更多有用知识,还有我的私密照片

觉得不错就点个赞叭QAQ

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342