首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LVS+Keepalive双机热备

LVS+Keepalive双机热备

作者头像
py3study
发布2020-06-19 17:36:09
1.7K0
发布2020-06-19 17:36:09
举报
文章被收录于专栏:python3python3

一、概述

本实验基于CentOS7.6 操作系统,总共5台设备,两台做后端web服务器,两台做lvs和keepalived,一台做客户机,实验以LVS(DR)+Keepalived和LVS(NAT)+Keepalived两种模式来做双机热备份,实验环境拓扑如下图所示:

1.png
1.png

从架构可以看出来,从用户的角度来说,会直接访问192.168.31.200,也就是说不管系统如何设计要保证此ip的可用性,

从架构师的角度考虑:

   用户访问192.168.31.200,这是一个虚拟iP,用户不关心内部如何协调。

我们使用 192.168.31.54 作为主机 Master机器,然后使用keepalived 技术配置 HA(high avilable)配置高可用行,也就是说如果 分发的机器Master宕机了,keepalive会自动转到 backup机器,

这就是HA配置,保证master即使宕机了,也不影响转发;

master机器负责把用户的请求转发到  真实的机器, web1和web2,他们会按照一定的轮训机制,访问,如果web1宕机,master会自动转发到web2;

我们在两台负载均衡的机器上面,配置keepalived保证分发机器的高可用行HA;

环境说明

系统的 IP配置如下:

服务器名

主机名

IP地址

虚拟设备名

虚拟IP

Director Server

lvs1

192.168.31.54

enp0s3:0

192.168.31.200

Backup Server

lvs2

192.168.31.51

enp0s3:0

192.168.31.200

Real Server1

web1

192.168.31.113

lo:0

192.168.31.200

Real Server2

web2

192.168.31.150

lo:0

192.168.31.200

请确保4台服务器关闭了防火墙

systemctl stop firewalld
setenforce 0

二、web服务器配置

安装nginx

登录主机web1和web2

安装nginx

# 安装Nginx源
yum -y install epel-release
# 安装Nginx
yum -y install nginx
# 启动Nginx服务
systemctl start nginx
# 加入开机自启
systemctl enable nginx
# 备份原有默认页面
mv /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html_bak

登录主机web1,修改默认页面

vi /usr/share/nginx/html/index.html

清空内容,完整内容如下:

This is Server 111

登录主机web2,修改默认页面

vi /usr/share/nginx/html/index.html

清空内容,完整内容如下:

This is Server 222

访问页面

访问web1

1.png
1.png

访问web2

1.png
1.png

三、LVS+Keepalive

安装

登录主机lvs1和lvs2

安装keepalived和lvs管理工具

yum -y install keepalived* ipvsadm

加载内核模块

modprobe ip_vs

备份配置文件

mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf_bak

配置

登录主机lvs1

vi /etc/keepalived/keepalived.conf

内容如下:

global_defs {
    router_id LVS_TEST    #服务器名字
}

vrrp_instance VI_1 {
    state MASTER    #配置主备,备用机此配置项为BACKUP
    interface enp0s3    #指定接口
    virtual_router_id 51    #指定路由ID,主备必须一样
    priority 101    #设置优先级,主略高于备份
    advert_int 1    #设置检查时间
    authentication {
        auth_type PASS    #设置验证加密方式
        auth_type 1234    #设置验证密码
    }
    virtual_ipaddress {
        192.168.31.200
    }
}

virtual_server 192.168.31.200 80 {
    delay_loop 3    #健康检查时间
    lb_algo rr    #LVS调度算法
    lb_kind DR   #LVS工作模式
    !persistence 60    #是否保持连接,!不保持
    protocol TCP    #服务采用TCP协议
    real_server 192.168.31.113 80 {
        weight 1    #权重
        TCP_CHECK {    #TCP检查
            connect_port 80   #检查端口80
            connect_timeout 3    #超时时间3秒
            nb_get_retry 3    #重试次数3次
            delay_before_retry 4    #重试间隔4秒
        }
    }
    real_server 192.168.31.150 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 4
        }
    }
}

请根据实际情况修改红色部分

说明:

interface enp0s3 表示本地网卡为enp0s3

192.168.31.200 表示虚拟ip

重启keepalived服务

systemctl restart keepalived
systemctl enable keepalived

验证虚拟IP是否生效

# 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
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:04:34:88 brd ff:ff:ff:ff:ff:ff
    inet 192.168.31.54/24 brd 192.168.31.255 scope global noprefixroute dynamic enp0s3
       valid_lft 31218sec preferred_lft 31218sec
    inet 192.168.31.200/32 scope global enp0s3
       valid_lft forever preferred_lft forever
    inet6 fe80::a66d:efde:f19f:9882/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

可以发现虚拟ip已经有了

登录主机lvs2

vi /etc/keepalived/keepalived.conf

LVS2的配置同LVS1,只需将配置文件中下面两处修改即可

内容如下:

global_defs {
    router_id LVS_TEST    #服务器名字
}

vrrp_instance VI_1 {
    state BACKUP    #配置主备,备用机此配置项为BACKUP
    interface enp0s3    #指定接口
    virtual_router_id 51    #指定路由ID,主备必须一样
    priority 100    #设置优先级,主略高于备份
    advert_int 1    #设置检查时间
    authentication {
        auth_type PASS    #设置验证加密方式
        auth_type 1234    #设置验证密码
    }
    virtual_ipaddress {
        192.168.31.200
    }
}

