LinuxVirtualServer

LinuxVirtualServer

client   -->  cdn(varnish/squid) --> F5/LVS(四层)(router) (VIP)HA/LB(nginx/haproxy(七层负载均衡))--> server(后端服务器) (-->web -->  app --> DB )


4层和7层负载均衡的主要区别

4层,转发(流量的分发) 主要通过报文中的目标地址和端口,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。

7层,(相当于代理服务器)负载均衡和前端的客户端以及后端的服务器会分别建立TCP连接。这个技术原理上来看,七层负载均衡对负载均衡设备的要求更高

lvs的官网

网址:linuxvirtualserver.org/whatis.html


一、基于OSI第四层的负载均衡:

这里采用DR模式

1、原理:

client --> vs(vip)(调度器) --> rs --> client
vmac -----> rmac (当访问vip的时候,vs只做了虚拟主机的mac地址修改为rs的mac的动作)
更改目的MAC之后,以数据帧的形式投放到网络中

2、实现:

VertualServer IP 172.25.68.1

Vip 172.25.68.100

RealServer IP 172.25.68.2    172.25.68.3

下载ipvsadm套件(企业6之前的版本没有ipvsadm)

配置VirtualServer

yum源

[HighAvailability]                                                   
name=HighAvailability
baseurl=http://172.25.68.250/rhel6.5/HighAvailability/
enabled=1
gpgcheck=0

[ResilientStorage]
name=ResilientStorage
baseurl=http://172.25.68.250/rhel6.5/ResilientStorage
enabled=1
gpgcheck=0

[LoadBalancer]
name=LoadBalancer
baseurl=http://172.25.68.250/rhel6.5/LoadBalancer
enabled=1
gpgcheck=0

[ScalableFileSystem]
name=ScalableFileSystem
baseurl=http://172.25.68.250/rhel6.5/ScalableFileSystem
enabled=1
gpgcheck=0

安装并配置ipvsadm

yum install ipvsadm -y

添加策略
ipvsadm -A -t 172.25.68.100:80 -s rr
ipvsadm -a -t 172.25.68.100:80 -r 172.25.68.2:80 -g
ipvsadm -a -t 172.25.68.100:80 -r 172.25.68.3:80 -g
/etc/init.d/ipvsadm save
所写的策略都在/etc/sysconfig/ipvsadm文件中
ipvsadm 常用命令
ipvsadm -C 	清除策略
ipvsadm -ln	显示策略

RealServer

添加vip
ip addr add 172.25.68.100/24 dev eth1
或者(ip addr add 172.25.68.100/32 dev lo)都可以

(注:vs也要添加vip)

打开httpd

echo  "

www.server2.org

"  /var/www/html/index.html

echo  "

www.server3.org

"  /var/www/html/index.html

测试:

client访问调度器(vs)

curl 172.25.68.100


Question:
目前所有节点都处在同一个vlan中,并且client的ip地址和rs的ip地址在同一网段,所以当我们以VIP访问的时候,可能不经过调度器(vs),而访问的是rs,这样就不能达到负载均衡的效果
解决方案(熟悉arp协议):

real server:

在所有rs上使用arptables_jf 插件

将来自外界的对vip的访问全都DROP

且在 rs 上 不对外宣称 vip

  arptables -A IN -d 172.25.68.100 -j DROP
  arptables -A OUT -s 172.25.68.100 -j mangle --mangle-ip-s 172.25.68.3
  /etc/init.d/arptables_jf save

重新测试:

curl 172.25.68.100

LinuxVirtualServer_第1张图片


问题:

我们会遇到这种情况,当rs上的http挂掉的时候,之前的调度策略依然生效,所以当调度器将请求发送到挂掉的rs时,会有连接失败的显示(如下)

[root@foundation68 Desktop]# curl 172.25.68.100

curl: (7) Failed connect to 172.25.68.2:80; Connection refused

[root@foundation68 Desktop]# curl 172.25.68.100

