lvs+keepalived

☆樱花仙子☆ 提交于 2021-01-30 13:41:52

1.关闭防火墙

systemctl stop firewalld && systemctl disable firewalld

2.关闭selinux

vim /etc/sysconfig/selinux
修改
SELINUX=disabled

3.安装keepalived等

yum -y install keepalived ipvsadm net-tools gcc gcc-c++ make popt-devel kernel-devel openssl-devel
#设置开机启动
systemctl enable keepalived

4.修改keepalived.conf

vim /etc/keepalived/keepalived.conf

keepalived.conf 配置,注意修改ip和端口

! Configuration File for keepalived
global_defs {
   router_id lvs1  #router_id 机器标识,通常为hostname,但不一定非得是hostname。故障发生时,邮件通知会用到。
}
vrrp_instance VI_1 {            #vrrp实例定义部分
    state MASTER               #设置lvs的状态,MASTER和BACKUP两种,必须大写,只能一个MASTER
    interface ens33               #设置对外服务的接口
    virtual_router_id 100        #设置虚拟路由标示,这个标示是一个数字,同一个vrrp实例使用唯一标示 
    priority 100   #定义优先级,数字越大优先级越高,在一个vrrp——instance下,master的优先级必须大于backup
    advert_int 1              #设定master与backup负载均衡器之间同步检查的时间间隔,单位是秒
    authentication {           #设置验证类型和密码
        auth_type PASS         #主要有PASS和AH两种
        auth_pass 1111         #验证密码,同一个vrrp_instance下MASTER和BACKUP密码必须相同
    }
    virtual_ipaddress {         #设置虚拟ip地址,可以设置多个,每行一个
        192.168.50.149
    }
}
virtual_server 192.168.50.149 6443 {       #设置虚拟服务器,需要指定虚拟ip和服务端口
    delay_loop 6                 #健康检查时间间隔
    lb_algo wrr                  #负载均衡调度算法
    lb_kind DR                   #负载均衡转发规则
    persistence_timeout 50        #设置会话保持时间,对动态网页非常有用
    protocol TCP               #指定转发协议类型,有TCP和UDP两种
    real_server 192.168.50.121 6443 {    #配置服务器节点1,需要指定real server的真实IP地址和端口
    weight 1               #设置权重,数字越大权重越高
    TCP_CHECK {              #realserver的状态监测设置部分单位秒
       connect_timeout 10       #连接超时为10秒
       retry 3             #重连次数
       delay_before_retry 3        #重试间隔
       connect_port 6443         #连接端口为81,要和上面的保持一致
       }
    }
     real_server 192.168.50.122 6443 {    #配置服务器节点1,需要指定real server的真实IP地址和端口
     weight 1                  #设置权重,数字越大权重越高
     TCP_CHECK {               #realserver的状态监测设置部分单位秒
       connect_timeout 10         #连接超时为10秒
       retry 3               #重连次数
       delay_before_retry 3        #重试间隔
       connect_port 6443          #连接端口为81,要和上面的保持一致
       }
     }
}

# 启动keepalived
systemctl start keepalived
#设置开机启动
systemctl enable keepalived

5.修改成单播通信,可选,根据实际需要

服务器网络环境中,路由交换层禁用了ARP的广播限制,造成了keepalived主备协议无法通过广播的方式进行通信,造成主备两台服务器都强制占用HAVIP地址,出现同时两台服务器都有VIP地址的情况出现。必须通过配置来指定IP的两台服务器间进行通

priority 100
unicast_src_ip  192.168.2.192    #本机实际IP
unicast_peer {
         192.168.2.191         #对端实际IP
}

6.DR模式后端主机执行脚本,两个选择一个

1.第一个方法

vim /etc/rc.d/init.d/realserver.sh 

#!/bin/bash
#chkconfig: 345 88 14
    in=${1:-start}
    SNS_VIP=192.168.50.149
    echo $in
    #source /etc/rc.d/init.d/functions
    case "$in" in
    start)
        ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP
        /sbin/route add -host $SNS_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 $SNS_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 Stoped"
        ;;
    *)
        echo "Usage: $0 {start|stop}"
        exit 1
    esac
    exit 0
    
