负载均衡

DNS负载均衡

放肆的年华 提交于 2020-04-05 17:18:12
DNS是什么? DNS(Domain Name System)是域名和IP地址相互映射的一个分布式数据库。 在DNS系统中有一个比较重要的的资源类型叫做主机记录也称为A记录。 A记录是用于名称解析的重要记录,它将特定的主机名映射到对应主机的IP地址上。 域名与主机IP对应关系 域名需要到DNS解析服务商的服务器上填写A记录. 例如:域名www.jian.com与主机IP对应关系 域名 资源类型 主机IP www.jian.com A记录 110.119.114.201 www.jian.com A记录 110.119.114.202 www.jian.com A记录 110.119.114.203 起到均衡作用图解 来源: oschina 链接: https://my.oschina.net/u/4198095/blog/3217862

Nginx 实现MySQL的负载均衡

爱⌒轻易说出口 提交于 2020-04-03 22:09:44
Nginx属于七层架构,支持的是http协议,本身对tcp协议没有支持。所以不能代理mysql等实现负载均衡。但是lvs这个东西不熟悉,主要是公司的的负载均衡都是nginx所以决定研究一下nginx的这个功能实现,下面简单介绍一下实现方法: 1.下载module模块 下载地址 : https://nodeload.github.com/yaoweibin/nginx_tcp_proxy_module/zipball/master $ wget 'http://nginx.org/download/nginx-1.2.1.tar.gz' $ tar -xzvf nginx-1.2.1.tar.gz $ cd nginx-1.2.1/ $ patch -p1 < /path/to/nginx_tcp_proxy_module/tcp.patch /path是指nginx_tcp_proxy_module路径 $ ./configure --add-module=/usr/local/ngx_cache_purge-1.4 --prefix=/usr/local/nginx --with-http_stub_status_module --add-module=/path/to/nginx_tcp_proxy_module //编译 $ make $ make install 2

数据结构与算法之美学习笔记:第二十二讲

本秂侑毒 提交于 2020-04-03 16:04:51
上一节,我讲了哈希算法的四个应⽤,它们分别是:安全加密、数据校验、唯⼀标识、散列函数。今天,我们再来看剩余三种应用: 负载均衡、 数据分片、 分布式存储 你可能已经发现,这三个应用都跟分布式系统有关。没错,今天我就带你看下, 哈希算法是如何解决这些分布式问题的。 应用五:负载均衡 1、如何实现一个会话粘滞的负载均衡算法 2、维护映射关系表的弊端 3、借助哈希算法完美解决 应用六:数据分片 1、引子案列 2、难点处理方案 3、问题所在痛点 4、如何快读判断图片是否在图库中 1、对数据进行分片、然后采用多机处理 2、具体方法 3、需要多少台机器 1、散列表中的每个数据单元包含两个信息 2、使用MD5 3、一台机器可以存多少图片 4、如果对一亿张图片构建索引,需要大约十几台机器 5、实际上 应用七:唯一标识 1、分布式存储 2、扩容带来的问题及痛点 1、方法 2、扩容存在的问题 3、雪崩效应、压垮数据库 3、将那个数据放到那个机器上呢 1、所以我们需要一种方法 2、解决方案 3、一致性哈希算法 解答开篇 & 内容小结 1、解答开篇 2、内容小结 来源: https://www.cnblogs.com/luoahong/p/11330458.html

负载均衡中的session保持

