keepalived+LVS实现网站负载均衡和HA

news/2024/5/20 13:20:41/文章来源:https://blog.csdn.net/weixin_30364325/article/details/97674359

  

  如上图所示,102和103是内网nginx服务器,100和101是边界LB,clinet是1,这个实验是为了实现在LB上虚拟出一个VIP,client通过访问该VIP,来动态负载到两台内网nginx服务器上面来。流量的来回,都需要经过边界LB。

  我们首先分析一下,这种模式是一种NAT模式,流量的来回都要经过边界LB。回忆一下NAT的工作模式,LB在接收到client的数据请求后,根据自身负载均衡算法,将目标IP地址修改为内网RS地址,然后从内网口扔出去,内网服务器收到这个数据请求之后,目标MAC和IP都是自己,源地址是client,这个时候就会处理该数据包,返回,返回的数据包中,源地址是自己,目标地址是client,在经过LB的时候,会被转换,源地址为VIP地址,目标地址为client地址,然后client就会收到这个回包。

  这个和物理硬件LB的工作模式中,透明模式相同,透明模式也就是NAT模式。而物理硬件中的反向代理模式,和LVS中的tunnel模式相似,在接收到client的数据请求后,会将整个数据包进行改写,源地址为LB的内网地址,目标地址为某一个RS地址,然后数据包返回的时候,也就会再次进行转换。这种反向代理模式中,服务器正常情况下无法知道client的源,只知道是自己的LB访问了自己,可以通过配置LB,添加字段,来讲该client的地址一并发送给RS。

  物理硬件LB中的三角模式,也就是LVS的DR模式。需要在服务器上配置lo接口。

  回到环境中。这个地方采用的是NAT模式,也就是说流量必须要经过LB,最简单的做法,就是将两台NGINX服务器的网关,配置在LB上,而且是以VIP的形式存在,对外,LB也拿出一个VIP,作为client访问的入口,也就是说,LB上,有两个VRRP INSTANCE,而且要保持状态一致。这样才能实现高可用HA。

  下面开始做配置了,主要是在两台LB上配置keepalived,keepalived是默认安装的,配置文件存放在/etc/keepalived/目录下,启动脚本为/etc/init.d/keepalived,定义100为主,101为备。下面是两台设备的keepalived配置文件。