chmod u+x /etc/rc.d/init.d/realserver.sh 
chkconfig --add realserver.sh
chkconfig realserver.sh on
service realserver start


2.第二个方法,这个没有调试

vim /etc/bin/realserver.sh

#!/bin/bash
#chkconfig: 345 88 14
vip=192.168.50.149
ifconfig  lo:0 $vip broadcast $vip netmask 255.255.255.255 up
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 /etc/bin/realserver.sh >> /etc/rc.local
chmod u+x /etc/bin/realserver.sh
bash /etc/bin/realserver.sh


ip a  # 查看lo可以看到一下信息
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet 192.168.50.149/32 brd 192.168.50.149 scope global lo:0
       valid_lft forever preferred_lft forever

6.检查

ip a #查看虚拟ip
#查看后端状态,在本地或者浏览器测试访问查看是否能查看流量状态
ipvsadm -ln  
ipvsadm -ln --stats
ipvsadm -lnc
# 注意netstat -lntp 是看不到开放端口的;

#关闭第一台服务器,看ip是否漂移,是否能正常访问;

7.记录日志,可选

1、修改/etc/sysconfig/keepalived日志保存路径

`sed -i s/KEEPALIVED_OPTIONS=\``"-D"``/KEEPALIVED_OPTIONS=\``"-D -d -S 0"``/gp /etc/sysconfig/keepalived`

2、添加rsyslog记录日志存放位置

`echo ``"local0.*         /var/log/keepalived.log"` `>>/etc/rsyslog.conf`

3、重启rsyslog日志服务和keepalived服务

`systemctl restart rsyslog && systemctl restart keepalived.service`

4、检查日志文件是否存在和记录日志

`ls /``var``/log/keepalive.log``tail -3 /``var``/log/keepalive.log`

8.说明

LVS相关术语

  1. DS:Director Server。指的是前端负载均衡器节点。
  2. RS:Real Server。后端真实的工作服务器。
  3. VIP:向外部直接面向用户请求,作为用户请求的目标的IP地址。
  4. DIP:Director Server IP,主要用于和内部主机通讯的IP地址。
  5. RIP:Real Server IP,后端服务器的IP地址。
  6. CIP:Client IP,访问客户端的IP地址

LVS的八种调度算法

  1. 轮叫调度 rr 这种算法是最简单的,就是按依次循环的方式将请求调度到不同的服务器上,该算法最大的特点就是简单。轮询算法假设所有的服务器处理请求的能力都是一样的,调度器会将所有的请求平均分配给每个真实服务器,不管后端 RS 配置和处理能力,非常均衡地分发下去。

  2. 加权轮叫 wrr 这种算法比 rr 的算法多了一个权重的概念,可以给 RS 设置权重,权重越高,那么分发的请求数越多,权重的取值范围 0 – 100。主要是对rr算法的一种优化和补充, LVS 会考虑每台服务器的性能,并给每台服务器添加要给权值,如果服务器A的权值为1,服务器B的权值为2,则调度到服务器B的请求会是服务器A的2倍。权值越高的服务器,处理的请求越多。

  3. 最少链接 lc 这个算法会根据后端 RS 的连接数来决定把请求分发给谁,比如 RS1 连接数比 RS2 连接数少,那么请求就优先发给 RS1

  4. 加权最少链接 wlc 这个算法比 lc 多了一个权重的概念。

  5. 基于局部性的最少连接调度算法 lblc 这个算法是请求数据包的目标 IP 地址的一种调度算法,该算法先根据请求的目标 IP 地址寻找最近的该目标 IP 地址所有使用的服务器,如果这台服务器依然可用,并且有能力处理该请求,调度器会尽量选择相同的服务器,否则会继续选择其它可行的服务器

  6. 复杂的基于局部性最少的连接算法 lblcr 记录的不是要给目标 IP 与一台服务器之间的连接记录,它会维护一个目标 IP 到一组服务器之间的映射关系,防止单点服务器负载过高。

  7. 目标地址散列调度算法 dh 该算法是根据目标 IP 地址通过散列函数将目标 IP 与服务器建立映射关系,出现服务器不可用或负载过高的情况下,发往该目标 IP 的请求会固定发给该服务器。

  8. 源地址散列调度算法 sh 与目标地址散列调度算法类似,但它是根据源地址散列算法进行静态分配固定的服务器资源。

LVS有三种工作模式

1、NAT模式(VS-NAT)

把客户端发来的数据包的IP头的目的地址,在负载均衡器上换成其中一台RS的IP地址,并发至此RS

来处理,RS处理完成后把数据交给经过负载均衡器,负载均衡器再把数据包的原IP地址改为自己的IP,将

目的地址改为客户端IP地址即可期间,无论是进来的流量,还是出去的流量,都必须经过负载均衡器

2、IP隧道模式(VS-TUN)

由于互联网上的大多Internet服务的请求包很短小,而应答包通常很大,所以,隧道模式就是把客

户端发来的数据包,封装一个新的IP头标记(仅目的IP)发给RS,RS收到后,先把数据包的头解开,还原数据

包,处理后,直接返回给客户端,不需要再经过负载均衡器注意,由于RS需要对负载均衡器发过来的数据包

进行还原,所以必须支持IPTUNNEL协议,因此在RS的内核中,必须要编译IPTUNNEL这个选项。

3、直接路由模式(VS-DR)

负载均衡器和RS都使用同一个IP对外服务但只有DR对ARP请求进行响应,所有RS对本身这个IP的ARP

请求保持静默也就是说,网关会把对这个服务IP的请求全部定向给DR,而DR收到数据包后根据调度算法,

找出对应的RS,把目的MAC地址改为RS的MAC(因为IP一致)并将请求分发给这台RS这时RS收到这个数据

包,处理完成之后,由于IP一致,可以直接将数据返给客户,则等于直接从客户端收到这个数据包无异,

处理后直接返回给客户端由于负载均衡器要对二层包头进行改换,所以负载均衡器和RS之间必须在一个

广播域,也可以简单的理解为在同一台交换机上

★DR模式的九大特点

1、通过在调度器上LB上修改数据包的目的的MAC地址实现转发,源IP仍然是客户端的IP,目的IP地址仍然是VIP 2、请求报文警告调度器,而RS响应出来后的报文无需警告调度器LB,因此并发访问量大使用效率很高(和NAT模式比) 3、DR模式是通过MAC地址的改写机制实现转发,因此所有RS节点和调度器LB只能在一个局域网中(小缺点)。 4、需要注意RS节点的VIP绑定(lo:vip/32,lo1:vip/32)和ARP抑制问题,抑制没有接网线的那个网卡响应ARP广播。 5、RS节点的默认网关不需要是调度器LB的DIP,而直接是IDC机房分配的上级路由器的IP(RS带有外网IP地址的情况),理讲,只要RS可以出外网即可,不是必须配置外网IP。 6、由于DR模式的调度器仅进行了目的MAC地址的改写,因此调度器LB无法改变请求报文目的端口(和NAT要区别)。 7、当前调度器LB支持几乎所有的UNIX/LINUX系统,但目前不支持Windows系统,真实服务器RS节点可以是Windows系统 8、总的来说DR模式效率很高,但是配置也比较麻烦,因此访问量不是特别大的公司可以用haproxy/nginx取代,符合运维原则:简单、易用、高效,日1000-2000万PV或请求1万以下都可以考虑aproxy/nginx(LVS NAT模式)。 9、直接对外的访问业务,例如:web服务器做RS节点,RS最好用公网IP地址,不直接对外的业务,如数据库、存储系统节点最后用内部IP地址。

参考

https://www.cnblogs.com/quanloveshui/p/11075796.html

https://www.cnblogs.com/huanglingfa/p/13821811.html

https://blog.csdn.net/xia296/article/details/87971439

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!