集群_集群搭建 - CSDN
集群 订阅
集群通信系统是一种用于集团调度指挥通信的移动通信系统,主要应用在专业移动通信领域。该系统具有的可用信道可为系统的全体用户共用,具有自动选择信道功能,它是共享资源、分担费用、共用信道设备及服务的多用途、高效能的无线调度通信系统。 展开全文
集群通信系统是一种用于集团调度指挥通信的移动通信系统,主要应用在专业移动通信领域。该系统具有的可用信道可为系统的全体用户共用,具有自动选择信道功能,它是共享资源、分担费用、共用信道设备及服务的多用途、高效能的无线调度通信系统。
信息
特    点
音通信采用PTT
类    型
移动通信系统
中文名
集群
功    能
共享资源、分担费用等
集群简介
集群通信的最大特点是话音通信采用PTT(Push To Talk),以一按即通的方式接续,被叫无需摘机即可接听,且接续速度较快,并能支持群组呼叫等功能,它的运作方式以单工、半双工为主,主要采用信道动态分配方式,并且用户具有不同的优先等级和特殊功能,通信时可以一呼百应。追溯到它的产生,集群的概念确实是从有线电话通信中的“中继”概念而来。1908年,E.C.Mo1ina发表的“中继”曲线的概念等级,证明了一群用户的若干中继线路的概率可以大大提高中继线的利用率。“集群”这一概念应用于无线电通信系统,把信道视为中继。“集群”的概念,还可从另一角度来认识,即与机电式(纵横制式)交换机类比,把有线的中继视为无线信道,把交换机的标志器视为集群系统的控制器,当中继为全利用度时,就可认为是集群的信道。集群系统控制器能把有限的信道动态地、自动地最佳分配给系统的所有用户,这实际上就是信道全利用度或我们经常使用的术语“信道共用”。
收起全文
精华内容
参与话题
  • 集群(1)---集群的概念

    千次阅读 2019-04-21 23:35:04
    1、什么是集群? 将同一个业务部署在多台服务器上,如果主机宕机了,其它服务器可以自动接替主机服务器工作,以实现持续性为客户提供服务,并且处理科研实验以及核处理等大型计算业务,单台大型计算机依然无法胜任,集群...

    1、什么是集群?

    将同一个业务部署在多台服务器上,如果主机宕机了,其它服务器可以自动接替主机服务器工作,以实现持续性为客户提供服务,并且处理科研实验以及核处理等大型计算业务,单台大型计算机依然无法胜任,集群可以将一个计算业务交给集群中的多台计算机进行处理。

    2、集群的特点?

    1)、可扩展性:集群的性能不限制于单一的服务实体,新的服务实体可以动态的添加到集群,从而增强了集群的性能。

    2)、高可用性:集群当其中一个节点发生故障时,这台节点上所运行的应用程序将在另一台节点被自动接管,消除单点故障对于增强数据可用性、可达性和可靠性是非常重要的。

     

    3、集群必须的2大能力

    1)、负载均衡:负载均衡将任务比较均匀的分布到集群环境下的计算和网络资源,以提高数据的吞吐量。

    2)、错误恢复:如果集群中的某一台服务器由于故障或者维护需要无法使用,资源和应用程序将转移到可以的集群节点上。

                                这种由于某个节点的资源不能工作,另一个可用节点中的资源能够透明的接管并继续完成任务的过程。

    负载均衡和错误恢复要求各服务实体中有执行同一任务的资源存在,而且对于同一任务的各个资源来说,执行任务所需的信息视图必须是相同的。

     

    4、集群和分布式的区别?

    相同点:分布式和集群都是需要有很多节点服务器通过网络协同工作完成整体的任务目标。

    不同点:分布式是指将业务系统进行拆分,即分布式的每一个节点都是实现不同的功能。

                   集群每个节点做的都是同一件事情。

     

    5、项目中常见的集群有哪些?

    1)、zookeeper集群

    2)、SolrCloud集群

    3)、Redis Cluster集群

     

    展开全文
  • PS:这篇文章算是笔记,仅部分文字是原创,相当内容只是收集、整理、提炼、总结别人写的。 没有标为原创 是出于对部分内容原作者的尊重和感谢... 但若你要转载还是请带上我家地址哦,毕竟这些内容都不是现成的哦 ~...

    PS:这篇文章算是笔记,仅部分文字是原创,相当内容只是收集、整理、提炼、总结别人写的。

    没有标为原创 是出于对部分内容原作者的尊重和感谢 ...

    但若你要转载还是请带上我家地址哦,毕竟这些内容都不是现成的哦 ~ ~ ~

     

    一、大白话解说,半分钟就懂,用生活中的例子来说明:

     

    小饭店原来只有一个厨师,切菜洗菜备料炒菜全干。

    后来客人多了,厨房一个厨师忙不过来,又请了个厨师,两个厨师都能炒一样的菜,两个厨师的关系是集群。

    为了让厨师专心炒菜,把菜做到极致,再请了个配菜师负责切菜,备菜,备料 ...  厨师和配菜师的关系是分布式。

     

    一个配菜师也忙不过来了,又请了个配菜师,两个配菜师关系是集群。

    一个配菜师因故请假了,但是其余的配菜师还是该啥就干啥,只是没请假的配菜师任务均匀的加量了,但他们的任务和职责是不变的,这是集群。

     

    集群:多个人在一起作同样的事 。

    分布式 :多个人在一起作不同的事 。

     

     

    二、图解:

     

    以上内容转自:https://www.zhihu.com/question/20004877

     

    以下内容是个人整理的:

    三、区别联系 (其实上面的内容应该已经让你理解2者了)

     

    1)我记得在一本讲 tcp/ip 的书上有这样一句话:分布式是指 多个系统协同合作完成一个特定任务的系统。

    分布式是解决中心化管理的问题,把所有的任务叠加到一个节点处理,太慢了。

    所以把一个大的问题拆分为多个小的问题,并分别解决,最终协同合作。分布式的主要工作是分解任务,将职能拆解。

     

    2) 集群主要的使用场景是为了分担请求的压力,也就是在几个服务器上部署相同的应用程序,来分担客户端请求。

    当压力进一步增大的时候,可能在需要存储的部分,mysql 无法面对很多的写压力。因为在 mysql 做成集群之后,主要的写压力还是在 master 的机器上面,其他 slave 机器无法分担写压力,从而这个时候,也就引出来分布式。

    分布式的主要应用场景是单台机器已经无法满足这种性能的要求,必须要融合多个节点,并且节点之间是相关之间有交互的。相当于在写 mysql 的时候,每个节点存储部分数据,也就是分布式存储的由来。存储一些非结构化数据:静态文件、图片、pdf、小视频 ... 这些也就是分布式文件系统的由来。

     

    3)集群主要是简单加机器解决问题,对于问题本身不做任何分解;

    分布式处理里必然包含任务分解与答案归并。分布式中的某个子任务节点,可能由一个集群来代替;集群中任一节点,都是做一个完整的任务。

    集群和分布式都是由多个节点组成,但是集群之间的通信协调基本不需要;而分布式各个节点的通信协调必不可少。

     将一套系统拆分成不同子系统部署在不同服务器上(这叫分布式),

     然后部署多个相同的子系统在不同的服务器上(这叫集群),部署在不同服务器上的同一个子系统应做负载均衡。 

     

    分布式:一个业务拆分为多个子业务,部署在多个服务器上 。 

    集群:同一个业务,部署在多个服务器上 。

     

    参考:https://www.zhihu.com/question/20004877

     

    展开全文
  • 服务器集群

    千次阅读 2018-10-12 12:25:52
    计算机集群简称集群是一种计算机系统,它通过一组松散集成的计算机软件或硬件连接起来高度紧密地协作完成计算工作。在某种意义上,他们可以被看作是一台计算机。 集群系统中的单个计算机通常称为节点,通常通过...

    目录

    集群

    LVS

    LVS-NAT  

    LVS-DR 

    LVS-TUN

    LVS的调度算法


    集群

    计算机集群简称集群是一种计算机系统,它通过一组松散集成的计算机软件或硬件连接起来高度紧密地协作完成计算工作。在某种意义上,他们可以被看作是一台计算机。 集群系统中的单个计算机通常称为节点,通常通过局域网连接,但也有其它的可能连接方式。 集群计算机通常用来改进单个计算机的计算速度和可靠性。 集群就是一组独立的计算机,通过网络连接组合成一个组合来共同完一个任务。

    为什么要使用集群?

    • 高性能performance:一些需要很强的运算处理能力比如天气预报,核试验等。这就不是几台计算机能够搞定的。这需要上千台一起来完成这个工作的
    • 价格有效性:通常一套系统集群架构,只需要几台或数十台服务器主机即可,与动则上百万的专用超级计算机相比具有更高的性价比
    • 可伸缩性: 当服务器负载压力增长的时候,系统能够扩展来满足需求,且不降低服务质量 
    • 高可用性: 尽管部分硬件和软件发生故障,整个系统的服务必须是7*24小时运行的

    集群分类:

    • 负载均衡集群(Loadbalancingclusters)简称LBC 
    • 高可用性集群(High-availabilityclusters)简称HAC 
    • 高性能计算集群(High-perfomanceclusters)简称HPC 
    • 网格计算(Gridcomputing)

    负责均衡集群的作用:

    • 提供一种廉价、有效、透明的方法,来扩展网络设备和服务器的负载带宽、增加吞吐量,加强网络数据处理能力、提高网络的灵活性和可用性
    • 把单台计算机无法承受的大规模的并发访问或数据流量分担到多台节点设备上分别处理,减少用户等待响应的时间,提升用户体验
    • 单个重负载的运算分担到多台节点设备上做并行处理,每个节点设备处理结束后,将结果汇总,返回给用户,系统处理能力得到大幅度提高
    • 7*24小时的服务保证,任意一个或多个设备节点设备宕机,不会影响到业务。在负载均衡集群中,所有计算机节点都应该提供相同的服务,集群负载均衡获取所有对该服务的如站请求

    负载均衡设备:

    • 常用的负载均衡开源软件有 Nginx、LVS、Haproxy
    • 商业的硬件负载均衡设备Cisco的 LocalDirector、F5 的 Big/IP 和  Alteon 的 ACEDirector

    LVS

    LVS (Linux Virtual Server) 即 Linux 虚拟服务器,将多台虚拟主机组织起来满足同一个需求。是一个虚拟的服务器集群系统。本项目在 1998 年 5 月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。 现在 LVS 已经是 Linux 内核标准的一部分。使用 LVS 可以达到的技术目标是:通过 LVS 达到的负载均衡技术和 Linux 操作系统实现一个高性能高可用的 Linux 服务器集群,它具有良好的可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的性能。 LVS 是一个实现负载均衡集群的开源软件项目,LVS架构从逻辑上可分为 调度层、Server集群层 和 共享存储。

    LVS的组成

    • ipvs(ip virtual server):一段代码工作在内核空间,叫ipvs,是真正生效实现调度的代码。
    • ipvsadm:另外一段是工作在用户空间,叫ipvsadm,负责为ipvs内核框架编写规则,定义谁是集群服务,而谁是后端真实的服务器(Real Server)

    LVS相关术语

    • DS:Director Server。指的是前端负载均衡器节点。
    • RS:Real Server。后端真实的工作服务器。
    • VIP:向外部直接面向用户请求,作为用户请求的目标的IP地址。
    • DIP:Director Server IP,主要用于和内部主机通讯的IP地址。
    • RIP:Real Server IP,后端服务器的IP地址。
    • CIP:Client IP,访问客户端的IP地址。

    LVS的工作原理

    LVS的工作模式

    • LVS/NAT模式(Network address translation)
    • LVS/TUN模式(tunneling)
    • LVS/ DR模式(Direct routing) 

    LVS-NAT  

    LVS-NAT原理和特点

    LVS-NAT模型的特性

    • RS应该使用私有地址,RS的网关必须指向DIP 
    • DIP和RIP必须在同一个网段内 
    • 请求和响应报文都需要经过Director Server,高负载场景中,Director Server易成为性能瓶颈 
    • 支持端口映射 
    • RS可以使用任意操作系统 
    • 缺陷:对Director Server压力会比较大,请求和响应都需经过director server 

    LVS-DR 

    LVS-DR的原理和特点

    LVS-DR的模型和特性

    • 保证前端路由将目标地址为VIP报文统统发给Director Server,而不是RS
    • RS可以使用私有地址;也可以是公网地址,如果使用公网地址,此时可以通过互联网对RIP进行直接访问
    • RS跟Director Server必须在同一个物理网络中
    • 所有的请求报文经由Director Server,但响应报文必须不能进过Director Server
    • 不支持地址转换,也不支持端口映射    
    • RS可以是大多数常见的操作系统
    • RS的网关绝不允许指向DIP(因为我们不允许他经过director)
    • RS上的lo接口配置VIP的IP地址
    • 缺陷:RS和DS必须在同一机房中 

    LVS-TUN

    LVS-TUN的原理和特点 

    LVS-TUN模型特性

    • RIP、VIP、DIP全是公网地址
    • RS的网关不会也不可能指向DIP
    • 所有的请求报文经由Director Server,但响应报文必须不能进过Director Server
    • 不支持端口映射
    • RS的系统必须支持隧道

    LVS的调度算法

    针对不同的网络服务需求和服务器配置,IPVS调度器实现了如下八种负载调度算法:
    1、轮叫(Round Robin)简称RR
    这种算法是最简单的,就是按依次循环的方式将请求调度到不同的服务器上,该算法最大的特点就是简单。轮询算法假设所有的服务器处理请求的能力都是一样的,调度器会将所有的请求平均分配给每个真实服务器,不管后端 RS 配置和处理能力,非常均衡地分发下去
    2、加权轮叫(Weighted Round Robin) 简称WRR
    这种算法比 rr 的算法多了一个权重的概念,可以给 RS 设置权重,权重越高,那么分发的请求数越多,权重的取值范围 0 – 100。主要是对rr算法的一种优化和补充, LVS 会考虑每台服务器的性能,并给每台服务器添加要给权值,如果服务器A的权值为1,服务器B的权值为2,则调度到服务器B的请求会是服务器A的2倍。权值越高的服务器,处理的请求越多
    3、最少链接(Least Connections)简称LC
    这个算法会根据后端 RS 的连接数来决定把请求分发给谁,比如 RS1 连接数比 RS2 连接数少,那么请求就优先发给 RS1
    4、加权最少链接(Weighted Least Connections)简称WLC
    这个算法比 lc 多了一个权重的概念。
    5、基于局部性的最少链接(Locality-Based Least Connections)简称LBLC
    这个算法是请求数据包的目标 IP 地址的一种调度算法,该算法先根据请求的目标 IP 地址寻找最近的该目标 IP 地址所有使用的服务器,如果这台服务器依然可用,并且有能力处理该请求,调度器会尽量选择相同的服务器,否则会继续选择其它可行的服务器
    6、带复制的基于局部性最少链接(Locality-Based Least Connections with Replication)简称LBLCR
    记录的不是要给目标 IP 与一台服务器之间的连接记录,它会维护一个目标 IP 到一组服务器之间的映射关系,防止单点服务器负载过高。
    7、目标地址散列调度(Destination Hashing)简称DH
    该算法是根据目标 IP 地址通过散列函数将目标 IP 与服务器建立映射关系,出现服务器不可用或负载过高的情况下,发往该目标 IP 的请求会固定发给该服务器
    8、源地址散列调度(Source Hashing)简称SH
    与目标地址散列调度算法类似,但它是根据源地址散列算法进行静态分配固定的服务器资源

    展开全文
  • 集群解决方案

    千次阅读 2018-08-26 17:12:06
    集群概念 集群是一种计算机系统, 它通过一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作。在某种意义上,他们可以被看作是一台计算机。集群系统中的单个计算机通常称为节点,通常通过局域网...

    集群概念

    集群是一种计算机系统, 它通过一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作。在某种意义上,他们可以被看作是一台计算机。集群系统中的单个计算机通常称为节点,通常通过局域网连接,但也有其它的可能连接方式。集群计算机通常用来改进单个计算机的计算速度和/或可靠性。一般情况下集群计算机比单个计算机,比如工作站或超级计算机性能价格比要高得多。

    集群的特点

    集群拥有以下两个特点:

    1.   可扩展性:集群的性能不限制于单一的服务实体,新的服务实体可以动态的添加到集群,从而增强集群的性能。

    2.   高可用性:集群当其中一个节点发生故障时,这台节点上面所运行的应用程序将在另一台节点被自动接管,消除单点故障对于增强数据可用性、可达性和可靠性是非常重要的。

    集群的两大能力

    集群必须拥有以下两大能力:

    1.     负载均衡:负载均衡把任务比较均匀的分布到集群环境下的计算和网络资源,以提高数据吞吐量。

    2.     错误恢复:如果集群中的某一台服务器由于故障或者维护需要无法使用,资源和应用程序将转移到可用的集群节点上。这种由于某个节点的资源不能工作,另一个可用节点中的资源能够透明的接管并继续完成任务的过程,叫做错误恢复。

    负载均衡和错误恢复要求各服务实体中有执行同一任务的资源存在,而且对于同一任务的各个资源来说,执行任务所需的信息视图必须是相同的。

    集群与分布式的区别

    相同点:

    分布式和集群都是需要有很多节点服务器通过网络协同工作完成整体的任务目标。

    不同点:

    分布式是指将业务系统进行拆分,即分布式的每一个节点都是实现不同的功能。而集群每个节点做的是同一件事情。

    如下图,每个人都有不同的分工,一起协作干一件事,叫做“分布式”

    再看下图:每个划桨人干的都是一样的活,叫做集群。

    Zookeeper集群

    大部分分布式应用需要一个主控、协调器或者控制器来管理物理分布的子进程。目前,大多数都要开发私有的协调程序,缺乏一个通用机制,协调程序的反复编写浪费,且难以形成通用、伸缩性好的协调器,zookeeper提供通用的分布式锁服务,用以协调分布式应用。所以说zookeeper是分布式应用的协作服务。

    zookeeper作为注册中心,服务器和客户端都要访问,如果有大量的并发,肯定会有等待。所以可以通过zookeeper集群解决。

    下面是zookeeper集群部署结构图:

    了解Leader选举

    Zookeeper的启动过程中leader选举是非常重要而且最复杂的一个环节。那么什么是leader选举呢?zookeeper为什么需要leader选举呢?zookeeper的leader选举的过程又是什么样子的?

    首先我们来看看什么是leader选举。其实这个很好理解,leader选举就像总统选举一样,每人一票,获得多数票的人就当选为总统了。在zookeeper集群中也是一样,每个节点都会投票,如果某个节点获得超过半数以上的节点的投票,则该节点就是leader节点了。

    以一个简单的例子来说明整个选举的过程. 
             假设有五台服务器组成的zookeeper集群,它们的id从1-5,同时它们都是最新启动的,也就是没有历史数据,在存放数据量这一点上,都是一样的.假设这些服务器依序启动,来看看会发生什么 。
             1) 服务器1启动,此时只有它一台服务器启动了,它发出去的报没有任何响应,所以它的选举状态一直是LOOKING状态  
             2) 服务器2启动,它与最开始启动的服务器1进行通信,互相交换自己的选举结果,由于两者都没有历史数据,所以id值较大的服务器2胜出,但是由于没有达到超过半数以上的服务器都同意选举它(这个例子中的半数以上是3),所以服务器1,2还是继续保持LOOKING状态.  
             3) 服务器3启动,根据前面的理论分析,服务器3成为服务器1,2,3中的老大,而与上面不同的是,此时有三台服务器选举了它,所以它成为了这次选举的leader.  
             4) 服务器4启动,根据前面的分析,理论上服务器4应该是服务器1,2,3,4中最大的,但是由于前面已经有半数以上的服务器选举了服务器3,所以它只能接收当小弟的命了.  
             5) 服务器5启动,同4一样,当小弟

    搭建Zookeeper集群

    • 搭建要求

    真实的集群是需要部署在不同的服务器上的,但是在我们测试时同时启动十几个虚拟机内存会吃不消,所以我们通常会搭建伪集群,也就是把所有的服务都搭建在一台虚拟机上,用端口进行区分。

    我们这里要求搭建一个三个节点的Zookeeper集群(伪集群)。

    • 准备工作

    重新部署一台虚拟机作为我们搭建集群的测试服务器。

    (1)安装JDK  【此步骤省略】。

    (2)Zookeeper压缩包上传到服务器

    (3)将Zookeeper解压 ,创建data目录 ,将 conf下zoo_sample.cfg 文件改名为 zoo.cfg

    (4)建立/usr/local/zookeeper-cluster目录,将解压后的Zookeeper复制到以下三个目录

    /usr/local/zookeeper-cluster/zookeeper-1

    /usr/local/zookeeper-cluster/zookeeper-2

    /usr/local/zookeeper-cluster/zookeeper-3

    (5)配置每一个Zookeeper 的dataDir(zoo.cfg) clientPort 分别为2181  2182  2183 修改/usr/local/zookeeper-cluster/zookeeper-1/conf/zoo.cfg

    • 配置集群
    • 在每个zookeeper的 data 目录下创建一个 myid 文件,内容分别是1、2、3 。这个文件就是记录每个服务器的ID

    -------知识点小贴士------

    如果你要创建的文本文件内容比较简单,我们可以通过echo 命令快速创建文件

    格式为:

    echo 内容 >文件名

    例如我们为第一个zookeeper指定ID为1,则输入命令

    •   在每一个zookeeper zoo.cfg配置客户端访问端口(clientPort)和集群服务器IP列表

    server.1=192.168.25.135:2881:3881

    server.2=192.168.25.135:2882:3882

    server.3=192.168.25.135:2883:3883

    -----知识点小贴士-----

    我们可以使用EditPlus远程修改服务器的文本文件的内容,更加便捷

    (1)在菜单选择FTP Settings

    (2)点击ADD按钮

    (3)输入服务器信息

    1. 点击高级选项按钮

    (5)选择SFTP  端口22

    (6)OK  。完成配置

    连接:

    哈哈,无敌啦~~~~   你可能要问,老师,你为啥不早告诉我有这一招  !

    启动集群 

     启动集群就是分别启动每个实例

    启动后我们查询一下每个实例的运行状态

    先查询第一个服务

     Mode为follower表示是跟随者(从)

    再查询第二个服务Mod 为leader表示是领导者(主)

    查询第三个为跟随者(从) 

    模拟集群异常 

    (1)首先我们先测试如果是从服务器挂掉,会怎么样  把3号服务器停掉,观察1号和2号,发现状态并没有变化

    3个节点的集群,2个从服务器都挂掉,主服务器也无法运行。因为可运行的机器没有超过集群总数量的半数。

    由此我们得出结论,当集群中的主服务器挂了,集群中的其他服务器会自动进行选举状态,然后产生新得leader  

    Dubbox连接zookeeper集群

    <!-- 指定注册中心地址 -->
    <dubbo:registry
    protocol="zookeeper" address="192.168.25.135:2181,192.168.25.135:2182,192.168.25.135:2183">
    </dubbo:registry>
    

    SolrCloud 

    SolrCloud(solr 云)是 Solr 提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用 SolrCloud。当一个系统的索引数据量少的时候是不需要使用 SolrCloud的,当索引量很大,搜索请求并发很高,这时需要使用 SolrCloud 来满足这些需求。

    SolrCloud 是基于 Solr 和Zookeeper的分布式搜索方案,它的主要思想是使用 Zookeeper作为集群的配置信息中心。

    它有几个特色功能:

    1)集中式的配置信息

    2)自动容错

    3)近实时搜索

    4)查询时自动负载均衡

    SolrCloud系统架构

    【1】物理结构

    三个 Solr 实例( 每个实例包括两个 Core),组成一个 SolrCloud。

    【2】逻辑结构

    索引集合包括两个 Shard(shard1 和 shard2),shard1 和 shard2 分别由三个 Core 组成,其中一个 Leader 两个 Replication,Leader 是由 zookeeper 选举产生,zookeeper 控制每个shard上三个 Core 的索引数据一致,解决高可用问题。

    用户发起索引请求分别从 shard1 和 shard2 上获取,解决高并发问题。

    (1)Collection  

    Collection 在 SolrCloud 集群中是一个逻辑意义上的完整的索引结构。它常常被划分为一个或多个 Shard(分片),它们使用相同的配置信息。

    比如:针对商品信息搜索可以创建一个 collection。

    collection=shard1+shard2+....+shardX

    (2) Core

    每个 Core 是 Solr 中一个独立运行单位,提供 索引和搜索服务。一个 shard 需要由一个Core 或多个 Core 组成。由于 collection 由多个 shard 组成所以 collection 一般由多个 core 组成。

    (3)Master 或 Slave

    Master 是 master-slave 结构中的主结点(通常说主服务器),Slave 是 master-slave 结构中的从结点(通常说从服务器或备服务器)。同一个 Shard 下 master 和 slave 存储的数据是一致的,这是为了达到高可用目的。

    (4)Shard

    Collection 的逻辑分片。每个 Shard 被化成一个或者多个 replication,通过选举确定哪个是 Leader。

    搭建SolrCloud

    搭建要求

    Zookeeper 作为集群的管理工具

    1、集群管理:容错、负载均衡。

    2、配置文件的集中管理

    3、集群的入口

    需要实现 zookeeper 高可用,需要搭建zookeeper集群。建议是奇数节点。需要三个 zookeeper 服务器。

    搭建 solr 集群需要 7 台服务器(搭建伪分布式,建议虚拟机的内存 1G 以上):

    需要三个 zookeeper 节点

    需要四个 tomcat 节点。

    准备工作

    环境准备

    CentOS-6.5-i386-bin-DVD1.iso

    jdk-7u72-linux-i586.tar.gz

    apache-tomcat-7.0.47.tar.gz

    zookeeper-3.4.6.tar.gz

    solr-4.10.3.tgz

    步骤:

    (1)搭建Zookeeper集群(我们在上一小节已经完成)

    (2)将已经部署完solr 的tomcat的上传到linux

    (3)在linux中创建文件夹 /usr/local/solr-cloud  创建4个tomcat实例

    [root@localhost ~]# mkdir /usr/local/solr-cloud

    [root@localhost ~]# cp -r tomcat-solr /usr/local/solr-cloud/tomcat-1

    [root@localhost ~]# cp -r tomcat-solr /usr/local/solr-cloud/tomcat-2

    [root@localhost ~]# cp -r tomcat-solr /usr/local/solr-cloud/tomcat-3

    [root@localhost ~]# cp -r tomcat-solr /usr/local/solr-cloud/tomcat-4

    (4)将本地的solrhome上传到linux

    (5)在linux中创建文件夹 /usr/local/solrhomes ,将solrhome复制4份

    [root@localhost ~]# mkdir /usr/local/solrhomes

    [root@localhost ~]# cp -r solrhome /usr/local/solrhomes/solrhome-1

    [root@localhost ~]# cp -r solrhome /usr/local/solrhomes/solrhome-2

    [root@localhost ~]# cp -r solrhome /usr/local/solrhomes/solrhome-3

    [root@localhost ~]# cp -r solrhome /usr/local/solrhomes/solrhome-4

    (6)修改每个solr的 web.xml 文件, 关联solehome

        <env-entry>

           <env-entry-name>solr/home</env-entry-name>

           <env-entry-value>/usr/local/solrhomes/solrhome-1</env-entry-value>

           <env-entry-type>java.lang.String</env-entry-type>

        </env-entry>

    (7)修改每个tomcat的原运行端口8085 8080 8009  ,分别为

    8185  8180  8109

    8285  8280  8209

    8385  8380  8309

    8485  8480  8409

    ------  知识点小贴士  ------

    8005端口是用来关闭TOMCAT服务的端口。  

    8080端口,负责建立HTTP连接。在通过浏览器访问Tomcat服务器的Web应用时,使用的就是这个连接器。

    8009端口,负责和其他的HTTP服务器建立连接。在把Tomcat与其他HTTP服务器集成时,就需要用到这个连接器。

    配置集群

    (1)修改每个 tomcat实例 bin 目录下的 catalina.sh 文件   把此配置添加到catalina.sh( 234 )

    JAVA_OPTS="-DzkHost=192.168.25.135:2181,192.168.25.135:2182,192.168.25.135:2183"

    JAVA_OPTS ,顾名思义,是用来设置JVM相关运行参数的变量 .  此配置用于在tomcat启动时找到 zookeeper集群。

    (2)配置 solrCloud 相关的配置。每个 solrhome 下都有一个 solr.xml,把其中的 ip 及端口号配置好(是对应的tomcat的IP和端口)。

    solrhomes/solrhome-1/solr.xml

      <solrcloud>
        <str name="host">192.168.25.135</str>
        <int name="hostPort">8180</int>
        <str name="hostContext">${hostContext:solr}</str>
        <int name="zkClientTimeout">${zkClientTimeout:30000}</int>
        <bool name="genericCoreNodeNames">${genericCoreNodeNames:true}</bool>
      </solrcloud>
    

    solrhomes/solrhome-2/solr.xml

     <solrcloud>
        <str name="host">192.168.25.135</str>
        <int name="hostPort">8280</int>
        <str name="hostContext">${hostContext:solr}</str>
        <int name="zkClientTimeout">${zkClientTimeout:30000}</int>
        <bool name="genericCoreNodeNames">${genericCoreNodeNames:true}</bool>
      </solrcloud>
    

    solrhomes/solrhome-3/solr.xml

     <solrcloud>
        <str name="host">192.168.25.135</str>
        <int name="hostPort">8380</int>
        <str name="hostContext">${hostContext:solr}</str>
        <int name="zkClientTimeout">${zkClientTimeout:30000}</int>
        <bool name="genericCoreNodeNames">${genericCoreNodeNames:true}</bool>
      </solrcloud>
    

    solrhomes/solrhome-4/solr.xml

     <solrcloud>
        <str name="host">192.168.25.135</str>
        <int name="hostPort">8480</int>
        <str name="hostContext">${hostContext:solr}</str>
        <int name="zkClientTimeout">${zkClientTimeout:30000}</int>
        <bool name="genericCoreNodeNames">${genericCoreNodeNames:true}</bool>
      </solrcloud>
    

    (3)让 zookeeper 统一管理配置文件。需要把 solrhome下collection1/conf 目录上传到

    zookeeper。上传任意 solrhome 中的配置文件即可。

    我们需要使用solr给我们提供的工具上传配置文件:

    solr-4.10.3/example/scripts/cloud-scripts/zkcli.sh

    将solr-4.10.3压缩包上传到linux,解压,然后进入solr-4.10.3/example/scripts/cloud-scripts目录 ,执行下列命令

     

    ./zkcli.sh -zkhost 192.168.25.135:2181,192.168.25.135:2182,192.168.25.135:2183 -cmd upconfig

    -confdir /usr/local/solrhomes/solrhome-1/collection1/conf -confname myconf

    参数解释

    -zkhost  :指定zookeeper地址列表

    -cmd    :指定命令。upconfig 为上传配置的命令

    -confdir  : 配置文件所在目录

    -confname : 配置名称

    启动集群

    启动每个 tomcat 实例。要保证 zookeeper 集群是启动状态。

    ----  知识点小贴士 -----

    如果你想让某个文件夹下都可以执行,使用以下命令实现

    chmod -R 777 solr-cloud

     

     

     

    (2)访问集群

    地址栏输入 http://192.168.25.135:8180/solr   ,可以看到Solr集群版的界面

    下图表示的是,一个主节点 ,三个从节点。

    SpringDataSolr连接SolrCloud

    在SolrJ中提供一个叫做CloudSolrServer的类,它是SolrServer的子类,用于连接solrCloud 它的构造参数就是zookeeper的地址列表

    CloudSolrServer solrServer

    =new CloudSolrServer("192.168.25.135:2181,192.168.25.135:2182,192.168.25.135:2183");

    另外它要求要指定defaultCollection属性(默认的 collection名称)

    我们现在修改springDataSolrDemo工程的配置文件 ,把原来的solr-server注销,替换为CloudSolrServer .指定构造参数为地址列表,设置默认 collection名称

    <!-- solr服务器地址
    	<solr:solr-server id="solrServer" url="http://192.168.25.129:8080/solr" />
    	 -->	
    	<bean id="solrServer" class="org.apache.solr.client.solrj.impl.CloudSolrServer">
    		<constructor-arg value="192.168.25.135:2181,192.168.25.135:2182,192.168.25.135:2183" />
    		<property name="defaultCollection" value="collection1"></property>
    	</bean>
    

    分片配置

    • 创建新的 Collection 进行分片处理。

    在浏览器输入以下地址,可以按照我们的要求  创建新的Collection

    http://192.168.25.135:8180/solr/admin/collections?action=CREATE&name=collection2&numShards=2&replicationFactor=2

    参数:

    name:将被创建的集合的名字
    numShards:集合创建时需要创建逻辑碎片的个数
    replicationFactor:分片的副本数。

    看到这个提示表示成功

    • 删除不用的 Collection。执行以下命令

    http://192.168.25.135:8480/solr/admin/collections?action=DELETE&name=collection1

    新建分片后,原来的数据已经没有了,需要重新导入索引数据。

    注意:需要修改tb_item表price属性的类型为double ,修改配置文件中默认集合的设置,再次执行pinyougou-solr-util工程。如果是BigDecimal类型,在将数据导入到solrCloud集群时会失败。

    Redis Cluster

    为何要搭建Redis集群。Redis是在内存中保存数据的,而我们的电脑一般内存都不大,这也就意味着Redis不适合存储大数据,适合存储大数据的是Hadoop生态系统的Hbase或者是MogoDB。Redis更适合处理高并发,一台设备的存储能力是很有限的,但是多台设备协同合作,就可以让内存增大很多倍,这就需要用到集群。

    Redis集群搭建的方式有多种,例如使用客户端分片、TwemproxyCodis等,但从redis 3.0之后版本支持redis-cluster集群,它是Redis官方提出的解决方案,Redis-Cluster采用无中心结构,每个节点保存数据和整个集群状态,每个节点都和其他所有节点连接。其redis-cluster架构图如下:

    客户端与 redis 节点直连,不需要中间 proxy 层.客户端不需要连接集群所有节点连接集群中任何一个可用节点即可。

    所有的 redis 节点彼此互联(PING-PONG 机制),内部使用二进制协议优化传输速度和带宽.

    分布存储机制-槽

    •     redis-cluster 把所有的物理节点映射到[0-16383]slot 上,cluster 负责维护

    node<->slot<->value

    • Redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value 时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点。

        例如三个节点:槽分布的值如下:

    SERVER1:  0-5460

    SERVER2:  5461-10922

    SERVER3:  10923-16383

    容错机制-投票

    (1)选举过程是集群中所有master参与,如果半数以上master节点与故障节点通信超过(cluster-node-timeout),认为该节点故障,自动触发故障转移操作.  故障节点对应的从节点自动升级为主节点

    (2)什么时候整个集群不可用(cluster_state:fail)? 

    如果集群任意master挂掉,且当前master没有slave.集群进入fail状态,也可以理解成集群的slot映射[0-16383]不完成时进入fail状态.

     

    搭建Redis-Cluster

    需要 6 台 redis 服务器。搭建伪集群。

    需要 6 个 redis 实例。

    需要运行在不同的端口 7001-7006

    准备工作

    • 安装gcc 【此步省略】
    • 使用yum命令安装 ruby  (我们需要使用ruby脚本来实现集群搭建)【此步省略】

    ----- 知识点小贴士 -----

    Ruby,一种简单快捷的面向对象面向对象程序设计脚本语言,在20世纪90年代由日本人松本行弘(Yukihiro Matsumoto)开发,遵守GPL协议和Ruby License。它的灵感与特性来自于 PerlSmalltalkEiffelAda以及 Lisp 语言。由 Ruby 语言本身还发展出了JRubyJava平台)、IronRuby.NET平台)等其他平台的 Ruby 语言替代品Ruby的作者于1993224日开始编写Ruby,直至199512月才正式公开发布fj新闻组)。因为Perl发音与6月诞生石pearl珍珠)相同,因此Ruby7月诞生石ruby红宝石)命名

    RubyGems简称gems,是一个用于对 Ruby组件进行打包的 Ruby 打包系统

    (3)将redis源码包上传到 linux 系统  ,解压redis源码包

    (4)编译redis源码  ,进入redis源码文件夹

    看到以下输出结果,表示编译成功

    (5)创建目录/usr/local/redis-cluster目录,  安装6个redis实例,分别安装在以下目录

    /usr/local/redis-cluster/redis-1

    /usr/local/redis-cluster/redis-2

    /usr/local/redis-cluster/redis-3

    /usr/local/redis-cluster/redis-4

    /usr/local/redis-cluster/redis-5

    /usr/local/redis-cluster/redis-6

    以第一个redis实例为例,命令如下

    make install PREFIX=/usr/local/redis-cluster/redis-1

    (6)复制配置文件  将 /redis-3.0.0/redis.conf 复制到redis下的bin目录下

    [root@localhost redis-3.0.0]# cp redis.conf /usr/local/redis-cluster/redis-1/bin

    [root@localhost redis-3.0.0]# cp redis.conf /usr/local/redis-cluster/redis-2/bin

    [root@localhost redis-3.0.0]# cp redis.conf /usr/local/redis-cluster/redis-3/bin

    [root@localhost redis-3.0.0]# cp redis.conf /usr/local/redis-cluster/redis-4/bin

    [root@localhost redis-3.0.0]# cp redis.conf /usr/local/redis-cluster/redis-5/bin

    [root@localhost redis-3.0.0]# cp redis.conf /usr/local/redis-cluster/redis-6/bin

    配置集群 

    • 修改配置文件 修改运行端口为7001 (7002 7003 .....)

    将cluster-enabled yes 前的注释去掉(632行)

    • 启动每个redis实例

    cd /usr/local/redis-cluster/redis-1/bin/

    ./redis-server redis.conf

    • 上传redis-3.0.0.gem 安装 ruby用于搭建redis集群的脚本。​​​​​​​

    [root@localhost ~]# gem install redis-3.0.0.gem

    Successfully installed redis-3.0.0

    1 gem installed

    Installing ri documentation for redis-3.0.0...

    Installing RDoc documentation for redis-3.0.0...

    • 使用 ruby 脚本搭建集群。​​​​​​​  进入redis源码目录中的src目录  执行下面的命令​​​​​​​

    ./redis-trib.rb create --replicas 1 192.168.25.135:7001 192.168.25.135:7002 192.168.25.135:7003

    192.168.25.135:7004 192.168.25.135:7005 192.168.25.135:7006

    连接Redis-Cluster

    客户端工具连接

     

    Redis-cli 连接集群:

    redis-cli -p 主机ip -p 端口(集群中任意端口) -c

    -c:代表连接的是 redis 集群

    测试值的存取:

    (1)从本地连接到集群redis  使用7001端口 加 -c 参数

    (2)存入name值为abc ,系统提示此值被存入到了7002端口所在的redis (槽是5798)

    (3)提取name的值,可以提取。

    (4)退出(quit)

    (5)再次以7001端口进入 ,不带-c

    (6)查询name值,无法获取,因为值在7002端口的redis上

    (7)我们以7002端口进入,获取name值发现是可以获取的,而以其它端口进入均不能获取

    SpringDataRedis连接Redis集群

    <context:property-placeholder ignore-unresolvable="true" location="classpath:properties/redis-cluster-config.properties" />  
    <bean id="redis-clusterConfiguration" class="org.springframework.data.redis.connection.redis-clusterConfiguration">  
    	<property name="maxRedirects" value="${redis.maxRedirects}"></property>  
    	<property name="clusterNodes">  
    	<set>  
    		<bean class="org.springframework.data.redis.connection.redis-clusterNode">  
    			<constructor-arg name="host" value="${redis.host1}"></constructor-arg>  
    			<constructor-arg name="port" value="${redis.port1}"></constructor-arg>  
    		</bean>  
    		<bean class="org.springframework.data.redis.connection.redis-clusterNode">  
    			<constructor-arg name="host" value="${redis.host2}"></constructor-arg>  
    			<constructor-arg name="port" value="${redis.port2}"></constructor-arg>  
    		</bean>  
    		<bean class="org.springframework.data.redis.connection.redis-clusterNode">  
    			<constructor-arg name="host" value="${redis.host3}"></constructor-arg>  
    			<constructor-arg name="port" value="${redis.port3}"></constructor-arg>  
    		</bean>  
    	     <bean class="org.springframework.data.redis.connection.redis-clusterNode">  
    	         <constructor-arg name="host" value="${redis.host4}"></constructor-arg>  
    	         <constructor-arg name="port" value="${redis.port4}"></constructor-arg>  
    	      </bean>  
    	      <bean class="org.springframework.data.redis.connection.redis-clusterNode">  
    	         <constructor-arg name="host" value="${redis.host5}"></constructor-arg>  
    	         <constructor-arg name="port" value="${redis.port5}"></constructor-arg>  
    	      </bean>  
    		 <bean class="org.springframework.data.redis.connection.redis-clusterNode">  
    			<constructor-arg name="host" value="${redis.host6}"></constructor-arg>  
    			<constructor-arg name="port" value="${redis.port6}"></constructor-arg>  
    		 </bean>  
    	   </set>  
    	 </property>  
    </bean>  
    <bean id="jedisPoolConfig"   class="redis.clients.jedis.JedisPoolConfig">  
    	   <property name="maxIdle" value="${redis.maxIdle}" />   
    	   <property name="maxTotal" value="${redis.maxTotal}" />   
    </bean>  
    <bean id="jeidsConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"  >  
    		<constructor-arg ref="redis-clusterConfiguration" />  
    		<constructor-arg ref="jedisPoolConfig" />  
    </bean>    
    <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">  
    		<property name="connectionFactory" ref="jeidsConnectionFactory" />  
    </bean>  
    </beans>
    

    添加属性文件redis-cluster-config.properties

    #cluster configuration
    redis.host1=192.168.25.135
    redis.port1=7001
    
    redis.host2=192.168.25.135
    redis.port2=7002
    
    redis.host3=192.168.25.135
    redis.port3=7003
    
    redis.host4=192.168.25.135
    redis.port4=7004
    
    redis.host5=192.168.25.135
    redis.port5=7005
    
    redis.host6=192.168.25.135
    redis.port6=7006
    
    redis.maxRedirects=3
    redis.maxIdle=100
    redis.maxTotal=600
    

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    展开全文
  • 什么是集群,集群的概念介绍

    万次阅读 2018-10-04 15:55:34
    集群术语须知 服务硬件:指提供计算服务的硬件,比如 PC 机、PC 服务器。 服务实体:服务实体通常指服务软体和服务硬体。 节点(node):运行 Heartbeat 进程的一个独立主机称为节点,节点是 HA 的核心组成部分,每...
  • 先通过scp -r将zookeeper发送到其他两台虚拟机 重命名zoo_sample.cfg 为 zoo.cfg 同步环境变量 source一下profile 修改dtaDir 配置cluster server ID 也就是 my ID。 bigdata111 是主机名 ...直接...
  • 后台启动集群 和 Storm常用操作命令

    千次阅读 2018-02-24 18:52:36
    4、安装storm4.1、下载安装包 wget http://124.202.164.6/files/1139000006794ECA/apache.fayea.com/storm/apache-storm-0.9.5/apache-storm-0.9.5.tar.gz 4.2、解压安装包tar -zxvf apache-storm-0.9.5.tar.gz -C ...
  •  #手动同步集群各机器时间 date -s "2018-07-19 11:17:00" yum install ntpdate #网络同步时间 ntpdate cn.pool.ntp.org  设置主机名 #查看主机名 hostname #修改主机名(重启后无效) vi /etc/sysconfig...
  • 集群 &amp;amp;amp;amp; 服务器操作常用命令: 1、跨服务器操作: 两台机器IP分别为:A.104.238.161.75 \quad B.43.224.34.73 在A服务器上操作,将B服务器上/home/lk/目录下所有的文件全部复制到本地的/root...
  • 集群服务器的同步xsync命令使用

    万次阅读 2019-10-15 22:23:55
    使用情形 现在有4台服务器hadoop111~114,其中一台hadoop111是配置好jdk和hadoop环境的,现在我想让这些软件同步到其他服务器上,这样就不用一台一台去解压缩配置环境变量等操作。 其中/etc/profile文件需要有...
  • 什么是集群&集群的分类

    千次阅读 2019-06-13 09:19:38
    计算机集群简称集群,是一种计算机系统,它通过一组松散集成的计算机软件(和/或)硬件连接起来高度紧密地协作完成计算工作。在某种意义上,他们可以被看作是一台计算机。集群系统中的单个计算机通常称为节点,通常...
  • 集群的概念

    千次阅读 2019-03-13 23:02:52
    以前经常听别人说部署集群的话至少需要3台机器,因为会存在选主的情况。但是有些项目的集群又不需3台可能两台就够了。这是为什么呢? RocketMQ的broker集群为什么可以只有两台节点? 答:其实集群分不同的种类,...
  • redis(集群)清空缓存

    万次阅读 2018-04-16 09:27:32
    清空集群的缓解只要清空其中一个而已,其他的节点会同步flushall-清空所有数据库的缓存flushdb-清空当前数据库的缓存
  • 一、登录Web Client: ... 三、创建集群:    四、添加主机:       在此填入vSphere Esxi6.5的许可证,评估试用版略过:          用以上步骤在集群中添加以下两台主机:      ...
  • zookeeper 集群中当前zookeeper 状态查看

    万次阅读 多人点赞 2017-07-25 15:51:40
    在项目实施中经常需要用用zookeeeper集群环境,当需要定位zookeeper集群是否稳定的时候,会需要判断集群中leader是否进行改变,这时候就需要命令来查看 命令:zookeeper-3.4.6/bin$ ./zkServer.sh status
  • MySQL常用集群方案

    万次阅读 2018-06-30 11:15:37
    了解 MySQL 集群之前,先看看单节点数据库的弊病: 大型互联网程序用户群体庞大,所以架构需要特殊设计。 单节点数据库无法满足大并发时性能上的要求。 单节点的数据库没有冗余设计,无法满足高可用。 单节点 ...
  • redis集群检查集群状态和添加密码

    万次阅读 2018-06-05 08:16:18
    1.查看集群状态cd /root/install/redis/cluster-test/xxx/src./redis-cli -c -p 端口号 -h IP地址cluster info2.修改密码cd /root/install/redis/cluster-test/xxx/src./redis-cli -c -p 端口号 -h IP地址config set...
  • 查看redis集群信息

    万次阅读 2019-04-04 10:40:04
    注:ip为安装redis的那台服务器(集群中的其中一台)的ip,password为redis的密码 查看redis中存的数据 1.ssh root@ip 2.Password: password ...1.集群状态 redis-cli -h ip -p 9379 -a password cluster in...
  • Kafka集群搭建详细步骤

    万次阅读 2018-02-06 18:06:01
    Kafka集群搭建 1、 Kafka的安装需要java环境,cent os 7自带java1.6版本,可以不用重新安装,直接使用自带的jdk 即可;如果觉得jdk版本太旧,也可以自己重新安装; 2、 准备好kafka安装包,官网下载地址: ...
  • 搭建Nginx集群+Haproxy集群 

    万次阅读 2020-04-13 22:01:43
    上一篇我们搭建了Haproxy实现了MySQL集群的负载均衡。但是只有一台Haproxy服务器,万一这台Haproxy服务器down机。则整个集群就不可用。 在此之前我们先简单的了解一下nginx以及nginx实现负载均衡 根据前文 ...
1 2 3 4 5 ... 20
收藏数 779,679
精华内容 311,871
关键字:

集群