一、LVS介绍

1、介绍   

       LVS是Linux Virtual Server的简写,是linux虚拟的服务器集群系统,可以在unix/linux平台下实现负载均衡集群功能,由章文嵩博士组织成立,是国内出现最早的自由软件之一。

LVS项目介绍
http://www.linuxvirtualserver.org/zh/lvs1.html
LVS集群的体系结构
http://www.linuxvirtualserver.org/zh/lvs2.html
LVS集群中的IP负载均衡技术
http://www.linuxvirtualserver.org/zh/lvs3.html
LVS集群的负载调度
http://www.linuxvirtualserver.org/zh/lvs4.html  

2、LVS特性

①真正实现负载调度的工具是IPVS,工作在linux内核层面。
②LVS自带的IPVS管理工具是ipvsadm。
③keepalived实现管理IPVS及对负载均衡器的高可用。

3、LVS——DR模式工作原理

4、LVS集群其它模式

①DR直接路由模式(重点掌握)

②NAT

③TUN隧道模式

④FULLNAT

5、LVS应用场景

      日PV1000-2000W或者并发请求1W以下的都可以使用Nginx,超过的话使用LVS,大型门户网站,电商网站需要用到

二、手工配置LVS

1、环境

[root@lb01 ~]# cat /etc/redhat-release
CentOS Linux release 7.2. (Core)
[root@lb01 ~]# uname -r
3.10.-.el7.x86_64
[root@lb01 ~]# getenforce
Disabled
[root@lb01 ~]# systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
[root@lb01 ~]# hostname -I
10.0.0.5 172.16.1.5

2、安装ipvsadm管理工具

①检测是否安装

[root@lb01 ~]# lsmod |grep ip_vs

②安装ipvsadm

yum -y install ipvsadm

③检查并激活lvs

[root@lb01 ~]# ipvsadm
IP Virtual Server version 1.2. (size=)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
[root@lb01 ~]# lsmod |grep ip_vs
ip_vs
nf_conntrack ip_vs
libcrc32c xfs,ip_vs

3、配置LVS负载均衡(lb01操作)

ip addr add 10.0.0.3/24 dev eth0 #在eth0网卡绑定VIP地址
ipvsadm -C #清除当前所有LVS规则
ipvsadm --set 30 5 60 #设置tcp、tcpfin、udp链接超时时间
ipvsadm -A -t 10.0.0.3:80 -s wrr -p 20 #添加虚拟服务(-A)
ipvsadm -a -t 10.0.0.3:80 -r 10.0.0.7:80 -g -w 1 #将虚拟服务关联到真实服务上(-a)
ipvsadm -a -t 10.0.0.3:80 -r 10.0.0.8:80 -g -w 1 #将虚拟服务关联到真实服务上(-a)
ipvsadm -ln #查看配置结果
-C 清空整个表
-A 添加一个虚拟服务
-t 指定一个地址,一定是ip+端口
-s 调度算法
-a 添加一个real server
-m NAT模式
-g DR模式,默认
-d 删除一个real server
-p 会话保持功能
-w 权重
-i tunnel模式

4、web服务器操作(web01、web02)

①在lo网卡绑定VIP地址

ip addr add 10.0.0.3/ dev lo

②修改内核参数抑制ARP响应

cat >>/etc/sysctl.conf<<EOF
net.ipv4.conf.all.arp_ignore =
net.ipv4.conf.all.arp_announce =
net.ipv4.conf.lo.arp_ignore =
net.ipv4.conf.lo.arp_announce =
EOF
sysctl -p

5、在lb02上面测试

[root@lb02 ~]# curl 10.0.0.3
web02
[root@lb02 ~]# curl 10.0.0.3
web02
[root@lb02 ~]# curl 10.0.0.3
web02
[root@lb02 ~]# curl 10.0.0.3
web02
[root@lb02 ~]# curl 10.0.0.3
web02
[root@lb02 ~]# curl 10.0.0.3
web01
[root@lb02 ~]# curl 10.0.0.3
web01

三、Keepalived配合LVS实现高可用负载均衡

1、安装Keepalived

yum -y install keepalived

2、配置keepalived管理LVS

global_defs {

router_id LVS_01

}

vrrp_instance VI_1 {

state MASTER

interface eth0

virtual_router_id 51

priority 150

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

virtual_ipaddress {

10.0.0.3/24

}

}

virtual_server 10.0.0.3 80 {

delay_loop 6

lb_algo wrr

lb_kind DR

nat_mask 255.255.255.0

persistence_timeout 50

protocol TCP

real_server 10.0.0.7 80 {

weight 1

TCP_CHECK {

connect_timeout 8

nb_get_retry 3

delay_before_retry 3

connect_port 80

}

}

real_server 10.0.0.8 80 {

weight 1

TCP_CHECK {

connect_timeout 8

nb_get_retry 3

delay_before_retry 3

connect_port 80

}

}

}

