我的编程空间,编程开发者的网络收藏夹
学习永远不晚

如何部署Redis 4.0集群环境

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

如何部署Redis 4.0集群环境

本篇内容主要讲解“如何部署Redis 4.0集群环境”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何部署Redis 4.0集群环境”吧!

实验环境:

Redis版本:4.0.9

OS:redhat 6.4三台

IP:10.10.1.129     Hostname:wjq1      Port:[7001/7002/7003]

IP:10.10.1.130     Hostname:wjq2      Port:[7004/7005/7006]

IP:10.10.1.131     Hostname:wjq3      Port:[7007/7008/7009]

一、安装redis


详细关于redis 4.0的安装可参考:CentOS 7.4安装redis 4.0详细步骤【http://blog.itpub.net/31015730/viewspace-2155307/】

下载、解压、编译、安装redis4.0.9

详细的安装过程可参考:

[root@wjq1 wjq-software]# tar -zxvf redis-4.0.9.tar.gz

[root@wjq1 redis-4.0.9]# make

cd class="lazy" data-src && make all

make[1]: Entering directory `/usr/local/redis/redis-4.0.9/class="lazy" data-src'

    CC adlist.o

In file included from adlist.c:34:

zmalloc.h:50:31: error: jemalloc/jemalloc.h: No such file or directory

zmalloc.h:55:2: error: #error "Newer version of jemalloc required"

make[1]: *** [adlist.o] Error 1

make[1]: Leaving directory `/usr/local/redis/redis-4.0.9/class="lazy" data-src'

make: *** [all] Error 2

在README.md中有这有一段话:

如何部署Redis 4.0集群环境


解释一下:

Redis在安装的时候关于内存分配器allocator, 如果有MALLOC  这个 环境变量, 会有用这个环境变量的 去建立Redis。如果没有,那么就是用默认的分配器;redis2.4版本之后,默认使用jemalloc来做内存管理,因为jemalloc被证明解决fragmentation problem(内存碎片化问题)比libc更好,而且libc 并不是默认的 分配器, 但是如果你又没有jemalloc 而只有 libc 当然 make 出错。 所以加这么一个参数。

解决方法:

[root@wjq1 class="lazy" data-src]# make MALLOC=libc

如果想用jemalloc的话,安装jemalloc即可;如果使用yum安装的话需要配置EPEL源

[root@wjq1 class="lazy" data-src]# make MALLOC=libc

[root@wjq1 redis-4.0.9]# make PREFIX=/usr/local/redis install

[root@wjq1 redis]# ll

total 8

drwxr-xr-x 2 root root 4096 Jun  5 11:32 bin

drwxr-xr-x 6 root root 4096 Jun  5 11:24 redis-4.0.9

[root@wjq1 redis-4.0.9]# cp redis.conf /etc/redis/

二、创建redis节点

 

1、首先在10.10.1.129主机上创建目录/etc/redis/redis_cluster

[root@wjq1 ~]# mkdir /etc/redis/redis_cluster

2、在redis_cluster目录下,创建名为700070017002的目录,并将 redis.conf拷贝到这三个目录中

[root@wjq1 ~]# mkdir /etc/redis/redis_cluster/{7001,7002,7003}

[root@wjq1 ~]# cp /etc/redis/redis.conf /etc/redis/redis_cluster/7001

[root@wjq1 ~]# cp /etc/redis/redis.conf /etc/redis/redis_cluster/7002

[root@wjq1 ~]# cp /etc/redis/redis.conf /etc/redis/redis_cluster/7003

3、分别修改这三个配置文件,修改的内容如下所示:

[root@wjq1 ~]# cat /etc/redis/redis_cluster/7001/redis.conf |grep -v ^# |grep -v ^$

//默认ip为127.0.0.1,需要改为其他节点机器可访问的ip,否则创建集群时无法访问对应的端口,无法创建集群

bind 10.10.1.129

//端口7000,7002,7003

port 7001

//redis后台运行

daemonize yes

