Redis Cluster集群部署搭建

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介:

在Oracle的路上走了许多年,换换感觉,尝试一下新的知识,也是一个不错的感觉。Redis,一个超轻量化的内存数据库,只做一小块数据库功能实现,却非常优秀的一个产品。今天,就分享一下安装Redis集群的过程。


搭建redis集群,建议至少需要准备3台服务器,共搭建6个节点,3个master,3个slave,并且要求3个master节点不能全部跑到同一台服务器上,保证节点安全,3台服务器的配置相同,使用redistest账号搭建,对应的端口是7000/7001/7002端口

我的集群分配如下,每个节点运行两个端口。第一列做主库,第二列做备库

1
2
3
192.8.8.136:7000  192.8.8.136:7001  
192.8.8.137:7001  192.8.8.137:7002
192.8.8.138:7002  192.8.8.138:7000

1、使用已经编译完成的安装报安装(就使用文档末尾连接的安装包即可),解压并放到/home/redistest目录下,修改对应的redis.conf文件,并复制出6份,每个节点两个redis目录
[redistest]$ ll
total 13284

1
2
3
4
5
6
drwxr-xr-x 2 redistest users 4096 Aug 9 06:44 7000
drwxr-xr-x 2 redistest users 4096 Aug 9 06:44 7001
drwxr-xr-x 2 redistest users 4096 Aug 9 06:44 7002
-rwxr-xr-x 1 redistest users 5708657 Aug 22 2016 redis-cli
-rwxr-xr-x 1 redistest users 7817132 Aug 22 2016 redis-server
-rwxr-xr-x 1 redistest users 60578 Aug 9 06:21 redis-trib.rb

2、此时有3个执行文件,redis-server/redis-cli/redis-trib.rb

3、创建7000文件夹,并将redis.conf拷贝到7000文件目录下,注意修改对应的几个关键配置项(主要就是改端口号)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
daemonize yes // redis后台运行
pidfile /var/run/redis_7000.pid // pid文件,运行多个实例时,需要指定不同的pid文件
port 7000 // 监听端口,运行多个实例时,需要指定不同的断奶口
tcp-backlog 511
tcp-keepalive 0
loglevel notice // 日志等级
logfile ./redis.log // 日志文件位置
databases 16 // 可用数据库数
appendonly yes // redis会把所接收到的每一次写操作请求都追加到appendonly.aof文件中,当redis重新启动时,会从该文件恢复出之前的状态。
appendfilename  "appendonly.aof"  // AOF文件名称
appendfsync everysec // 表示对写操作进行累积,每秒同步一次
no -appendfsync- on -rewrite yes // AOF 自动重写
auto-aof-rewrite-percentage 80-100 // 重写百分比
auto-aof-rewrite- min - size  64mb //

注:完整配置,请参考软件包中的redis.conf文件
 
4、拷贝7000文件夹,粘贴出新文件夹7001/7002,分别将7001/7002文件夹中的redis.conf文件中的7000替换成为7001/7002。

5、切换到root用户,使用yum安装ruby,yum -y install ruby rubygems,并执行gem install redis,这样便完成ruby安装,可以使用redis-trib.rb搭建集群
注:redis-trib.rb是基于ruby开发的,所以必须要安装ruby环境。

yum安装很方便,但是有的风场是无法连接外网的,也就无法使用yum。软件包中已经包含ruby rubygems的软件包,直接安装即可。

1
2
ruby的下载路径:
https://rubygems.org/gems/redis

然后通过下面命令本地安装ruby

1
2
yum -y localinstall ruby rubygems
gem install redis

6、另外两台服务器做同样的配置操作,开启该机器的2个redis节点,当完成3台机器的redis节点搭建后,可以启动redis,并使用ps查看redis运行情况情况

7、开启redis服务
进入7000目录,启动redis

1
2
3
4
5
cd 7000
../redis-server redis.conf
cd ..
cd 7001
../redis-server redis.conf
1
2
3
4
[redistest@ip-172-18-98-136 redis]$ ps -ef|grep redis
redistest   3864     1  0 13:02 ?        00:00:00 ../redis-server *:7000 [cluster]
redistest   3869     1  0 13:02 ?        00:00:00 ../redis-server *:7001 [cluster]
redistest   3888  3778  0 13:05 pts/3    00:00:00 grep redis