global_defs {

router_id LVS_02

}

vrrp_instance VI_1 {

state BACKUP

interface eth0

virtual_router_id 51

priority 100

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

virtual_ipaddress {

10.0.0.3/24

}

}

virtual_server 10.0.0.3 80 {

delay_loop 6

lb_algo wrr

lb_kind DR

nat_mask 255.255.255.0

persistence_timeout 50

protocol TCP

real_server 10.0.0.7 80 {

weight 1

TCP_CHECK {

connect_timeout 8

nb_get_retry 3

delay_before_retry 3

connect_port 80

}

}

real_server 10.0.0.8 80 {

weight 1

TCP_CHECK {

connect_timeout 8

nb_get_retry 3

delay_before_retry 3

connect_port 80

}

}

}

 3、测试keepalived高可用,故障转移

①停掉lb01的keepalvied

[root@lb01 ~]# systemctl stop keepalived.service
[root@lb01 ~]# curl 10.0.0.3
web01

停掉lb02的keepalvied

[root@lb02 ~]# systemctl stop keepalived.service
[root@lb02 ~]# curl 10.0.0.3
web01

4、测试Keepalived对后端节点的健康检查功能

①web后端正常时状态

[root@lb01 ~]# ipvsadm -ln
IP Virtual Server version 1.2. (size=)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.0.0.3: wrr persistent
-> 10.0.0.7: Route
-> 10.0.0.8: Route

②web后端节点宕机或者服务关闭时(此处关闭了web01)

[root@lb01 ~]# ipvsadm -ln
IP Virtual Server version 1.2. (size=)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.0.0.3: wrr persistent
-> 10.0.0.7: Route

5、Keepalived+LVS多实例配置

①lb01

global_defs {
router_id LVS_01
} vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id
priority
advert_int
authentication {
auth_type PASS
auth_pass
}
virtual_ipaddress {
10.0.0.3/
}
} vrrp_instance VI_2 {
state BACKUP
interface eth0
virtual_router_id
priority
advert_int
authentication {
auth_type PASS
auth_pass
}
virtual_ipaddress {
10.0.0.4/
}
} virtual_server 10.0.0.3 {
delay_loop
lb_algo wrr
lb_kind DR
nat_mask 255.255.255.0
persistence_timeout
protocol TCP real_server 10.0.0.7 {
weight
TCP_CHECK {
connect_timeout
nb_get_retry
delay_before_retry
connect_port
}
} real_server 10.0.0.8 {
weight
TCP_CHECK {
connect_timeout
nb_get_retry
delay_before_retry
connect_port
}
}
} virtual_server 10.0.0.4 {
delay_loop
lb_algo wrr
lb_kind DR
nat_mask 255.255.255.0
persistence_timeout
protocol TCP real_server 10.0.0.7 {
weight
TCP_CHECK {
connect_timeout
nb_get_retry
delay_before_retry
connect_port
}
} real_server 10.0.0.8 {
weight
TCP_CHECK {
connect_timeout
nb_get_retry
delay_before_retry
connect_port
}
}
}

②lb02

global_defs {
router_id LVS_02
} vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id
priority
advert_int
authentication {
auth_type PASS
auth_pass
}
virtual_ipaddress {
10.0.0.3/
}
} vrrp_instance VI_2 {
state MASTER
interface eth0
virtual_router_id
priority
advert_int
authentication {
auth_type PASS
auth_pass
}
virtual_ipaddress {
10.0.0.4/
}
} virtual_server 10.0.0.3 {
delay_loop
lb_algo wrr
lb_kind DR
nat_mask 255.255.255.0
persistence_timeout
protocol TCP real_server 10.0.0.7 {
weight
TCP_CHECK {
connect_timeout
nb_get_retry
delay_before_retry
connect_port
}
} real_server 10.0.0.8 {
weight
TCP_CHECK {
connect_timeout
nb_get_retry
delay_before_retry
connect_port
}
}
} virtual_server 10.0.0.4 {
delay_loop
lb_algo wrr
lb_kind DR
nat_mask 255.255.255.0
persistence_timeout
protocol TCP real_server 10.0.0.7 {
weight
TCP_CHECK {
connect_timeout
nb_get_retry
delay_before_retry
connect_port
}
} real_server 10.0.0.8 {
weight
TCP_CHECK {
connect_timeout
nb_get_retry
delay_before_retry
connect_port
}
}
}

