登陆

品优购电商体系布置 第1章 集群解决方案

admin 2019-07-02 309人围观 ,发现0个评论

课程方针

方针1:说出什么是集群以及与散布式的差异

方针2:能够树立Zookeeper集群

方针3:能够树立SolrCloud集群

方针4:能够树立RedisCluster集群

1.集群概述

1.1什么是集群

## 1.1.1集群概念

集群是一种核算机体系, 它经过一组松懈集成的核算机软件和/或硬件衔接起来高度严密地协作完结核算作业。在某种意义上,他们能够被看作是一台核算机。集群体系中的单个核算机一般称为节点,一般经过局域网衔接,但也有其它的或许衔接办法。集群核算机一般用来改善单个核算机的核算速度和/或可靠性。一般情况下集群核算机比单个核算机,比方作业站或超级核算机功用价格比要高得多。

1.1.2集群的特征

集群具有以下两个特征:

  1. 可扩展性:集群的功用不约束于单一的服务实体,新的服务实体能够动态的增加到集群,然后增强集群的功用。
  2. 高可用性:集群当其间一个节点发作毛病时,这台节点上面所运转的运用程序将在另一台节点被主动接纳,消除单点毛病关于增强数据可用性、可达性和可靠性是非常重要的。
  3. 1.1.3集群的两大才能
  4. 集群有必要具有以下两大才能:
负载均衡:负载均衡把使命比较均匀的散布到集群环境下的核算和网络资源,以进步数据吞吐量。
过错康复:假如集群中的品优购电商体系布置 第1章 集群解决方案某一台服务器由于毛病或许保护需求无法运用,资源和运用程序将搬运到可用的集群节点上。这种由于某个节点的资源不能作业,另一个可用节点中的资源能够通明的接纳并持续完结使命的进程,叫做过错康复。

负载均衡和过错康复要求各服务实体中有履行同一使命的资源存在,并且关于同一使命的各个资源来说,履行使命所需的信息视图有必要是相同的。

1.2集群与散布式的差异

提到集群,或许咱们会马上联想到另一个和它很附近的一个词----“散布式”。那么集群和散布式是一回事吗?有什么联络和差异呢?

相同点:

散布式和集群都是需求有许多节点服务器经过网络协同作业完结全体的使命方针。

不同点:

散布式是指将事务体系进行拆分,即散布式的每一个节点都是完结不同的功用。而集群每个节点做的是同一件作业。

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

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

散布式的每一个节点也能够做成集群。其实这个赛龙舟的图,总全体来看归于散布式,包含打鼓和划桨两个散布式节点,而划桨的节点又是集群的形状。

现实生活中比方还有许多,例如,这样古代乐队的图就归于集群

而现代乐队这样图便是散布式啦

2.Zookeeper集群

2.1 Zookeeper集群简介

2.1.1为什么树立Zookeeper集群

大部分散布式运用需求一个主控、和谐器或许操控器来办理物理散布的子进程。现在,大多数都要开发私有的和谐程序,缺少一个通用机制,和谐程序的重复编写糟蹋,且难以构成通用、伸缩性好的和谐器,zookeeper供给通用的散布式锁服务,用以和谐散布式运用。所以说zookeeper是散布式运用的协作服务。

zookeeper作为注册中心,服务器和客户端都要拜访,假如有很多的并发,必定会有等候。所以能够经过zookeeper集群处理。

下面是zookeeper集群布置结构图:

2.1.2了解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相同,当小弟

2.2树立Zookeeper集群

2.2.1树立要求

实在的集群是需求布置在不同的服务器上的,可是在咱们测验时一起发动十几个虚拟机内存会吃不消,所以咱们一般会树立伪集群,也便是把一切的服务都树立在一台虚拟机上,用端口进行区别。

咱们这儿要求树立一个三个节点的Zookeeper集群(伪集群)。

2.2.2预备作业

重新布置一台虚拟机作为咱们树立集群的测验服务器。