自作多情 提交于 2020-04-03 11:36:26
什么叫负载均衡中的session保持 当我们需要做负载均衡时,服务端肯定有多台服务器,用户每次请求进来,会根据负载均衡算法被分配到某一台机器上,假设用户需要进行一段连续操作时,在第一台机器登陆后,下一个操作被安排到了另一台机器,如果没有做会话同步,那这台机器肯定没有他之前的一些操作信息,如登陆状态等,所以负载均衡下的session保持就变得不简单了。 解决的方法 ip_hash 将来访者IP进行HASH后分配到对应的机器上,这样保证同一个IP会一直在一台机器上,这样session就不会因为换机器而断。 缺点: 多个客户端共用一个IP时,那被分配到的服务器就惨了。 一个客户端并发太大时,对接收他请求的服务器也是压力。 如果某台服务器挂了,那一堆分配到这台机器的请求就都跪了。 存session 把session存下来,这样每台服务器都能从公共存储中的session来获取客户端状态,保证会话的延续。 存数据库 占用数据库资源,高并发时,数据库瓶颈。 存文件里 高并发时硬盘I/O性能是瓶颈。 存Memcached/Redis 是挺快的,但因为是在内存里,宕机就没了,session太多时,老的session就会被删。 利用cookie 第一次请求时,分配完服务器后,负载均衡器给response写个cookie,把给它的机器记下来,下次来了还是那台服务器接客。 cookie的插入和取出分析

kubernetes Ingress、Ingress controller

牧云@^-^@ 提交于 2020-04-01 14:31:19
前言 拥抱开源,无私分享,共享技术,相互学习,共同进步,分享更多有深度的文章,欢迎转发分享 四层负载均衡调度器service回顾 使用四层负载均衡调度器service时,当客户端访问kubernetes集群内部的应用时,数据包走向如下面流程所示 client--->nodeip:port--->service ip:port--->podip:port 客户端-->node节点的ip:端口--->service的ip:端口--->pod的ip:端口 1.Ingress Controller Ingress Controller是一个七层负载均衡调度器,客户端的请求先到达这个七层负载均衡调度器,由七层负载均衡器在反向代理到后端pod,常见的七层负载均衡器有nginx,traefik等,以我们熟悉的nginx为例,假如请求到达nginx,会通过upstream反向代理到后端pod,但是后端pod的ip地址是一直在变化的,因此在后端pod前需要加一个service,这个service只是起到分组的作用,那么我们upstream只需要填写service地址即可 nginx:需要手动加载配置文件 traefik:定期自动加载配置文件,不需要手动干预,在微服务中几乎都会使用这种调度器 2.Ingress 官方: https://kubernetes.io/docs/concepts

kubernetes Ingress、Ingress controller

耗尽温柔 提交于 2020-04-01 14:30:55
前言 拥抱开源,无私分享,共享技术,相互学习,共同进步,分享更多有深度的文章,欢迎转发分享 四层负载均衡调度器service回顾 使用四层负载均衡调度器service时,当客户端访问kubernetes集群内部的应用时,数据包走向如下面流程所示 client--->nodeip:port--->service ip:port--->podip:port 客户端-->node节点的ip:端口--->service的ip:端口--->pod的ip:端口 1.Ingress Controller Ingress Controller是一个七层负载均衡调度器,客户端的请求先到达这个七层负载均衡调度器,由七层负载均衡器在反向代理到后端pod,常见的七层负载均衡器有nginx,traefik等,以我们熟悉的nginx为例,假如请求到达nginx,会通过upstream反向代理到后端pod,但是后端pod的ip地址是一直在变化的,因此在后端pod前需要加一个service,这个service只是起到分组的作用,那么我们upstream只需要填写service地址即可 nginx:需要手动加载配置文件 traefik:定期自动加载配置文件,不需要手动干预,在微服务中几乎都会使用这种调度器 2.Ingress 官方: https://kubernetes.io/docs/concepts

[置顶] 负载均衡器技术Nginx和F5的优缺点对比

