lvs+keepalived笔记

LVS

一、概述

Cluster:集群,为解决某个问题将多台计算机组合起来形成的单个系统

VS:Virtual Server,负责调度

RS:Real Server,负责真正提供服务

CIP:client IP,客户端IP

VIP:virtual server IP,vs外网的IP

DIP:director IP,VS内网的IP

RIP:real server ip,后端服务器IP

ipvsadm:用户空间的命令行工具,用于管理集群服务及集群服务上的RS等

ipvs:工作于内核上的netfilter INPUT HOOK之上的程序,可根据用户定义的集群实现请求转发;

VS根据请求报文的目标IP和目标协议及端口将其调度转发至某RS,根据调度算法来挑选RS

1.集群类型

Lvs-NAT

多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某台RS的RIP和PORT实现转发

  • RS必须使用私有IP地址,网关指向DIP
  • DIP与RIP必须在同一网段内
  • DS作为所有服务器节点的网关,也就是说请求和响应报文都需要经过Director Server
  • 高负载场景中,Director Server压力比较大,易成为性能瓶颈

数据包流向分析:

  • 用户发送请求到Director Server,请求的数据报文(源IP是CIP,目标IP是VIP)到达内核空间。
  • 内核空间判断数据包的目标IP是本机,此时IPVS比对数据包请求的服务是否为集群服务,若是,修改数据包的目标IP地址为后端服务器IP,重新封装数据包(源IP为CIP,目标IP为RIP),然后选路将数据包发送给Real Server。
  • Real Server比对发现目标IP是本机的IP,重新封装报文(源IP为RIP,目标IP为CIP)发回给Director Server。
  • Director Server重新封装数据包,将源IP地址修改为自己的VIP地址,然后响应给客户端。 此时报文的源IP为VIP,目标IP为CIP。
Lvs-DR

直接路由,LVS默认模式,应用最广泛,通过请求报文重新封装MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某台RS的RIP所在接口的MAC地址;

1.director和各RS都有配置VIP

2.确保前端路由器将目标IP为VIP的请求报文发往Director

​ 在RS上修改内核参数以限制arp通告以及应答级别/proc/sys/net/ipv4/conf/all/arp_ignore

​ /proc/sys/net/ipv4/conf/all/arp_announce

3.RS的RIP可以使用私网地址,也可以是公网地址;RIP于DIP在同一IP网络;RIP的网关不能指向DIP,以确保响应报文不会经由Director

4.RS和Director要在同一个物理网络

5.请求报文要经过Director,但响应报文不经由Director,而由RS直接发往Client

数据包流向分析:

  • 用户发送请求到Director Server,请求的数据报文(源IP是CIP,目标IP是VIP)到达内核空间。
  • 由于DS和RS在同一个网络中,所以是通过二层数据链路层来传输。
  • 内核空间判断数据包的目标IP是本机IP,此时IPVS比对数据包请求的服务是否为集群服务,若是,重新封装数据包,修改源MAC地址为DIP的MAC地址,目标MAC地址为RIP的MAC地址,源IP地址与目标IP地址没有改变,然后将数据包发送给Real Server.
  • RS发现请求报文的MAC地址是自己的MAC地址,就接收此报文,重新封装报文(源IP地址为VIP,目标IP为CIP),将响应报文通过lo接口传送给eth0网卡然后向外发出。
  • RS直接将响应报文传送到客户端。

2.算法

  • rr:roundrobin,轮询
  • wrr:weighted RR,加权轮询
  • sh:source hashing,将来自于同一个IP地址的请求始终转发倒第一次挑选的RS
  • dh:destination hashing,目标地址如果是一样的,则代理到同一台服务器
  • lc:最少连接:会将客户端请求发送到连接数量比较少的real-server
  • wlc:加权最少连接:我的权重是2,你的是1,我的连接是100,你的是50才是等价的,按比例的

二、服务搭建

1.ipvsadm命令

ivpsadm -A -t VIP:端口 -s 算法						#创建集群
ipvsadm -a -t VIP:端口 -r RIP -m/g/i				 #添加真实服务器;nat/dr/tun
ipvsadm -E -t VIP:端口 -s 算法					    #修改
ipvsadm -Ln										  #查看集群
ipvsadm -d -t VIP:端口 -r RIP						#去除真实服务器
ipvsadm -D -t VIP:端口							#去除某个集群
ipvsadm -C										 #去除所有集群

2.Lvs-NAT

VIP:192.168.171.2

DIP:192.168.0.165 ip_forward=1

RIP1:192.168.0.166 GATEWAY:192.168.0.165

RIP2:192.168.0.167 GATEWAY:192.168.0.165

VS

echo net.ipv4.ip_forward=1 >> /etc/sysctl.conf
sysctl -p

yum -y install ipvsadm

nmcli connection add ifname ens37 con-name ens37 type ethernet
ipvsadm -A -t 192.168.171.2:80 -s rr
ipvsadm -Ln
ipvsadm -a -t 192.168.171.2:80 -r 192.168.0.166 -m
ipvsadm -a -t 192.168.171.2:80 -r 192.168.0.167 -m