virtual_server 192.168.31.200 80 {
    delay_loop 3    #健康检查时间
    lb_algo rr    #LVS调度算法
    lb_kind DR   #LVS工作模式
    !persistence 60    #是否保持连接,!不保持
    protocol TCP    #服务采用TCP协议
    real_server 192.168.31.113 80 {
        weight 1    #权重
        TCP_CHECK {    #TCP检查
            connect_port 80   #检查端口80
            connect_timeout 3    #超时时间3秒
            nb_get_retry 3    #重试次数3次
            delay_before_retry 4    #重试间隔4秒
        }
    }
    real_server 192.168.31.150 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 4
        }
    }
}

重启keepalived服务

systemctl restart keepalived
systemctl enable keepalived

查看虚拟IP

# 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
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:d4:0e:fb brd ff:ff:ff:ff:ff:ff
    inet 192.168.31.51/24 brd 192.168.31.255 scope global noprefixroute dynamic enp0s3
       valid_lft 31079sec preferred_lft 31079sec
    inet6 fe80::8cdb:32f0:4bbd:9294/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
    inet6 fe80::a66d:efde:f19f:9882/64 scope link tentative noprefixroute dadfailed 
       valid_lft forever preferred_lft forever

注意:此时是没有的。因为master和bakcup只能同时存在一个。只有当master异常时,bakcup才会出现虚拟ip。

登录主机lvs1,关掉主服务器的keepalived服务

systemctl stop keepalived

登录主机lvs2,验证备份的keepalived是否生效

# 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
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:d4:0e:fb brd ff:ff:ff:ff:ff:ff
    inet 192.168.31.51/24 brd 192.168.31.255 scope global noprefixroute dynamic enp0s3
       valid_lft 30713sec preferred_lft 30713sec
    inet 192.168.31.200/32 scope global enp0s3
       valid_lft forever preferred_lft forever
    inet6 fe80::8cdb:32f0:4bbd:9294/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
    inet6 fe80::a66d:efde:f19f:9882/64 scope link tentative noprefixroute dadfailed 
       valid_lft forever preferred_lft forever

四、web服务器绑定VIP

 2台web服务器为lo:0绑定VIP地址、抑制ARP广播

登录主机web1,web2,编写以下脚本文件realserver.sh

vi /etc/init.d/realserver.sh

内容如下:

#!/bin/bash
#description: Config realserver

VIP=192.168.31.200

#/etc/rc.d/init.d/functions

case "$1" in
start)
       /sbin/ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
       /sbin/route add -host $VIP dev lo:0
       echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
       echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
       echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
       echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
       sysctl -p >/dev/null 2>&1
       echo "RealServer Start OK"
       ;;
stop)
       /sbin/ifconfig lo:0 down
       /sbin/route del $VIP >/dev/null 2>&1
       echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
       echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
       echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
       echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
       echo "RealServer Stoped"
       ;;
*)
       echo "Usage: $0 {start|stop}"
       exit 1
esac

exit 0

请根据实际情况,修改VIP地址。

登录主机web1,web2,分别执行脚本

bash /etc/init.d/realserver.sh

执行完了之后,验证一下 使用ifconfig 你会发现 回环地址的网卡会多出一个lo:0的 网卡;

# ifconfig lo:0lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 192.168.31.200  netmask 255.255.255.255
        loop  txqueuelen 1000  (Local Loopback)

登录lvs1,查看VIP是否成功映射

# ipvsadm -L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  MiWiFi-R3P-srv:http rr
  -> 192.168.31.113:http          Route   1      0          0         
  -> 192.168.31.150:http          Route   1      0          0

 五、测试可用性

测试keepalived的监控检测

访问虚拟ip

1.png
1.png

可以看到,现在是访问的web1 

登录主机web1,关闭nginx进程。

nginx -s stop

刷新页面

1.png
1.png

 可以发现切换到web2了。

登录主机web1,启动Nginx

nginx

刷新页面

1.png
1.png

 发现切换到web1了。

测试 keepalived 的HA特性

登录主机lvs1,此时的vip是在master节点上的。关闭keepalived服务

systemctl stop keepalived

查看vip,发现已经没有了

# ip addr
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
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:04:34:88 brd ff:ff:ff:ff:ff:ff
    inet 192.168.31.54/24 brd 192.168.31.255 scope global noprefixroute dynamic enp0s3
       valid_lft 42290sec preferred_lft 42290sec
    inet6 fe80::a66d:efde:f19f:9882/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

登录主机lvs2,查看vip,发现已经出现了。

# ip addr
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
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:d4:0e:fb brd ff:ff:ff:ff:ff:ff
    inet 192.168.31.51/24 brd 192.168.31.255 scope global noprefixroute dynamic enp0s3
       valid_lft 42248sec preferred_lft 42248sec
    inet 192.168.31.200/32 scope global enp0s3
       valid_lft forever preferred_lft forever
    inet6 fe80::8cdb:32f0:4bbd:9294/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
    inet6 fe80::a66d:efde:f19f:9882/64 scope link tentative noprefixroute dadfailed 
       valid_lft forever preferred_lft forever

此时,刷新页面,依然访问正常。

1.png
1.png

 说明keepalived的HA特性是正常的。

本文参考链接:

https://blog.csdn.net/weixin_42342456/article/details/86100090

https://www.cnblogs.com/aspirant/p/6740556.html

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-06-17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、概述
    • 环境说明
    • 二、web服务器配置
      • 安装nginx
        • 访问页面
        • 三、LVS+Keepalive
          • 安装
            • 配置
            • 四、web服务器绑定VIP
            •  五、测试可用性
              • 测试keepalived的监控检测
                • 测试 keepalived 的HA特性
                相关产品与服务
                负载均衡
                负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档