从零开始搭建 Keepalaived+Lvs 高可用集群 (Aliyun部署)

从零开始搭建 Keepalaived+Lvs 高可用集群(Aliyun部署)

大家有没有发现一个问题?就是在学习 keepalived+lvs 的过程中,学习相关文章,没有一篇关于 "如何部署 Aliyun?"上的文章。 想要部署到Aliyun ECS上,一定要看到最后

架构

lvs

本设计方案采用四台服务器构建高可用集群,使用 Keepalived 结合 Linux Virtual Server (LVS) 实现 负载均衡高可用性。其中,两台服务器配置为LVSDirector服务器,用于处理客户端请求并分发到后端服务器。另外两台服务器作为LVSReal Server,提供实际的服务处理。Keepalived用于实现Director服务器的高可用性,确保在主 Director 服务器故障时,备份 Director 能够无缝接管服务。

流程

  1. 安装配置操作系统和必要软件在所有四台服务器上。
  2. 在两台 Director 服务器上安装并配置 Keepalived ,设置虚拟IP地址和故障转移机制。
  3. 在两台 Real Server 上部署应用服务,并确保服务正常运行。
  4. 配置 LVS 规则,包括设置虚拟服务、定义 Real Server 以及选择负载均衡算法。
  5. 测试集群的负载均衡能力高可用性,确保在故障情况下服务不中断。

各服务功能

  • Keepalived:负责监控Director服务器的状态,实现故障检测和自动故障转移。
  • LVS Director:作为负载均衡器,接收客户端请求并根据配置的规则分发到Real Server
  • LVS Real Server:处理来自Director的实际业务请求,提供服务。

部署

安装相关软件

安装 Keepalived
邮件通知 xmail

环境配置

Director 与 RealServer 服务器上配置需手动修改, keepalived 不会自动设置

  1. Director 开启 ipv4 转发

    echo 1 > /proc/sys/net/ipv4/ip_forward
    
  2. RealServer 设置 arp

    #!/bin/bash
    vip=192.168.152.131
    mask='255.255.255.255'
    dev=lo:0
    case $1 in
    start)
        echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
        echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
        echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
        echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
        ifconfig $dev $vip netmask $mask broadcast $vip up
        route add -host $vip dev $dev
        echo "The RS Server is Ready!"
        ;;
    stop)
        ifconfig $dev down
        echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
        echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
        echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
        echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
        echo "The RS Server is Canceled!"
        ;;
    *) 
        echo "Usage: $(basename $0) start|stop"
        exit 1
        ;;
    esac
    
    

部署

配置

Keepalived Master

[root@localhost lvs]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
       *******@163.com
   }
   notification_email_from  admin03@localhost  #邮件发送者
   smtp_server 127.0.0.1               #邮件服务器地址为127.0.0.1
   smtp_connect_timeout 30 
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.152.131
    }

    notify_master "/etc/keepalived/notify.sh master "
    notify_backup "/etc/keepalived/notify.sh backup "
    notify_fault "/etc/keepalived/notify.sh fault "
}

virtual_server 192.168.152.131 80 {
    delay_loop 6
    lb_algo sh            # 负载均衡算法 源ip_hash
    lb_kind DR            # DR 模式
    persistence_timeout 50
    protocol TCP

    real_server 192.168.152.129 80 {
        weight 1
        TCP_CHECK {
            nb_get_retry 3              # 重新连接次数
            delay_before_retry 3        # 重新连接间隔时间
            connect_port 80             # 向当前RS的哪个PORT发起健康状态检测请求
            connect_timeout 3           # 客户端请求的超时时长, 等于haproxy的timeout server
        }
    }

    real_server 192.168.152.133 80 {
        weight 1
        TCP_CHECK {
            nb_get_retry 3              # 重新连接次数
            delay_before_retry 3        # 重新连接间隔时间
            connect_port 80             # 向当前RS的哪个PORT发起健康状态检测请求
            connect_timeout 3           # 客户端请求的超时时长, 等于haproxy的timeout server
        }
    }
}

