首页 > 数据库 >一台服务器上部署 Redis 伪集群

一台服务器上部署 Redis 伪集群

时间:2023-08-29 14:58:55浏览次数:37  
标签:Redis 192.168 redis 149.131 rvm 集群 usr 服务器 local

哈喽大家好,我是咸鱼

今天这篇文章介绍如何在一台服务器(以 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 的最新特性保持一致

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

# 三个 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

image

# 验证是否安装成功
[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

image
由上图可以看到

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,192.168,redis,149.131,rvm,集群,usr,服务器,local
From: https://www.cnblogs.com/edisonfish/p/17664750.html

相关文章

  • redis主从复制
    目录一什么是主从复制1.1主从复制:一主一从,一主多从1.2特点1.3Redis主从复制的作用二主从原理2.1主库是否要开启持久化(一般情况要开启)3.2方式一3.3方式二:配置文件方式一什么是主从复制redis单实例--->容易产生机器故障;容量瓶颈;QPS(每秒查询率)瓶颈1.1主从复制:一主一......
  • Kubernetes集群部署三节点yum部署
    一、修改主机名(三个节点都操作)vi/etc/hostname#跟换主机名systemctlrestartsystemd-hostnamed#修改完成后重新链接服务二、同步时间(三个节点都操作)yuminstallntpdate-yntpdatetime.windows.com#时区设置cp/usr/share/zoneinfo/Asia/Shanghai/etc/localtime#最......
  • RTSP/Onvif视频服务器EasyNVR视频平台设备在线但通道无法播放的问题解决方案
    EasyNVR是基于RTSP/Onvif协议的视频平台,可支持将接入的视频流进行全平台、全终端的分发,分发的视频流包括RTSP、RTMP、HTTP-FLV、WS-FLV、HLS、WebRTC等格式。为了满足用户的集成与二次开发需求,我们也提供了丰富的API接口供用户调用。有需要的用户可参照官方接口文档进行操作。......
  • redis分布式锁,setnx+lua脚本的java实现
    1前言在现在工作中,为保障服务的高可用,应对单点故障、负载量过大等单机部署带来的问题,生产环境常用多机部署。为解决多机房部署导致的数据不一致问题,我们常会选择用分布式锁。目前其他比较常见的实现方案我列举在下面:基于缓存实现分布式锁(本文主要使用redis实现)基于数据库实......
  • 服务器数据恢复-RAID6磁盘重组RAID5导致原RAID6数据丢失的数据恢复案例
    服务器数据恢复环境:一台存储设备中有一组由12块硬盘组建的RAID6磁盘阵列,上层采用EXT3文件系统,共划分3个LUN。服务器故障&分析:存储设备在运行过程中RAID6阵列突然不可用,管理员对故障存储进行了重新分配RAID的操作并进行了初始化。初始化一段时间后,管理员察觉有异,于是强行终止初始......
  • 连接redis后 ,报错: ERR wrong number of arguments for ‘hset‘ command“怎么解决
    原因:ERRwrongnumberofargumentsfor‘hset‘command触发代码 解决方法:可能是java不匹配我本地3.2版本的redis,我换一个更大版本的redis就解决了 ......
  • Linux高性能服务器编程阅读1:
    Linux:所有东西都是文件。socket也是可读,可写,可控制,可编程的文件描述符。I/O高级函数:1.pipe()和dup()/dup2()pipe()函数创建的两个文件描述符fd[0]和fd[1]分别构成管道的两端,往fd[1]中写入的数据可以从fd[0]中读出。且,fd[1]只能写入数据,fd[0]只能读出数据,不能颠倒。dup和dup2......
  • redis持久化
    目录一持久化1.1什么是持久化1.2持久化的实现方式二rdb方案2.1使用2.2RDB问题三AOF3.1AOF介绍3.2#AOF的三种策略3.3AOF重写实现方式AOF重写配置:自动触发时机(两个条件同时满足):重写流程aof配置7.3混合持久化一持久化1.1什么是持久化redis的所有数据保存在内存中,对数......
  • Web服务器项目详解
    文章目录一、新连接到来的处理流程二、Channel、TcpConnection、TcpServer、Poller、EventLoop类详解1、Channel类2、TcpConnection类3、TcpServer类4、Poller类5、EventLoop类三、这几个类之间的关系一、新连接到来的处理流程一个新的连接到来后,首先被MainReactor接收,然后通过轮......
  • Redis简介
    文章目录一、Redis是什么?二、Redis优缺点?三、Redis应用场景四、Redis安装和使用五、Redis为什么这么快?1、为什么采用单线程2、Redis的I/O多路复用一、Redis是什么?Redis(RemoteDictionaryServer:远程字典服务)是一个开源的使用ANSIC语言编写、遵守BSD协议、支持网络、可基于......