(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

[root@localhost ~]# mkdir /usr/local/zookeeper-cluster
[root@localhost ~]# cp -r zookeeper-3.4.6 /usr/local/zookeeper-cluster/zookeeper-1
[root@localhost ~]# cp -r zookeeper-3.4.6 /usr/local/zookeeper-cluster/z品优购电商体系布置 第1章 集群解决方案ookeeper-2
[root@localhost ~]# cp -r zookeeper-3.4.6 /usr/local/zookeeper-cluster/zookeeper-3

(5)装备每一个Zookeeper 的dataDir(zoo.cfg) clientPort 别离为2181 2182 2183

修正/usr/local/zookeeper-cluster/zookeeper-1/conf/zoo.cfg

clientPort=2181
dataDir=/usr/local/zookeeper-cluster/zookeeper-1/data

修正/usr/local/zookeeper-cluster/zookeeper-2/conf/zoo.cfg

clientPort=2182
dataDir=/usr/local/zookeeper-cluster/zookeeper-2/data

修正/usr/local/zookeeper-cluster/zookeeper-3/conf/zoo.cfg

clientPort=2183
dataDir=/usr/local/zookeeper-cluster/zookeeper-3/data

2.2.3装备集群

(1)在每个zookeeper的 data 目录下创立一个 myid 文件,内容别离是1、2、3 。这个文件便是记载每个服务器的ID

-------知识点小贴士------
假如你要创立的文本文件内容比较简略,咱们能够经过echo 指令快速创立文件
格局为:
echo 内容 >文件名
例如咱们为第一个zookeeper指定ID为1,则输入指令

(2)在每一个zookeeper 的 zoo.cfg装备客户端拜访端口(clientPort)和集群服务器IP列表。

集群服务器IP列表如下

server.1=192.168.25.140:2881:3881
server.2=192.168.25.140:2882:3882
server.3=192.168.25.140:2883:3883

解说:server.服务器ID=服务器IP地址:服务器之间通讯端口:服务器之间投票推举端口

-----知识点小贴士-----
咱们能够运用EditPlus长途修正服务器的文本文件的内容,愈加方便
(1)在菜单挑选FTP Settings

(2)点击ADD按钮

(3)输入服务器信息

(4)点击高档选项按钮

(5)挑选SFTP 端口22

(6)OK 。完结装备

衔接:

哈哈,无敌啦~~~~ 你或许要问,教师,你为啥不早告诉我有这一招 !

2.2.4发动集群

发动集群便是别离发动每个实例。

发动后咱们查询一下每个实例的运转状况

先查询第一个服务

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

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

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

2.2.5模仿集群反常

(1)首要咱们先测验假如是从服务器挂掉,会怎么样

把3号服务器停掉,调查1号和2号,发现状况并没有改变

由此得出结论,3个节点的集群,从服务器挂掉,集群正常

(2)咱们再把1号服务器(从服务器)也停掉,检查2号(主服务器)的状况,发现现已中止运转了。

由此得出结论,3个节点的集群,2个从服务器都挂掉,主服务器也无法运转。由于可运转的机器没有超越集群总数量的对折。

(3)咱们再次把1号服务器发动起来,发现2号服务器又开端正常作业了。并且依然是领导者。

(4)咱们把3号服务器也发动起来,把2号服务器停掉(汗干嘛?领导挂了?)停掉后调查1号和3号的状况。

发现新的leader发作了~

由此咱们得出结论,当集群中的主服务器挂了,集群中的其他服务器会主动进行推举状况,然后发作新得leader

(5)咱们再次测验,当咱们把2号服务器重新发动起来(汗这是诈尸啊!)发动后,会发作什么?2号服务器会再次成为新的领导吗?咱们看成果

咱们会发现,2号服务器发动后依然是跟随者(从服务器),3号服务器依然是领导者(主服务器),没有撼动3号服务器的领导地位。哎~退休了便是退休了,说了不算了,哈哈。

由此咱们得出结论,当领导者发作后,再次有新服务器参加集群,不会影响到现任领导者。

2.3 Dubbox衔接zookeeper集群

修正服务供给者和服务调用者的spring 装备文件



protocol="zookeeper" address="192.168.25.140:2181,192.168.25.140:2182,192.168.25.140:2183">

3.SolrCloud

3.1 SolrCloud简介

3.1.1什么是SolrCloud

SolrCloud(solr 云)是 Solr 供给的散布式查找计划,当你需求大规模,容错,散布式索引和检索才能时运用 SolrCloud。当一个体系的索引数据量少的时分是不需求运用 SolrCloud的,当索引量很大,查找恳求并发很高,这时需求运用 SolrCloud 来满意这些需求。

SolrCloud 是依据 Solr 和Zookeeper的散布式查找计划,它的首要思维是运用 Zookeeper作为集群的装备信息中心。

它有几个特征功用:

1)会集式的装备信息