linux运维、架构之路-LVS负载均衡的更多相关文章

  1. linux运维架构师职业规划

    1.假如你从来未接触过Linux的话,首先要做的就找一本指导书来学习.现在公认的Linux的入门书籍是“鸟哥的私房菜”,讲的很全面,鸟哥的私房菜一共分为两部,一部是基础篇,一部是服务器篇.“鸟哥的私房 ...

  2. 大数据高并发系统架构实战方案(LVS负载均衡、Nginx、共享存储、海量数据、队列缓存)

    课程简介: 随着互联网的发展,高并发.大数据量的网站要求越来越高.而这些高要求都是基础的技术和细节组合而成的.本课程就从实际案例出发给大家原景重现高并发架构常用技术点及详细演练. 通过该课程的学习,普 ...

  3. LVS负载均衡-基础知识梳理

    一. 集群的概念 服务器集群简称集群是一种服务器系统,它通过一组松散集成的服务器软件和/或硬件连接起来高度紧密地协作完成计算工作.在某种意义上,他们可以被看作是一台服务器.集群系统中的单个服务器通常称 ...

  4. LVS负载均衡的三种模式和八种算法总结

    三种LVS负载均衡模式 调度器的实现技术中,IP负载均衡技术是效率最高的,IP虚拟服务器软件(IPVS)是在linux内核中实现的。 LVS负载均衡模式---1.NAT模式 NAT用法本来是因为网络I ...

  5. linux运维、架构之路-keepalived高可用

    一.Keepalived介绍          Keepalived起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能,Ke ...

  6. 从苦逼到牛逼,详解Linux运维工程师的打怪升级之路

    做运维也快四年多了,就像游戏打怪升级,升级后知识体系和运维体系也相对变化挺大,学习了很多新的知识点. 运维工程师是从一个呆逼进化为苦逼再成长为牛逼的过程,前提在于你要能忍能干能拼,还要具有敏锐的嗅觉感 ...

  7. Linux运维主流架构简单剖析

    随着IT运维的不断发展,尤其的Linux的飞速发展,越来越多的企业开始使用Linux操作系统平台,例如CentOS.RedHat.Ubuntu.Fedora等等,成千上亿个网站涌现在当今互联网,互联网 ...

  8. Linux运维企业架构实战系列

    Linux运维企业架构项目实战系列 项目实战1-LNMP的搭建.nginx的ssl加密.权限控制的实现 项目实战2-LVS.nginx实现负载均衡系列 2.1 项目实战2.1-实现基于LVS负载均衡集 ...

  9. Linux运维就业技术指导(九)期末架构考核

    一,毕业架构设计考核筹备 1.1,架构图模板示例 1.1.1 架构图(一)概述 本架构是4层lvs负载均衡给后方7层nginx反向代理: 业务进行了动静分离: 数据库前端有memcached缓存组,降 ...

随机推荐

  1. Java使用JDBC连接Impala

    前段时间,有一个项目在连接Impala的时候,可以测试连接成功,但是查询不出表.但是通过impala-shell的时候,是可以查询出来的,我觉的这种方式查询出来的话,可能和jdbc的方式不一样,因为i ...

  2. Unity—Compoent类

    官方API->Componment   新引入成员 作用 字段 gameobject 该组件所在的游戏对象 tag 游戏对象的标签 Transform 添加在游戏对象上的transform组件 ...

  3. 思维导图之kubernetes

    k8s docker

  4. 关于linux中的目录配置标准以及文件基本信息

    关于Linux中的目录配置标准 在查看docker.k8的运行日志,修改相关的运行记录的时候,学长总是能很快地找到目录,这个多多少少和Linux的FHS(File Hierarchy Standard ...

  5. Insertion Sort List(单链表插入排序)

    来源:https://leetcode.com/problems/insertion-sort-list Sort a linked list using insertion sort. 方法: 1. ...

  6. C/C++ 内存模型

    C分为四个区:堆,栈,静态全局变量区,常量区 C++内存分为5个区域(堆栈全常代 ): 堆 heap : 由new分配的内存块,其释放编译器不去管,由我们程序自己控制(一个new对应一个delete) ...

  7. Java Springboot 根据图片链接生成图片下载链接 及 多个图片打包zip下载链接

    现有一些图片在服务器上的链接,在浏览器中打开这些链接是直接显示在浏览器页面的形式. 现在需要生成这些图片的单独下载以及打包下载链接,即在浏览器中打开下载链接后弹出下载框提示下载.由于前端存在跨域问题, ...

  8. Android怎么改图标都不生效&&Android studio 如何修改APP图标和名字

    去这里(我自己写的),解决方法包你满意: https://blog.csdn.net/qq_43141611/article/details/101875545

  9. P3984高兴的津津

    这道题的标签是并查集,但其实是一个并查集思想的模拟题. 被算法标签迷惑了,一直在想怎么存f[],然后怎么查找,但发现其实很难去做.然后就发现其实就是做一个选择就可以了:拿AU的第i次包含在i-1次里, ...

  10. linux中文件IO

    一. linux常用文件IO接口 1.1. 文件描述符 1.1.1. 文件描述符的本质是一个数字,这个数字本质上是进程表中文件描述符表的一个表项,进程通过文件描述符作为index去索引查表得到文件表指 ...