注意:由于redis.conf文件使用的都是相对路径,并且生成的一些文件,如aof文件是不能覆盖重复的,因此标准的开启redis-server的操作是,进入到7000/7001/7002等目录中执行,../redis-server redis.conf,这样各个实例生成的文件就在各自的目录下,互不干扰;当然如果修改redis.conf的配置文件目录,则可以实现在不同的目录下执行redis-server,这个可以灵活掌握和运用

8、redis节点搭建起来后,需要完成redis cluster集群搭建,搭建集群过程中,需要保证6个redis实例都是运行状态。
Redis是根据IP和Port的顺序,确定master和slave的,所以要排好序,再执行。
输出如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
[redistest@ip-172-18-98-136 redis]$ ./redis-trib.rb  create  --replicas 1 192.8.8.136:7000 192.8.8.137:7001 192.8.8.138:7002 192.8.8.137:7002 192.8.8.136:7001  192.8.8.138:7000 
>>> Creating cluster
>>> Performing hash slots allocation  on  6 nodes...
Using 3 masters:
192.8.8.138:7002
192.8.8.137:7001
192.8.8.136:7000
Adding replica 192.8.8.137:7002  to  192.8.8.138:7002
Adding replica 192.8.8.138:7000  to  192.8.8.137:7001
Adding replica 192.8.8.136:7001  to  192.8.8.136:7000
M: 6780f0fadd82825d04e524fd81fa710403e7152e 192.8.8.136:7000
    slots:10923-16383 (5461 slots) master
M: b00521fd8b0fae93d9e56fa6afe505ec9574c399 192.8.8.137:7001
    slots:5461-10922 (5462 slots) master
M: 6f9c383ec47461c2a86265f5db506e10397605d8 192.8.8.138:7002
    slots:0-5460 (5461 slots) master
S: fc510e5cdcc78a42ef871251736d365db5311c7f 192.8.8.137:7002
    replicates 6f9c383ec47461c2a86265f5db506e10397605d8
S: 6e4ae3851e018c08ba5cec96f113815db1931b4d 192.8.8.136:7001
    replicates 6780f0fadd82825d04e524fd81fa710403e7152e
S: 5b39cd3bd706d30b5470089f71bd29738b306d3b 192.8.8.138:7000
    replicates b00521fd8b0fae93d9e56fa6afe505ec9574c399
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.8.8.136:7000)
M: 6780f0fadd82825d04e524fd81fa710403e7152e 192.8.8.136:7000
    slots:10923-16383 (5461 slots) master
M: b00521fd8b0fae93d9e56fa6afe505ec9574c399 192.8.8.137:7001
    slots:5461-10922 (5462 slots) master
M: 6f9c383ec47461c2a86265f5db506e10397605d8 192.8.8.138:7002
    slots:0-5460 (5461 slots) master
M: fc510e5cdcc78a42ef871251736d365db5311c7f 192.8.8.137:7002
    slots: (0 slots) master
    replicates 6f9c383ec47461c2a86265f5db506e10397605d8
M: 6e4ae3851e018c08ba5cec96f113815db1931b4d 192.8.8.136:7001
    slots: (0 slots) master
    replicates 6780f0fadd82825d04e524fd81fa710403e7152e
M: 5b39cd3bd706d30b5470089f71bd29738b306d3b 192.8.8.138:7000
    slots: (0 slots) master
    replicates b00521fd8b0fae93d9e56fa6afe505ec9574c399
[OK]  All  nodes agree about slots configuration.
>>>  Check  for  open  slots...
>>>  Check  slots coverage...
[OK]  All  16384 slots covered.

其中Master的节点是:192.8.8.136:7000/192.8.8.137:7001/192.8.8.138:7002分布在不同的服务器上,该集群的搭建的实现了负载均衡,至此redis集群的搭建过程基本完毕;
 
9、检查集群状态

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
[redistest@ip-172-18-98-136 redis]$ ./redis-trib.rb  check  192.8.8.136:7000
>>> Performing Cluster  Check  (using node 192.8.8.136:7000)
M: 6780f0fadd82825d04e524fd81fa710403e7152e 192.8.8.136:7000
    slots:10923-16383 (5461 slots) master
    1 additional replica(s)
M: 6f9c383ec47461c2a86265f5db506e10397605d8 192.8.8.138:7002
    slots:0-5460 (5461 slots) master
    1 additional replica(s)
S: 6e4ae3851e018c08ba5cec96f113815db1931b4d 192.8.8.136:7001
    slots: (0 slots) slave
    replicates 6780f0fadd82825d04e524fd81fa710403e7152e
S: fc510e5cdcc78a42ef871251736d365db5311c7f 192.8.8.137:7002
    slots: (0 slots) slave
    replicates 6f9c383ec47461c2a86265f5db506e10397605d8