2)主动容错

3)近实时查找

4)查询时主动负载均衡

3.1.2 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。

3.2 树立SolrCloud

3.2.1树立要求

Zookeeper 作为集群的办理东西

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

2、装备文件的会集办理

3、集群的进口

需求完结 zookeeper 高可用,需求树立zookeeper集群。主张是奇数节点。需求三个 zookeeper 服务器。

树立 solr 集群需求 7 台服务器(树立伪散布式,主张虚拟机的内存 1G 以上):

需求三个 zookeeper 节点

需求四个 tomcat 节点。

3.2.2预备作业

环境预备

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/loc品优购电商体系布置 第1章 集群解决方案al/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 文件, 相关solrhome

 
solr/home
/usr/local/solrhomes/solrhome-1
java.lang.String

(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服务器集成时,就需求用到这个衔接器。

3.2.3装备集群

(1)修正每个 tomcat实例 bin 目录下的 catalina.sh 文件

把此装备增加到catalina.sh中( 第234行 ) :

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

JAVA_OPTS ,望文生义,是用来设置JVM相关运转参数的变量 . 此装备用于在tomcat发动时找到 zookeeper集群。

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

solrhomes/solrhome-1/solr.xml

 
192.168.25.140
8180
${hostContext:solr}
${zkClientTimeout:30000}
${genericCoreNodeNames:true}

solrhomes/solrhome-2/solr.xml

 
192.168.25.140
8280
${hostContext:solr}
${zkClientTimeout:30000}
${genericCoreNodeNames:true}

solrhomes/solrhome-3/solr.xml

 
192.168.25.140
8380
${hostContext:solr}
${zkClientTimeout:30000}
${genericCoreNodeNames:true}

solrhomes/solrhome-4/solr.xml

 
192.168.25.140
8480
${hostContext:solr}
${zkClientTimeout:30000}
${genericCoreNodeNames:true}

(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.140:2181,192.168.25.140:2182,192.168.25.140:2183 -cmd upconfig
-confdir /usr/local/solrhomes/solrhome-1/collection1/conf -confname myconf

参数解说

-zkhost :指定zookeeper地址列表

-cmd :指定指令。upconfig 为上传装备的指令

-confdir : 装备文件地点目录

-confname : 装备称号

3.2.4发动集群

(1)发动每个 tomcat 实例。要确保 zookeeper 集群是发动状况。

---- 知识点小贴士 -----
假如你想让某个文件夹下都能够履行,运用以下指令完结
chmod -R 777 solr-cloud

(2)拜访集群

地址栏输入 http://192.168.25.140:8180/solr ,能够看到Solr集群版的界面

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

3.3 SpringDataSolr衔接SolrCloud

在SolrJ中供给一个叫做CloudSolrServer的类,它是SolrServer的子类,用于衔接solrCloud

它的结构参数便是zookeeper的地址列表,别的它要求要指定defaultCollection特点(默许的 collection称号)

咱们现在修正springDataSolrDemo工程的装备文件 ,把原本的solr-server刊出,替换为CloudSolrServer .指定结构参数为地址列表,设置默许 collection称号

  




3.4分片装备

(1)创立新的 Collection 进行分片处理。

在浏览器输入以下地址,能够依照咱们的要求 创立新的Collection

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

参数:

name:将被创立的调集的姓名

numShards:调集创立时需求创立逻辑碎片的个数

replicationFactor:分片的副本数。

看到这个提示表明成功

(2)删去不必的 Collection。履行以下指令

http://192.168.2品优购电商体系布置 第1章 集群解决方案5.140:8480/solr/admin/collections?action=DELETE&name=collection1

3.5模仿集群反常测验

(1)中止第一个tomcat节点,看查询是否能正常作业 – 能!由于还有从节点

(2)中止第三个tomcat节点,看看查询能够正常作业 – 不能,由于整个一片数据全没了,无法正常作业。

(3)康复第三个tomcat节点,看看能否正常作业。康复时间会比较长,大约2分半到3分钟之间。请耐性等候。

4.Redis Cluster

4.1 Redis-Cluster简介

4.1.1 什么是Redis-Cluster

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

Redis集群树立的办法有多种,例如运用客户端分片、Twemproxy、Codis等,但从redis 3.0之后版别支撑redis-cluster集群,它是Redis官方提出的处理计划,Redis-Cluster选用无中心结构,每个节点保存数据和整个集群状况,每个节点都和其他一切节点衔接。其redis-cluster架构图如下:

客户端与 redis 节点直连,不需求中心 proxy 层.客户端不需求衔接集群一切节点衔接集群中任何一个可用节点即可。

一切的 redis 节点互相互联(PING-PONG 机制),内部运用二进制协议优化传输速度和带宽.

4.1.2散布存储机制-槽

(1)redis-cluster 把一切的物理节点映射到[0-16383]slot 上,cluster 担任保护

node<->slot<->value

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

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

SERVER1: 0-5460

SERVER2: 5461-10922

SERVER3: 10923-16383

4.1.3容错机制-投票

(1)推举进程是集群中一切master参加,假如对折以上master节点与毛病节点通讯超越(cluster-node-timeout),以为该节点毛病,主动触发毛病搬运操作. 毛病节点对应的从节点主动晋级为主节点

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

假如集群恣意master挂掉,且当时master没有slave.集群进入fail状况,也能够了解成集群的slot映射[0-16383]不完结时进入fail状况.

4.2树立Redis-Cluster

4.2.1树立要求

需求 6 台 redis 服务器。树立伪集群。

需求 6 个 redis 实例。

需求运转在不同的端口 7001-7006

4.2.2预备作业

(1)装置gcc 【此步省掉】

Redis 是 c 言语开发的。装置 redis 需求 c 言语的编译环境。假如没有 gcc 需求在线装置。

yum install gcc-c++

(2)运用yum指令装置 ruby (咱们需求运用ruby脚原本完结集群树立)【此步省掉】

yum install ruby
yum install rubygems
----- 知识点小贴士 -----
Ruby,一种简略方便的面向对象(面向对象程序设计)脚本言语,在20世纪90年代由日本人松本行弘(Yukihiro Matsumoto)开发,恪守GPL协议和Ruby License。它的创意与特性来自于 Perl、Smalltalk、Eiffel、Ada以及 Lisp 言语。由 Ruby 言语自身还发展出了JRuby(Java渠道)、IronRuby(.NET渠道)等其他渠道的 Ruby 言语替代品。Ruby的作者于1993年2月24日开端编写Ruby,直至1995年12月才正式揭露发布于fj(新闻组)。由于Perl发音与6月诞生石pearl(珍珠)相同,因而Ruby以7月诞生石ruby(红宝石)命名
RubyGems简称gems,是一个用于对 Ruby组件进行打包的 Ruby 打包体系

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

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

make

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

(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

呈现此提示表明成功,按此办法装置其他5个redis实例

(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/re触手tv直播dis-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

3.2.3装备集群

(1)修正每个redis节点的装备文件redis.conf

修正运转端口为7001 (7002 7003 …)

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

(2)发动每个redis实例

以第一个实例为例,指令如下

cd /usr/local/redis-cluster/redis-1/bin/
./redis-server redis.conf

把其他的5个也发动起来,然后检查一下是不是都发动起来了

[root@localhost ~]# ps -ef | grep redis
root 15776 15775 0 08:19 pts/1 00:00:00 ./redis-server *:7001 [cluster]
root 15810 15784 0 08:22 pts/2 00:00:00 ./redis-server *:7002 [cluster]
root 15831 15813 0 08:23 pts/3 00:00:00 ./redis-server *:7003 [cluster]
root 15852 15834 0 08:23 pts/4 00:00:00 ./redis-server *:7004 [cluster]
root 15872 15856 0 08:24 pts/5 00:00:00 ./redis-server *:7005 [cluster]
root 15891 15875 0 08:24 pts/6 00:00:00 ./redis-server *:7006 [cluster]
root 15926 15895 0 08:24 pts/7 00:00:00 grep redis

(3)上传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...

(4)运用 ruby 脚本树立集群。

进入redis源码目录中的src目录 履行下面的指令

./redis-trib.rb create --replicas 1 192.168.25.140:7001 192.168.25.140:7002 192.168.25.140:7003
192.168.25.140:7004 192.168.25.140:7005 192.168.25.140:7006

呈现下列提示信息

>>> Creating cluster
Connecting to node 192.168.25.140:7001: OK
Connecting to node 192.168.25.140:7002: OK
Connecting to node 192.168.25.140:7003: OK
Connecting to node 192.168.25.140:7004: OK
Connecting to node 192.168.25.140:7005: OK
Connecting to node 192.168.25.140:7006: OK
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
192.168.25.140:7001
192.168.25.140:7002
192.168.25.140:7003
Adding replica 192.168.25.140:7004 to 192.168.25.140:7001
Adding replica 192.168.25.140:7005 to 192.168.25.140:7002
Adding replica 192.168.25.140:7006 to 192.168.25.140:7003
M: 1800237a743c2aa918ade045a2812品优购电商体系布置 第1章 集群解决方案8448c6ce689 192.168.25.140:7001
slots:0-5460 (5461 slots) master
M: 7cb3f7d5c60bfbd3ab28800f8fd3bf6de005bf0d 192.168.25.140:7002
slots:5461-10922 (5462 slots) master
M: 436e88ec323a2f8bb08bf09f7df07cc7909fcf81 192.168.25.140:7003
slots:10923-16383 (5461 slots) master
S: c2a39a94b5f41532cd83bf6643e98fc277c2f441 192.168.25.140:7004
replicates 1800237a743c2aa918ade045a28128448c6ce689
S: b0e38d80273515c84b1a01820d8ecee04547d776 192.168.25.140:7005
replicates 7cb3f7d5c60bfbd3ab28800f8fd3bf6de005bf0d
S: 03bf6bd7e3e6eece5a02043224497c2c8e185132 192.168.25.140:7006
replicates 436e88ec323a2f8bb08bf09f7df07cc7909fcf81
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join....
>>> Performing Cluster Check (using node 192.168.25.140:7001)
M: 1800237a743c2aa918ade045a28128448c6ce689 192.168.25.140:7001
slots:0-5460 (5461 slots) master
M: 7cb3f7d5c60bfbd3ab28800f8fd3bf6de005bf0d 192.168.25.140:7002
slots:5461-10922 (5462 slots) master
M: 436e88ec323a2f8bb08bf09f7df07cc7909fcf81 192.168.25.140:7003
slots:10923-16383 (5461 slots) master
M: c2a39a94b5f41532cd83bf6643e98fc277c2f441 192.168.25.140:7004
slots: (0 slots) master
replicates 1800237a743c2aa918ade045a28128448c6ce689
M: b0e38d80273515c84b1a01820d8ecee04547d776 192.168.25.140:7005
slots: (0 slots) master
replicates 7cb3f7d5c60bfbd3ab28800f8fd3bf6de005bf0d
M: 03bf6bd7e3e6eece5a02043224497c2c8e185132 192.168.25.140:7006
slots: (0 slots) master
replicates 436e88ec323a2f8bb08bf09f7df07cc7909fcf81
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

4.3衔接Redis-Cluster

4.3.1客户端东西衔接

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值发现是能够获取的,而以其它端口进入均不能获取

4.3.2 SpringDataRedis衔接Redis集群

修正品优购工程 在pinyougou-common工程增加spring 装备文件

applicationContext-redis-cluster.xml



xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">













































增加特点文件redis-cluster-config.properties

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

4.4模仿集群反常测验

封闭节点指令

./redis-cli -p 端口 shutdown 

(1)测验封闭7001 和7004, 看看会发作什么。

(2)测验封闭7001、7002、7003 会发作什么。

请关注微信公众号
微信二维码
不容错过
Powered By Z-BlogPHP