1.简述

在互联网的中型项目中,单服务器往往已经无法满足业务本身的性能要求,这时候就会平行扩展,把负载分摊到数台服务器上(集群)。一般实现集群有DNS轮询,LVS,nginx负载均衡。

集群主要目的包括如下三点:高可用、可扩展、负载均衡。

一个完整的集群架构,则需要包含如下三个功能:负载均衡、故障隔离、失败切换

负载均衡:根据设定的算法,通过负载均衡器(Director)把外部请求转发到各个集群中的服务器上(Real server)

故障隔离:当集群中一个或多个服务器(Real server)发生故障或无法提供服务时,集群能够把它们从转发队列中移除出去,以确保用户访问不会被错误转发到无法提供的服务器(Real server)处理。而当故障的服务器(Real server)重新恢复正常时候,又能够重新加入到集群的转发队列中。

失败切换:失败切换主(Master)要就是去除负载均衡器(Director)的单点问题,一旦负载均衡器(Director)发生故障,备机(Slave)能够替代主(Master)负载均衡器(Director)接受用户请求,而当主负载均衡器(Director)恢复正常时,能够重新接管用户请求(根据配置而定)

LVS是Linux Virtual Linux的缩写,即Linux虚拟服务器,是一个常用的服务器集群系统,该功能已经广泛集成在Linux内核中。

Keepalived则是一个服务器检测状态软件,能够为集群提供故障隔离和失败切换功能

ipvsadm则是LVS的管理工具,能够添加,修改,删除,查看当前集群的配置和转发状态等

在使用Keepalived的方案中,只要系统安装有ipvsadm命令,只需要通过Keepalived的配置文件即可实现集群的所有配置。

此次主要介绍DR模式下的集群配置,DR直接路由,负载均衡器(Director)只负转发用户请求,请求响应由服务器(Real server)直接提供。

以下为简单的架构图

2.安装

2.1.ipvsadm安装

yum install ipvsadm

2.2.Keepalived安装

yum install keepalived

2.3.LVS支持情况查看

uname -r
# 查看linux内核版本,.4后已经集成,.4前请重新编译内核(现在都没有2.4之前的了)

3.配置

预设环境:

负载均衡器A:

ip地址: 192.168.1.12

集群VIP:192.168.1.100

真实服务器B:

ip地址:192.168.1.13

组播地址:192.168.1.100

真实服务器C:

ip地址:192.168.1.14

组播地址:192.168.1.100

真实服务器配置:

真实服务器无需安装任何软件,只需像普通非集群服务器配置即可

# 可以把以下命令写入shell脚本,并在/etc/rc.local中配置为每次开机自动执行
# 注意:必须绑定在环回网卡(lo)
# down是为了让脚本可重复执行
ifconfig lo: 192.168.1.130 broadcast 192.168.1.130 netmask 255.255.255.255 down
ifconfig lo: 192.168.1.130 broadcast 192.168.1.130 netmask 255.255.255.255 up
# 此步骤十分重要,在实际应用中集群的多台真实服务器均使用同一组播地址,因此需要抑制ARP广播
echo "" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "" >/proc/sys/net/ipv4/conf/all/arp_announce

执行成功后,输入ifconfig应该会见到如下结果:

lo:: flags=<UP,LOOPBACK,RUNNING>  mtu
inet 192.168.1.100 netmask 255.255.255.255
loop txqueuelen (Local Loopback)

由于抑制了ARP广播,输入ping 192.168.1.100应为如下结果:

PING 192.168.1.100 (192.168.1.100) () bytes of data.
--- 192.168.1.100 ping statistics ---
packets transmitted, received, % packet loss, time 5042ms

无法ping通

负载均衡器配置

Keepalived默认配置文件位置/etc/keepalived/keepalived.conf

配置如下:

virtual_server 192.168.1.100  {
delay_loop
lb_algo rr # rr即为轮询
lb_kind DR # DR模式
nat_mask 255.255.255.255
#persistence_timeout #会话保持时间
protocol TCP real_server 192.168.1.13 {
#weight #在wlc负载均衡算法时生效
# 真实服务器状态检查
TCP_CHECK {
connect_timeout
nb_get_retry
delay_before_retry
connect_port
}
} real_server 192.168.1.14 {
#weight #在wlc负载均衡算法时生效
# 真实服务器状态检查
TCP_CHECK {
connect_timeout
nb_get_retry
delay_before_retry
connect_port
}
}
}

输入keepalived -D命令启动keeplived

查看keepalived运行状态(正常启动为三个进程)

ps aux | grep "keepalived"

查看keepalived运行日志

tail /var/log/message

检查配置结果(正常情况下能够见到配置的信息已经被正确加载)

ipvsadm -L

