redis5集群搭建步骤
通常情况下为了redis的高可用,我们一般不会使用redis的单实例去运行,一般都会搭建一个 redis 的集群去运行。此处记录一下 redis5 以后 cluster 集群的搭建。
一、需求
- redis5的安装
搭建一个3主3从的集群
- 动态的往集群中
增加节点
|- 增加一个主节点
|- 增加一个从节点 - 动态的从集群中
删除节点
|- 删除一个从节点
|- 删除一个主节点
二、前置知识
- 1、在 redis5 之后,redis cluster 的搭建不在需要默认的ruby脚本,使用
redis-cli
命令即可完成搭建 - 2、创建集群的这些redis实例中都必须是空的
- 3、在一个 redis 的集群中默认存在
16384
个哈希槽,这 16384 个哈希槽会默认分配
给集群中的主节点
4、
增加一个主节点
,就意味着要从原来的主节点中移动部分哈希槽给新的主节点5、
删除一个主节点
,就需要把该主节点分配到的哈希槽归还给别的主节点- 6、在主节点之间移动哈希槽不需要停止操作,因此对集群没多大影响
- 7、一个集群最好有奇数个主节点
- 8、集群创建过程中涉及到的命令
集群创建:redis-cli --cluster create ip:port ip:port ip:port ip:port ip:port ip:port [ip:port…] --cluster-replicas 1
|- --cluster-replicas 1 表示每个主节点下有一个从节点
添加一个节点:redis-cli --cluster add-node 127.0.0.1:7006
添加一个节点作为另外一个节点的从节点:redis-cli --cluster add-node 127.0.0.1:7006 127.0.0.1:7000 --cluster-slave
删除一个节点 redis-cli --cluster del-node 127.0.0.1:7000 <node-id>
连接到集群:redis-cli -c -p 访问的端口 -h 访问的机器
查看集群中的节点:redis-cli -p 7000 cluster nodes - 9、集群中的每个redis节点需要放行
2
个端口的访问:
|- 正常的客户端通讯端口,比如6379
|-集群总线端口
,总是 客户端通讯接口+10000
,比如:16379,该端口主要是 集群总线进行故障检测、配置更新、故障转移等操作 - 10、如果redis集群中的某个主节点和与之相关的所有从节点都宕机了,那么redis集群将无法提供服务,因为我们不能再提供 这个master node 节点上的 哈希槽。
- 11、redis 集群
不保证
强一致性,这意味着在某些时候可能丢失某些写数据
。
|- 因为集群中从节点的复制是异步的。
|- redis 集群在绝对需要时也支持同步写入,但是这也不能保证完全的强一致性。 - 12、配置redis
集群
的最小配置
文件如下:port 7000
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes - 13、
cluster-config-file
这个配置中指定的 配置文件 由redis自动维护,我们自己不要随意修改。这个文件有redis集群实例在启动时生成 14、
由于本地机器不够,因此在一台电脑上进行搭建,以不同的端口进行区分。
三、redis5安装
1、进入 /usr/local/redis目录
没有这个目录可以新建一个
2、下载redis5
wget http://download.redis.io/releases/redis-5.0.3.tar.gz
3、执行解压
tar zxvf redis-5.0.3.tar.gz
4、安装
cd redis-5.0.3 && make
5、查看redis是否安装成功
cd src 里面有一个 redis-server
执行这个命令即可。因为我没有执行 make install 命令所以可用的命令是在 src 目录下。
四、redis集群配置清单
机器 | 配置文件目录 | 客户端端口 | 集群端口 (自动维护) |
主/从 | 从节点 | 备注 |
172.19.206.207 | /usr/local/redis/cluster/7001 | 7001 | 17001 | 主 | 172.19.206.207:7004 | 集群总线接口我们不要去访问,此接口是集群内部通讯接口 |
172.19.206.207 | /usr/local/redis/cluster/7002 | 7002 | 17002 | 主 | 172.19.206.207:7005 | |
172.19.206.207 | /usr/local/redis/cluster/7003 | 7003 | 17003 | 主 | 172.19.206.207:7006 | |
172.19.206.207 | /usr/local/redis/cluster/7004 | 7004 | 17004 | 从 | ||
172.19.206.207 | /usr/local/redis/cluster/7005 | 7005 | 17005 | 从 | ||
172.19.206.207 | /usr/local/redis/cluster/7006 | 7006 | 17006 | 从 | ||
172.19.206.207 | /usr/local/redis/cluster/7007 | 7007 | 17007 | 主 | 172.19.206.207:7008 | 集群搭建好之后加入的节点,后期会删除 |
172.19.206.207 | /usr/local/redis/cluster/7008 | 7008 | 17008 | 从 | 集群搭建好之后加入的节点,后期会删除 |
1、集群中一个节点(7001的配置文件),其余节点的配置文件一样,修改一下端口即可
配置项 | 值 | 解释 |
port | 7001 | 客户端通讯端口,redis服务器启动的端口 |
daemonize | yes | 以后台的方式运行 |
bind | 172.19.206.207 | 修改成机器的ip地址,如果是在保护模式下 |
pidfile | /usr/local/redis/cluster/7001/redis_7001.pid | 当是以后台方式运行时,会产生一个pid文件 |
logfile | /usr/local/redis/cluster/7001/redis_7001.logs | 指定日志文件的路径 |
dir | /usr/local/redis/cluster/7001/ | 数据库的持久化文件保存的路径,必须是目录 |
appendonly | yes | 打开aof持久化 |
appendfsync | everysec | aof每秒写入一次 |
cluster-enabled | yes | 启用集群 |
cluster-config-file | nodes-7001.conf | 此文件由集群自动维护 |
cluster-node-timeout | 15000 | 集群节点超时时间 |
启动当前节点,看是否启动成功
redis启动命令:/usr/local/redis/redis-5.0.3/src/redis-server /usr/local/redis/cluster/7001/redis.conf
查看redis服务是否启动: ps aux | grep redis
2、将节点7001下的redis.conf配置文件拷贝到其他的目录中,修改掉端口
集群操作
依次启动7001-7006这6个节点
/usr/local/redis/redis-5.0.3/src/redis-server /usr/local/redis/cluster/7001/redis.conf
/usr/local/redis/redis-5.0.3/src/redis-server /usr/local/redis/cluster/7002/redis.conf
/usr/local/redis/redis-5.0.3/src/redis-server /usr/local/redis/cluster/7003/redis.conf
/usr/local/redis/redis-5.0.3/src/redis-server /usr/local/redis/cluster/7004/redis.conf
/usr/local/redis/redis-5.0.3/src/redis-server /usr/local/redis/cluster/7005/redis.conf
/usr/local/redis/redis-5.0.3/src/redis-server /usr/local/redis/cluster/7006/redis.conf
五、创建集群
1、集群创建命令
redis-cli cluster create host1:port1 ... hostN:portN --cluster-replicas <arg>
2、集群创建(3主3从-注意节点的顺序)
可以看到:
16384个哈希槽平均分配给了3个主节点,从节点没有分配哈希槽。
3、向集群中设置值测试一下
-c
表示的是连接集群.
从上图可以看到,我们连接
的是 7001
端口,但是设置值的时候,由于key(cluster)
对应的哈希槽的值是14041
,所以重定向
到了 7003
端口上。
六、动态向集群中添加一个主节点并分片
添加节点命令:redis-cli --cluster add-node 新节点ip:新节点port 集群中以存在的节点ip:集群中已存在的节点port
分片命令:redis-cli --cluster reshard 需要分片的节点ip:需要分片的节点端口
1、从7001目录中复制一份redis.conf配置,并创建目录7007和7008,将7007和7008中的redis.conf中的7001都替换成7007和7008
2、启动 7007和7008
/usr/local/redis/redis-5.0.3/src/redis-server /usr/local/redis/cluster/7007/redis.conf
/usr/local/redis/redis-5.0.3/src/redis-server /usr/local/redis/cluster/7008/redis.conf
3、将7007添加到集群中
命令:/usr/local/redis/redis-5.0.3/src/redis-cli add-node 172.19.206.207:7007 172.19.206.207:7001
7007 为要添加的节点
7001 为已经存在的节点
注意:此时该节点只是作为主节点添加到了集群中,但是没有进行分片,是不可存储数据的,如果要存储数据,需要进行分片操作。
查看新加入的这个节点的信息。
4、为7007节点分配槽
命令:redis-cli --cluster reshard 需要分配槽的ip:需要分配槽的port
需要注意的事项见上图中
七、添加一个从节点
经过上一步操作,7007成为了一个主节点,但是目前还没有从节点,现在给它增加一个从节点7008。
第一步:将7008节点添加到集群中
命令:/usr/local/redis/redis-5.0.3/src/redis-cli --cluster add-node 172.19.206.207:7008 172.19.206:207:7001
第二步:进入 7008 这个节点,执行命令 cluster replicate 7007节点的id
命令:1、/usr/local/redis/redis-5.0.3/src/redis-cli -c -p 7008 -h 172.19.206.207
2、cluster replicate 0197892b29048155077ee4d23dd5517737f40377 0197892b29048155077ee4d23dd5517737f40377为7007的节点id
经过上面2步,7008就作为了7007节点的从节点,可以执行 cluster nodes 命令查看。
八、删除一个从节点
删除从从节点:172.19.206.207:7008
命令:/usr/local/redis/redis-5.0.3/src/redis-cli --cluster del-node 172.19.206.207:7008 64805713b278b00282dda3424f962d6f9e5be298 64805713b278b00282dda3424f962d6f9e5be298这个为7008节点的节点id的值
九、删除一个主节点
删除主节点稍微麻烦一点,如果主节点中存在槽,那么需要先将槽分配给其它的主节点。
删除主节点:172.19.206.207:7007
1、归还槽
2、删除节点
命令: /usr/local/redis/redis-5.0.3/src/redis-cli --cluster del-node 172.19.206.207:7007 0197892b29048155077ee4d23dd5517737f40377
至此,一个redis5的集群的搭建以及简单的维护就搭建好了。
redis5集群搭建步骤的更多相关文章
- Linux(Centos7)下redis5集群搭建和使用
1.简要说明 2018年十月 Redis 发布了稳定版本的 5.0 版本,推出了各种新特性,其中一点是放弃 Ruby的集群方式,改为 使用 C语言编写的 redis-cli的方式,是集群的构建方式复杂 ...
- 基于Hadoop 2.2.0的高可用性集群搭建步骤(64位)
内容概要: CentSO_64bit集群搭建, hadoop2.2(64位)编译,安装,配置以及测试步骤 新版亮点: 基于yarn计算框架和高可用性DFS的第一个稳定版本. 注1:官网只提供32位re ...
- Hadoop2.0 HA集群搭建步骤
上一次搭建的Hadoop是一个伪分布式的,这次我们做一个用于个人的Hadoop集群(希望对大家搭建集群有所帮助): 集群节点分配: Park01 Zookeeper NameNode (active) ...
- MySQL优化之——集群搭建步骤具体解释
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/46833179 1 概述 MySQL Cluster 是MySQL 适合于分布式计算 ...
- mysql-cluster集群搭建步骤
1.从官网下载mysql-cluster安装包: https://dev.mysql.com/downloads/cluster/ 2.解压安装包 #上传到服务器目录/usr/softwares并解压 ...
- 重要参考步骤---ProxySQL Cluster 集群搭建步骤
环境 proxysql-1:192.168.20.202 proxysql-2:192.168.20.203 均采用yum方式安装 # cat <<EOF | tee /etc/yum.r ...
- Hadoop集群搭建步骤
实验性操作是在虚拟机里进行的,除了搭建hadoop本身的操作之外,遇到的其它问题总结如下: 1. 虚拟机挂载windows磁盘: 添加硬件,要保证该硬件此时没有被读写访问等,因为挂载后,该磁盘在宿主机 ...
- Zookeeper集群搭建步骤及相关知识点深入了解
1.zookeeper概念 zookeeper是一个分布式协调服务:a:zookeeper是为别的分布式程序服务的 b:zookeeper本身就是一个分布式程序(只要半数以上节点存活,zookeepe ...
- redis cluster 集群搭建步骤和注意事项
1.安装Ubuntu ,修改root的密码. sudo passwd (apt-get update 更新系统) 2.安装 Gcc 和G++ sudo apt-get install build- ...
随机推荐
- Ubantu启动失败,提示“Started GNOME Display Manager”之后起不来了
我是在搭建DPDK环境时,为了尝试下多网卡多列配置,将虚拟机的网卡类型由e1000改成了vxnet3类型.之后修改了下内存大小和CPU核数.然后启动ubantu虚拟机,结果无法成功启动,显示结果如下: ...
- pyRevit开发:如何创建轴网
必看部分: Document获取: 必看文章 如何添加基本项目引用 基础部分: 创建轴网 基本思路: 首先添加引用 获取当前项目文档 创建轴网定位线 创建轴网 设置轴网名称 实现代码: import ...
- 处理器核、Core、处理器、CPU区别&&指令集架构与微架构的区别&&32位与64位指令集架构说明
1.处理器核.Core.处理器.CPU的区别 严格来说"处理器核"和" Core "是指处理器内部最核心的部分,是真正的处理器内核:而"处理器&quo ...
- 模板引挚 jade ejs
// asl sum翡翠 后台使用如下: const jade = require('jade') //pretty 美化的意思,指的是渲染的布局会美化 2020-2-15 var str = j ...
- Ubuntu中类似QQ截图的截图工具并实现鼠标右键菜单截图
@ 目录 简介: 安装: 设置快捷键: 实现鼠标右键菜单截图: 简介: 在Windows中用惯了强大易用的QQ截图,会不习惯Ubuntu中的截图工具. 软件名为火焰截图,功能类似QQ截图,可以设置快捷 ...
- Loadrunner拼装唯一值方法
由于Loadrunner函数有限性,唯一值需要几个函数的字符串进行拼装,可实现流水号.订单号等等数值的唯一性.具体可见下列方法: 方法一: char OraderID[15];srand(time{N ...
- Shell系列(24)- 条件判断之文件类型
按照文件类型进行判断 标红,记住:其他了解即可 测试选项 作用 -b 文件 判断该文件是否存在,并且是否为块设备文件(是块设备文件为真) -c 文件 判断该文件是否存在,并且是否为字符设备文件(是字符 ...
- Shell系列(6)- 管道符
多命令顺序执行 多命令执行符 格式 作用 ; 命令1 ; 命令2 连接命令:多个命令顺序执行,命令之间没有任何逻辑联系:前面命令报错,后面命令照常执行 && 命令1 && ...
- hadoop报错
19/11/24 08:29:08 INFO qlh.MyMapreduce: ================this is job================= 19/11/24 08:29: ...
- 怎么使用chrome浏览器查看内存是否有泄漏
一:什么是内存泄漏 javaScript会在创建变量时分配内存并且在不适用变量时会自动的释放内存,这个释放内存的过程极为垃圾回收,程序运行需要内存,只要程序提出要求操作系统或者运行时就必须提供内存,对 ...