! Configuration File for keepalived
! The global defines,including notification server and target,router-id and others
global_defs {notification_email {admin@domain.com0633225522@domain.com}notification_email_from keepalived@domain.comsmtp_server 127.0.0.1smtp_connect_timeout 30router_id LB_100
}
! The vrrp sync group,any vrrp instance in the vrrp sync group while keep the same status,
!       no matter the priority ,for example ,VI_1 is master ,VI_2 is backup,the sync group status is backup
vrrp_sync_group VG1 {group {VI_To_clientVI_To_server}
}
! The VRRP instance for client to connect,clients connect to the VIPs
vrrp_instance VI_To_client {state MASTERinterface eth0virtual_router_id 192priority 150nopreemptadvert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.245.200}
}
! The VRRP instance for real servers,real servers` default gateway
vrrp_instance VI_To_server {state MASTERinterface eth1virtual_router_id 10priority 150nopreemptadvert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {10.0.0.254}
}
! The LB configuration,including VS and RS,scheduling argu,and other options,health check
virtual_server 192.168.245.200 80 {delay_loop 6lb_algo rrlb_kind NATpersistence_timeout 10protocol TCPreal_server 10.0.0.102 80 {weight 1TCP_CHECK {connect_timeout 3}}real_server 10.0.0.103 80 {weight 1TCP_CHECK {connect_timeout 3}}
}

  在100的配置文件中,主要是配置了一个vrrp_sync_group,里面有两个VRRP INSTANCE,分别是面向client和面向RS的,两个VRRP INSTANCE的vrrp-_id是不同的,但是其他属性值都是ixiangtong的。另外,在keepalived的LB配置中,有对VS和RS的配置,同时对RS使用了health check,检查方法很简单,就是TCP的connect,当能够访问到时,将该RS动态的加入到ipvs中,如果访问不到,就从ipvs中移除。这个现象可以通过查看日志看到。

  slave的配置文件和master的配置文件大同小异,除了必要的字段不同,其他都是相同的。下面看看keepalived的日志信息。

Jul 15 13:57:01 CentOS_101 Keepalived[26012]: Starting Keepalived v1.2.13 (03/19,2015)
Jul 15 13:57:01 CentOS_101 Keepalived[26013]: Starting Healthcheck child process, pid=26015
Jul 15 13:57:01 CentOS_101 Keepalived[26013]: Starting VRRP child process, pid=26016
Jul 15 13:57:01 CentOS_101 Keepalived_vrrp[26016]: Netlink reflector reports IP 192.168.245.101 added
Jul 15 13:57:01 CentOS_101 Keepalived_healthcheckers[26015]: Netlink reflector reports IP 192.168.245.101 added
Jul 15 13:57:01 CentOS_101 Keepalived_healthcheckers[26015]: Netlink reflector reports IP 10.0.0.101 added
Jul 15 13:57:01 CentOS_101 Keepalived_healthcheckers[26015]: Netlink reflector reports IP fe80::20c:29ff:fe88:718 added
Jul 15 13:57:01 CentOS_101 Keepalived_healthcheckers[26015]: Netlink reflector reports IP fe80::20c:29ff:fe88:722 added
Jul 15 13:57:01 CentOS_101 Keepalived_healthcheckers[26015]: Registering Kernel netlink reflector
Jul 15 13:57:01 CentOS_101 Keepalived_healthcheckers[26015]: Registering Kernel netlink command channel
Jul 15 13:57:01 CentOS_101 Keepalived_healthcheckers[26015]: Opening file '/etc/keepalived/keepalived.conf'.
Jul 15 13:57:01 CentOS_101 Keepalived_healthcheckers[26015]: Configuration is using : 15025 Bytes
Jul 15 13:57:01 CentOS_101 Keepalived_healthcheckers[26015]: Using LinkWatch kernel netlink reflector...
Jul 15 13:57:01 CentOS_101 Keepalived_vrrp[26016]: Netlink reflector reports IP 10.0.0.101 added
Jul 15 13:57:01 CentOS_101 Keepalived_vrrp[26016]: Netlink reflector reports IP fe80::20c:29ff:fe88:718 added
Jul 15 13:57:01 CentOS_101 Keepalived_vrrp[26016]: Netlink reflector reports IP fe80::20c:29ff:fe88:722 added
Jul 15 13:57:01 CentOS_101 Keepalived_vrrp[26016]: Registering Kernel netlink reflector
Jul 15 13:57:01 CentOS_101 Keepalived_vrrp[26016]: Registering Kernel netlink command channel
Jul 15 13:57:01 CentOS_101 Keepalived_vrrp[26016]: Registering gratuitous ARP shared channel
Jul 15 13:57:01 CentOS_101 Keepalived_vrrp[26016]: Opening file '/etc/keepalived/keepalived.conf'.
Jul 15 13:57:01 CentOS_101 Keepalived_vrrp[26016]: Configuration is using : 69565 Bytes
Jul 15 13:57:01 CentOS_101 Keepalived_vrrp[26016]: Using LinkWatch kernel netlink reflector...
Jul 15 13:57:01 CentOS_101 Keepalived_healthcheckers[26015]: Activating healthchecker for service [10.0.0.102]:80
Jul 15 13:57:01 CentOS_101 Keepalived_healthcheckers[26015]: Activating healthchecker for service [10.0.0.103]:80
Jul 15 13:57:01 CentOS_101 Keepalived_vrrp[26016]: VRRP_Instance(VI_To_client) Entering BACKUP STATE
Jul 15 13:57:01 CentOS_101 Keepalived_vrrp[26016]: VRRP_Instance(VI_To_server) Entering BACKUP STATE
Jul 15 13:57:01 CentOS_101 Keepalived_vrrp[26016]: VRRP sockpool: [ifindex(2), proto(112), unicast(0), fd(10,11)]
Jul 15 13:57:01 CentOS_101 Keepalived_vrrp[26016]: VRRP sockpool: [ifindex(3), proto(112), unicast(0), fd(12,13)]

  这个是启动日志,在启动的时候,就对两个RS就开启了健康检查。

Jul 15 13:57:19 CentOS_101 Keepalived_healthcheckers[26015]: TCP connection to [10.0.0.102]:80 failed !!!
Jul 15 13:57:19 CentOS_101 Keepalived_healthcheckers[26015]: Removing service [10.0.0.102]:80 from VS [192.168.245.200]:80
Jul 15 13:57:49 CentOS_101 Keepalived_healthcheckers[26015]: TCP connection to [10.0.0.102]:80 success.
Jul 15 13:57:49 CentOS_101 Keepalived_healthcheckers[26015]: Adding service [10.0.0.102]:80 to VS [192.168.245.200]:80
Jul 15 13:57:59 CentOS_101 Keepalived_healthcheckers[26015]: TCP connection to [10.0.0.103]:80 failed !!!
Jul 15 13:57:59 CentOS_101 Keepalived_healthcheckers[26015]: Removing service [10.0.0.103]:80 from VS [192.168.245.200]:80
Jul 15 13:58:29 CentOS_101 Keepalived_healthcheckers[26015]: TCP connection to [10.0.0.103]:80 success.
Jul 15 13:58:29 CentOS_101 Keepalived_healthcheckers[26015]: Adding service [10.0.0.103]:80 to VS [192.168.245.200]:80

  这个是测试RS故障时候,keepalived的日志。日志写的很清楚,当主机故障时,就从VS中移除,同时可以看到ipvsadm的状态。

[root@CentOS_100 keepalived]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.245.200:80 rr persistent 10-> 10.0.0.102:80                Masq    1      0          0         
[root@CentOS_100 keepalived]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.245.200:80 rr persistent 10-> 10.0.0.102:80                Masq    1      0          0         -> 10.0.0.103:80                Masq    1      0          3         
[root@CentOS_100 keepalived]# ipvsadm -L -n

  client在访问的时候,只需要访问200这个虚拟地址就好了。如果不想LB作为RS的网关,可以直接在RS上写一条路由即可。

  在NAT模式中,需要在LB上开启转发,先查看sysctl -p查看是否开启了转发,如果没有开启,需要在/etc/sysctl.conf中修改net.ipv4.ip_forward为1,默认为0,如果为0,数据包在经过LB的时候,是不会被转发出去的。这个时候的LB,作为的是一个路由器,用linux作为路由器,是需要开启这个属性的。

 

转载于:https://www.cnblogs.com/bobo137950263/p/9313499.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_717523.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大型网站的HTTPS实践一:HTTPS协议和原理一

1 前言百度已经于近日上线了全站 HTTPS 的安全搜索,默认会将 HTTP 请求跳转成 HTTPS。本文重点介绍 HTTPS 协议, 并简单介绍部署全站 HTTPS 的意义。2 HTTPS 协议概述HTTPS 可以认为是 HTTP TLS。HTTP 协议大家耳熟能详了,目前大部分 WEB 应用和网站都是…

在github搭建个人网站

2019独角兽企业重金招聘Python工程师标准>>> 在github搭建个人网站 标签:github [TOC] 先搜篇中文博客了解下流程,再根据下面的官方文档按顺序看一遍就差不多了。 这里不得不吐槽windows太垃圾了,linux下三行指令解决的问题&#…

揭秘SEO快排原理

很多的SEOer每天绝大部分的时间都耗在撰写原创文章/伪原创文章以及发布软文外链,更换行业不相关的友链,年复一年,日复一日,关键词的排名依旧排在100名开外-20名以内,心里很是着急。看看同行竞争对手的网站,…

某搜索网站HR校园招聘被怼引争议,为啥危机偏爱30+人士?

豆瓣上有个热帖,网友去参加校园招聘会,某搜索网站HR表示,他们公司平均年龄都很年轻、很阳光,于是有人怼了句“那你们公司年龄大的都去哪里了?”,HR直接懵了。 是啊!年纪大的去哪里了&#xff1f…

如何将自己的网站分享到QQ空间,微信,微博等等。

2019独角兽企业重金招聘Python工程师标准>>> 逛一些网站的时候经常会看到右侧挂个分享栏,让用户把自己的站分享到qq空间,微信等等,所以自己也研究了下,把他加到了自己的网站上,喜欢的可以先看看效果&#x…

草根站长这一年用血的教训换来的SEO终极算法

导读:标题言过其实,但是草根站长都有自己真实的故事。我2015年6月1日买的空间和域名,到现在的2016年6月1日正好1年。这篇文章主要讲我这个草根站长这一年用来血的教训换来的SEO终极算法。血的教训1、学习了半个多月网络营销,弃学了…

全球银行网站成黑客主攻目标 阿里云提供安全防御应急方案

2019独角兽企业重金招聘Python工程师标准>>> 近日,阿里云监控发现,匿名者(Anonymous)组织成员正在发起针对全球中央银行网站的攻击行动,截止目前,国内有超过2家以上的重要网站被攻击&#xff0c…

SpringCloud GateWay 相关图形,文档、网站

一 业务:多个微服务的应用可能部署在不同机房,不同地区,不同域名下。 二 需求:统一入口、路由、权限认证...... 三 解决方案: 1 集群与架构(11) (1)逻辑 &#xff0…

Docker相关图形,网站、文档

一 引擎 引擎(Engine)是电子平台上开发程序或系统的核心组件。 一般而言,引擎是一个程序或一套系统的支持部分。 常见的程序引擎有游戏引擎、搜索引擎、杀毒引擎等。 游戏引擎:就是“用于控制所有游戏功能的主程序“。搜索引擎&a…

PHP搭建网站登录页面(一个iOS开发者的PHP之路)

前言 最近几年各个技术论坛流传着一句话:未来是全栈程序员的世界!程序员作为社会的一门职业,越来越多的人加入这个行业,在这个行业内分工很明晰的情况下,越来越多的程序员开始不安分追求一门编程语言,开始在…

网站分析参数(实例分析)SimilarWeb插件参数

网站分析参数(实例分析)SimilarWeb插件参数 那么这些指标是什么意思呢? SimilarWeb Rank:类似网站排名Global Rank:全球网站排名第三栏一般是类别,大概网站从事范围,比如进入知乎就是Internet a…

redis应用场景(1)一个文字投票网站

构建一个文章投票网站,一般具备下面几个功能发布文章文章投票评分(按投票多少进行评分)文章排序(按发布时间,按评分高低)文章分组(如专题)...1.关系型数据库设计其中用户&#xff0c…

Google Analytics SEO 实时 网站 访问量 统计

/**************************************************************************** Google Analytics SEO 实时 网站 访问量 统计* 说明:* 之前一直在想要怎么才能让aplexos.com域名网站能够统计访问量,网站是使用* github.io搭建&…

URLOS实战入门—制作LAP网站环境

1、制作LAP镜像 1.1.使用ssh登录宿主机器,创建Dockerfiel文件并填充以下内容 FROM php:7.2.16-apache-stretch ENV TIME_ZONE Asiz/Shanghai RUN sed -i s~//.*.debian.org~//mirrors.aliyun.com~ /etc/apt/sources.list \ && apt-get update \ && …

【网站优化实例教程】怎样运用分类信息网做网站优化【网优谷经验】

什么叫归类网络信息的营销推广?知道58个市和甘吉网知道什么叫分类信息网。 分类信息网现阶段其实早已被赶集网、58同城网那样的超大型网址垄断性,可是对于地区的分类信息网,還是有做头的。运用冷门行业的分类信息网开展提升,运用社…

分享12个非常好的免费矢量资源网站(转)

http://www.cnblogs.com/lhb25/archive/2011/04/08/2003802.html 在工作中,Web设计师经常需要到网上查找一些免费资源以更快更好的完成设计任务。这些资源都是到用时方恨少啊,所以今天本文与大家分享12个非常好的免费矢量资源网站,大家可收藏…

一个优秀的响应式网站能够给你带来什么?

网站作为你在互联网上的“门面”,这个脸一个要争!那该怎么样才能把自己在互联网的”脸面”整理的漂漂亮亮呢?打造一个优质的网站,不但让你“长脸”,还能让用户认得你,爱上你。提起优质的网站,说…

支付宝接口开发-手机网站支付-沙箱测试

前面一段时间,因为公司业务需求,需要使用支付宝的手机网站支付接口,因为自己也是第一次使用这个,中间走了不少弯路,现在总结一下,希望对遇到同样问题的朋友有帮助。 第一步:登录蚂蚁金服开放平台…

互联网安全和数据挖掘网站

检测、踩点网站:https://www.netcraft.com/ 转载于:https://www.cnblogs.com/ZQWelcomeIndex/p/11442145.html

为程序员准备的7个国外社交网站

本文主要分享了国外的7个社交网站,为开发人员和设计师提供一个新兴的地方,技术分享,代码分享,开发建议以及一些有趣的产品和最新的趣文。 -- 前言 Forrst Forrest是为开发人员和设计师提供的一个新兴的地方,在这里可…