Keepalived Backup

[root@localhost ~]# cat /etc/keepalived/keepalived.conf 
! Configuration File for keepalived

global_defs {
   notification_email {
       ******@163.com              #邮件通知接收者
   }
   notification_email_from  admin03@localhost  #邮件发送者
   smtp_server 127.0.0.1               #邮件服务器地址为127.0.0.1
   smtp_connect_timeout 30 

   router_id LVS_DEVEL   # 与 master 一致
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state BACKUP               # 备用节点
    interface ens33
    virtual_router_id 51  
    priority 80                # 优先级比master低, 用于选举master的优先级
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.152.131
    }

    notify_master "/etc/keepalived/notify.sh master "
    notify_backup "/etc/keepalived/notify.sh backup "
    notify_fault "/etc/keepalived/notify.sh fault "
}

virtual_server 192.168.152.131 80 {
    delay_loop 6
    lb_algo sh
    lb_kind DR
    persistence_timeout 50
    protocol TCP

    real_server 192.168.152.129 80 {
        weight 1
        TCP_CHECK {
            nb_get_retry 3              # 重新连接次数
            delay_before_retry 3        # 重新连接间隔时间
            connect_port 80             # 向当前RS的哪个PORT发起健康状态检测请求
            connect_timeout 3           # 客户端请求的超时时长, 等于haproxy的timeout server
        }
    }

    real_server 192.168.152.133 80 {
        weight 1
        TCP_CHECK {
            nb_get_retry 3              # 重新连接次数
            delay_before_retry 3        # 重新连接间隔时间
            connect_port 80             # 向当前RS的哪个PORT发起健康状态检测请求
            connect_timeout 3           # 客户端请求的超时时长, 等于haproxy的timeout server
        }
    }
}
  1. 在所有服务器上安装Linux操作系统,并进行网络配置,确保服务器之间可以互相访问。
  2. Director 服务器上安装 Keepalived ,并配置 VRRP (虚拟路由冗余协议),设置优先级和虚拟IP。
  3. Real Server 上部署业务应用,确保应用服务可以在指定端口上接收请求。
  4. Director 服务器上配置 LVS 规则,包括定义虚拟服务的IP地址和端口,以及 Real Server 的IP地址和权重。
  5. 配置网络设备,如路由器和交换机,确保流量可以正确路由到 Director 服务器。
  6. 进行压力测试和故障模拟,验证集群的性能和高可用性。

测试高可用

参考 从零开始搭建 LVS 高性能集群 (DR模式) 部署 nginx 服务

查看部署结果

DR-Master

[root@localhost lvs]# ip a show ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:02:6a:99 brd ff:ff:ff:ff:ff:ff
    inet 192.168.152.128/24 brd 192.168.152.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet 192.168.152.131/32 scope global ens33   # vip 配置成功

[root@localhost lvs]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.152.131:80 wrr
  -> 192.168.152.129:80           Route   1      0          0         
  -> 192.168.152.133:80           Route   1      0          1  

DR-BackUp

[root@localhost ~]# ip a show ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:fb:da:94 brd ff:ff:ff:ff:ff:ff
    inet 192.168.152.125/24 brd 192.168.152.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::c4cc:bc59:19a3:dc4c/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

RS

[root@master lvs]# ip a show lo
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
    inet 192.168.152.131/32 brd 192.168.152.131 scope global lo

通过访问 VIP:80, 服务正常响应

nginx

高可用

  1. 关闭 Master keepalvied 服务
# 关闭  keepalvied 服务
[root@localhost lvs]# systemctl stop keepalived
# 查看链路规则 已清空
[root@localhost lvs]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
# 查看vip已经不绑定 master ens33 网卡
[root@localhost lvs]# ip a show ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:02:6a:99 brd ff:ff:ff:ff:ff:ff
    inet 192.168.152.128/24 brd 192.168.152.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::c4cc:bc59:19a3:dc4c/64 scope link tentative noprefixroute dadfailed 
       valid_lft forever preferred_lft forever
    inet6 fe80::fc0c:8e16:abd:b067/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
  1. 查看 BackUp keepalvied 服务
