哈喽大家好,我是咸鱼

今天这篇文章介绍如何在一台服务器(以 CentOS 7.9 为例)上通过 redis-trib.rb 工具搭建 Redis cluster (三主三从)

redis-trib.rb 是一个基于 Ruby 编写的脚本,其功能涵盖了创建、管理以及维护 Redis 集群的各个方面

值得注意的是,随着时间的推移,一些较新版本的 Redis 已经将 redis-trib.rb 标记为不推荐使用的工具

鉴于此,文章所采用的 Redis 版本为较老的 4.0.9 版本

对于较新版本的 Redis,咸鱼建议采用 redis-cli 工具来进行集群的操作与管理,以确保与 Redis 的最新特性保持一致

我们先把架构画出来,这样后面部署的时候就很方便了

# 三个 Master
192.168.149.131:6379
192.168.149.131:6380
192.168.149.131:6381 # 三个 Slave
192.168.149.131:26379
192.168.149.131:26380
192.168.149.131:26381

需要注意的是,Redis Cluster 中,节点之间通过建立 TCP 连接,使用 gossip 协议来传播集群的信息,节点内部通信端口是服务端口 + 10000

举个例子,启动 Redis 服务之后会有一个 6379 端口(对外端口)和一个 16379 端口(对内通信端口)

开始部署

部署前准备

首先创建 Redis 存储目录,用来存放 rdb 文件等,接着创建 pid 文件和日志文件存放目录

mkdir -pv /var/data/{6379,6380,6381,26379,26380,26381}

mkdir /usr/local/redis-4.0.9/{pid,log} -pv

安装 Redis 以及相关依赖工具

我们先来安装 redis 以及相关依赖(需要能够访问到互联网)

# 安装相关依赖
yum install -y wget gcc gcc-c++ make tar openssl openssl-devel cmake # 安装到 /usr/local 下
cd /usr/local/ && wget https://download.redis.io/releases/redis-4.0.9.tar.gz # 解压缩
tar -xvf redis-4.0.9.tar.gz

解压缩完毕之后我们进入目录开始编译安装

cd redis-4.0.9/ && make && make install

配置并开启 Redis 服务

首先我们先来配置六个 Redis 服务的配置文件

ll /usr/local/redis-4.0.9/
-rwxr-xr-x 1 root root 1524 Aug 24 17:21 redis-26379.conf
-rwxr-xr-x 1 root root 1524 Aug 24 17:18 redis-26380.conf
-rwxr-xr-x 1 root root 1524 Aug 24 17:18 redis-26381.conf
-rwxr-xr-x 1 root root 1519 Aug 24 17:21 redis-6379.conf
-rwxr-xr-x 1 root root 1519 Aug 24 17:17 redis-6380.conf
-rwxr-xr-x 1 root root 1519 Aug 24 17:17 redis-6381.conf

配置文件中需要改动的配置项是下面几个,其他的不变

# 需要改动的地方
...
port 6379
...
pidfile /usr/local/redis-4.0.9/pid/redis-6379.pid
...
logfile /usr/local/redis-4.0.9/log/redis-6379.log
...
dir /var/data/6379
...
cluster-config-file nodes-6379.conf
...

配置好之后,六个 Redis 服务依次启动

/usr/local/redis-4.0.9/src/redis-server redis-6379.conf && /usr/local/redis-4.0.9/src/redis-server redis-26379.conf

/usr/local/redis-4.0.9/src/redis-server redis-6380.conf && /usr/local/redis-4.0.9/src/redis-server redis-26380.conf

/usr/local/redis-4.0.9/src/redis-server redis-6381.conf && /usr/local/redis-4.0.9/src/redis-server redis-26381.conf

搭建 Ruby 环境

redis-trib.rb 是一个 Ruby 脚本,用于创建、管理和维护 Redis 集群

它提供了一种命令行界面来执行各种集群操作,如添加节点、删除节点、平衡数据分布等

如果要使用 redis-trib.rb 这个 Ruby 脚本来管理 Redis Cluster,就需要安装 Ruby 解释器

先下载 rvm 工具(网络问题多试几次)

#1.下载密钥
curl -sSL https://rvm.io/mpapis.asc | gpg2 --import -
curl -sSL https://rvm.io/pkuczynski.asc | gpg2 --import -
#2.下载安装包(网络问题多试几次)
curl -L get.rvm.io | bash -s stable