//pidfile文件对应7000,7001,7002

pidfile /var/run/redis/redis_7001.pid

//logfile文件对应7000,7001,7002

logfile /var/log/redis/redis_7001.log

//rdb文件对应7000,7001,7002

dbfilename dump7001.rdb

//开启集群,把注释#去掉

cluster-enabled yes

//集群的配置,配置文件首次启动自动生成 7000,7001,7002

cluster-config-file nodes-7001.conf

//请求超时,默认15秒,可自行设置

cluster-node-timeout 15000


关于redis配置文件中参数的说明可参考:redis配置文件中各参数详解【http://blog.itpub.net/31015730/viewspace-2154818/】
 

接着在另外两台机器上
(10.10.1.130、10.10.1.131)重复以上三步,只是把目录改为7003、7004、7005、7006、7007、7008对应的配置文件也按照这个规则修改即可

三、启动各个节点的redis

节点一:

[root@wjq1 ~]# /usr/local/redis/bin/redis-server /etc/redis/redis_cluster/7001/redis.conf

[root@wjq1 ~]# /usr/local/redis/bin/redis-server /etc/redis/redis_cluster/7002/redis.conf  

[root@wjq1 ~]# /usr/local/redis/bin/redis-server /etc/redis/redis_cluster/7003/redis.conf  

[root@wjq1 ~]#

[root@wjq1 ~]# ps -ef | grep redis

root      40414      1  0 12:36 ?        00:00:00 /usr/local/redis/bin/redis-server 10.10.1.129:7001 [cluster]              

root      40419      1  0 12:36 ?        00:00:00 /usr/local/redis/bin/redis-server 10.10.1.129:7002 [cluster]              

root      40424      1  0 12:36 ?        00:00:00 /usr/local/redis/bin/redis-server 10.10.1.129:7003 [cluster]              

root      40429  38753  0 12:36 pts/0    00:00:00 grep redis

[root@wjq1 ~]#

[root@wjq1 ~]# netstat -tuplan | grep redis

tcp        0      0 10.10.1.129:17003           0.0.0.0:*                   LISTEN      40424/redis-server  

tcp        0      0 10.10.1.129:7001            0.0.0.0:*                   LISTEN      40414/redis-server  

tcp        0      0 10.10.1.129:7002            0.0.0.0:*                   LISTEN      40419/redis-server  

tcp        0      0 10.10.1.129:7003            0.0.0.0:*                   LISTEN      40424/redis-server  

tcp        0      0 10.10.1.129:17001           0.0.0.0:*                   LISTEN      40414/redis-server  

tcp        0      0 10.10.1.129:17002           0.0.0.0:*                   LISTEN      40419/redis-server  

节点二:

[root@wjq2 ~]# /usr/local/redis/bin/redis-server /etc/redis/redis_cluster/7004/redis.conf

[root@wjq2 ~]# /usr/local/redis/bin/redis-server /etc/redis/redis_cluster/7005/redis.conf

[root@wjq2 ~]# /usr/local/redis/bin/redis-server /etc/redis/redis_cluster/7006/redis.conf

[root@wjq2 ~]#

[root@wjq2 ~]# ps -ef | grep redis

root      39261      1  0 12:38 ?        00:00:00 /usr/local/redis/bin/redis-server 10.10.1.130:7004 [cluster]              

root      39266      1  0 12:38 ?        00:00:00 /usr/local/redis/bin/redis-server 10.10.1.130:7005 [cluster]              

root      39271      1  0 12:38 ?        00:00:00 /usr/local/redis/bin/redis-server 10.10.1.130:7006 [cluster]              

root      39276  38355  0 12:38 pts/0    00:00:00 grep redis

[root@wjq2 ~]#

[root@wjq2 ~]# netstat -tuplan | grep redis

tcp        0      0 10.10.1.130:17004           0.0.0.0:*                   LISTEN      39261/redis-server  

tcp        0      0 10.10.1.130:17005           0.0.0.0:*                   LISTEN      39266/redis-server  

