为什么需要集群

为什么,需要,集群 · 浏览次数 : 255

小编点评

集群的难点是: 1. 安装。 2. 配置。 3. 调优。 4. 高可用。 5. 分布式一致性。

正文

为什么需要集群


摘要

设备是廉价的极端容易损坏的
最近世代的数据中心与大型机小型机时代最大的区别在于
大型机小型机时代, 都是scale up.假设基础设施是非常稳定的(也的确如此).
新时代的数据中心,都是scale out的.都是假定设备是非常不稳定,容易损坏的.

最近时代, 不管是内存,CPU还有硬盘,以及整机服务器都变得非常廉价. 
也更加容易损坏. 所以数据中心必须考虑硬件损坏的情况. 
保证业务不断, 必须保证有很多完全独立的,并且是互相冗余的设备存在.
一方面性能冗余, 一方面功能冗余. 

集群的种类

中间价集群
数据库集群
应用集群
基础设施集群

中间件

这里所说的中间件泛指很多提供服务的非自研产品. 
主要有:
类型 举例
缓存,锁session redis
应用负载均衡,发现代理 nginx
消息队列 rabbitmq
服务注册发现 nacos

Redis

Redis的高可用主要有如下几种
1. 哨兵
2. 集群
3. 机遇keepavlie+haproxy实现vip迁移的主从集群

redis主要是存储缓存以及锁信息
缓存需要持久化, 锁和session 根据业务需求进行判断是否需要持久化. 

Redis的集群要考虑.安全,性能,以及容量. 
要定期进行容灾测试演练. 保证应用可以无感迁移.
建议及群的节点必须分布于不同的机柜上面, 避免机柜Tor或者是电源宕机时无法使用.

Redis的集群需要测试如下方面
1. 性能 
2.稳定性 
3.容量支撑情况 
4.功能准确性(批量锁是否支持) 
5.异常宕机对应用的影响

nginx

Nginx最常用的有两个角色:
1. web服务器
2. 反向代理服务器.

都建议需要进行集群化高可用的处理
可以使用多个nginx节点然后牵连使用lvs等工具进行负载
保证单个nginx节点出问题时可以支撑业务应用. 

nginx与redis相同点是 都必须保证高可用.
不同点在于:
Redis是有状态的. 数据是由具体含义的
Nginx是可以无状态. 可以自由扩容. 不用担心状态的问题. 

Nginx不管是集群还是单点都需要考虑
1. 安全 2.性能.
Redis 一般是不需要开放的熬外网的. 安全漏洞可能还可控
Nginx 一般是需要暴露到外部网络, 对安全性要求极高. 

nginx一般是应用的最外城, 往往承载着最多的压力
他需要很多配置来进行优化.
CPU的核心数. 内存数. 以及内核参数都需要优化. 
Nginx自己的配置, 比如工作连接数,工作线程数
是否长连接. proxy_pass的长连接设置等等配置
以及linux的tcp_reuse, tcp_timstamp,以及tcp缓存参数等. 

消息队列

rabbitmq 为例
消息队列有集群和镜像模式.
集群模式下一般小时是分片的. 
镜像模式一般保证消息队列的高可用和保证一定的数据不丢失(需要持久化加持.)

不建议将集群部署到一台机器上面. 建议多台机器分散部署.保证安全
也需要进行集群的测试验证.
1. 功能 配置,最佳实践
2. 性能  
3. 稳定性 洪峰流量时的异常处理
4. 异常恢复 部分节点宕机时对应用的影响,以及是否可以保证数据不丢失.

服务注册发现

微服务部署的场景下,最核心的应用其实是服务注册发现
网上zookeeper,consul,其实都可以实现一定程度的服务注册与发现

产品这边用的是 nacos. 其实nacos也是可以进行集群处理的. 
可以选择使用 mysql数据库存储一些核心配置. 

需要注意的是 注册和反注册都需要进行实现. 需要保证反注册时能够将不提供服务的
在nacos里面剔除, 避免出现服务关闭了.其他人调用出现404的问题. 

集群的难点

1. 安装.
2. 配置.
3. 调优.
4. 高可用
5. 分布式一致性.防止脑裂等. 

集群的难点

安装是第一步. 需要收敛掌握, 但是跟配置一样,必须有一个全局的规划能力
规划服务器, 网络交换机. 机柜等设备.
云服务的话需要保证高可用区. 

配置需要保证一方面安全, 避免数据被脱库. 另一方面需要保证性能.
能够支撑尽可能多的应用负载. 在可用范围内进行使用. 

