单机模拟集群(三主两从)

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 单机模拟集群(三主两从)

引言

操作系统环境:Ubuntu 20.04

Redis版本:6.2.8

准备工作

如果已经安装过了,找到自己的安装路径。如果没有安装过,去官网下载 当前最新版本是7.0,我这里用的是6.0,下载 redis-6.2.8.tar.gz,拷贝到自己的虚拟机或者云服务器。

tar -zxvf redis-6.2.8.tar.gz 解压

cd redis-6.2.8

make && make install (注意是root权限)

目标

在一台机器通过监听不同的port模拟集群(三台主服务器,每台主服务器有两个从服务器,总共9台服务器)

1、在redis的目录中创建redis_cluster文件夹

cd redis-6.2.8

mkdir redis_cluster

2、 在redis_cluster文件夹中分别创建端口号的文件夹(6390-6398)

mkdir 6390 6391 6392 6393 6394 6395 6396 6397 6398

3、以6390为例,在6390目录下创建文件redis.conf,并添加如下配置

注意:需要在步骤二创建的每个文件夹下创建配置文件,并做相应修改。

touch redis.conf

#端口号
port 6390
#默认ip为127.0.0.1,需要改为其他节点机器可以访问的ip,否则创建集群时无法访问对应的端口,无法创建集群
bind 192.168.60.69
#redis后台运行
daemonize yes
#pidfile文件对应6390,6391,6392…
pidfile /var/run/redis_6390.pid
#开启集群
cluster-enabled yes
#集群的配置,配置文件首次启动自动生成6390,6391,6392…
cluster-config-file nodes_6390.conf
#请求超时,默认15秒,可自行设置
cluster-node-timeout 10100
#aof日志开启,有需要就开启,它会每次写操作都记录一条日志
appendonly yes

4、分别向分别向6381-6388目录copy一份配置文件

cp -r redis.conf ../6391
cp -r redis.conf ../6392
cp -r redis.conf ../6393
cp -r redis.conf ../6394
cp -r redis.conf ../6395
cp -r redis.conf ../6396 
cp -r redis.conf ../6397
cp -r redis.conf ../6398

需要修改的配置:

port 639x  (根据端口号修改)
bind 127.0.0.1  我这里是本机模拟,写的本地地址,根据实际ip地址填写
pidfile /var/run/redis_639x.pid(根据端口号修改)
cluster-config-file nodes_639x.conf(根据端口号修改)

5. 启动Redis各个节点服务(一定要在src目录下启动,在其他地方无法启动)

./redis-server …/redis_cluster/6390/redis.conf
./redis-server …/redis_cluster/6391/redis.conf
./redis-server …/redis_cluster/6392/redis.conf
./redis-server …/redis_cluster/6393/redis.conf
./redis-server …/redis_cluster/6394/redis.conf
./redis-server …/redis_cluster/6395/redis.conf
./redis-server …/redis_cluster/6396/redis.conf
./redis-server …/redis_cluster/6397/redis.conf
./redis-server …/redis_cluster/6398/redis.conf

也可以写个脚本启动,就不用一个一个启动了:

vi cluster.sh

#!bin/bash
redis-server 6390/redis.conf
redis-server 6391/redis.conf
redis-server 6392/redis.conf
redis-server 6393/redis.conf
redis-server 6394/redis.conf
redis-server 6395/redis.conf
redis-server 6396/redis.conf
redis-server 6397/redis.conf
redis-server 6398/redis.conf

给脚本赋予执行权限 : chmod +x cluster.sh

运行脚本:./cluster.sh

6. 创建redis集群

因为redis最终是以数据库的形式的存在,原理和mysql一样,集群创建成功只能说明安装redis成功了,但是最终>

!!!注意还需要在redis的src目录下运行

当第一次运行的时候,才需要创建数据库,以后的每一次运行都不再需要了,直接启动集群即可

–cluster-replicas 2表示每个主节点有2个从节点

redis-cli --cluster create 127.0.0.1:6390 127.0.0.1:6391 127.0.0.1:6392 127.0.0.1:6393 127.0.0.1:6394 127.0.0.1:6395 127.0.0.1:6396 127.0.0.1:6397 127.0.0.1:6398 --cluster-replicas 2