tcp        0      0 10.10.1.130:17006           0.0.0.0:*                   LISTEN      39271/redis-server  

tcp        0      0 10.10.1.130:7004            0.0.0.0:*                   LISTEN      39261/redis-server  

tcp        0      0 10.10.1.130:7005            0.0.0.0:*                   LISTEN      39266/redis-server  

tcp        0      0 10.10.1.130:7006            0.0.0.0:*                   LISTEN      39271/redis-server  

节点三:

[root@wjq3 ~]# /usr/local/redis/bin/redis-server /etc/redis/redis_cluster/7007/redis.conf

[root@wjq3 ~]# /usr/local/redis/bin/redis-server /etc/redis/redis_cluster/7008/redis.conf

[root@wjq3 ~]# /usr/local/redis/bin/redis-server /etc/redis/redis_cluster/7009/redis.conf

[root@wjq3 ~]#

[root@wjq3 ~]# ps -ef | grep redis

root      24742      1  0 13:00 ?        00:00:00 /usr/local/redis/bin/redis-server 10.10.1.131:7007 [cluster]              

root      24758      1  0 13:01 ?        00:00:00 /usr/local/redis/bin/redis-server 10.10.1.131:7008 [cluster]              

root      24763      1  1 13:01 ?        00:00:00 /usr/local/redis/bin/redis-server 10.10.1.131:7009 [cluster]              

root      24768  23890  1 13:01 pts/0    00:00:00 grep redis

[root@wjq3 ~]#

[root@wjq3 ~]# netstat -tuplan | grep redis

tcp        0      0 10.10.1.131:17007           0.0.0.0:*                   LISTEN      24742/redis-server  

tcp        0      0 10.10.1.131:17008           0.0.0.0:*                   LISTEN      24758/redis-server  

tcp        0      0 10.10.1.131:17009           0.0.0.0:*                   LISTEN      24763/redis-server  

tcp        0      0 10.10.1.131:7007            0.0.0.0:*                   LISTEN      24742/redis-server  

tcp        0      0 10.10.1.131:7008            0.0.0.0:*                   LISTEN      24758/redis-server  

tcp        0      0 10.10.1.131:7009            0.0.0.0:*                   LISTEN      24763/redis-server

注:确保每个节点配置正确,并且能够成功启动起来

随便找个节点测试一下:

[root@wjq1 ~]# /usr/local/redis/bin/redis-cli -h 10.10.1.129 -p 7002

10.10.1.129:7002>

10.10.1.129:7002> keys *

(empty list or set)

10.10.1.129:7002>

10.10.1.129:7002> set name wjq

(error) CLUSTERDOWN Hash slot not served

连接成功了,但好像报错了???
(error) CLUSTERDOWN Hash slot not served(不提供集群的散列槽),这是什么鬼?
这是因为虽然我们配置并启动了 Redis 集群服务,但是他们暂时还并不在一个集群中,互相直接发现不了,而且还没有可存储的位置,就是所谓的slot(槽)

四、redis-trib创建集群

Redis的实例全部运行之后,还需要redis-trib.rb工具来完成集群的创建,redis-trib.rb二进制文件在Redis包主目录下的class="lazy" data-src目录中,运行该工具依赖Ruby环境和gem,因此需要提前安装。

1、安装ruby【任意一个节点安装即可】

[root@wjq1 ~]# yum install ruby

[root@wjq1 ~]# ruby -v

ruby 1.8.7 (2011-06-30 patchlevel 352) [x86_64-linux]

[root@wjq1 ~]#

[root@wjq1 ~]# gem -v

-bash: gem: command not found

使用yum安装ruby后,但是没有gem命令并且ruby的版本是1.8.7并不满足后续的要求;最新redis要求ruby版本在2.2以上,系统自带ruby大部分都低于2.2,输入以下命令,删除旧版本:

[root@wjq1 ~]# yum remove ruby

下面是完成的安装ruby2.4的步骤:

(1)首先下载ruby2.4或高版本