调优. 需要根据现场情况进行配置
修改服务器的配置, 内核参数,应用配置,落盘持久化参数等等. 

高可用. 必须进行高可用的设置,多花钱花精力了必须保证可用性.
保证一两台机器宕机的情况下无严重问题. 

分布式一致性. paxos以及raft等算法来保证. 可能需要研究源码.
基本上在于 leader 和 选leader 以及半数同意提交等. 

为什么要高可用集群

为了sla,为了项目
甲方爸爸给钱多,就得保证高可用
这就好比舔狗必须24小时在线舔女神才可能有机会. 

但是前提时得足够有钱, 足够美丽
给不够钱, 没有足够的诱惑力
集群就是镜花水月. 没人维护,没人演练. 

时间永远是最宝贵的. 要珍惜所有留给你时间的人. 
时间也是所有人的敌人, 耗费很多钱和很多精力也不一定能够买到一点时间.

希望产品项目用不宕机 orz!

与为什么需要集群相似的内容:

为什么需要集群

为什么需要集群 摘要 设备是廉价的极端容易损坏的 最近世代的数据中心与大型机小型机时代最大的区别在于 大型机小型机时代, 都是scale up.假设基础设施是非常稳定的(也的确如此). 新时代的数据中心,都是scale out的.都是假定设备是非常不稳定,容易损坏的. 最近时代, 不管是内存,CPU

K8s 多集群实践思考和探索

本文主要讲述了一些对于k8s多集群管理的思考,包括为什么需要多集群、多集群的优势以及现有的一些基于Kubernetes衍生出的多集群管理架构实践。

初探富文本之CRDT协同实例

初探富文本之CRDT协同实例 在前边初探富文本之CRDT协同算法一文中我们探讨了为什么需要协同、分布式的最终一致性理论、偏序集与半格的概念、为什么需要有偏序关系、如何通过数据结构避免冲突、分布式系统如何进行同步调度等等,这些属于完成协同所需要了解的基础知识,实际上当前有很多成熟的协同实现,例如aut

什么是HuggingFace

一.HuggingFace简介 1.HuggingFace是什么 可以理解为对于AI开发者的GitHub,提供了模型、数据集(文本|图像|音频|视频)、类库(比如transformers|peft|accelerate)、教程等。 2.为什么需要HuggingFace 主要是HuggingFace把

聊聊Mybatis集成Spring的原理

一般都是研究框架源码,我为什么要反过来研究集成原理呢? 在我自己看来,集成虽然比较简单,但要求的细节比较多,需要掌握根本性的东西才能做到集成。 Mybatis集成Spring用到了FactoryBean以及BeanDefinition注册的原理,从这两个维度来实现集成,而我们单独学习Spring时,

pandas -- 处理非数值型数据 -- 数据分析三剑客(核心)

博客地址:https://www.cnblogs.com/zylyehuo/ 开发环境 anaconda 集成环境:集成好了数据分析和机器学习中所需要的全部环境 安装目录不可以有中文和特殊符号 jupyter anaconda提供的一个基于浏览器的可视化开发工具 为什么学习pandas numpy已

etcd:增加30%的写入性能

etcd:增加30%的写入性能 本文最终的解决方式很简单,就是将现有卷升级为支持更高IOPS的卷,但解决问题的过程值得推荐。 译自:etcd: getting 30% more write/s 我们的团队看管着大约30套自建的Kubernetes集群,最近需要针对etcd集群进行性能分析。 每个et

集群部署看过来,低代码@AWS智能集群的架构与搭建方案

为了帮助充分利用AWS的托管服务快速构建起一套集群环境,彻底去掉“单一故障点”,实现最高的可用性,我们准备了**《低代码智能集群@AWS的架构与搭建方案》**看完本文,带你掌握“基于nginx配置服务器集群”。 应用场景 如果你需要解决如下的问题,可以考虑搭建一套活字格@AWS智能集群: 保障系统高

云小课|MRS基础操作之集群健康检查

MapReduce服务为用户提供海量数据的管理及分析功能,快速从结构化和非结构化的海量数据中挖掘您所需要的价值数据。集群中的FusionInsight Manager将提供企业级的集群的统一管理平台。

[转帖]k8s学习: kubeconfig文件详解

1.什么是kubeconfig文件 用于配置集群访问的文件称为kubeconfig文件,这是引用配置文件的常用方法,.但并不是说有一个名为ubeconfi的文件。用于配置集群访问信息的文件叫作 kubeconfig 文件,在开启了 TLS 的集群中,每次与集群交互时都需要身份认证,生产环境一般使用证