【Redis 干货领域】帮你完全搞定 Cluster 原理(实践篇)

集群的搭建

Redis 的下载、安装、启动(单实例)
下载 redis 压缩包,然后解压压缩文件, 我们统一将 Redis 下载在/opt 目录下

进入到解压缩后的 redis 文件目录(此时可以看到 Makefile 文件),编译 redis 源文件;

执行命令如下

$ cd /opt
$ wget http://download.redis.io/releases/redis-4.0.9.tar.gz
$ tar zxvf redis-4.0.9.tar.gz
$ cd redis-4.0.9
$ make
$ make install

1.把编译好的 redis 源文件安装到/usr/local/redis 目录下,如果/local 目录下没有 redis 目录,会自动新建 redis 目录;

2.然后修改该 $ ./src/redis-server redis.conf 文件->daemonize:no 改为 daemonize:yes;

3.进入/usr/local/redis/bin 目录,直接./redis-server 启动 redis(此时为前端启动 redis);

4.注意,由于 Redis 的保护模式,只绑定了本机的 127.0.0.1,从其他机器是不能访问的。所以我们需要添加本机的 ip

192.168.xxx.xxx。

1.在/bin 目录下通过./redis-server redis.conf 启动 redis(此时为后台启动)。

$ cd /opt/redis-4.0.9
$ ./src/redis-server .redis.conf

集群的规划

根据官方推荐,集群部署至少要 3 台以上的 master 节点,最好使用 3 主 3 从六个节点的模式。

配置文件
咱们准备 6 个配置文件 ,端口 7001,7002,7003,7004,7005,7006

并在 redis-cluster 目录下创建 6 个节点的配置文件。分别为:

redis-7000.conf
redis-7001.conf
redis-7002.conf
redis-7003.conf
redis-7004.conf
redis-7005.conf

后面的 7000,7001 等是 redis 启动的端口号。接下来编辑文件的内容:

#该集群阶段的端口
port 7000
#为每一个集群节点指定一个pid_file
pidfile /var/run/redis_7000.pid
#在bind指令后添加本机的ip
bind 127.0.0.1 149.28.37.147
#找到Cluster配置的代码段,使得Redis支持集群
cluster-enabled yes
#每一个集群节点都有一个配置文件,这个文件是不能手动编辑的。确保每一个集群节点的配置文件不通
cluster-config-file nodes-7000.conf
#集群节点的超时时间,单位:ms,超时后集群会认为该节点失败
cluster-node-timeout 5000
#最后将appendonly改成yes
appendonly yes

启动 redis 节点

挨个启动节点

看以下启动情况

首先我们创建 Redis 的配置文件目录,如下:

$ cd /opt
$ mkdir redis-cluster

这样一个节点的配置就完成,其他的 5 个节点也做同样的配置。并将 6 个节点的 Redis 实例启动,使用这 6 个节点创建集群:

$ nohup /opt/redis-4.0.9/src/redis-server /opt/redis-cluster/redis-7000.conf &
$ nohup /opt/redis-4.0.9/src/redis-server /opt/redis-cluster/redis-7001.conf &
$ nohup /opt/redis-4.0.9/src/redis-server /opt/redis-cluster/redis-7002.conf &
$ nohup /opt/redis-4.0.9/src/redis-server /opt/redis-cluster/redis-7003.conf &
$ nohup /opt/redis-4.0.9/src/redis-server /opt/redis-cluster/redis-7004.conf &
$ nohup /opt/redis-4.0.9/src/redis-server /opt/redis-cluster/redis-7005.conf &

要搭建集群的话,需要使用一个工具(脚本文件),这个工具在 redis 解压文件的源代码里。因为这个工具是一个 ruby 脚本文件,所以这个工具的运行需要 ruby 的运行环境,就相当于 java 语言的运行需要在 jvm 上。所以需要安装 ruby,指令如下:

yum install ruby

然后需要把 ruby 相关的包安装到服务器,我这里用的是 redis-3.0.0.gem,大家需要注意的是:redis 的版本和 ruby 包的版本最好保持一致。

将 Ruby 包安装到服务器:需要先下载再安装,安装命令如下:

gem install redis-3.0.0.gem

上一步中已经把 ruby 工具所需要的运行环境和 ruby 包安装好了,接下来把这个 ruby 脚本工具复制到 usr/local/redis-cluster 目录下。

那么这个 ruby 脚本工具在哪里呢?在 redis 解压文件的源代码里,即 redis/src 目录下的 redis-trib.rb 文件。

将该 ruby 工具(redis-trib.rb)复制到 redis-cluster 目录下,指令如下:

cp redis-trib.rb /usr/local/redis-cluster

然后使用该脚本文件搭建集群,指令如下:

注意:此处大家应该根据自己的服务器 ip 输入对应的 ip 地址!

$ /opt/redis-4.0.9/src/redis-trib.rb create --replicas 1 149.28.37.147:7000 149.28.37.147:7001 149.28.37.147:7002 149.28.37.147:7003 149.28.37.147:7004 149.28.37.147:7005