下载地址:https://www.ruby-lang.org/en/downloads/

(2)安装ruby之前,首选安装openssl,否则后续再安装ruby的过程中遇到非常多的问题,详细的错误在文章后边有相应的解决方法

OpenSSL官网:https://www.openssl.org/

下载OpenSSL版本1.0.2n源码:

[root@wjq1~]# wget https://www.openssl.org/source/openssl-1.0.2n.tar.gz

解压并进入openssl代码根目录:

[root@wjq1 ~]# tar zxvf openssl-1.0.2n.tar.gz  

[root@wjq1 ~]# cd openssl-1.0.2n  

配置、编译、安装:

[root@wjq1 openssl-1.0.2n]# ./config  

[root@wjq1 openssl-1.0.2n]# make  

[root@wjq1 openssl-1.0.2n]# make install 

安装完成后,默认的安装位置为/usr/local/ssl

(3)解压、编译安装ruby

[root@wjq2 ~]# mkdir -p /usr/local/ruby2.4

[root@wjq2 ~]# cd /wjq-software/

[root@wjq2 wjq-software]# ll

total 120240

drwxr-xr-x 20 root root      4096 Jun  5 15:57 openssl-1.0.2n

-rw-r--r--  1 root root   5375802 Jun  5 15:51 openssl-1.0.2n.tar.gz

-rw-r--r--  1 root root     91648 Jun  5 15:50 redis-4.0.1.gem

-rw-r--r--  1 root root  14225338 Jun  5 15:53 ruby-2.4.4.tar.gz

[root@wjq2 wjq-software]#

[root@wjq2 wjq-software]# tar -zxvf ruby-2.4.4.tar.gz

[root@wjq2 ruby-2.4.4]# ./configure -prefix=/usr/local/ruby2.4 --with-openssl-include=/usr/local/ssl/include/ --with-openssl-lib=/usr/local/ssl/lib

[root@wjq2 ruby-2.4.4]# make

[root@wjq2 ruby-2.4.4]# make install

[root@wjq2 ruby-2.4.4]# /usr/local/ruby2.4/bin/ruby -v

ruby 2.4.4p296 (2018-03-28 revision 63013) [x86_64-linux]

[root@wjq2 ruby-2.4.4]#

[root@wjq2 ruby-2.4.4]# /usr/local/ruby2.4/bin/gem -v

2.6.14.1

[root@wjq2 ruby-2.4.4]# vim ~/.bash_profile

RUBY_PATH=/usr/local/ruby2.4/bin

PATH=$PATH:$HOME/bin:/usr/local/mongdb/bin:$RUBY_PATH

2、使用gem安装redis安装redis的接口

[root@wjq2 ~]# gem install redis

##由于源的原因,可能下载失败,就手动下载下来安装

下载地址:https://rubygems.org/gems/redis/versions/

[root@wjq2 ~]# gem install /wjq-software/redis-4.0.1.gem

Successfully installed redis-4.0.1

Parsing documentation for redis-4.0.1

Installing ri documentation for redis-4.0.1

Done installing documentation for redis after 0 seconds

