lvs+keepalived负载均衡

实验环境:虚拟机5(master、backup(安装Keepalived)、webserver2台、测试)

dr模式数据流向:client --> DS -->kernel space --> prerouting  --> CIP:VIP --> INPUT --> ipvs -->DMAC:RMAC -->postrouting -->DS RS --rs -->lo -->eth0(VIP:CIP) --> clinet

 --在master端安装ipvsadm、在webseber安装arptables

master端:

# yum install -y ipvsadm.x86_64
# vim /etc/sysconfig/ipvsadm-config
# touch /etc/sysconfig/ipvsadm(没有此文件重启ipvsadm服务会报错)
# ipvsadm -A -t 172.25.254.100:80 -s rr 添加策略(指定vip,并使用轮询的方法)
# ipvsadm -a -t 172.25.254.100:80 -r 172.25.254.2:80 -g
# ipvsadm -a -t 172.25.254.100:80 -r 172.25.254.3:80 -g  添加真实服务器
# ip addr add 172.25.254.100/24 dev ens33       将vip添加到网卡上

# ipvsadm -l
# ipvsadm -ln  查看策略(不需要解析)

webserver端

防火墙策略

# ip addr add 172.25.254.100/32 dev ens33
# arptables -A INPUT -d 172.25.254.100 -j DROP 丢掉访问vip的请求的策略,只能经过vs的vip,也就是只能通过vs请求资源,
# arptables -A OUTPUT -s 172.25.254.100 -j mangle --mangle-ip-s 172.25.254.3 真实的ip为3,以100的ip出去

测试:(由于我的虚拟及中安装过了httpd就不需要安装了)

此时已经实现了负载均衡,但是webserver如果挂掉一台就会影响到用户的访问,或者master调度端挂掉就无法调度了。这时候我们就可以使用keepalived来解决;

lvs+keepalived

Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。

在master端和backup端都需要安装keepalived(下载地址:https://www.keepalived.org/download.html

master端:

# tar zxf keepalived-2.0.17.tar.gz
# yum install -y openssl-devel gcc 没有openssl-devel编译会报错
# ./configure --prefix=/usr/local/keepalived --with-init=systemd  编译
# make && make install
#  ln -s /usr/local/keepalived/etc/keepalived/ /etc/  为方便做个软链接
# vim /etc/keepalived.conf 
 ! Configuration File for keepalived

global_defs {
   notification_email {
     root@localhhost
   }
   notification_email_from keepalived@loacalhost
   smtp_server 172.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 {
        172.25.254.100
    }
}

virtual_server 172.25.254.100 80 {
    delay_loop 3
    lb_algo rr
    lb_kind DR
    #persistence_timeout 50
    protocol TCP

    real_server 172.25.254.2 80 {
	TCP_CHECK {
        weight 1
            }
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    real_server 172.25.254.3 80 {
        TCP_CHECK {
        weight 1
            }
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }

    }
}

backup端:同master端编译安装keepalived(将配置文件中的statue:MASTER 改为BACKUP并将优先级降低,我的中将100改为了50)

global_defs {
   notification_email {
     root@localhhost
   }
   notification_email_from keepalived@loacalhost
   smtp_server 172.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 BACKUP
    interface ens33
    virtual_router_id 51
    priority 50
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100
    }
}

virtual_server 172.25.254.100 80 {
    delay_loop 3
    lb_algo rr
    lb_kind DR
    #persistence_timeout 50
    protocol TCP

    real_server 172.25.254.2 80 {
	TCP_CHECK {
        weight 1
            }
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    real_server 172.25.254.3 80 {
        TCP_CHECK {
        weight 1
            }
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }

    }
}

测试开启backup和master端中keepalived服务

# systemctl start keepalived.service 

webserver挂掉测试:

在任意一台webserver中关掉httpd服务,来模拟服务器挂掉

# systemctl stop httpd

 在客户端:

# curl 172.25.254.100 (用户访问正常)

在master端查看日志(由于server3中tcp80端口断开,将server3移除)

# cat /var/log/messages

webserver开启httpd服务

# systemctl start httpd

用户端:

在master端查看日志

master调度挂掉测试:

master端:

# systemctl stop keepalived.service

用户:

在backup端查看日志(添加了172.25.254.100,master端移除了17.25.254.100)

master端开启keepalived服务

# systemctl start keepalived.service 

客户端访问依旧正常,但是在buckup中移除了vip

master开始正常工作

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值