www.server3.org


[root@foundation68 Desktop]# curl 172.25.68.100

curl: (7) Failed connect to 172.25.68.2:80; Connection refused   

[root@foundation68 Desktop]# curl 172.25.68.100

www.server3.org

解决方案:

加入将康检查机制,即对宕掉的rs进行处理,重新修改调度器上ipvsadm策略

调度器上安装 ldirectord

配置文件
vim /etc/ha.d/ldirectord.cf 
virtual=172.25.68.100:80
    real=172.25.68.2:80 gate
    real=172.25.68.3:80 gate
    fallback=127.0.0.1:80 gate  这里是说当所有的rs都宕掉后,调度器充当rs的角色
    service=http
    scheduler=rr
protocol=tcp
    checktype=negotiate
    checkport=80
    request="index.html"
    #receive="Test Page"
    #virtualhost=www.x.y.z

清除ipvsadm中的策略
/etc/init.d/ipvsadm stop
启动ld,策略会自动添加

/etc/init.d/ldirectord start

LinuxVirtualServer_第2张图片

测试:当挂掉一台 rs(172.25.68.2)的http服务

LinuxVirtualServer_第3张图片

LinuxVirtualServer_第4张图片


问题:那万一调度器挂掉了怎么办?

            企业中一般会有多台调度器工作,挂掉一台之后调度器之间会如何接管?

解决方案:使用keepalived做高可用

keepalived是集群管理中保证集群高可用的一个服务软件,是以VRRP(虚拟路由冗余协议)协议为实现基础的。虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了。

keepalived主要有三个模块,分别是core、check和vrrp。core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式。vrrp模块是来实现VRRP协议的。


这里我使用两个调度器(ipvs),他俩为主备关系,即主vs挂掉,备用vs接管;主vs修复后重新接管。

172.25.68.1(master)  &  172.25.68.4(backup)

源码安装keepalived

目前最新版本:keepalived-1.4.3

tar zxf keepalived-1.4.3.tar.gz
cd keepalived-1.4.3
yum install openssl-devel libn13-devel ipset-devel iptables-devel libnfnetlink-devel -y
./configure --prefix=/usr/local/keepalived --with-init=SYSV
make && make install

scp /usr/local/keepalived [email protected]:/usr/local     ##把装好的keepalived发送给备用调度器

做个软连接,方便配置keepalived:
ln -s /usr/local/keepalived/etc/keepalived/  /etc
ln -s /usr/local/keepalived/etc/sysconfig/keepalived  /etc/sysconfig/
ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived  /etc/init.d/
ln -s /usr/local/keepalived/sbin/keepalived  /sbin/
chmod +x /etc/init.d/keepalived

配置文件
172.25.68.1(master)
vim /etc/keepalived/keepalived.conf
vrrp_strict 注释掉这一行
##该配置会在iptable中添加如下策略:
DROP       all  --  anywhere             172.25.68.100

##vrrp 高可用配置区
vrrp_instance VI_1 {
    state MASTER
    interface eth2              ##在哪个接口添加vip,就写哪个接口
    virtual_router_id 68
    priority 100                ##优先级
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.68.100/24
    }
}

virtual_server 172.25.68.100 80 {
    delay_loop 3              
    lb_algo rr                ##调度算法
    lb_kind DR                ##DR模式
    #persistence_timeout 50
    protocol TCP

    real_server 172.25.68.2 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
    real_server 172.25.68.3 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
}

172.25.68.4(backup)
vim /etc/keepalived/keepalived.conf
state BACKUP
priority 50       作为备用机,优先级要小于master的优先级

ip addr del 172.25.68.100/24 dev eth1

/etc/init.d/ipvsadm stop

/etc/init.d/ldirectord stop
/etc/init.d/keepalived start

LinuxVirtualServer_第5张图片

宕掉master,vip和ipvsadm的策略都会转移到server4(backup),实现高可用



你可能感兴趣的:(企业部分)