redis(9)集群搭建
一、搭建流程
以下我们将构建这样一个redis集群:三个主节点,分别备有一个从节点,主节点之间相互通信,如果主节点挂掉,从节点将被提升为主节点。

redis集群至少需要3个redis实例
那么我们需要做以下几件事:
1)编译一个redis-server
2)创建6个redis.conf配置文件
3)启动6个redis实例
4)redis-trib.rb集群工具创建集群
其实redis的集群实现有难度,但是只是内部有难度,对于黑盒子操作的我们来说要实现redis集群只是需要创建多个单实例,然后通过集群工具创建各个单实例的集群关系,所以显得很简单。
二、创建集群
1)编译一个redis-server
$ wget http://download.redis.io/releases/redis-4.0.10.tar.gz
$ tar xzf redis-4.0.10.tar.gz
$ cd redis-4.0.10
$ make
这里不详细说明了,详细可以参考:https://www.cnblogs.com/lay2017/p/9248454.html
2)创建6个redis.conf配置文件
我们先创建以下文件夹目录:
mkdir redis-cluster
cd redis-cluster
mkdir 7000 7001 7002 7003 7004 7005
然后我们将第一步编译出来的src/redis-server拷贝一份到redis-cluster下,然后把redis.conf拷贝6份分别放入到上面创建的6个文件夹内。
分别修改每个redis.conf的内容:
port 7000 # 端口
cluster-enabled yes # 开启集群
cluster-config-file nodes.conf # 集群节点文件
cluster-node-timeout 5000 # 超时时间
appendonly yes # AOF日志开启
daemonize yes # 守护进程方式运行
这里的port分别设置为:7000、7001、7002、7003、7004、7005
3)启动6个redis实例
./redis-server 7000/redis.conf
分别执行启动命令,加载redis.conf配置文件
查看一下启动进程:
ps -ef | grep redis
显示如下:
501 37933 1 0 9:10PM ?? 0:03.85 ../redis-server 127.0.0.1:7000 [cluster]
501 37941 1 0 9:11PM ?? 0:03.82 ../redis-server 127.0.0.1:7001 [cluster]
501 37949 1 0 9:11PM ?? 0:03.82 ../redis-server 127.0.0.1:7002 [cluster]
501 37968 1 0 9:11PM ?? 0:03.75 ../redis-server 127.0.0.1:7003 [cluster]
501 37977 1 0 9:11PM ?? 0:03.76 ../redis-server 127.0.0.1:7004 [cluster]
501 37988 1 0 9:12PM ?? 0:03.76 ../redis-server 127.0.0.1:7005 [cluster]
则表示每个实例已经启动成功
4)redis-trib.rb创建集群
在src目录下自带了redis-trib.rb可以用于创建集群
但是在使用之前需要安装ruby(redis-trib.rb是用ruby写的),以及redis和ruby连接
yum -y install ruby ruby-devel rubygems rpm-build
gem install redis
然后采用redis-trib.rb创建集群(这里的 --replicas 1 表示每个主节点分配一个从节点)
redis-trib.rb create --replicas 1 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006
如果你最终看到:
[OK] All 16384 slots covered
说明集群创建完成,节点覆盖了所有的哈希槽
我们可以用命令检查一下目前的集群情况
./redis-trib.rb check 127.0.0.1:7000
输出内容如下:
>>> Performing Cluster Check (using node 127.0.0.1:7000)
M: ca34d6741d5b3f5bfc7941c652a09961fddb6d0a 127.0.0.1:7000
slots:0-5460 (5461 slots) master
1 additional replica(s)
S: e04be0db2d11fb98133c163bd97426e0f3f2f540 127.0.0.1:7003
slots: (0 slots) slave
replicates ca34d6741d5b3f5bfc7941c652a09961fddb6d0a
M: 048c96b56c043aab8d297b147cfe7068c74498c9 127.0.0.1:7002
slots:10923-16383 (5461 slots) master
1 additional replica(s)
M: b711233443a7a097511fc1681403f2d83b5c8773 127.0.0.1:7001
slots:5461-10922 (5462 slots) master
1 additional replica(s)
S: cb6ee10ec8a45f68efddc84b4acaf01fbd244627 127.0.0.1:7005
slots: (0 slots) slave
replicates 048c96b56c043aab8d297b147cfe7068c74498c9
S: b630796514a48438d177fbe8f89610f1afe9b41f 127.0.0.1:7004
slots: (0 slots) slave
replicates b711233443a7a097511fc1681403f2d83b5c8773
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
我们看到:
master主节点是:7000、7001、7002,7003是7000的从节点、7004是7001的从节点、7005是7002的从节点;
7000分配的哈希槽[0,5460],7001分配的哈希槽[5461,10922],7002分配的哈希槽[10923,16383]
5)测试
5-1、测试数据共享
我们使用redis-cli命令连接7000,并设置一个值:
lay-macdeAir:redis-cluster lay$ ./redis-cli -c -p 7000
127.0.0.1:7000> set name lay
-> Redirected to slot [5798] located at 127.0.0.1:7001
OK
这里redirected to slot [5798] ... 7001,表示name 这个key计算出的哈希槽,落在[5461, 10922] 范围内,所以重定向到了7001这个节点。
我们连接7001,执行获取这个值:
lay-macdeAir:redis-cluster lay$ ./redis-cli -c -p 7001
127.0.0.1:7001> get name
"lay"
我们发现我们从7001中获取7000设置的值,集群的数据共享成功。
5-2、测试主从切换
当前有6个实例
501 37933 1 0 9:10PM ?? 0:03.85 ../redis-server 127.0.0.1:7000 [cluster]
501 37941 1 0 9:11PM ?? 0:03.82 ../redis-server 127.0.0.1:7001 [cluster]
501 37949 1 0 9:11PM ?? 0:03.82 ../redis-server 127.0.0.1:7002 [cluster]
501 37968 1 0 9:11PM ?? 0:03.75 ../redis-server 127.0.0.1:7003 [cluster]
501 37977 1 0 9:11PM ?? 0:03.76 ../redis-server 127.0.0.1:7004 [cluster]
501 37988 1 0 9:12PM ?? 0:03.76 ../redis-server 127.0.0.1:7005 [cluster]
我们先杀死7000
lay-macdeAir:redis-cluster lay$ kill -9 37933
lay-macdeAir:redis-cluster lay$ ps -ef|grep redis
501 37941 1 0 9:11PM ?? 0:05.08 ../redis-server 127.0.0.1:7001 [cluster]
501 37949 1 0 9:11PM ?? 0:05.08 ../redis-server 127.0.0.1:7002 [cluster]
501 37968 1 0 9:11PM ?? 0:05.02 ../redis-server 127.0.0.1:7003 [cluster]
501 37977 1 0 9:11PM ?? 0:05.00 ../redis-server 127.0.0.1:7004 [cluster]
501 37988 1 0 9:12PM ?? 0:05.01 ../redis-server 127.0.0.1:7005 [cluster]
检查现在集群情况
lay-macdeAir:redis-cluster lay$ ./redis-trib.rb check 127.0.0.1:7001
>>> Performing Cluster Check (using node 127.0.0.1:7001)
M: b711233443a7a097511fc1681403f2d83b5c8773 127.0.0.1:7001
slots:5461-10922 (5462 slots) master
1 additional replica(s)
S: cb6ee10ec8a45f68efddc84b4acaf01fbd244627 127.0.0.1:7005
slots: (0 slots) slave
replicates 048c96b56c043aab8d297b147cfe7068c74498c9
M: 048c96b56c043aab8d297b147cfe7068c74498c9 127.0.0.1:7002
slots:10923-16383 (5461 slots) master
1 additional replica(s)
M: e04be0db2d11fb98133c163bd97426e0f3f2f540 127.0.0.1:7003
slots:0-5460 (5461 slots) master
0 additional replica(s)
S: b630796514a48438d177fbe8f89610f1afe9b41f 127.0.0.1:7004
slots: (0 slots) slave
replicates b711233443a7a097511fc1681403f2d83b5c8773
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
我们看到7000挂掉以后它的从节点7003提升为了主节点,并且所有16384个哈希槽都覆盖了
如果要恢复7000,我们只需要把7000这个实例重新启动即可,redis的从节点会自动重新连接,并复制主节点数据。关于redis主从复制可以参考:https://redis.io/topics/replication
注意:redis不是强一致性,主从节点之间的数据可能会不一致
以上我们简单实现了redis-cluster模块的集群效果,更多功能如:添加、删除节点、移动哈希槽等参考入门文档:https://redis.io/topics/cluster-tutorial
以及官方给了一份明细文档详细讲解一些集群的内部实现:https://redis.io/topics/cluster-spec
redis(9)集群搭建的更多相关文章
- Redis本地集群搭建(5版本以上)
Redis本地集群搭建(5版本以上) 2019年11月3日10:05:48 步骤 1.下载安装Redis的安装包 2.复制5份,一共6份Redis的解压安装版,修改每个Redis节点的端口并开启节点 ...
- redis的集群搭建(很详细很详细)
说在前面的话 之前有一节说了redis单机版的搭建和使用jedis管理redis单机版和集群版, 本节主要讲一下redis的集群搭建. 跳转到jedis管理redis的使用 认识redis集群 首先我 ...
- linux环境下redis安装(redis伪集群搭建)
redis在linux环境下搭建 1.创建目录 [root@192 local]# mkdir /usr/local/redis 2.下载redis,并解压 [root@192 local]# wge ...
- Redis Cluster集群搭建与配置
Redis Cluster是一种服务器sharding分片技术,关于Redis的集群方案应该怎么做,请参考我的另一篇博客http://www.cnblogs.com/xckk/p/6134655.ht ...
- Redis Cluster集群搭建与应用
1.redis-cluster设计 Redis集群搭建的方式有多种,例如使用zookeeper,但从redis 3.0之后版本支持redis-cluster集群,redis-cluster采用无中心结 ...
- Redis笔记-集群搭建
Redis单机版搭建上一篇已经基本介绍了,下面讨论Redis集群搭建方案和示例. 1.关于Redis常用的集群方案(三种): a.一主多从,如一个Master.两个Slave b.薪火相传,即集群中的 ...
- Redis的搭建和Redis的集群搭建
1.Redis的官网:https://redis.io/ Redis的测试网站:http://try.redis.io/ 2.参考博客:https://www.cnblogs.com/maf ...
- 【Redis】Redis cluster集群搭建
Redis集群基本介绍 Redis 集群是一个可以在多个 Redis 节点之间进行数据共享的设施installation. Redis 集群不支持那些需要同时处理多个键的 Redis 命令, 因为执行 ...
- redis主从集群搭建及容灾部署(哨兵sentinel)
Redis也用了一段时间了,记录一下相关集群搭建及配置详解,方便后续使用查阅. 提纲 Redis安装 整体架构 Redis主从结构搭建 Redis容灾部署(哨兵sentinel) Redis常见问题 ...
- Redis Cluster集群搭建<原>
一.环境配置 一台window 7上安装虚拟机,虚拟机中安装的是centos系统. 二.目标 Redis集群搭建的方式有多种,根据集群逻辑的位置,大致可以分为三大类:基于客户端分片的Redis ...
随机推荐
- 蛋疼的Action.c (141): undeclared identifier `LAST'异常
之前这个脚本运行了很久都没有问题,今天突然在场景运行不了: Action.c (141): undeclared identifier `LAST' 害的老子一直在纠结,这个关联函数没有问题啊,怎么一 ...
- alicemq 方便的RabbitMQ 可视化工具
尽管RabbitMQ 自带一个管理插件,但是还不是那么强大,alicemq 是一个方便强大的可视化工具 rabbitmq 环境准备 docker-compose 文件 version: "3 ...
- JVM_垃圾收集器
最近刚好有时间,就简单的看了下JVM的几种垃圾回收器,它们都是计算机历史发展的产物,先简单的做一个整理,并没有哪一款垃圾收集器就一定是最优,还需要结合使用场景.参数配置等进行考量,根据系统情况搭配出尽 ...
- luoguP2479 [SDOI2010]捉迷藏
https://www.luogu.org/problemnew/show/P2479 据说可以用线段树做但是我不会,只能写一个 KD-Tree 了 对于每个点求出距离它最远的点和最近的点的距离,然后 ...
- Linux多网口绑定配合华为5700 eth-trunk技术,提高网络性能
在实际的环境中,服务器通过网口绑定技术,可以很容易的实现网口冗余,负载均衡,从而达到高可用的目的,而且可以提升网络的性能,大幅的提升网络I/O. 一般情况下,Linux的多网口绑定使用的是内核中的“b ...
- Logstash 收集 IIS 日志
日志样例 查看 IIS 日志配置,选择格式为 W3C(默认字段设置)保存生效. 2016-02-25 01:27:04 112.74.74.124 GET /goods/list/0/1.html - ...
- 2016级算法第四次上机-F.AlvinZH的最“长”公共子序列
940 AlvinZH的最"长"公共子序列 思路 DP,难题. \(dp[i][j]\) :记录A的前i个字符与B的前j个字符变成相同需要的最小操作数. 初始化:dp[i][0] ...
- 鼠标点击按钮控制图片移动或者键盘控制图片移动(解决问题:parseInt失效问题,用Number)
在测试用鼠标点击按钮,使图片左右上下移动: 效果如下: 代码如下: <!DOCTYPE html> <html lang="en"> <head> ...
- NVIDIA TX1/TX2 对比
处理器方面,TX2由TX1的Tegra X1升至Tegra Parker处理器,该处理器由16nm工艺制造,6核心设计,CPU部分由2个丹佛+4个A57核心共同组成. GPU则采用Pascal架构,拥 ...
- Codeforces Round #556 (Div. 2) - C. Prefix Sum Primes(思维)
Problem Codeforces Round #556 (Div. 2) - D. Three Religions Time Limit: 1000 mSec Problem Descripti ...