# 验证是否安装成功
[root@localhost]# find / -name rvm
/usr/local/rvm
/usr/local/rvm/src/rvm
/usr/local/rvm/src/rvm/bin/rvm
/usr/local/rvm/src/rvm/lib/rvm
/usr/local/rvm/src/rvm/scripts/rvm
/usr/local/rvm/bin/rvm
/usr/local/rvm/lib/rvm
/usr/local/rvm/scripts/rvm # 启用 RVM 的环境变量
source /etc/profile.d/rvm.sh
#查看依赖
rvm requirements #验证 rvm 版本
rvm -v
# 安装 ruby
/usr/local/rvm/bin/rvm install ruby-3.0.0 # 验证 ruby 版本
ruby -v

PS:如果安装 ruby 之后使用 redis-trib.rb 工具发现报错

/usr/local/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:45:in `require': cannot load such file -- redis (LoadError)
from /usr/local/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:45:in `require'
from ./redis-trib.rb:25:in `<main>'

根据提示可以知道 redis-trib.rb 脚本无法找到 redis 模块,导致加载失败,这通常是因为系统中缺少了所需的 Ruby Redis 模块或模块的版本问题

运行以下命令安装 Redis Gem 模块:

# 安装 redis 模块,是 redis-trib.rb 脚本所需的依赖
gem install redis

创建 Redis 集群

创建集群(--replicas 1 表示指定每个 master 有一个 slave)

cd /usr/local/redis-4.0.9/ && ./src/redis-trib.rb create --replicas 1 192.168.149.131:6379 192.168.149.131:26379 192.168.149.131:6380 192.168.149.131:26380 192.168.149.131:6381 192.168.149.131:26381



由上图可以看到

master 1: 192.168.149.131:6379 ;slave 1:192.168.149.131:26380
master 2: 192.168.149.131:26381;slave 2:192.168.149.131:6380
master 3: 192.168.149.131:26379;slave 3:192.168.149.131:6381
# 查看集群信息
cd /usr/local/redis-4.0.9/ && ./src/redis-trib.rb info 192.168.149.131:6379 cd /usr/local/redis-4.0.9/ && ./src/redis-trib.rb check 127.0.0.1:6379

验证

创建集群之后我们简单验证一下:写入一个数据,可以看到数据重定向到了 master 3

[root@localhost /usr/local/redis-4.0.9]# redis-cli -c -p 6379
127.0.0.1:6379> set name Edison
-> Redirected to slot [5798] located at 192.168.149.131:26379
OK

然后我们在 slave 3 上查看有没有这个数据,是否同步完毕

[root@localhost /usr/local/redis-4.0.9]# redis-cli -c -p 26379
127.0.0.1:26379> get name
"Edison"

一台服务器上部署 Redis 伪集群的更多相关文章

  1. OpenShift上部署Redis主从集群

    客户有部署有状态服务的需求,单机部署模式相对简单,尝试一下集群部署. 关于Redis的master,slave 以及sentinal的架构和作用不提,有兴趣可以参考之前的博客 https://www. ...

  2. AliRedis单机180w QPS, 8台服务器构建1000w QPS Cache集群(转)

    http://blog.sina.com.cn/s/blog_e59371cc0101br74.html 引言:        如今redis凭借其高性能的优势, 以及丰富的数据结构作为cache已越 ...

  3. 超详细,多图文介绍redis集群方式并搭建redis伪集群

    超详细,多图文介绍redis集群方式并搭建redis伪集群 超多图文,对新手友好度极好.敲命令的过程中,难免会敲错,但为了截好一张合适的图,一旦出现一点问题,为了好的演示效果,就要从头开始敲.且看且珍 ...

  4. K8S部署Redis Cluster集群

    kubernetes部署单节点redis: https://www.cnblogs.com/zisefeizhu/p/14282299.html Redis 介绍 • Redis代表REmote DI ...

  5. K8S部署Redis Cluster集群(三主三从模式) - 部署笔记

    一.Redis 介绍 Redis代表REmote DIctionary Server是一种开源的内存中数据存储,通常用作数据库,缓存或消息代理.它可以存储和操作高级数据类型,例如列表,地图,集合和排序 ...

  6. linux环境下redis安装(redis伪集群搭建)

    redis在linux环境下搭建 1.创建目录 [root@192 local]# mkdir /usr/local/redis 2.下载redis,并解压 [root@192 local]# wge ...

  7. redis伪集群脚本

    #安装redis伪集群脚本,先把redis-..gem及启动脚本放在/data1/redis-cluster目录下,然后执行该脚本即可 #!/bin/bash set -e #获取redis本机ip ...

  8. helm部署Redis哨兵集群

    介绍 Redis Sentinel集群是由若干Sentinel节点组成的分布式集群,可以实现故障发现.故障自动转移.配置中心和客户端通知. 如下图: Redis Sentinel 故障转移过程: 从这 ...

  9. 如何在同一台服务器上部署两个tomcat

    因为测试的需要,有时我们必须在同一个服务器上部署两个tomcat,然后去做应用的部署,那么很多同学可能会觉得比较为难,找的资料也比较的不齐全,那么今天华华就来给大家讲讲如何部署2个tomcat,并能够 ...

  10. nodejs在同一台服务器上部署并同时运行两个或以上服务端时,一个服务用户登录后会挤掉另一个用户的问题

    问题描述:一台服务器,部署了两个或以上不同的Web服务,服务A的用户在登陆后,服务B的用户也登陆,此时服务A的用户在点击页面时,会返回登陆页面. 问题根源:浏览器保存的session相同,即cooki ...

随机推荐

  1. import MySQLdb as Database ModuleNotFoundError: No module named ‘MySQLdb‘

    import MySQLdb as Database ModuleNotFoundError: No module named 'MySQLdb' import MySQLdb as Database ...

  2. idea 查看scala源代码

    使用idea编写spark程序,想要查看源代码,点进去是compiled code private[sql] def this(sc : org.apache.spark.SparkContext) ...

  3. 1、初认 AS400

    一.AS400 简介 AS/400是一种主机型计算机,是IBM公司开发的.AS/400是IBM的应用服务器产品,针对企业级应用开发.重要应用系统支持进行设计开发.AS/400的系统工作环境中同时支持多 ...

  4. golang依赖注入工具digo

    golang依赖注入工具 digo工具地址:https://github.com/werbenhu/digo 特性 使用注释中的注解 自动代码生成 自动检测循环依赖 编译时期依赖注入 自动初始化 支持 ...

  5. 如何使用Stable Diffusion生成艺术二维码?

    硬件准备 物理内存:至少16G(8G直接安装阶段就卡死) N卡:此处我使用GTX 1660 6G (2019年双12购买) 操作系统 windows 11 软件准备 网络要通畅 git: https: ...

  6. 【python基础】函数-初识函数

    函数是带名字的代码块,用于完成具体的工作,无需反复编写完成该工作的代码.之前我们接触过print函数,数据类型转换中的int函数.str函数,还有列表中的append函数.pop函数.remove函数 ...

  7. ChatGPT小型平替之ChatGLM-6B本地化部署、接入本地知识库体验

    本文期望通过本地化部署一个基于LLM模型的应用,能让大家对构建一个完整的应用有一个基本认知.包括基本的软硬环境依赖.底层的LLM模型.中间的基础框架及最上层的展示组件,最终能达到在本地零编码体验的目的 ...

  8. 编译器设计中的元编程:从Python到JavaScript的实现

    目录 编译器设计中的元编程:从Python到JavaScript的实现 随着编程语言的发展,编译器的实现也在不断地演变.编译器的实现方式有很多种,其中元编程(metaprogramming)是一种非常 ...

  9. 基于.NetCore开发博客项目 StarBlog - (29) 开发RSS订阅功能

    前言 最近忙中偷闲把博客的评论功能给做完了,我可以说这个评论功能已经达到「精致」的程度了 但在正式发布之前,先卖个关子,来介绍一下另一个新功能--RSS订阅 RSS是啥 来自hk gov新闻网的介绍~ ...

  10. Nmap使用教程(初级篇)

    基本扫描技术 扫描单个网络 nmap 192.168.1.1/www.baidu.com 扫描多个网络/目标 nmap 192.168.1.1 192.168.1.2 #将扫描同个网段内不同的ip地址 ...