redis演练(8) redis Cluster 集群环境安装

简介:

redis是个分布式缓存,与传统数据库最大的优势,在于它的“分布式”上。

分布式的优势:

  1. 容易实现容量的扩展

  2. 数据的均等分布

  3. 很好的高可用性


redis 和memcached是分布式缓存的两款流行方案,他们之间的对比


redis memcached
主从功能

Replication 支持

主备自动切换

本身不支持,可以通过客户端自己实现
键值一致性
哈希槽
一致性哈希
集群
服务端支持(但是beta版) unstable
由客户端实现
工具支持
提供自带的工具(客户端redis-cli,check-rdb...)
较弱
数据存储
支持
不支持,重启数据丢失

本章主要内容

安装一个三主的redis集群环境。

准备

由于本人没有接触过ruby语言,在安装之前做功课时,需要安装ruby环境等,心理上有了点小负担,担心遇到麻烦。后来,不出所料遇到了点麻烦。最后,还是安装成功了,回头想想,没有什么可担心的,无外乎失败了重装,真是年纪越大,胆子越小啊。我采用的方式,“兵来将挡,水来土掩”,有错就解决错,一步步安装。借助网络的力量,逐个把问题击破。

安装ruby环境


1.安装ruby

遇到的问题

未安装ruby

版本过低

未安装rubygem

gem源出错

请参考

http://blog.csdn.net/c77_cn/article/details/38227797

2. 编译redis cluster

https://github.com/antirez/redis/branches下载unstable版本。

1
2
编译
make
1
此时,在 /usr/local/src/redis-unstable/src  目录下生成了支持cluster的redis-server


3.建立集群环境

1
2
3
4
5
6
7
8
9
10
11
12
13
1.建立目录
cp  /usr/local/redis
mkdir  cluster- test
cd  cluster- test /
mkdir  7000
mkdir  7001
mkdir  7002
2.复制redis-server
  cp  /usr/local/src/redis-unstable/src/redis-server   /usr/local/redis/cluster-test/7001
  cp  /usr/local/src/redis-unstable/src/redis-server   /usr/local/redis/cluster-test/7000
  cp  /usr/local/src/redis-unstable/src/redis-server   /usr/local/redis/cluster-test/7002
  #集群管理工具(为了方便,将他复制到合适位置)
  cp  /usr/local/src/redis-unstable/src/redis-trib .rb  /usr/local/redis/cluster-test

3.建立3个cluster 节点对应的redis.conf文件

1
2
3
4
5
6
7
8
9
10
[root@hadoop2 cluster- test ] # vi 7000/redis.conf 
port 7000
cluster-enabled  yes
cluster-config- file  nodes.conf
cluster-node-timeout 5000
appendonly  yes
daemonize  yes
logfile  "redis7000.log"
 
#这是最简单的集群参数

其他7001/redis.conf,7002.conf文件, 仅仅port和logfile参数不同,其他一样。

此时 7000, 7001,7002目录下,只有2个文件,分别是 redis-server,redis.conf

4. 启动(分别启动3个主节点)

1
2
3
4
5
6
   cd  7000
   . /redis-server  . /redis .conf
   cd  .. /7001/
   . /redis-server  . /redis .conf
   cd  .. /7002
   . /redis-server  . /redis .conf

对应某个节点日志