M: b00521fd8b0fae93d9e56fa6afe505ec9574c399 192.8.8.137:7001
    slots:5461-10922 (5462 slots) master
    1 additional replica(s)
S: 5b39cd3bd706d30b5470089f71bd29738b306d3b 192.8.8.138:7000
    slots: (0 slots) slave
    replicates b00521fd8b0fae93d9e56fa6afe505ec9574c399
[OK]  All  nodes agree about slots configuration.
>>>  Check  for  open  slots...
>>>  Check  slots coverage...
[OK]  All  16384 slots covered.
[redistest@ip-172-18-98-136 redis]$ ./redis-trib.rb info 192.8.8.136:7000
192.8.8.136:7000 (6780f0fa...) -> 0 keys | 5461 slots | 1 slaves.
192.8.8.138:7002 (6f9c383e...) -> 0 keys | 5461 slots | 1 slaves.
192.8.8.137:7001 (b00521fd...) -> 0 keys | 5462 slots | 1 slaves.
[OK] 0 keys  in  3 masters.
0.00 keys per slot  on  average.

10 、检查集群信息

1
./redis-trib.rb info 192.8.8.136:7000

11、如果在执行./redis-trib.rb create --replicas 过程中,长时间没有完成,或者遇到其他错误。如果需要重新执行配置集群的话。
需要关闭redis实例,删除7000/7001/7002目录下,除了redis.conf文件之外的全部文件,再启动redis实例,并再次执行./redis-trib.rb create即可。

12、连接数据库,查询数据

1
2
3
[root@localhost src]# redis-cli -c -p 7000
127.0.0.1:7000> cluster meet 127.0.0.1 7000
OK

至此,redis集群已经大家完成,下面我们需要完成redis随着操作系统启动,减少后续维护的成本。

13、编辑文件/home/redistest/startAll.sh,注意,要写全路径

1
2
/home/redistest/redis/redis-server /home/redistest/redis/7000/redis.conf
/home/redistest/redis/redis-server /home/redistest/redis/7001/redis.conf

命令行,加入/etc/rc.local文件夹下,需要以redistest用户启动redis 

1
su - redistest -c /home/redistest/startAll.sh


软件包过大,无法在blog中上传,已经上传到51cto下载中心,请到下载中心下载。

http://down.51cto.com/data/2334650










本文转自 hsbxxl 51CTO博客,原文链接:http://blog.51cto.com/hsbxxl/1962359,如需转载请自行联系原作者

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
7月前
|
NoSQL Java Redis
Redis进阶-Jedis以及Spring Boot操作 Redis 5.x Cluster
Redis进阶-Jedis以及Spring Boot操作 Redis 5.x Cluster
112 0
|
6月前
|
存储 运维 NoSQL
Redis Cluster集群模式部署
Redis Cluster集群模式部署
128 4
|
7月前
|
存储 监控 负载均衡
redis 集群 (主从复制 哨兵模式 cluster)
redis 集群 (主从复制 哨兵模式 cluster)
|
4月前
|
存储 NoSQL 算法
深入理解Redis分片Cluster原理
本文深入探讨了Redis Cluster的分片原理,作为Redis官方提供的高可用性和高性能解决方案,Redis Cluster通过数据分片和横向扩展能力,有效降低单个主节点的压力。
深入理解Redis分片Cluster原理
|
4月前
|
缓存 NoSQL 网络协议
【Azure Redis 缓存】Azure Redis Cluster 在增加分片数时失败分析
【Azure Redis 缓存】Azure Redis Cluster 在增加分片数时失败分析
|
4月前
|
缓存 NoSQL Redis
【Azure Redis 缓存】Windows版创建 Redis Cluster 实验 (精简版)
【Azure Redis 缓存】Windows版创建 Redis Cluster 实验 (精简版)
|
4月前
|
NoSQL Redis
Redis——单机迁移cluster集群如何快速迁移
Redis——单机迁移cluster集群如何快速迁移
153 0
|
7月前
|
存储 NoSQL Redis
docker搭建Redis Cluster集群环境
docker搭建Redis Cluster集群环境
198 1
|
7月前
|
存储 负载均衡 监控
redis 集群模式(redis cluster)介绍
redis 集群模式(redis cluster)介绍
|
7月前
|
存储 缓存 运维
软件体系结构 - 缓存技术(5)Redis Cluster
【4月更文挑战第20天】软件体系结构 - 缓存技术(5)Redis Cluster
188 10