WARNING:  Unable to pull data from 'https://rubygems.org/': timed out (https://api.rubygems.org/specs.4.8.gz)

1 gem installed

3、开始创建集群,这才是真正的集群

Redis 官方提供了 redis-trib.rb 这个工具,就在解压目录的 class="lazy" data-src 目录中

简单解释一下这个命令:调用 ruby 命令来进行创建集群:

--replicas 1 表示主从复制比例为 1:1,即一个主节点对应一个从节点;然后,默认给我们分配好了每个主节点和对应从节点服务,以及 solt 的大小,因为在 Redis 集群中有且仅有 16383 个 solt ,默认情况会给我们平均分配,当然你可以指定,后续的增减节点也可以重新分配。

[root@wjq2 ~]# /usr/local/redis/redis-4.0.9/class="lazy" data-src/redis-trib.rb create --replicas 1 \

> 10.10.1.129:7001 10.10.1.129:7002 10.10.1.129:7003 \

> 10.10.1.130:7004 10.10.1.130:7005 10.10.1.130:7006 \

> 10.10.1.131:7007 10.10.1.131:7008 10.10.1.131:7009

>>> Creating cluster

>>> Performing hash slots allocation on 9 nodes...

Using 4 masters:

10.10.1.129:7001

10.10.1.130:7004

10.10.1.131:7007

10.10.1.129:7002

Adding replica 10.10.1.131:7008 to 10.10.1.129:7001

Adding replica 10.10.1.129:7003 to 10.10.1.130:7004

Adding replica 10.10.1.130:7006 to 10.10.1.131:7007

Adding replica 10.10.1.131:7009 to 10.10.1.129:7002

Adding replica 10.10.1.130:7005 to 10.10.1.129:7001

M: 7a047cfaae70c30d0d7e1a5d9854eb7f11afe957 10.10.1.129:7001

   slots:0-4095 (4096 slots) master

M: 924d61969343b5cc2200bd3a2277e815dc76048c 10.10.1.129:7002

   slots:12288-16383 (4096 slots) master

S: b9ba251f575b5396da4bea307e25a98d85b3c504 10.10.1.129:7003

   replicates a4a5de0be9bb5704eec17cbe0223076eb38fc4a4

M: a4a5de0be9bb5704eec17cbe0223076eb38fc4a4 10.10.1.130:7004

   slots:4096-8191 (4096 slots) master

S: bdc2f6b254459a6a6d038d93e5a3d3a67fe3e936 10.10.1.130:7005

   replicates 7a047cfaae70c30d0d7e1a5d9854eb7f11afe957

S: 4ae20400d02e57e274f9b9f29d4ba120aa2b574c 10.10.1.130:7006

   replicates 2b0f974e151cd798f474107ac68a47e188cc88a2

M: 2b0f974e151cd798f474107ac68a47e188cc88a2 10.10.1.131:7007

   slots:8192-12287 (4096 slots) master

S: b240d86fdf6abc73df059baf64b930387664da15 10.10.1.131:7008

   replicates 7a047cfaae70c30d0d7e1a5d9854eb7f11afe957

S: 5b7989d5370aef41679e92a6bd34c30ac3be3581 10.10.1.131:7009

   replicates 924d61969343b5cc2200bd3a2277e815dc76048c

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 10.10.1.129:7001)

M: 7a047cfaae70c30d0d7e1a5d9854eb7f11afe957 10.10.1.129:7001

   slots:0-4095 (4096 slots) master

   2 additional replica(s)

S: 4ae20400d02e57e274f9b9f29d4ba120aa2b574c 10.10.1.130:7006

   slots: (0 slots) slave

   replicates 2b0f974e151cd798f474107ac68a47e188cc88a2

M: 924d61969343b5cc2200bd3a2277e815dc76048c 10.10.1.129:7002

   slots:12288-16383 (4096 slots) master

   1 additional replica(s)

M: 2b0f974e151cd798f474107ac68a47e188cc88a2 10.10.1.131:7007

   slots:8192-12287 (4096 slots) master

   1 additional replica(s)

S: 5b7989d5370aef41679e92a6bd34c30ac3be3581 10.10.1.131:7009

   slots: (0 slots) slave

   replicates 924d61969343b5cc2200bd3a2277e815dc76048c

S: b9ba251f575b5396da4bea307e25a98d85b3c504 10.10.1.129:7003

   slots: (0 slots) slave

   replicates a4a5de0be9bb5704eec17cbe0223076eb38fc4a4

S: b240d86fdf6abc73df059baf64b930387664da15 10.10.1.131:7008

   slots: (0 slots) slave

   replicates 7a047cfaae70c30d0d7e1a5d9854eb7f11afe957

S: bdc2f6b254459a6a6d038d93e5a3d3a67fe3e936 10.10.1.130:7005

   slots: (0 slots) slave

   replicates 7a047cfaae70c30d0d7e1a5d9854eb7f11afe957