26361:M 10 Sep 21:13:22.054 * No cluster configuration found, I'm 7f242cf2c7ce5d84103638c5017f2204e1509f4c
                _._
           _.-``__ ''-._
      _.-``    `.  `_.  ''-._           Redis 3.2.3 (00000000/0) 32 bit
  .-`` .-```.  ```\/    _.,_ ''-._
 (    '      ,       .-`  | `,    )     Running in cluster mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 7001
 |    `-._   `._    /     _.-'    |     PID: 26361
  `-._    `-._  `-./  _.-'    _.-'
 |`-._`-._    `-.__.-'    _.-'_.-'|
 |    `-._`-._        _.-'_.-'    |           http://redis.io
  `-._    `-._`-.__.-'_.-'    _.-'
 |`-._`-._    `-.__.-'    _.-'_.-'|
 |    `-._`-._        _.-'_.-'    |
  `-._    `-._`-.__.-'_.-'    _.-'
      `-._    `-.__.-'    _.-'
          `-._        _.-'
              `-.__.-'

26361:M 10 Sep 21:13:22.075 # Server started, Redis version 3.2.3
26361:M 10 Sep 21:13:22.075 * DB loaded from append only file: 0.000 seconds
26361:M 10 Sep 21:13:22.076 # I have keys for unassigned slot 5659. Taking responsibility for it.
26361:M 10 Sep 21:13:22.076 # I have keys for unassigned slot 9980. Taking responsibility for it.
26361:M 10 Sep 21:13:22.080 * The server is now ready to accept connections on port 7001
                           


5. 建立集群

1
  . /redis-trib .rb create  127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002

[root@hadoop2 cluster-test]# ./redis-trib.rb create  127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002
>>> Creating cluster
>>> Performing hash slots allocation on 3 nodes...
Using 3 masters:
127.0.0.1:7000
127.0.0.1:7001
127.0.0.1:7002
M: 5ad201ebdf0553690295dcd06f89f15750e73989 127.0.0.1:7000
   slots:0-5460 (5461 slots) master
M: 7f242cf2c7ce5d84103638c5017f2204e1509f4c 127.0.0.1:7001
   slots:5461-10922 (5462 slots) master
M: 8ea7b0976e4848653435e4e77af311a6ade330a8 127.0.0.1:7002
   slots:10923-16383 (5461 slots) master
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 127.0.0.1:7000)
M: 5ad201ebdf0553690295dcd06f89f15750e73989 127.0.0.1:7000
   slots:0-5460 (5461 slots) master
   0 additional replica(s)
M: 8ea7b0976e4848653435e4e77af311a6ade330a8 127.0.0.1:7002
   slots:10923-16383 (5461 slots) master
   0 additional replica(s)
M: 7f242cf2c7ce5d84103638c5017f2204e1509f4c 127.0.0.1:7001
   slots:5461-10922 (5462 slots) master
   0 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

这时候主节点日志

26536:M 10 Sep 21:25:32.360 * DB loaded from append only file: 0.000 seconds
26536:M 10 Sep 21:25:32.361 * The server is now ready to accept connections on port 7000
26536:M 10 Sep 21:27:54.651 # configEpoch set to 1 via CLUSTER SET-CONFIG-EPOCH
26536:M 10 Sep 21:27:54.660 # IP address for this node updated to 127.0.0.1
26536:M 10 Sep 21:27:59.619 # Cluster state changed: ok

6.测试

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
[root@hadoop2 cluster- test ] #  /usr/local/redis/bin/redis-cli  -c -p 7000
127.0.0.1:7000> keys *
(empty list or  set )
127.0.0.1:7000>  set  title  "cluster1"
OK
127.0.0.1:7000>  set  title1  "cluster1"
OK
127.0.0.1:7000>  set  title2  "cluster1"
-> Redirected to slot [14045] located at 127.0.0.1:7002
OK
 
127.0.0.1:7002>  set  title5  "cluster4"
-> Redirected to slot [1594] located at 127.0.0.1:7000
OK
127.0.0.1:7000>  set  title3  "cluster4"
-> Redirected to slot [9980] located at 127.0.0.1:7001
OK
127.0.0.1:7001> get title
-> Redirected to slot [2217] located at 127.0.0.1:7000
"cluster1"
127.0.0.1:7000> get title2
-> Redirected to slot [14045] located at 127.0.0.1:7002
"cluster8111"
127.0.0.1:7002> get title3
-> Redirected to slot [9980] located at 127.0.0.1:7001
"cluster4"
 
#节点间来回重定向


到了这里,环境算是搭建好了。当然,这是最简单的集群了。以后随着演练的深入,也会对集群进行深入探讨。



遇到问题

可能遇到的错误(是第二次建立集群时报错)

ERR Slot 2217 is already busy (Redis::CommandError)

解决方法: (in all nodes did FLUSHALL and then CLUSTER RESET SOFT) 


Either the node already knows other nodes

[root@hadoop2 cluster-test]# ./redis-trib.rb create  127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002
>>> Creating cluster
[ERR] Node 127.0.0.1:7000 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.

解决方法:这是因为重复设置集群。

重启集群,发现数据丢失

集群创建完成后,当关机或者关闭集群再次启动的时候,一定要在node-conf所在的目录启动各个节点,

集群才能正常连接。




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

相关文章
|
8月前
|
存储 负载均衡 NoSQL
【赵渝强老师】Redis Cluster分布式集群
Redis Cluster是Redis的分布式存储解决方案,通过哈希槽(slot)实现数据分片,支持水平扩展,具备高可用性和负载均衡能力,适用于大规模数据场景。
556 2
|
9月前
|
关系型数据库 应用服务中间件 nginx
Docker一键安装中间件(RocketMq、Nginx、MySql、Minio、Jenkins、Redis)
本系列脚本提供RocketMQ、Nginx、MySQL、MinIO、Jenkins和Redis的Docker一键安装与配置方案,适用于快速部署微服务基础环境。
|
6月前
|
NoSQL Java 网络安全
SpringBoot启动时连接Redis报错:ERR This instance has cluster support disabled - 如何解决?
通过以上步骤一般可以解决由于配置不匹配造成的连接错误。在调试问题时,一定要确保服务端和客户端的Redis配置保持同步一致。这能够确保SpringBoot应用顺利连接到正确配置的Redis服务,无论是单机模式还是集群模式。
580 5
|
存储 NoSQL 数据库
Redis 逻辑数据库与集群模式详解
Redis 是高性能内存键值数据库,广泛用于缓存与实时数据处理。本文深入解析 Redis 逻辑数据库与集群模式:逻辑数据库提供16个独立存储空间,适合小规模隔离;集群模式通过分布式架构支持高并发和大数据量,但仅支持 database 0。文章对比两者特性,讲解配置与实践注意事项,并探讨持久化及性能优化策略,助你根据需求选择最佳方案。
772 5
|
6月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
757 6
|
NoSQL 数据可视化 关系型数据库
安装 Redis
本文主要介绍了Linux系统下Redis的安装步骤,包括卸载旧版本、下载新版本、编译安装以及配置启动等详细操作,并解释了Redis默认端口6379的由来。同时,文章还简要说明了Windows环境下Redis的下载与服务安装方法。最后,推荐了几款Redis可视化管理工具,如RedisView、QuickRedis、AnotherRedisDesktopManager和RedisPlus,提供了它们的功能特点及下载链接,方便用户根据需求选择合适的工具进行数据库管理。
838 1
|
7月前
|
存储 监控 NoSQL
Redis高可用架构全解析:从主从复制到集群方案
Redis高可用确保服务持续稳定,避免单点故障导致数据丢失或业务中断。通过主从复制实现数据冗余,哨兵模式支持自动故障转移,Cluster集群则提供分布式数据分片与水平扩展,三者层层递进,保障读写分离、容灾切换与大规模数据存储,构建高性能、高可靠的Redis架构体系。
|
9月前
|
负载均衡 NoSQL Redis
【赵渝强老师】Redis的主从复制集群
Redis主从复制是指将一台Redis服务器的数据复制到其他Redis服务器,实现数据热备份、故障恢复、负载均衡及高可用架构的基础。主节点负责写操作,从节点同步数据并可提供读服务,提升并发处理能力。
273 5
|
8月前
|
存储 NoSQL 算法
Redis的集群架构与使用经验
本文介绍了Redis的集群架构与使用经验,包括主从复制、哨兵集群及Cluster分片集群的应用场景与实现原理。内容涵盖Redis主从同步机制、数据分片存储方式、事务支持及与Memcached的区别,并讨论了Redis内存用尽时的处理策略。适用于了解Redis高可用与性能优化方案。
|
11月前
|
消息中间件 NoSQL Linux
Redis的基本介绍和安装方式(包括Linux和Windows版本),以及常用命令的演示
Redis(Remote Dictionary Server)是一个高性能的开源键值存储数据库。它支持字符串、列表、散列、集合等多种数据类型,具有持久化、发布/订阅等高级功能。由于其出色的性能和广泛的使用场景,Redis在应用程序中常作为高速缓存、消息队列等用途。
1038 16