Keepalived + LVS/DR 实现Apache负载均衡和高可用
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
的状态
3. 安装 Keepalived
两台网关是 主备
模式:
3.1 安装 rpm 包
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> #配合persistence_timeout的,后面跟了网掩码,表示持久连接的粒度默认是255.255.255.255, #也就是一个单独的客户端IP,如掩码为255.255.255.0,客户端IP所在的网段都会分配置同一台real server上 protocol TCP #转发协议类型,有tcp和udp两种 ha_suspend #节点状态从master到backup切换时,暂不启用real server节点的健康检查。
0 条评论
评论者的用户名
评论时间暂时还没有评论.