注意:这里需要自己手动输入yes,如果超时了还没有输入,则会自动退出,需要再次创建!

看到以下信息说明创建redis集群搭建成功,且16384个槽位分配成功,:
M: eabfa31d4e7cefa01a64ec5e67ddba219ad74035 127.0.0.1:6390
   slots:[0-5460] (5461 slots) master
M: 2ac5623a741d707d4e2319795386d7e13b2ef575 127.0.0.1:6391
   slots:[5461-10922] (5462 slots) master
M: 6e4cfc6b5918ed9b59e8e7c8765f1e37a86d3d1b 127.0.0.1:6392
   slots:[10923-16383] (5461 slots) master
S: 41fdf2a9bec000cb282bd9bc75a1aa7f33417889 127.0.0.1:6393
   replicates 6e4cfc6b5918ed9b59e8e7c8765f1e37a86d3d1b
S: 15403c0a88c4ccf9ad2b67364588819621774085 127.0.0.1:6394
   replicates eabfa31d4e7cefa01a64ec5e67ddba219ad74035
S: 38ccc4d1ff1d7a3a31ed5ee805e5c479a6114588 127.0.0.1:6395
   replicates 6e4cfc6b5918ed9b59e8e7c8765f1e37a86d3d1b
S: 6f9550397b996b1d53eaeb98d344cef3945ac482 127.0.0.1:6396
   replicates 2ac5623a741d707d4e2319795386d7e13b2ef575
S: 78be26f6bdaa88e96e61ba145ba4236f59e9c5bc 127.0.0.1:6397
   replicates 2ac5623a741d707d4e2319795386d7e13b2ef575
S: b6429d56397229322f3144b59b3c7e79904fa349 127.0.0.1:6398
   replicates eabfa31d4e7cefa01a64ec5e67ddba219ad74035
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
......
>>> Performing Cluster Check (using node 127.0.0.1:6390)
M: eabfa31d4e7cefa01a64ec5e67ddba219ad74035 127.0.0.1:6390
   slots:[0-5460] (5461 slots) master
   2 additional replica(s)
S: 78be26f6bdaa88e96e61ba145ba4236f59e9c5bc 127.0.0.1:6397
   slots: (0 slots) slave
   replicates 2ac5623a741d707d4e2319795386d7e13b2ef575
M: 6e4cfc6b5918ed9b59e8e7c8765f1e37a86d3d1b 127.0.0.1:6392
   slots:[10923-16383] (5461 slots) master
   2 additional replica(s)
S: 6f9550397b996b1d53eaeb98d344cef3945ac482 127.0.0.1:6396
   slots: (0 slots) slave
   replicates 2ac5623a741d707d4e2319795386d7e13b2ef575
S: 15403c0a88c4ccf9ad2b67364588819621774085 127.0.0.1:6394
   slots: (0 slots) slave
   replicates eabfa31d4e7cefa01a64ec5e67ddba219ad74035
S: 38ccc4d1ff1d7a3a31ed5ee805e5c479a6114588 127.0.0.1:6395
   slots: (0 slots) slave
   replicates 6e4cfc6b5918ed9b59e8e7c8765f1e37a86d3d1b
M: 2ac5623a741d707d4e2319795386d7e13b2ef575 127.0.0.1:6391
   slots:[5461-10922] (5462 slots) master
   2 additional replica(s)
S: b6429d56397229322f3144b59b3c7e79904fa349 127.0.0.1:6398
   slots: (0 slots) slave
   replicates eabfa31d4e7cefa01a64ec5e67ddba219ad74035
S: 41fdf2a9bec000cb282bd9bc75a1aa7f33417889 127.0.0.1:6393
   slots: (0 slots) slave
   replicates 6e4cfc6b5918ed9b59e8e7c8765f1e37a86d3d1b
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

可以看到:

  1. 127.0.0.1:6390 127.0.0.1:6391 127.0.0.1:6392 是三个主服务器
  2. 6394 和 6398 是6390的从服务器
  3. 6396 和 6397 是6391的从服务器
  4. 6393 和 6395 是6392的从服务器

7. 检查redis集群是否启动成功

ps -ef | grep redis

看到如下信息就说明集群启动成功了。

root 2418510 1 0 11:32 ? 00:00:00 ./redis-server 127.0.0.1:6390 [cluster]