LVS+Keepalived(DR模式)学习笔记的更多相关文章

  1. LVS+keepalived DR模式配置高可用负载均衡集群

    实验环境 LVS-Master 10.0.100.201 VIP:10.0.100.203 LVS-Slave       10.0.100.204 WEB1-Tomcat 10.0.2.29 gat ...

  2. CentOS高可用集群LVS+Keepalived(DR模式)

    操作系统:CentOS6.5_x64 mini 负载均衡模式:DR(直接路由) LVS与Keepalived简述: LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是 ...

  3. 虚拟集群LVS及DR模式搭建笔记

    LVS(虚拟集群Linux Virtual Server) LVS-NAT:地址转换,数据包来回都要经过NAT转换,所以Director Server(即LVS服务器)将成为系统瓶颈.使用NAT模式将 ...

  4. LVS + keepalived(DR) 实战

    一.LVS体系结构 使用LVS架设的服务器集群系统有三个部分组成:最前端的负载均衡层,用Load Balancer表示,中间的服务器群组层,用Server Array表示,最底端的数据共享存储层,用S ...

  5. Lvs Keepalive DR模式高可用配置

    Lvs Keepalive DR模式配置 一.环境 #DIP# eth0:192.168.233.145#VIP# eth0:0 192.168.233.250/32 #RIP1:192.168.23 ...

  6. LVS:DR模式(Direct Routing)部署实验

    本文介绍怎样在kvm的虚拟环境下,部署实验LVS的DR模式.包含网络结构图,怎样配置.以及使用tcpdump分析ip包. 网络结构图                               kvm ...

  7. SQL反模式学习笔记1 开篇

    什么是“反模式” 反模式是一种试图解决问题的方法,但通常会同时引发别的问题. 反模式分类 (1)逻辑数据库设计反模式 在开始编码之前,需要决定数据库中存储什么信息以及最佳的数据组织方式和内在关联方式. ...

  8. SQL反模式学习笔记5 外键约束【不用钥匙的入口】

    目标:简化数据库架构 一些开发人员不推荐使用引用完整性约束,可能不使用外键的原因有一下几点: 1.数据更新有可能和约束冲突: 2.当前的数据库设计如此灵活,以至于不支持引用完整性约束: 3.数据库为外 ...

  9. SQL反模式学习笔记3 单纯的树

    2014-10-11 在树形结构中,实例被称为节点.每个节点都有多个子节点与一个父节点. 最上层的节点叫做根(root)节点,它没有父节点. 最底层的没有子节点的节点叫做叶(leaf). 中间的节点简 ...

随机推荐

  1. Java多线程中的异常处理

    在java多线程程序中,所有线程都不允许抛出未捕获的checked exception,也就是说各个线程需要自己把自己的checked exception处理掉.这一点是通过java.lang.Run ...

  2. [BZOJ 1806] Miners 矿工配餐

    Link: BZOJ 1806 传送门 Solution: 为了使状态包含每个节点前所有必须的信息: 设$dp[i][a1][a2][b1][b2]$为配送到第$i$个,一厂前两个为$a1,a2$,二 ...

  3. kong的preserve_host和strip_uri解析

    preserve_host:当代理的时候,k代理时,Kong的默认行为是将上游请求的Host头设置为API的upstream_url属性的主机名.这个参数接受一个boolean值. 当为FALSE时, ...

  4. PowerDisginer中NAME与COMMENT转换脚本

    Option Explicit ValidationMode = True InteractiveMode = im_Batch Dim mdl ' the current model ' get t ...

  5. 三. Java类与对象8.再谈Java包

    在Java中,为了组织代码的方便,可以将功能相似的类放到一个文件夹内,这个文件夹,就叫做包. 包不但可以包含类,还可以包含接口和其他的包. 目录以"\"来表示层级关系,例如 E:\ ...

  6. iOS 自定义字体设置

    有时候客户都要求使用方正兰亭刊黑字体,可是iOS没有自带这个字体,肿么办 ,只能自己自定义字体了,下面是自定义字体的几个重要步骤: 1.下载字体资源文件(.ttf或.otf格式的文件) 比如说你要使用 ...

  7. iPhone 通过UIRequiredDeviceCapabilities指定程序适用于哪些设备

    以前在itunes中查看某个应用时,会有说明信息,表明程序适用于ios 1.0,2.0,3.0什么的. 上周末将Key Manager上传到app store时,一直有个疑问,就是没有发现填写程序适用 ...

  8. 模拟Spring中的getBean方法

    一直知道Spring是运用反射技术的,但具体怎么用呢?今天就模拟下getBean方法. 步骤: 1.用Dom4j解析xml配置文件,取出我们需要的信息 2.遍历Bean节点,根据每个Bean节点的cl ...

  9. JAVA常见算法题(二十一)

    package com.xiaowu.demo; //求1+2!+3!+...+20!的和. public class Demo21 { public static void main(String[ ...

  10. [置顶] Python+Django 复选框选择多个 提交只能保存单个

    之前,做表单时使用单选方式,今天修改为复选框方式提交. 问题来了:在选择多个后保存,发现竟然只能最后一个选择. print(request.POST)显示只有最后一个 print(str(reques ...