Redis 集群搭建

Redis集群搭建前言最近通过看视频学习了一下Redis,前天使用CentOS7配置了一下Redis4.0.9单机版(相关链接:CentOS7配置Redis4.0.9),今天则通过之前的笔记,视频以及redis官网上集群搭建的教程(https://redis.io/topics/cluster-tutorial)的资料来搭建一下Redis集群。…

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

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 实例

最少选项的集群的配置文件:

# 端口号
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 模式即可。

顺带记得设置一下后端启动,代码如下:

# 设置为后端启动
daemonize yes

我的配置如下:

# 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 下创建六个以端口号为名字的子目录

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 文件夹下,使用以下命令,分别开启实例:

cd 7000
../redis-server ./redis.conf

因为 nodes.conf 文件不存在, 所以每个节点都为它自身指定了一个新的 ID

当然,我们可以写一个脚本文件,来一键开启 6个 Redis 实例。在 redis-cluster-test 文件夹下,运行命令:vi start-all.sh,会自动在 redis-cluster-test 文件夹下生成一个 start-all.sh 文件,在里面输入以下代码:

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 实例。

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 集群:

./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 默认提供的客户端 —— redis-cli 来进行测试(先从之前的 /usr/local/redis/bin 中拷贝 redis-cli)。

连接集群:./redis-cli -c -h 192.168.229.162 -p 7000
注:这与平时直接连接 redis 实例有所不同,需要加上 -c 这个参数,代表连接的是 Redis 集群
连接成功后,试着往里面添加一些数据,如下图:

Redis 集群搭建

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

后记

目前 Redis 集群的客户端使用最多的是 Java 客户端 —— Jedis。之后也会对 Jedis 的使用做一些笔记。

在实践中学习。

HochenChong

2018-04-27

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 检测计算机命令,磁盘检测命令chkdsk的使用方法

    检测计算机命令,磁盘检测命令chkdsk的使用方法经常看到有很多朋友在系统开机的时候因系统自检程序时间过长而往往直接跳过磁盘检测 而直接跳过这种心急的想法有时候会引来大祸患 今天我们介绍的 chkdsk 命令是系统自带的系统修复命令 可以帮助我们解决很多常见问题 它可以帮助恢复系统文件 有时可以延缓硬盘的寿命 对此想要有了解的朋友跟随小编一起来看看吧 磁盘检测的原因多是由于系统检测到磁盘数据调用错误或者数据文件丢失而自发引起的一种自我保护措施 使用磁

    2025年6月19日
    3
  • javaMD5加密类

    javaMD5加密类importjava.security.MessageDigest;publicclassMyMD5{ privateStringinStr;    privateMessageDigestmd5;  publicMyMD5(StringinStr){   this.inStr=inStr;   try{    this.md5=MessageDige

    2022年7月14日
    20
  • centos7.4安装docker_爬虫为什么要用docker

    centos7.4安装docker_爬虫为什么要用docker前言当我们在一台电脑上搭建了python3.6的环境,下次换台电脑,又得重新搭建一次,设置环境变量等操作。好不容易安装好,一会提示pip不是内部或外部命令,一会又提示pip:commandno

    2022年7月29日
    5
  • pyyaml使用_pam模块

    pyyaml使用_pam模块pyyaml模块

    2022年9月13日
    2
  • 计算机可靠度计算公式,可靠性计算公式大全

    计算机可靠度计算公式,可靠性计算公式大全《可靠性计算公式大全》由会员分享,可在线阅读,更多相关《可靠性计算公式大全(3页珍藏版)》请在人人文库网上搜索。1、计算机系统的可靠性是制从它开始运行(t=0)到某时刻t这段时间内能正常运行的概率,用R(t)表示所谓失效率是指单位时间内失效的元件数与元件总数的比例,以表示,当为常数时,可靠性与失效率的关系为:()=e-u(u为次方)两次故障之间系统能够正常工作的时间的平均值称为平均为故障时…

    2022年7月26日
    10
  • vim 文本编辑器[通俗易懂]

    vim 文本编辑器[通俗易懂]4.2 vim文本编辑器4.2.1 简介vim是vi的升级版,最常见的区别是能用多种颜色显示显示系统文件的一些特殊信息。vi:VisualInterface文本编辑器,可视化接口vim:viiMprove的缩写,即vi的增强版vim编辑器分为三种主要模式:命令模式(编辑模式):默认模式,移动光标,剪切/粘贴文本(界面表现:左下角显示文件名或为空)插入模式(输入模式):修…

    2022年6月7日
    37

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号