本小妞迷上赌 提交于 2020-03-31 03:58:09
对于数据流量过大的网络中,往往单一设备无法承担,需要多台设备进行数据分流,而负载均衡器就是用来将数据分流到多台设备的一个转发器。 目前有许多不同的负载均衡技术用以满足不同的应用需求,如软/硬件负载均衡、本地/全局负载均衡、更高网络层负载均衡,以及链路聚合技术。 我们使用的是软负载均衡器Nginx,而农行用的是F5硬负载均衡器,这里就简单介绍下这两种技术: a.软件负载均衡解决方案 在一台服务器的操作系统上,安装一个附加软件来实现负载均衡,如Nginx负载均衡(我们管理系统平台使用的也是这款均衡器)。它的优点是基于特定环境、配置简单、使用灵活、成本低廉,可以满足大部分的负载均衡需求。 一、什么是Nginx Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 可以说Nginx 是目前使用最为广泛的HTTP软负载均衡器,其将源代码以类BSD许可证的形式发布(商业友好),同时因高效的性能、稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名于业界。像腾讯、淘宝、新浪等大型门户及商业网站都采用Nginx进行HTTP网站的数据分流。 二、Nginx的功能特点 1、工作在网络的7层之上,可以针对http应用做一些分流的策略,比如针对域名、目录结构; 2、Nginx对网络的依赖比较小; 3

计算机网络面试题(三)

假如想象 提交于 2020-03-30 13:42:41
计算机网络之传输层 ● 请你说明一下,TCP协议的4次握手。 考察点:TCP协议 参考回答: 由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。 TCP的连接的拆除需要发送四个包,因此称为四次挥手(four-way handshake)。客户端或服务器均可主动发起挥手动作,在socket编程中,任何一方执行close()操作即可产生挥手操作。 (1)客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送。 (2)服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。 (3)服务器B关闭与客户端A的连接,发送一个FIN给客户端A。 (4)客户端A发回ACK报文确认,并将确认序号设置为收到序号加1。 ● 谈一下,为什么tcp为什么要建立连接? 考察点:TCP 参考回答: 保证可靠传输。 ● 请你解释一下TCP为什么可靠一些 考察点:TCP 参考回答: 三次握手,超时重传,滑动窗口,拥塞控制。 ● 请说明一下哪种应用场景会使用TCP协议,使用它的意义 考察点:TCP协议 参考回答:

Nginx+keepalived负载均衡

谁都会走 提交于 2020-03-30 06:33:35
1、安装Nginx $ yum -y install gcc # nginx是c写的 $ yum -y install pcre-devel # url重写用到的包 $ yum -y install zlib zlib-devel # 解压缩用到的包 扩展①: yum install -y lsof lsof -i:80 #在nginx启动前,需要先检查端口是否被占用 yum install elinks # 除了elinks还有curl、lynx等文本浏览器 elinks http://192.168.229.10 -dump 安装killall命令 yum search killall yum -y install psmisc 2、虚拟主机 2.1、基于IP的虚拟主机 2.2、基于端口的虚拟主机 2.3、基于域名的虚拟主机 vim /etc/hosts 验证: 3、长连接 # 关闭长连接:0代表关闭 keepalive_timeout 0; # 开启长连接(默认开启) # keepalive_timeout 65; # 一个长连接处理最大请求数(定期释放内存,防止内存溢出) # keepalive_requests 8192; 4、压缩优化(数据压缩) gzip on; # 启动gzip压缩功能 gzip_proxied any; # nginx做前端代理时启用该选项

Java加权负载均衡策略

末鹿安然 提交于 2020-03-29 10:39:56
加权轮询 后端集群每台机器都分配一个权重,权重高得会承担更多的流量,相反权重低的分配的流量也会少,这种策略允许后端集群机器配置差异化 java实现 import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import org.springframework.stereotype.Controller; @Controller public class IpMapController extends LogBaseController implements Runnable { private static Integer pos = 0; // 待scp的Ip列表,Key代表Ip,Value代表该Ip的权重 public static HashMap<String, Integer> serverWeightMap = new HashMap<String, Integer>(); static { serverWeightMap.put("127.0.0.1", 1); serverWeightMap.put("127.0.0.2", 1);