root 2418609 1 0 11:32 ? 00:00:00 ./redis-server 127.0.0.1:6391 [cluster]

root 2418712 1 0 11:32 ? 00:00:00 ./redis-server 127.0.0.1:6392 [cluster]

root 2418815 1 0 11:32 ? 00:00:00 ./redis-server 127.0.0.1:6393 [cluster]

root 2419062 1 0 11:32 ? 00:00:00 ./redis-server 127.0.0.1:6394 [cluster]

root 2419278 1 0 11:33 ? 00:00:00 ./redis-server 127.0.0.1:6395 [cluster]

root 2419440 1 0 11:33 ? 00:00:00 ./redis-server 127.0.0.1:6396 [cluster]

root 2419575 1 0 11:33 ? 00:00:00 ./redis-server 127.0.0.1:6397 [cluster]

root 2419749 1 0 11:33 ? 00:00:00 ./redis-server 127.0.0.1:6398 [cluster]

8. 集群状态查看及数据测试

进入redis的服务器客户端,也必须要在src目录下进行。其中,-c 表示以集群的方式启动节点,-p 是节点的端口

./redis-cli -c -p 6390

输入cluster info 查看集群状态

输入cluster nodes 查看集群各个节点主从关系

9. 退出

quit

10、注意

集群是去中心化的,从任意一个从节点,都可以访问到主节点。

集群的读写都走主节点


推荐一个零声学院免费教程,个人觉得老师讲得不错,分享给大家:[Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等技术内容,点击立即学习:

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
6月前
|
图形学
计算机辅助设计的基本原理与应用 - 副本
计算机辅助设计的基本原理与应用 - 副本
|
6月前
|
存储 监控 负载均衡
保证Redis的高可用性是一个涉及多个层面的任务,主要包括数据持久化、复制与故障转移、集群化部署等方面
【5月更文挑战第15天】保证Redis高可用性涉及数据持久化、复制与故障转移、集群化及优化策略。RDB和AOF是数据持久化方法,哨兵模式确保故障自动恢复。Redis Cluster实现分布式部署,提高负载均衡和容错性。其他措施包括身份认证、多线程、数据压缩和监控报警,以增强安全性和稳定性。通过综合配置与监控,可确保Redis服务的高效、可靠运行。
232 2
|
3月前
|
负载均衡 算法 Serverless
异步任务处理系统问题之实现负载随机分片的问题如何解决
异步任务处理系统问题之实现负载随机分片的问题如何解决
|
3月前
|
资源调度 Java 调度
项目环境测试问题之Schedulerx2.0通过分布式分片任务解决单机计算瓶颈如何解决
项目环境测试问题之Schedulerx2.0通过分布式分片任务解决单机计算瓶颈如何解决
项目环境测试问题之Schedulerx2.0通过分布式分片任务解决单机计算瓶颈如何解决
|
5月前
|
资源调度 算法 固态存储
在集群计算的时候,集群的主要瓶颈
在集群计算的时候,集群的主要瓶颈
|
5月前
|
存储 数据采集 canal
直连同步与分布式同步相比,有哪些差异?
【6月更文挑战第18天】直连同步与分布式同步相比,有哪些差异?
70 3
|
6月前
|
域名解析 负载均衡 网络协议
分布式与集群,二者区别是什么?
分布式与集群,二者区别是什么?
|
6月前
|
消息中间件 存储 缓存
Kafka【基础知识 02】集群+副本机制+数据请求+物理存储+数据存储设计(图片来源于网络)
【2月更文挑战第20天】Kafka【基础知识 02】集群+副本机制+数据请求+物理存储+数据存储设计(图片来源于网络)
131 1
|
存储 运维 NoSQL
数据复制系统设计(3)-配置新的从节点及故障切换过程详解
1.3 配置新的从节点 有时需考虑新增一个从节点: 提高容错能力 或替换失败的副本节点
139 0
|
Dubbo NoSQL Java
从单机定时到多层分发
在工作中基本上都会使用定时任务,常用的有 Spring 定时框架、Quartz、elastic-job、xxl-job 等。这里说不上框架的好坏,只有适合自己的才是最好的,本文仅从个人角度上谈一谈对定时任务的看法。
388 0