3.Lvs-DR

VIP:192.168.0.180

DIP:192.168.0.165

RIP1:192.168.0.166

RIP2:192.168.0.167

1.RS配置

1.配置RS的VIP
#VIP地址仅用作发送Web响应数据包的源地址,并不需要监听客户机的访问请求(改由调度器Director监听并分发)。因此使用虚接口lo:0来承载VIP地址。
 

2.在两台real server上配置启动脚本
#限制响应级别arp_ignore
	0:默认值,表示可以使用本地任意接口上配置的任意地址进行响应
	1:仅在请求的目标IP配置在本地主机的接收倒请求报文的接口上时,才给予响应
#限制通告级别arp_announce
	0:默认值,把本机所有接口的所有信息向每个接口的网络进行通告
	1:尽量避免将接口信息向非直连网络进行通告
	2:必须避免将接口信息向非本地网络进行通告

vim /etc/init.d/rs.sh
  #!/bin/bash
  VIP=192.168.0.180
        case "$1" in
        start)
                ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
                /sbin/route add -host $VIP dev lo:0      #为本机添加一条路由记录
                echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore		
                echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
                echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
                echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
                sysctl -p >/dev/null 2>&1
                echo "RealServer Start OK "
                ;;
        stop)
                ifconfig lo:0 down
                route del $VIP /dev/null 2>&1
                echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
                echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
                echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
                echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
                echo "RealServer Stopd"
                ;;
        *)
                echo "Usage: $0 {start|stop}"
                exit 1
        esac
        exit 0

2.VS配置

1.yum install ipvsadm -y 


2.vim /etc/init.d/dr.sh
#!/bin/bash
VIP=192.168.0.180
RIP1=192.168.0.166
RIP2=192.168.0.167
case "$1" in
    start)
    /sbin/ipvsadm --save > /etc/sysconfig/ipvsadm
    systemctl start ipvsadm
    /sbin/ifconfig ens33:0 $VIP broadcast $VIP netmask 255.255.255.255 broadcast $VIP up
    /sbin/route add -host $VIP dev ens33:0
    /sbin/ipvsadm -A -t $VIP:80 -s rr
    /sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g
    /sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g
    echo "ipvsadm starting --------------------[ok]"
    ;;
    stop)
    /sbin/ipvsadm -C
    systemctl stop ipvsadm
    ifconfig ens33:0 down
    route del $VIP
    echo "ipvsamd stoped----------------------[ok]"
     ;;
    status)
    if [ ! -e /var/lock/subsys/ipvsadm ];then
    echo "ipvsadm stoped---------------"
    exit 1
            else
            echo "ipvsamd Runing ---------[ok]"
    fi
    ;;
    *)
    echo "Usage: $0 {start|stop|status}"
    exit 1
esac
exit 0

Keepalived

一、概述

防止单点故障

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

1.原理

仅能实现IP的高可用,借助VRRP(虚拟路由)

2.配置文件

! Configuration File for keepalived

global_defs {						#出问题给谁发邮件
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc		#显示邮件从谁发出来的
   smtp_server 192.168.200.1						#邮件服务器地址
   smtp_connect_timeout 30							#连接邮件服务器的超时时间
   router_id LVS_DEVEL								#路由器ID,随意写
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {							#定义虚拟路由
    state MASTER								#主节点
    interface eth0								#哪个接口加入虚拟路由
    virtual_router_id 51						#虚拟路由ID号
    priority 100								#优先级
    advert_int 1								#检测间隔1秒
    authentication {							#账号密码认证
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {							#VIP地址
        192.168.200.16
        192.168.200.17
        192.168.200.18
    }
}

virtual_server 192.168.0.180 80 {				#定义lvs的VIP
    delay_loop 6								#健康检测间隔
    lb_algo rr									#算法
	lb_kind DR									#lvs模式
    persistence_timeout 50						#超时时间
    nat_mask 255.255.255.255					#掩码
    protocol TCP								#TCP

    real_server 192.168.0.166 80 {				#定义real-server
        weight 1								#权重
        HTTP_GET {								#健康状态检测的方法
             url {
                path /
                status_code 200
            }   
            connect_timeout 3					#超时时间
            nb_get_retry 3						#重试次数
            delay_before_retry 3				#每次重试之前等待3秒
        }
    }
}

3.健康检测方式

  • 基于状态码的检测
HTTP_GET {
          url {
          path /index.html
          status_code 200      #http://192.168.2.188/index.html的返回状态码
            }
  • TCP_CHECK检测
TCP_CHECK {
            connect_timeout 3  #连接超时时间
            nb_get_retry 3  #重连次数
            delay_before_retry 3  #重连间隔
            connect_port 80
        }

4.实践大坑

为什么LVS设置了轮询,浏览器测试还是不能轮询?这关系到两个地方的配置

/etc/keepalived/keepalived.conf的persistence_timeout会话保持时间配置,测试轮询时设置为0

ipvsadm --set 1 2 1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值