LVS-DR模式实现负载均衡+keepalived

lvs配置(DR)

在server1:
首先,重新配置yum源
vim /etc/yum.repos.d/rhel-source.repo 

这里写图片描述

 添加一个虚拟ip
 ip addr add 172.25.70.100/24 dev eth0
 ip addr  ###查看是否添加

这里写图片描述

 yum install ipvsadm -y
 ipvsadm -ln  ##列出ipvsadm策略
 ipvsadm -A -t 172.25.70.100:80 -s rr  ##添加策略 指定vip 172.25.66.100:80,-t指tcp,-s rr 指定轮询
 ipvsadm -a -t 172.25.70.100:80 -r 172.25.70.2:80 -g
 ##将虚拟ip映射到真实的ip,-r指定realserver -t指定tcp协议 -g指dr模式
ipvsadm -a -t 172.25.70.100:80 -r 172.25.70.3:80 -g
ipvsadm -ln
/etc/init.d/ipvsadm save  ##保存,关机再开机后还存在

这里写图片描述

在server2中

ip addr add 172.25.70.100/24 dev eth0
ip addr

这里写图片描述

为防止客户端在访问vip时直接访问到realserver,在realserver设置一定的策略
yum install arptables_jf -y
/etc/init.d/httpd start
arptables -nL
 arptables -A IN -d 172.25.70.100 -j DROP  ##访问realserver的100ip时的请求直接丢弃
 arptables -A OUT -s 172.25.70.100 -j mangle --mangle-ip-s 172.25.70.2  #realserver发出的信息全部转为他的真实ip
arptables -nL
/etc/init.d/arptables_jf  save

这里写图片描述

在server3中

ip addr add 172.25.70.100/24 dev eth0
ip addr 

这里写图片描述

yum install arptables_jf -y
arptables -nL
arptables -A IN -d 172.25.70.100 -j DROP
arptables -A OUT -s 172.25.70.100 -j mangle --mangle-ip-s 172.25.70.3
arptables -nL
/etc/init.d/arptables_jf save

这里写图片描述
在真机中测试:对比mac地址可查看这个100的资源时来自调度器server1,而不是realserver
这里写图片描述
上面的操作无法实现健康检查;我们通过ldiretord服务实现

Ldirector是一个监控集群服务节点运行状态的插件。Ldirector如果监控到集群节点中某个服务出现故障,就屏蔽此节点的对外连接功能,同时将后续请求转移到正常的节点提供服务。这个插件经常用在LVS负载均衡集群中。

lvs是一个四层负载均衡,是在内核层面,分为netfilter+ipvs和ipvsadm(用户层面的使用工具)
LVS负载均衡:四种负载均衡模式:DR,TUN(ip隧道),NAT,fullNAT,这里我们介绍DR模式
DR模式工作在链路层,采用了arp协议,rs表示realserver,vs表示vitrualserver,假设client的ip为cip,mac地址为m1,调度器vs的ip为vip,mac地址为m2,后端服务器的ip为rip,mac地址为m3由于DR模式工作在数据链路层,没有经过路由器,所以vs和rs必须在同一个网段,当client访问vip时,在DR模式下,vs通过它本身的一些算法m2改为m3,这样就可以实现直接将数据包丢给rs(这里rs上必须有vip,因为客户端访问的时vip),rs通过解封,得到了vip,通过与自己vip匹配判断数据包确实是给自己的,rs在通过封装,直接将数据发给client,数据包不用原路返回)。由于vs和rs上都有vip,会有冲突,因此这里我们应用arptables协议,在rs上添加策略,控制数据传输
在server1中:

yum install ldirectord-3.9.5-3.1.x86_64.rpm 
cp /usr/share/doc/ldirectord-3.9.5/ldirectord.cf /etc/ha.d/
cd /etc/ha.d/
ls
vim ldirectord.cf

这里写图片描述

/etc/init.d/ipvsadm stop
/etc/init.d/ldirectord start
ipvsadm -ln
vim /etc/httpd/conf/httpd.conf ####将httpd端口改为80
/etc/init.d/httpd restart
ipvsadm -ln
cd /var/www/html/
vim index.html
写入:server1--正在维护中

在真机中测试,当server2和server3都没有启动时,server1会顶上
一旦有任何一台realsever开着,server1都不会工作的
当两台realserver都关着时:
这里写图片描述
当server3开启时:
这里写图片描述

