Keepalived + LVS/DR 实现Apache负载均衡和高可用

  • 原创
  • Madman
  • /
  • /
  • 0
  • 1578 次阅读

Synopsis: LVS/DR 实现 TCP 四层负载均衡,将客户端请求均衡分发到后端 Web 服务器上。为了防止调度器 Director 节点单点故障,需要扩展为两节点,并用 Keepalived 实现 HA

环境说明:

节点 组件 备注
nkogw01 keepalived + ipvsadm Keepalived VVIP:192.168.40.150,(LVS-Master)DIP:192.168.40.158
nkogw02 keepalived + ipvsadm Keepalived VVIP:192.168.40.150,(LVS-Backup)DIP:192.168.40.159
nkocs01 radosgw + httpd RIP:192.168.40.151
nkocs02 radosgw + httpd RIP:192.168.40.152
nkocs03 radosgw + httpd RIP:192.168.40.153

1. 提供 httpd 服务

三台存储节点分别搭建 Ceph S3 对象网关实例 radosgw(默认端口 80),已安装 httpd-2.4.6-40

2. 安装 ipvsadm(可选)

两台网关安装 ipvsadm 纯粹是为了方便查看 LVS 的状态

# yum install -y ipvsadm

3. 安装 Keepalived

两台网关是 主备 模式:

3.1 安装 rpm 包

# yum install -y keepalived

3.2 修改网关 1 上的配置文件

[root@nkogw01 ~]# vim /etc/keepalived/keepalived.conf
内容如下:


! Configuration File for keepalived

global_defs {
   notification_email {
       252954311@qq.com
   }
   notification_email_from root
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.40.150/32
    }
}

virtual_server 192.168.40.150 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    nat_mask 255.255.255.255
    # persistence_timeout 50
    protocol TCP

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

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

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

参数说明:

1. 全局配置区域 global_defs
global_defs {
   notification_email {         #用于设置报警邮件地址,可以设置多个,每行一个
       252954311@qq.com
   }
   notification_email_from root #用于设置邮件的发送地址
   smtp_server 127.0.0.1        #用于设置邮件的smtp server地址
   smtp_connect_timeout 30      #用于设置连接smtp server的超时时间
   router_id LVS_DEVEL          #运行keepalived服务器的一个标识,是发邮件时显示在邮件主题中的信息
}

2. 核心配置区域虚拟冗余路由器VRRP,实现高可用功能
vrrp_instance VI_1 {      #定义vrrp实例,自定义名称
    state                 #状态,主MASTER
    interface eth0        #监控的网络接口
    virtual_router_id 51  #同一网络中virtual_router_id必须唯一
    priority 100          #定义的优化级,数字越大,优先级越高
    advert_int 1          #master与backup之间同步检查时间间隔,单位秒
    mcast_src_ip <ipaddr> #用于设置发送多播包的地址,如果不设置,使用绑定的网卡所对应的IP地址。
    grap_master_delay 10  #用于设定在切换到master状态后延时时行Gratuitous arp请求的时间。
    track_interface {     #用于设置一些额外的网络监听接口,其中任何一个网络接口出现故障,keepalived都会进入fault状态。
        eth0
        eth1
    }
    authentication {      #认证
        auth_type PASS    #验证类型 
        auth_pass 1111    #密码
    }
    virtual_ipaddress {   #虚拟iP,可使用 ip addr show 查看
        # <IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPE> label <LABEL>
        # ip地址          广播地址     网络接口     生效范围      网络接口别名 

        192.168.40.150/32 #虚拟IP
    }
    virtual_routes {
        # src <IPADDR> [to] <IPADDR>/<MASK> via|gw <IPADDR> dev <STRING> scope <SCOPE> tab
        #用来设置在切换时添加或删除路由信息,通过“ip route”命令查看路由添加成功信息,也可以通过notify_master选项来代替routes实现的功能。

        src 192.168.100.1 to 192.168.109.0/24 via 192.168.200.254 dev eth1
        192.168.110.0/24 via 192.168.200.254 dev eth1
        192.168.111.0/24 dev eth2
        192.168.112.0/24 via 192.168.100.254
 }
    nopreempt             #设置高可用集群中的不抢占功能。
    preempt_delay 300     #设置抢占延时时间,单位是秒。
}

3. LVS ipvs配置区域
virtual_server 192.168.40.150 80 {    #定义虚拟服务器
    delay_loop 6                      #健康检查时间,单位秒
    lb_algo rr                        #调度算法,有rr、wrr、lc、wlc、lblc、sh、dh等,常用的算法rr和wlc
    lb_kind DR                        #NAT,TUN,DR三个模式
    nat_mask 255.255.255.255          #子网掩码
    persistence_timeout 50            #会话保持时间,单位秒(同一个客户端分配到同一个real server,测试时无法看到负载均衡效果)
    persistence_granularity <NETMASK> 
                                
                            
分类: 负载均衡
标签: HA KeepAlived LB LVS
未经允许不得转载: LIFE & SHARE - 王颜公子 » Keepalived + LVS/DR 实现Apache负载均衡和高可用

分享

作者

作者头像

Madman

如需 Linux / Python 相关问题付费解答,请按如下方式联系我

0 条评论

暂时还没有评论.

专题系列