1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006 --cluste r-replicas 1

--replicas 1 表示我们希望为集群中的每个主节点创建一个从节点。

执行命令后会显示:

>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
>>> Using 3 masters:
>>> 149.28.37.147:7000
>>> 149.28.37.147:7001
>>> 149.28.37.147:7002

---------------------------------------------
# 执行成功结果如下
# 我们可以看到 7001,7002,7003 成为了 master 节点,
# 分别占用了 slot [0-5460],[5461-10922],[10923-16383]
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
--------------------------------------------

>>> Adding replica 149.28.37.147:7004 to 149.28.37.147:7000
>>> Adding replica 149.28.37.147:7005 to 149.28.37.147:7001
>>> Adding replica 149.28.37.147:7003 to 149.28.37.147:7002
>>> Trying to optimize slaves allocation for anti-affinity
>>> [WARNING] Some slaves are in the same host as their master
>>> M: 65625091304b0fa2dd75a00f62b6aceac1701094 149.28.37.147:7000
>>> slots:0-5460 (5461 slots) master
>>> M: 4da569bf8402e4f75ab6e0fe7076919c22e3f900 149.28.37.147:7001
>>> slots:5461-10922 (5462 slots) master
>>> M: b977680e24f23f8fec96876d9014803ca752e2e2 149.28.37.147:7002
>>> slots:10923-16383 (5461 slots) master
>>> S: 7183e47a64bca23157140229352455d1a1407dc2 149.28.37.147:7003
>>> replicates b977680e24f23f8fec96876d9014803ca752e2e2
>>> S: b2f916a643fefef1d43dbd1ef5d22f72c0ee43d6 149.28.37.147:7004
>>> replicates 65625091304b0fa2dd75a00f62b6aceac1701094
>>> S: e362d9aae5fe3e9c343d266a5ab952272e0e37b0 149.28.37.147:7005
>>> replicates 4da569bf8402e4f75ab6e0fe7076919c22e3f900
>>> 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 149.28.37.147:7000)
>>> M: 65625091304b0fa2dd75a00f62b6aceac1701094 149.28.37.147:7000
>>> slots:0-5460 (5461 slots) master
>>> 1 additional replica(s)
>>> M: b977680e24f23f8fec96876d9014803ca752e2e2 149.28.37.147:7002
>>> slots:10923-16383 (5461 slots) master
>>> 1 additional replica(s)
>>> S: e362d9aae5fe3e9c343d266a5ab952272e0e37b0 149.28.37.147:7005
>>> slots: (0 slots) slave
>>> replicates 4da569bf8402e4f75ab6e0fe7076919c22e3f900
>>> S: b2f916a643fefef1d43dbd1ef5d22f72c0ee43d6 149.28.37.147:7004
>>> slots: (0 slots) slave
>>> replicates 65625091304b0fa2dd75a00f62b6aceac1701094
>>> M: 4da569bf8402e4f75ab6e0fe7076919c22e3f900 149.28.37.147:7001
>>> slots:5461-10922 (5462 slots) master
>>> 1 additional replica(s)
>>> S: 7183e47a64bca23157140229352455d1a1407dc2 149.28.37.147:7003
>>> slots: (0 slots) slave
>>> replicates b977680e24f23f8fec96876d9014803ca752e2e2
>>> [OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
>>> [OK] All 16384 slots covered.
>>> 集群搭建完毕。我们可以使用Spring-Boot非常方便的去访问Redis集群了。

数据验证

注意 集群模式下要带参数 -c,表示集群,不然节点之间是无法自动跳转的!如下图可以看到,存储的数据(key-value)是均匀分配到不同的节点的:

[root@localhost redis-5.0.5]# redis-cli -p 7100 -c

设置 k1 v1

127.0.0.1:7001> set k1 v1
-> Redirected to slot [12706] located at 127.0.0.1:7003
OK

这可以看到集群的特点:把数据存到计算得出的 slot,这里还自动跳到了 7003

127.0.0.1:7003> get k1
"v1"

我们还回到 7001 获取 k1 试试

[root@localhost redis-5.0.5]# redis-cli -p 7001 -c
127.0.0.1:7001> get k1
-> Redirected to slot [12706] located at 127.0.0.1:7003
"v1"

我们可以看到重定向的过程

127.0.0.1:7003>

Redis 集群基本命令:

1.查看当前集群信息

cluster info

2.查看集群里有多少个节点

cluster nodes

码字不易 请大家给我点赞+关注+评论!一条龙

如果想要获取学习资料,可在下方获取联系方式;
或者想要一起讨论问题的也加入技术交流Q群

添加助手小姐姐的 VX:  Mlzg5201314zz 
或者加入技术交流Q群:614478470
记得备注[简书]
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,390评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,821评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,632评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,170评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,033评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,098评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,511评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,204评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,479评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,572评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,341评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,893评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,171评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,486评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,676评论 2 335

推荐阅读更多精彩内容