145LVS 集群负载均衡实战--LVS实战
在本实验环境中我们没有办法为大家提供多台服务器来模拟集群环境,由此我们 docker 工具来创建多个 container 来模拟集群所需要的多台服务器。
docker 可以简单的理解为非常轻量级的虚拟机工具,而 container 则理解为创建的虚拟机。
集群系统中,服务器资源可以简单分为两种角色:
一种是 Load Balancer,即负载均衡调度器,位于集群系统的前端,对后端服务器实现负载均衡作用,对外 IP 地址也称为 VIP(虚拟 IP 地址)。
另一种就是后端服务器群,处理由 Load Balancer 发来的请求。
整个集群系统结构:
宿主机环境(默认桌面环境):装有 ipvsadm(LVS 的 IP 负载由 IPVS 内核模块完成,ipvsadm 是为 IPVS 编制规则的工具),充当负载均衡调度器
宿主机浏览器:通过宿主机中的浏览器来充当客户端
RealServer1 的 container:部署 Nginx web 服务器,提供 Web 访问服务,充当服务器池中的一员
RealServer2 的 container:部署 Nginx web 服务器,提供 Web 访问服务,充当服务器池中的一员
我们将通过这样的一些步骤来完成此次的实验:
本地安装 ipvsadm 工具,加载 IPVS 模块
通过 docker 创建两个 container 来模拟服务器池中的成员
配置两台 RealServer 的环境:
安装 vim 与 nginx 工具
修改默认的 nginx 展示页面
配置负载均衡调度机器:
修改内核转发参数
配置 ipvsadm 规则
测试实验效果
LVS 成功测试:我们能够通过 VIP 访问我们的 Nginx 站点,经过多次的刷新我们能够访问另一个站点的内容(以显示的内容以作区分,因为负载并不高,所以需要很多次刷新,点击地址栏,按住 F5 不放)
安装 ipvsadm 工具
首先为了能够使用 IPVS 内核模块,我们将在宿主机中安装 ipvsadm,并尝试能否使用:
命令讲解:
docker run:创建 docker 容器
name 参数:给容器命名,方便区分
tid 参数:分配 tty,能够与之交互
ubuntu:指定容器镜像,这里使用 ubuntu 镜像
安装相关工具
为了区分 RealServer1 和 RealServer2 的 Nginx 响应页面,需要修改默认 nginx 的展示 html 页面。
按 i 键插入,按 esc 再输入 :wq 保存退出。
注意若完成了 RealServer1 的配置之后,如果我们不想打开新的终端,可以通过 ctrl+p+q 的组合快捷键脱离当前机器的登录,切勿使用 exit 的方式退出 container,这样的方式关闭服务器的。 脱离之后便会返回到 shiyanlou 的 zsh 交互,可以通过 docker attach RealServer2 的命令来登录另一台机器,然后做类似的操作(同上的软件安装操作以及 nginx 启动操作)
接下来就修改 nginx 页面,如下所示:
LoadBalancer 的对外 IP 地址为 VIP,即 VIP 地址为 120.26.15.9 (注意,你的 VIP 地址可能和我的不一样,根据自己实际情况来)。对内 IP 称为 RIP,此时 RIP 为 192.168.0.1。
2.开启 LoadBalancer 的内核路由转发:
3.查看当前机器内核路由转发开启情况:
得到的值为 1,说明此机器已开启内核路由转发。进行下一步。
4.使用 ipvsadm 添加 ipvs 规则。定义集群服务:
上面命中 ipvsadm 参数讲解:
以上便实现了 LVS 的 NAT 负载均衡系统。
与 NAT 方式相同,我们将通过 docker 来模拟我们的集群环境。
集群系统中,服务器资源可以简单分为两种角色:
一种是 Load Balancer,即负载均衡调度器,位于集群系统的前端,对后端服务器实现负载均衡作用,对外 IP 地址也称为 VIP(虚拟 IP 地址)。
另一种就是后端服务器群,处理由 Load Balancer 发来的请求。
整个集群系统结构:
宿主机环境(默认桌面环境):充当客户端访问 web 服务
LoadBalancer1 的 container:装有 ipvsadm,充当负载均衡调度器
RealServer1 的 container:部署 Nginx web 服务器,提供 Web 访问服务,充当服务器池中的一员
RealServer2 的 container:部署 Nginx web 服务器,提供 Web 访问服务,充当服务器池中的一员
我们将通过这样的一些步骤来完成此次的实验:
本地安装 ipvsadm 工具,加载 IPVS 模块
通过 docker 创建三个 container 来模拟服务器池中的成员
配置两台 RealServer 的环境:
安装 vim 与 nginx 工具
修改默认的 nginx 展示页面
修改内核参数,抑制 arp
创建网卡别名与添加路由
配置一台 LoadBalancer 环境:
安装 ipvsadm
配置网卡别名
配置 ipvsadm 规则
测试实验效果
LVS 成功测试:我们能够通过 VIP 访问我们的 Nginx 站点,经过多次的刷新我们能够访问另一个站点的内容(以显示的内容以作区分,因为负载并不高,所以需要很多次刷新,点击地址栏,按住 F5 不放)
查看 ipvsadm 中的统计数据。
若是我们沿用 NAT 的实验环境,我们需要做环境的清理:
1.首先清除 ipvsadm 的规则:
2.删除之前所创建的 container,虽然都是提供 Web 服务,但是在 DR 模式中需要修改内核参数与创建网卡别名,需要超级权限,所以不能沿用之前的 container:
安装 ipvsadm 工具
因为在 NAT 实验中我们已安装所以可跳过该步骤,若是新启动的环境请参考 NAT 中的步骤,此处提示务必在宿主机环境中执行 ipvsadm -L 的验证步骤,若是不执行该步骤,在 LoadBalancer 的 container 中我们将无法加载 IPVS 的内核模块。
创建与配置服务器池成员
同样我们使用 docker 来模拟我们的集群环境,创建三台 container:
其中 --privileged 参数用于给予容器超级权限。
完成我们服务器池成员的创建之后,我们参照 NAT 中配置步骤完成 RealServer 中的:
nginx 与 vim 的安装
默认展示页面的修改
nginx 服务的启动
在完成这样的配置之后我们需要一些额外的操作:
1.修改内核参数
以 RealServer1 为例,登录 container:
执行下列命令:
ARP 的内核参数: arp_ignore 部分参数:定义了本机响应 ARP 请求的级别
0 表示目标 IP 是本机的,则响应 ARP 请求。默认为 0
1 如果接收 ARP 请求的网卡 IP 和目标 IP 相同,则响应 ARP 请求
arp_announce 参数:定义了发送 ARP 请求时,源 IP 应该填什么。
0 表示使用任一网络接口上配置的本地 IP 地址,通常就是待发送的 IP 数据包的源 IP 地址 。默认为 0
1 尽量避免使用不属于该网络接口(即发送数据包的网络接口)子网的本地地址作为 ARP 请求的源 IP 地址。大致的意思是如果主机包含多个子网,而 IP 数据包的源 IP 地址属于其中一个子网,虽然该 IP 地址不属于本网口的子网,但是也可以作为ARP 请求数据包的发送方 IP。
2 表示忽略 IP 数据包的源 IP 地址,总是选择网络接口所配置的最合适的 IP 地址作为 ARP 请求数据包的源 IP 地址(一般适用于一个网口配置了多个 IP 地址)
2.配置网卡别名
只有目的 IP 是本机器中的一员时才会做相应的处理,所以需要添加网卡别名:
同两台 Web 服务器中都做该配置,即完成了所有 Web 服务器所需的配置工作。
** 配置调度器规则**
紧接着我们登录 LoadBalancer 机器:
安装 ipvsadm 软件:
创建 eth0 的别名并绑定 VIP 地址,作为集群同时使用:
查看网卡信息:ifconfig
在 LoadBalancer 中添加 IPVS 规则:
ipvsadm 命令参数讲解:
以上操作就实现了 LVS/DR 模式,实现集群系统的负载均衡。
道秋梅花: 集群和负载均衡的区别如下:1、集群(Cluster) 所谓集群是指一组独立的计算机系统构成的一个松耦合的多处理器系统,它们之间通过网络实现进程间的通信?应用程序可以通过网络共享内存进行消息传送,实现分布式计算机?2、负载均衡...
柳州市18960829927: 利用nginx实现Redis的负载均衡,应该怎么配置? - ?
道秋梅花: 网络的负载均衡是一种动态均衡技术,通过一些工具实时地分析数据包,掌握网络中的数据流量状况,把任务合理均衡地分配出去.这种技术基于现有网络结构,提供了一种扩展服务器带宽和增加服务器吞吐量的廉价有效的方法,加强了网络数...
柳州市18960829927: linux负载均衡lvs原理详细讲解 什么是lvs负载均衡技术 - ?
道秋梅花: LVS共有三种模式,优缺点比较如下:NAT模式优点:集群中的物理服务器可以使用任何支持TCP/IP操作系统,物理服务器可以分配Internet的保留私有地址,只有负载...
柳州市18960829927: 什么是LVS集群技术 - ?
道秋梅花: 集群之LVS(负载均衡) LVS:Linux Virtual Server类似于iptables的架构,在内核中有一段代码用于实时监听数据包来源的请求,当数据包到达端口时做一次重定向.这一系列的工作必须在内核中实现.在内核中实现数据包请求处理的代码叫做ipvs.ipvs仅仅提供了功能框架,还需要自己手动定义是数据对哪个服务的请求,而这种定义需要通过写规则来实现,写规则的工具就称为ipvsadm.
柳州市18960829927: nginx负载均衡的算法怎么实现的 - ?
道秋梅花: 常见的有LVS、Nginx和HAProxy,者者介绍分别如下:LVS:使用集群技术和Linux操作系统实现一个高性能、高可用的服务器,它具有很好的可伸缩性(Scalability)、可靠性(Reliability)和可管理性(Manageability),感谢章文嵩博士为我...
柳州市18960829927: redis 集群负载均衡怎么做的 - ?
道秋梅花: 用户访问业务数据时,查询缓存,如果没有值,则从数据库载入Redis,并设置过期时间(基于时间过期的更新策略).• 针对每一个模块,仅有一块内容的情况:存储k/v一条记录;• 针对每一个模块,有多块不同内容的情况:每块内容存储一...
柳州市18960829927: 如何才能让两台sql server 2005服务器负载均衡 - ?
道秋梅花: 您好,很高兴为您解答.1、企业实现Web服务器负载均衡为了将负载均匀的分配给内部的多个服务器上,就需要应用一定的负载均衡策略.通过服务器负载均衡设备实现各服务器群的流量动态负载均衡,并互为冗余备份.并要求新系统应有一...
柳州市18960829927: 如何实现linux负载均衡集群文件同步? - ?
道秋梅花: 你这种情况使用inotify+rsync应该可以达到目的.
柳州市18960829927: 怎样利用系统集群技术实现系统的容错和负载均衡?
道秋梅花: 要实现容错高可用性的群集的话建议用heartbeat这个软件吧 负载均衡就用lvs就行了
柳州市18960829927: SQLSERVER怎么搭建服务器集群实现负载均衡 - ?
道秋梅花: 很多组织机构慢慢的在不同的服务器和地点部署SQL Server数据库——为各种应用和目的——开始考虑通过SQL Server集群的方式来合并. 将SQL Server实例和数据库合并到一个中心的地点可以减低成本,尤其是维护和软硬件许可证.此外,...