M: a4a5de0be9bb5704eec17cbe0223076eb38fc4a4 10.10.1.130:7004

   slots:4096-8191 (4096 slots) master

   1 additional replica(s)

[OK] All nodes agree about slots configuration.

>>> Check for open slots...

>>> Check slots coverage...

[OK] All 16384 slots covered.

出现上述的输出则代表集群搭建成功啦!!!

说明:

M: 7a047cfaae70c30d0d7e1a5d9854eb7f11afe957 为主节点id

S: b240d86fdf6abc73df059baf64b930387664da15 为从节点的id

目前来看,7001、7002、7004、7007 为主节点,7003、7005、7008、7009 为从节点,并向你确认是否同意这么配置。输入 yes 后,会开始集群创建。

五、集群验证

1、随意登录一个节点,查看集群的信息和节点的信息

加参数 -C 可连接到集群,因为 redis.conf 将 bind 改为了ip地址,所以 -h 参数不可以省略,-p 参数为端口号

[root@wjq2 ~]# /usr/local/redis/bin/redis-cli -h 10.10.1.130 -p 7005 -c

10.10.1.130:7005>

10.10.1.130:7005> cluster info

cluster_state:ok                 #集群状态

cluster_slots_assigned:16384     #被分配的槽位数

cluster_slots_ok:16384           #正确分配的槽位

cluster_slots_pfail:0

cluster_slots_fail:0

cluster_known_nodes:9            #集群节点数

cluster_size:4

cluster_current_epoch:9

cluster_my_epoch:1

cluster_stats_messages_ping_sent:215

cluster_stats_messages_pong_sent:225

cluster_stats_messages_meet_sent:5

cluster_stats_messages_sent:445

cluster_stats_messages_ping_received:222

cluster_stats_messages_pong_received:220

cluster_stats_messages_meet_received:3

cluster_stats_messages_received:445

10.10.1.130:7005>

10.10.1.130:7005> cluster nodes

4ae20400d02e57e274f9b9f29d4ba120aa2b574c 10.10.1.130:7006@17006 slave 2b0f974e151cd798f474107ac68a47e188cc88a2 0 1528186867658 7 connected

924d61969343b5cc2200bd3a2277e815dc76048c 10.10.1.129:7002@17002 master - 0 1528186865000 2 connected 12288-16383

b240d86fdf6abc73df059baf64b930387664da15 10.10.1.131:7008@17008 slave 7a047cfaae70c30d0d7e1a5d9854eb7f11afe957 0 1528186865643 8 connected

7a047cfaae70c30d0d7e1a5d9854eb7f11afe957 10.10.1.129:7001@17001 master - 0 1528186862612 1 connected 0-4095

bdc2f6b254459a6a6d038d93e5a3d3a67fe3e936 10.10.1.130:7005@17005 myself,slave 7a047cfaae70c30d0d7e1a5d9854eb7f11afe957 0 1528186863000 5 connected

b9ba251f575b5396da4bea307e25a98d85b3c504 10.10.1.129:7003@17003 slave a4a5de0be9bb5704eec17cbe0223076eb38fc4a4 0 1528186865000 4 connected

a4a5de0be9bb5704eec17cbe0223076eb38fc4a4 10.10.1.130:7004@17004 master - 0 1528186866650 4 connected 4096-8191

5b7989d5370aef41679e92a6bd34c30ac3be3581 10.10.1.131:7009@17009 slave 924d61969343b5cc2200bd3a2277e815dc76048c 0 1528186866000 9 connected

2b0f974e151cd798f474107ac68a47e188cc88a2 10.10.1.131:7007@17007 master - 0 1528186864631 7 connected 8192-12287

10.10.1.130:7005>

2、在其中的一个节点插入一个key

10.10.1.130:7005> keys *

(empty list or set)

10.10.1.130:7005>

10.10.1.130:7005> set name wjq

-> Redirected to slot [5798] located at 10.10.1.130:7004

OK

10.10.1.130:7004> get name

"wjq"

