前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis 集群搭建

Redis 集群搭建

作者头像
全栈程序员站长
发布2022-07-23 10:37:51
4770
发布2022-07-23 10:37:51
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

Redis 集群搭建

前言

最近通过看视频学习了一下 Redis,前天使用 CentOS 7 配置了一下 Redis 4.0.9 单机版(相关链接:CentOS 7 配置 Redis 4.0.9),今天则通过之前的笔记,视频以及 redis 官网上集群搭建的教程(https://redis.io/topics/cluster-tutorial) 的资料来搭建一下 Redis 集群。 本次则是在上次 CentOS 7 配置 Redis 4.0.9 的环境下继续搭建集群


配置运行在集群模式的 Redis 实例

最少选项的集群的配置文件:
代码语言:javascript
复制
# 端口号
port 7000
# 开启集群模式
cluster-enabled yes
# 设置保存节点配置文件的路径,默认值为 nodes.conf。节点配置文件无须人为修改
cluster-config-file nodes.conf
# 设置节点超时时间
cluster-node-timeout 5000
# 设置是否开启 aof 模式,对数据库完整性要求比较高可以开启
appendonly no

为了外部访问,需要配置一下 IP 地址以及关闭防火墙。例如 bind 192.168.229.162来绑定 IP 地址。这里我以我运行 Redis 实例的虚拟机的 IP 地址为例。CentOS 7 停止防火墙:systemctl stop firewalld.service;禁止防火墙开机启动:systemctl disable firewalld.service Redis 持久化方案有两种,默认开启的是 rdb 模式,定期把内存中的数据保存到磁盘;另一种则是 aof 模式,会频繁进行保存,会影响性能。自己练手时,推荐使用 rdb 模式即可。 顺带记得设置一下后端启动,代码如下:

代码语言:javascript
复制
# 设置为后端启动
daemonize yes

我的配置如下:

代码语言:javascript
复制
# IP
bind 192.168.229.162
# 端口号
port 7001
# 开启集群模式
cluster-enabled yes
# 设置保存节点配置文件的路径,默认值为 nodes.conf。节点配置文件无须人为修改
cluster-config-file nodes.conf
# 设置节点超时时间
cluster-node-timeout 5000
# 设置是否开启 aof 模式,对数据库完整性要求比较高可以开启
appendonly no
# 设置为后端启动
daemonize yes
配置集群前期准备

集群正常运行至少需要 3个节点,不过刚开始使用集群功能时,推荐使用 6个节点:3个主节点,3个从节点。 集群正常运行至少需要 3个节点,是因为 Redis 集群有个投票机制(容错机制),来判断某个节点是否挂了,当超过半数认为该节点挂了,则认定该节点挂了,此时则切换到该节点的从节点。 如上,若一个节点挂了,找不到从节点,无法切换,则数据不完整,则整个 Redis 集群就挂了。故为了实现高可用,每个节点至少配置一个从节点。 在 /usr/local 下创建文件夹 redis-cluster-test。使用命令:mkdir redis-cluster-test。然后在 redis-cluster-test 下创建六个以端口号为名字的子目录

代码语言:javascript
复制
cd redis-cluster-test
mkdir 7000 7001 7002 7003 7004 7005

在这六个子目录之中,各创建一个 redis.conf 配置文件,配置内容为上面最少选项的集群的配置文件,端口改为对应的目录名字。或者是从 Redis 源码里面拷贝一份 redis.conf 配置文件出来并修改对应的参数。 将编译好的 redis-server(从上回配置单机版 redis 的文件夹下拷贝,路径为 /usr/local/redis/bin 下) 可执行文件复制到 redis-cluster-test 文件夹下,使用以下命令,分别开启实例:

代码语言:javascript
复制
cd 7000
../redis-server ./redis.conf

因为 nodes.conf 文件不存在, 所以每个节点都为它自身指定了一个新的 ID 当然,我们可以写一个脚本文件,来一键开启 6个 Redis 实例。在 redis-cluster-test 文件夹下,运行命令:vi start-all.sh,会自动在 redis-cluster-test 文件夹下生成一个 start-all.sh 文件,在里面输入以下代码:

代码语言:javascript
复制
cd 7000
../redis-server ./redis.conf
cd ..
cd 7001
../redis-server ./redis.conf
cd ..
cd 7002
../redis-server ./redis.conf
cd ..
cd 7003
../redis-server ./redis.conf
cd ..
cd 7004
../redis-server ./redis.conf
cd ..
cd 7005
../redis-server ./redis.conf
cd ..

然后保存退出即可(按 ESC 键后,输入:wq,回车即可),保存后对该脚本文件进行授权:chmod u+x start-all.sh。(同理,我们也可以配置一个关闭 redis 服务的脚本,先从之前的 /usr/local/redis/bin 中拷贝 redis-cli 来关闭,参考之前配置单机版 redis 的文章)

运行命令:./start-all.sh,此时,我们通过查看进程(命令:ps aux|grep redis),可以看到运行着 6个 Redis 实例。


搭建集群

Ruby 环境

官方默认提供了 Redis 集群命令行工具 redis-trib.rb。redis-trib.rb 位于 Redis 源码的 src 文件夹中, 它是一个 Ruby 程序, 这个程序通过向实例发送特殊命令来完成创建新集群, 检查集群, 或者对集群进行重新分片(reshared)等工作。 为了方便之后的使用,我们可以使用命令将它复制到 redis-cluster-test 文件夹之中。进入 Redis (之前,我们是将源码从本地上传到虚拟机中的 root 目录下,路径为 /root/redis-4.0.9)源码的 src 文件夹后,使用命令:cp redis-trib.rb /usr/local/redis-cluster-test 因为这是个 Ruby 程序,所以我们需要先配置一下 Ruby 环境和 redis-trib.rb 脚本运行使用的包(redis-X.X.X.gem,官方地址:https://rubygems.org/gems/redis) 。这之间走了一些弯路,这里就不细讲了。

进入 /usr/local/redis-cluster-test,通过命令配置 Redis 集群:

代码语言:javascript
复制
./redis-trib.rb create --replicas 1 192.168.229.162:7000 192.168.229.162:7001 192.168.229.162:7002 192.168.229.162:7003 192.168.229.162:7004 192.168.229.162:7005

注:参数 –replicas 1 表示为集群中的每个主节点创建一个从节点,之后跟着是这个集群实例的地址列表,先是主节点,然后是从节点。

其中会让你确认配置是否有问题,输入 yes 即可。redis-trib.rb 就会配置好一切,让各个节点之间相互通信。


测试集群

可以使用 redis 默认提供的客户端 —— redis-cli 来进行测试(先从之前的 /usr/local/redis/bin 中拷贝 redis-cli)。 连接集群:./redis-cli -c -h 192.168.229.162 -p 7000 注:这与平时直接连接 redis 实例有所不同,需要加上 -c 这个参数,代表连接的是 Redis 集群 连接成功后,试着往里面添加一些数据,如下图:

如上图,在添加数据的时候,会对每个 key 进行 CRC16 校验后对 16384 取模来决定放在哪个哈希槽,然后存储到对应的节点上。到此 Redis 集群就搭建完成了。

后记

目前 Redis 集群的客户端使用最多的是 Java 客户端 —— Jedis。之后也会对 Jedis 的使用做一些笔记。 在实践中学习。 HochenChong 2018-04-27

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/126136.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年4月7,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Redis 集群搭建
    • 前言
      • 配置运行在集群模式的 Redis 实例
        • 最少选项的集群的配置文件:
        • 配置集群前期准备
      • 搭建集群
        • Ruby 环境
      • 测试集群
        • 后记
        相关产品与服务
        云数据库 Redis®
        腾讯云数据库 Redis®(TencentDB for Redis®)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档