# vip 已经漂移到 backup 节点
[root@localhost ~]# ip a show ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:fb:da:94 brd ff:ff:ff:ff:ff:ff
    inet 192.168.152.125/24 brd 192.168.152.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet 192.168.152.131/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::c4cc:bc59:19a3:dc4c/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
# backup 节点 配置了链路规则
[root@localhost ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.152.131:80 sh persistent 50
  -> 192.168.152.129:80           Route   1      0          0         
  -> 192.168.152.133:80           Route   1      0          0 
  1. Nginx 服务能够通过 VIP:80 正常访问

  2. 重启 Master keepalvied 服务

[root@localhost lvs]# systemctl start keepalived
# VIP 重新漂移到 Master 节点
[root@localhost lvs]# ip a show ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:02:6a:99 brd ff:ff:ff:ff:ff:ff
    inet 192.168.152.128/24 brd 192.168.152.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet 192.168.152.131/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::c4cc:bc59:19a3:dc4c/64 scope link tentative noprefixroute dadfailed 
       valid_lft forever preferred_lft forever
    inet6 fe80::fc0c:8e16:abd:b067/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
# Master 节点 重新配置了链路规则
[root@localhost lvs]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.152.131:80 sh persistent 50
  -> 192.168.152.129:80           Route   1      0          0         
  -> 192.168.152.133:80           Route   1      0          0 
  1. 查看 BackUp keepalvied 服务
# VIP 解除 Backup 节点 ens33 绑定
[root@localhost ~]# ip a show ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:fb:da:94 brd ff:ff:ff:ff:ff:ff
    inet 192.168.152.125/24 brd 192.168.152.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::c4cc:bc59:19a3:dc4c/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
# backup 节点 配置了链路规则 未清理
[root@localhost ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.152.131:80 sh persistent 50
  -> 192.168.152.129:80           Route   1      0          0         
  -> 192.168.152.133:80           Route   1      0          0 
  1. Nginx 服务能够通过 VIP:80 正常访问

  2. 邮箱通知主备切换
    在这里插入图片描述

优劣势

  • 优势

    • 高可用性Keepalived 确保了 Director 服务器的高可用性,减少单点故障风险。
    • 负载均衡LVS 提供了高效的负载均衡能力,能够处理大量并发请求。
    • 可扩展性:可以轻松添加更多的 Real Server 来扩展服务能力。
    • 灵活性:支持多种负载均衡算法,适应不同的业务需求。
  • 劣势

    • 复杂性:配置和管理 KeepalivedLVS 可能相对复杂。
    • 资源消耗Director 服务器需要足够的资源来处理负载均衡和故障转移。
    • 依赖性:对 KeepalivedLVS 的依赖可能增加系统的脆弱性。
  • 性能测试:定期进行性能测试,确保集群满足业务性能要求。

  • 监控和日志:实施监控系统来监控集群状态,并记录日志以便于问题排查。

通过这种设计,可以构建一个既高可用又能够负载均衡的集群系统,适用于需要高稳定性高性能的业务场景。

ISSUE

  1. Keepalived 配置成功, vip 正常绑定到rs网卡,vip 无法ping通
    Keepalived 服务版本错误,建议下载安装包,编译。

  2. Keepalived+lvs如何部署到aliyun ECS 集群?
    无法将 Keepalived+lvs部署到aliyun ECS 集群。
    无法将 Keepalived+lvs部署到aliyun ECS 集群。
    无法将 Keepalived+lvs部署到aliyun ECS 集群。
    因为aliyun 不提供 VIP, 必须通过 EIP+HaVIP, 但是HaVIP需要申请资格,可以花钱购买 LB 服务。

  • 7
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值