在其他的节点验证是否成功

[root@wjq3 ~]# /usr/local/redis/bin/redis-cli -h 10.10.1.131 -p 7009 -c

10.10.1.131:7009> get name

-> Redirected to slot [5798] located at 10.10.1.130:7004

"wjq"

10.10.1.130:7004>

六、小结

redis cluster在设计的时候,就考虑到了去中心化、去中间件,也就是说,集群中的每个节点都是平等关系,都是对等的,每个节点都保存各自的数据和整个集群的状态。每个节点都和其他所有节点连接,而且这些连接保持活跃,这样就保证了我们只需要连接集群中的任意一个节点,就可以获取到其他节点的数据。

Redis 集群没有并使用传统的一致性哈希来分配数据,而是采用另外一种叫做哈希槽 (hash slot)的方式来分配的。redis cluster 默认分配了 16384 个 slot,当我们 set 一个 key 时,会用CRC16算法来取模得到所属的 slot,然后将这个 key 分到哈希槽区间的节点上,具体算法就是:CRC16(key) % 16384。所以我们在测试的时候看到 set 和 get 的时候,直接跳转到了7000端口的节点。

Redis 集群会把数据存在一个 master 节点,然后在这个 master 和其对应的 salve 之间进行数据同步。当读取数据时,也根据一致性哈希算法到对应的 master 节点获取数据。只有当一个 master 挂掉之后,才会启动一个对应的 salve 节点,充当 master 。

需要注意的是:必须要3个或以上的主节点,否则在创建集群时会失败,并且当存活的主节点数小于总节点数的一半时,整个集群就无法提供服务了。

 

但是在搭建的过程中遇到一些问题,下面是问题的处理方法:

搭建过程中遇到的问题总结:

[root@wjq1 ~]# gem install redis

#由于源的原因,可能下载失败,就手动下载下来安装

[root@wjq2 ~]# gem install /wjq-software/redis-4.0.1.gem

ERROR:  While executing gem ... (Gem::Exception)

    Unable to require openssl, install OpenSSL and rebuild ruby (preferred) or use non-HTTPS sources

原因
缺少openssl,需要安装openssl包,但是之前我已经安装一个openssl-1.0.2n.tar.gz

解决方法:

[root@wjq1 ruby-2.4.4]# cd ./ext/openssl/

[root@wjq1 openssl]# ruby extconf.rb

checking for t_open() in -lnsl... no

checking for socket() in -lsocket... no

checking for openssl/ssl.h... no

提示没有找到ssl.h, 因为出现了错误:openssl/ssl.h:没有那个文件,接着按照下面的方法执行

[root@wjq1 openssl]# ruby extconf.rb --with-openssl-include=/usr/local/ssl/include/ --with-openssl-lib=/usr/local/ssl/lib         

checking for t_open() in -lnsl... no

checking for socket() in -lsocket... no

checking for openssl/ssl.h... yes

checking for OpenSSL version is 0.9.8 or later... yes

.....

checking for SSL_CTX_set_min_proto_version in openssl/ssl.h... no

checking for SSL_CTX_get_security_level()... no

checking for X509_get0_notBefore()... no

checking for SSL_SESSION_get_protocol_version()... no

creating extconf.h

creating Makefile

接下来并且将ruby 源码目录下的include目录软链接到 / 目录下:

[root@wjq1 openssl]# ln -s /wjq-software/ruby-2.4.4/include/ /        

[root@wjq1 openssl]# ll /

lrwxrwxrwx    1 root root    33 Jun  5 15:08 include -> /wjq-software/ruby-2.4.4/include/

接着再执行make,如果在配置openssl时没有-fPIC参数时就会出现如下错误

[root@wjq1 openssl]#  make

compiling openssl_missing.c

compiling ossl.c

compiling ossl_asn1.c

.....

compiling ossl_x509revoked.c

compiling ossl_x509store.c

linking shared-object openssl.so

/usr/bin/ld: /usr/local/ssl/lib/libssl.a(s3_meth.o): relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC

