博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
lvs+keepalive 实现高可用软负载均衡集群
阅读量:6689 次
发布时间:2019-06-25

本文共 6676 字,大约阅读时间需要 22 分钟。

LVS 负载均衡原理图

LVS无需安装

安装的是管理工具,第一种叫ipvsadm,第二种叫keepalive

ipvsadm是通过命令行管理,而keepalive读取配置文件管理

机器规划

IP

用途

部署

134.64.14.200

DS1

Ipvsadm+keepalive

134.64.14.203

DS2

Ipvsadm+keepalive

134.64.14.201

RS1

Realserver+http

134.64.14.202

RS2

Realserver+http

 

1.安装ipvsadm管理工具

yum -y install ipvsadm

查看当前LVS状态,顺便激活LVS内核模块

Ipvsadm

 

查看系统LVS模块

 

2.LVS集群搭建

2.1DS配置

DS1节点keepalive配置:

 

! Configuration File for keepalivedglobal_defs {    router_id LVS_DS1      #机器唯一标识}vrrp_instance VI_1 {       #配置虚拟路由器的实例,VI_1是自定义的实例名称    state MASTER              #初始状态,MASTER|BACKUP,当state指定的instance的初始化状态,在两台服务器都启动以后,马上发生竞选,优先级高的成为MASTER,所以这里的MASTER并不是表示此台服务器一直是MASTER    interface ens32           #通告选举所用端口    virtual_router_id 14    #虚拟路由的ID号(一般不可大于255)(keepalive集群唯一标识    priority 100                 #权重    advert_int 1                #VRRP通告间隔,秒    authentication {        auth_type PASS      #认证机制        auth_pass 1111     #认证密码(随机)    }    virtual_ipaddress {        134.64.14.204/23   #VIP,可以通知设置掩码    }}virtual_server 134.64.14.204 80 {    delay_loop 6               # service polling的delay时间,即服务轮询的时间间隔    lb_algo rr                    #loadbalance调度算法(rr/wrr/dh/sh/wlc/lc/lblc/lblcr)    lb_kind DR                  #loadbalance工作模式(NAT/DR/TUN)    nat_mask 255.255.255.0      persistence_timeout 0   #会话保持时间    protocol TCP              #健康检查用的是TCP还是UDP    real_server 134.64.220.121 80 { #后端真实节点主机的权重等设置,主要,后端有几台这里就要设置几个        weight 1               #给每台的权重,rr无效        TCP_CHECK {   #TCP检查策略            connect_timeout 3   #连接超时时间            nb_get_retry 3        #重连次数            delay_before_retry 3  #重连间隔时间            connect_port 80    #健康检查端口        }     }    real_server 134.64.220.123 80 {        weight 1        TCP_CHECK {            connect_timeout 3            nb_get_retry 3            delay_before_retry 3            connect_port 80        }    }}

DS2节点keepalive配置:

! Configuration File for keepalivedglobal_defs {    router_id LVS_DS2}vrrp_instance VI_1 {    state BACKUP    interface ens32    virtual_router_id 14    priority 99    advert_int 1    authentication {        auth_type PASS        auth_pass 1111    }    virtual_ipaddress {        134.64.14.204/23    }}virtual_server 134.64.14.204 80 {    delay_loop 6    lb_algo rr    lb_kind DR    nat_mask 255.255.255.0     persistence_timeout 0    protocol TCP    real_server 134.64.14.201 80 {        weight 1        TCP_CHECK {            connect_timeout 3            nb_get_retry 3            delay_before_retry 3            connect_port 80        }     }    real_server 134.64.14.202 80 {        weight 1        TCP_CHECK {            connect_timeout 3            nb_get_retry 3            delay_before_retry 3            connect_port 80        }    }}

启动keepalive服务

Service keepalived start

可以看到有三个keepalive进程

父进程:内存管理,子进程管理等等

子进程:VRRP子进程

子进程:healthchecker子进程

检查lvs配置

 

可以看到14.204的80端口可以正常转发14.201和14.202两台的80端口,且采用rr轮询方式

 

2.2 RS配置

RS1节点配置:

[root@jtbs31 init.d]# vim realserver.sh 

 

#!/bin/bash#description: Config realserverVIP=134.64.14.204case "$1" instart)       /sbin/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)       /sbin/ifconfig lo:0 down       /sbin/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 Stoped"       ;;*)       echo "Usage: $0 {start|stop}"       exit 1esacexit 0

启动rs服务

# chmod u+x realserver.sh# ./realserver.sh start

检查lo回环配置是否正常

 

RS2节点配置:

 

[root@jtbs32 init.d]# vim realserver.sh #!/bin/bash#description: Config realserverVIP=134.64.14.204case "$1" instart)       /sbin/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)       /sbin/ifconfig lo:0 down       /sbin/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 Stoped"       ;;*)       echo "Usage: $0 {start|stop}"       exit 1esacexit 0

启动rs服务

# chmod u+x realserver.sh# ./realserver.sh start

检查lo回环配置是否正常

2.3 http配置

首先在RS1和RS2节点上安装http

yum install httpd

提供一个测试页面

RS1:echo "RS1" >> /var/www/html/index.htmlRS2:echo "RS2" >> /var/www/html/index.html

启动http服务:

service httpd start

加载测试页面

 

2.3参数详解

DS:Director server  LVS调度中心(调度层)

RS:Realserver 真实服务中心(集群层)

 

LVS三种工作模式:

NAT模式

调度器将请求的目标ip即vip地址修改为Real server的ip,返回的数据也经过调度器,调度器再把源地址修改为vip

TUN模式

调度器将请求来的数据包封装加密通过ip隧道转发到后端的real server上,而real server会直接把数据返回给客户端,而不再经过调度器

DR模式

调度器将请求来的数据包的目标mac地址修改为real server的mac地址,返回的时候也不经过调度器,直接返回给客户端

 

LVS调度算法:

固定调度算法:rr,wrr,dh,sh

动态调度算法:wlc,lc,lblc,lblcr

 

(1)rr 轮叫调度(Round Robin),这种算法是最简单的,不管RS的后端配置和处理能力,均衡的分发下去

(2)wrr 加权轮叫(Weight Round Robin),比上面的算法多了一个权重的概念,可以给RS设置权重,权重越高,那么分发的请求数越多,权重取值范围0-100

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

(4)WLC 加权最少链接(Weighted Least Connecttion)比最少链接算法多了一个权重

(5)Dh 目的地址哈希调度(destination hashing)以目的地址为关键字查找一个静态hash表来获得需要的RS

(6)SH 源地址哈希调度(source hashing)以源地址为关键字查找一个静态hash表来获得需要的RS

(7)lblc 最小连接数调度(least-connection),IPVS表存储了所有活动的连接。LB会比较将连接请求发送到当前连接最少的RS

(8)Lblcr  带复制的基于本地的最少连接:是LBLC算法的改进

 

arp_announce : INTEGER

对网络接口上本地IP地址发出的ARP报文作出相应级别的限制。

0:本机所有IP地址都向任何一个接口通告ARP报文。

1:尽量仅向该网卡回应与该网段匹配的ARP报文。

2:只向该网卡回应与该网段匹配的ARP报文。

 

arp_ignore : INTEGER

定义对目标地址为本地IP的ARP询问不同的应答模式。

0:响应任意网卡上接收到的对本机IP地址的arp请求(包括环回网卡上的地址),而不管该目的IP是否在接收网卡上。

1:只响应目的IP地址为接收网卡上的本地地址的arp请求。

2:只响应目的IP地址为接收网卡上的本地地址的arp请求,并且arp请求的源IP必须和接收网卡同网段。

3:如果ARP请求数据包所请求的IP地址对应的本地地址其作用域(scope)为主机(host),则不回应ARP响应数据包,如果作用域为全局(global)或链路(link),则回应ARP响应数据包。

4~7:预留。

8:不回应所有的arp请求。

3.测试验证

3.1VIP高可用测试

可以看到VIP在DS1上面,直接重启DS1主机,观察VIP是否正常漂到DS2上面

 

可以看到正常切换过来了,验证RS服务是否能正常访问

 

说明VIP已经具备高可用

3.2LVS负载均衡验证

刷新页面

可以看到从RS2切到RS1中,会话均衡分发

可以通过ipvsadm -lnc查看会话链接情况

 

 ---------------------------------------------完结----------------------------------------------

 

转载于:https://www.cnblogs.com/tonnytangy/p/8560527.html

你可能感兴趣的文章
《2018年云上挖矿态势分析报告》发布,非Web类应用安全风险需重点关注
查看>>
leetcode409.Longest Palindrome
查看>>
蚂蚁区块链平台BaaS技术解析与实践
查看>>
Nervos 双周报第 3 期:佛系新年之后的开工大吉!
查看>>
测试开发系类之接口自动化测试
查看>>
【PHP 扩展开发】Zephir 基础篇
查看>>
HTML
查看>>
HashMap浅析?
查看>>
字节跳动开源Go结构体标签表达式解释器,成请求参数校验的杀手锏
查看>>
怎么将在线录制的视频转为GIF动态图
查看>>
js的setTimeout和Promise---同步异步和微任务宏任务
查看>>
【剑指offer】顺时针打印矩阵
查看>>
怎么将图片上传封装成指令?
查看>>
leetcode讲解--861. Score After Flipping Matrix
查看>>
聊聊JavaScript和Scala的表达式 Expression
查看>>
[原]数据科学教程: 如何使用 mlflow 管理数据科学工作流
查看>>
npm上创建发布package
查看>>
解决JS文件引用路径多层查找
查看>>
FE.TEST-前端测试初探
查看>>
超详细Dkhadoop虚拟机安装图文教程
查看>>