扫描二维码关注公众号,回复: 2759477 查看本文章

2.keeplived

keepalived在这里主要做realserver健康检查以及loadbalance主机和backup主机之间failover的实现。
keepalived是一个基于VRRP协议来实现WEB服务高可用方案,可以用来避免单点故障,一个web服务器至少有两台服务器运行keepalived,一台主服务器(MASTER),一台备用服务器(BACKUP),但是对外只表现一个vip,主服务器会发送特定消息给备用服务器,当备用服务器收到消息时,备用服务器就会接管ipswich,继续提供服务,从而保证了高可用性。

通过keepalived实现健康检查和高可用
在server1中:
1)网上找到keepalived安装包
tar zxf keepalived-2.0.6.tar.gz  ###解压
ls
cd keepalived-2.0.6
ls
./configure --prefix=/usr/local/keepalived --with-init=SYSV  ###编译
yum search OpenSSL   ###解决依赖性,安装其所需软件
yum install openssl-devel.x86_64 -y
./configure --prefix=/usr/local/keepalived --with-init=SYSV
make
make install  ###安装
cd  /usr/local/keepalived   ###下面为做软链接
ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived  /etc/init.d/
ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/keepalived/etc/keepalived/ /etc/
ln -s /usr/local/keepalived/sbin/keepalived /sbin/
chmod +x /usr/local/keepalived/etc/rc.d/init.d/keepalived ###给文件执行的权限
/etc/init.d/keepalived start  
/etc/init.d/keepalived stop
打开和关闭都显示ok的话,证明安装成功

vim /etc/keepalived/keepalived.conf ##编辑配置文件

global_defs {
   notification_email {
     root@localhost  ##设置报警邮件地址,如果要开启邮件报警,要开启本机的sendmail服务
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   #vrrp_strict    ###一定要注释,不然它会自动给server1上防火墙加一条策略,导致实验不能进行
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}
vrrp_instance VI_1 {
    state MASTER   ##指定keepalived的角色,MASTER表示此主机为主服务器,若为BACKUP则表示备用服务器
    interface eth0  ##指定HA检测网络的接口
    virtual_router_id 70  ##虚拟路由标识,MASTER和BACKUP的必须相同
    priority 100  ##定义优先级,数字越大优先级越高,因此MASTER的必须年比BACKUP的数字大,否则就会有冲突
    advert_int 1   ##设定MASTER和BACKUP负载均衡之间同步检查的时间间隔,单位为秒
    authentication {
        auth_type PASS  ##设定验证类型和密码
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.70.100  ##指定虚拟ip
    }
}
virtual_server 172.25.70.100 80 {  ##设定虚拟服务器ip地址及端口,两者以空格隔开
    delay_loop 3  ##设置运行情况检查时间,单位为秒
    lb_algo rr     ##设置负载均衡算法,这里设置为rr算法,即轮询算法
    lb_kind DR    ##设置lvs实现负载均衡机制,有NAT,TUN,DR三种模式
    #persistence_timeout 50  ###注释掉
    protocol TCP

    real_server 172.25.70.2 80 { ##配置realserver,需要指定真实ip与其端口,用空格隔开
        weight 1     ##配置服务节点的权重值
        TCP_CHECK {   ##realserver检查状态设置部分
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
    real_server 172.25.70.3 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
}

cat /var/log/messages ###看见有master,和send证明配置没问题
cd /usr/local/
scp -r keepalived/ server4:/usr/local/ ###将配置好的文件发给server4

在server4中:

cd /usr/local/
ls
cd keepalived/
pwd
ls   ####同server1一样做4次软链接
ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived  /etc/init.d/
ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/keepalived/etc/keepalived/ /etc/
ln -s /usr/local/keepalived/sbin/keepalived /sbin/

vim /etc/keepalived/keepalived.conf ##编辑配置文件,只需要更改如下部分

vrrp_instance VI_1 {
    state BACKUP   ##状态写为backup
    interface eth0
    virtual_router_id 70
    priority 50    ###将优先级修改到比master低
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.70.100
    }
}

再去真机中测试,keepalived的好处就是会自动判断realserver的状态,并且及时更新
keepalived作用下,如果两台realserver都不工作,它不会顶上,会报错
这里写图片描述

猜你喜欢

转载自blog.csdn.net/xbw_linux123/article/details/81288729