/usr/local/ssl/lib/libssl.a: could not read symbols: Bad value

collect2: ld returned 1 exit status

make: *** [openssl.so] Error 1

提示重新试过编译openssl时带上-fPIC参数 。于是重新编译openssl,当出现该错误的时候,就需要重新编译openssl,在编译的时候要加上-fPIC参数,然后再次执行即可

[root@wjq1 openssl]# make

compiling openssl_missing.c

compiling ossl.c

compiling ossl_asn1.c

.....

compiling ossl_x509store.c

linking shared-object openssl.so

[root@wjq1 openssl]# make install

/usr/bin/install -c -m 0755 openssl.so /usr/local/lib/ruby/site_ruby/2.4.0/x86_64-linux

installing default openssl libraries

安装成功,回过头来,这时候我们已经把配置集群遇到的各种问题已经解决好了,再次使用gem install 安装 ruby redis 接口:

[root@wjq1 ~]# gem install /wjq-software/redis-4.0.1.gem

Successfully installed redis-4.0.1

Parsing documentation for redis-4.0.1

Installing ri documentation for redis-4.0.1

Done installing documentation for redis after 0 seconds

WARNING:  Unable to pull data from 'https://rubygems.org/': timed out (https://api.rubygems.org/specs.4.8.gz)

1 gem installed

到此,相信大家对“如何部署Redis 4.0集群环境”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

如何部署Redis 4.0集群环境

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Windows环境部署Redis集群

一、准备文件 1.下载Redis for windows 的最新版本下载地址:https://github.com/MSOpenTech/redis/releases 安装到 c:Redis 目录下(Redis-x64-3.2.100.ms
2022-06-04

k8s如何部署redis集群

这篇文章主要讲解了“k8s如何部署redis集群”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“k8s如何部署redis集群”吧!redis集群搭建1.1使用redis-cli创建集群# 查看
2023-07-05

Linux环境下部署Consul集群

目录1.Consul概念1.1什么是Consul?1.2Consul的特点1.3Consul架构1.4Consul的应用场景包括服务发现、服务隔离与服务配置2.Consul在linux上的集群部署2.1前期准备2.2集群部署1.Consul
2022-06-05

k8s中如何部署redis集群

在Kubernetes中部署Redis集群通常可以通过以下步骤进行:创建Redis的ConfigMap:在Kubernetes中,可以使用ConfigMap来存储Redis的配置文件。可以通过以下命令创建一个ConfigMap:kubect
k8s中如何部署redis集群
2024-04-09

Linux环境下怎么部署Consul集群

这篇文章主要讲解了“Linux环境下怎么部署Consul集群”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux环境下怎么部署Consul集群”吧!1.Consul概念1.1什么是Con
2023-06-29

如何使用Kubernetes集群环境部署MySQL数据库

这篇文章主要讲解了“如何使用Kubernetes集群环境部署MySQL数据库”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何使用Kubernetes集群环境部署MySQL数据库”吧!1 编
2023-06-30

Hadoop集群环境部署的示例分析

这篇文章主要介绍了Hadoop集群环境部署的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1、为集群自定义一个名称:在安装集群组建之前安装程序需要对主机进行一些环境检
2023-06-02

Kubernetes容器集群管理环境怎么部署

本文小编为大家详细介绍“Kubernetes容器集群管理环境怎么部署”,内容详细,步骤清晰,细节处理妥当,希望这篇“Kubernetes容器集群管理环境怎么部署”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。通过K
2023-06-29

详细讲解Docker-Compose部署Kafka KRaft集群环境

这篇文章主要为大家介绍了Docker-Compose部署Kafka KRaft集群环境的全面详细讲解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-01-12

如何在Kubernetes上部署Redis高可用集群

如何在Kubernetes上部署Redis高可用集群,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。 Redis 介绍Redis 代表REmote DIction
2023-06-15

docker如何部署etcd集群

这篇文章主要介绍了docker如何部署etcd集群问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-03-19

编程热搜

目录