一文掌握,单机Redis、哨兵和Redis Cluster的搭建,建议收藏

news2024/12/25 12:44:40

本篇文章讲述了 Redis 单机环境、主备、哨兵 Sentinel 模式以及 Redis Cluster 集群模式下的操作步骤,关于这些操作我们没必要死记硬背,只需要总结下来,下次使用直接拿出来就好。

建议当作操作手册收藏。

安装单实例 Redis

编译Redis

1.下载Redis源码包wget https://download.redis.io/releases/redis-5.0.13.tar.gz2.解压文件tar -zxvf redis-5.0.13.tar.gz3.cd redis-5.0.134.make 编译

1.如果遇到以下报错,需要安装依赖 yum install gcc

5790e6f864123f1fa8e7f3dfe6be2c77.png

2.如果遇到以下报错

cd50a572e915cd215aedbc80337e1ca5.png

分配器allocator, 如果有MALLOC 这个 环境变量, 会有用这个环境变量的 去建立Redis。

而且libc 并不是默认的 分配器, 默认的是 jemalloc, 因为 jemalloc 被证明 有更少的 fragmentation problems 比libc。

但是如果你又没有jemalloc 而只有 libc 当然 make 出错。所以加这么一个参数,运行如下命令:

make MALLOC=libc

此时编译完成,文件目录下已经生成可执行文件。

5f3f7517d111064bf0845c58591bfc5f.png

安装Redis服务

1.安装编译后的文件make install PREFIX=/usr/local/redis52.编辑环境变量vi /etc/profile3.追加如下信息

export REDIS_HOME=/usr/local/redis5
export PATH=$PATH:$REDIS_HOME/bin

4.更新配置source /etc/profile

echo $PATH检查环境变量是否正确

f0dc1c2f822a4267dab8cc1650c36615.png

5.cd utils/6.安装服务./install_server.sh然后出现如下输出

[root@node1 utils]# ./install_server.sh 
Welcome to the redis service installer
This script will help you easily set up a running redis server


Please select the redis port for this instance: [6379]  选择启动端口
Selecting default: 6379
Please select the redis config file name [/etc/redis/6379.conf] 设置配置文件目录
Selected default - /etc/redis/6379.conf
Please select the redis log file name [/var/log/redis_6379.log] 设置日志目录
Selected default - /var/log/redis_6379.log
Please select the data directory for this instance [/var/lib/redis/6379] 设置数据库目录
Selected default - /var/lib/redis/6379
Please select the redis executable path [/usr/local/redis5/bin/redis-server] 设置可执行文件目录
Selected config:
Port           : 6379
Config file    : /etc/redis/6379.conf
Log file       : /var/log/redis_6379.log
Data dir       : /var/lib/redis/6379
Executable     : /usr/local/redis5/bin/redis-server
Cli Executable : /usr/local/redis5/bin/redis-cli
Is this ok? Then press ENTER to go on or Ctrl-C to abort.
Copied /tmp/6379.conf => /etc/init.d/redis_6379 复制配置文件
Installing service... 安装服务
Successfully added to chkconfig! 设置开机启动
Successfully added to runlevels 345!
Starting Redis server... 启动服务
Installation successful!


7.service redis_6379 status 检查是否安装成功ps -ef|grep redis 检查正在运行的服务

ee35a3f400738b2153f0497012113e85.png

配置修改

1.修改 配置信息vi /etc/redis/6379.conf (这一步可选)

daemonize no # 前台方式运行 为了方便观察
#logfile /var/log/redis_6379.log #注释掉,前台输出 为了方便观察
appendonly yes # aof同步开启

2.启动 redis-server /etc/redis/6379.conf3.启动客户端 redis-cli -p 6379

主备安装

1.使用install_server.sh再安装两个Redis实例,使用端口号在同一机器区分 这里分别使用6379,6380,6381,并且分别启动2.登陆客户端 redis-cli -p 63813.输入命令 help SLAVEOF,6380端口实例操作同理。

redis-cli -p 6381 127.0.0.1:6381>help SLAVEOF
SLAVEOF host port
     summary: Make the server a replica of another instance, or promote it as master. Deprecated starting with Redis 5. Use REPLICAOF instead.
     since: 1.0.0
     group: server


   127.0.0.1:6381> REPLICAOF 127.0.0.1 6379
   OK
   127.0.0.1:6381>

4.设置追随6379为主 REPLICAOF 127.0.0.1 6379

4324d1b8f2a80d751d3384869d48ee8c.png

6381变化:

fa160ee7da7af255a53d04440a7fe63f.png

6379变化:

e4da7490d040ba02ae365173ea9faf99.png

25692:S 03 Sep 2021 20:19:53.182 * REPLICAOF 127.0.0.1:6379 enabled (user request from 'id=3 addr=127.0.0.1:42336 fd=7 name= age=113 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=44 qbuf-free=32724 obl=0 oll=0 omem=0 events=r cmd=replicaof')
25692:S 03 Sep 2021 20:19:54.146 * Connecting to MASTER 127.0.0.1:6379
25692:S 03 Sep 2021 20:19:54.146 * MASTER <-> REPLICA sync started
25692:S 03 Sep 2021 20:19:54.146 * Non blocking connect for SYNC fired the event.
25692:S 03 Sep 2021 20:19:54.147 * Master replied to PING, replication can continue...
25692:S 03 Sep 2021 20:19:54.147 * Trying a partial resynchronization (request 839fc4e0817f7c98e9fa8204c53aedf661c71bf1:1).
25692:S 03 Sep 2021 20:19:54.148 * Full resync from master: 4cff4bffe3e33adcca1864de53064480eb00c200:0
25692:S 03 Sep 2021 20:19:54.148 * Discarding previously cached master state.
25692:S 03 Sep 2021 20:19:54.251 * MASTER <-> REPLICA sync: receiving 176 bytes from master
25692:S 03 Sep 2021 20:19:54.254 * MASTER <-> REPLICA sync: Flushing old data  # 会先删除本节点老数据
25692:S 03 Sep 2021 20:19:54.254 * MASTER <-> REPLICA sync: Loading DB in memory
25692:S 03 Sep 2021 20:19:54.254 * MASTER <-> REPLICA sync: Finished with success

效果如下图:

a5b5fbc5919a1e12090559bd274684a8.png

如果一个节点首次追随主节点,会执行RDB同步 如果从节点挂掉,启动直接追随先前的主节点,只做增量同步 但是如果节点挂掉,启动直接追随先前的主节点,同步方式为AOF,则会做RDB全量同步。。可能是因为AOF没有记录之前追随过谁

取消追随主节点:REPLICAOF no one

哨兵模式 Sentinel

配置 sentinel

1.从redis源码目录复制官网提供的配置文件cp /root/soft/redis-5.0.13/sentinel.conf /etc/redis/sentinel_26379.conf2.修改配置文件

port 26379
sentinel monitor mymaster 127.0.0.1 6379 2

3.启动sentinel实例redis-server /etc/redis/sentinel_26379.conf --sentinel 以此为例启动三台

2ed645022cccbb5a27f5a41def1cf4bd.png

99ea9c5d04bea95f717433ba5e95fe27.png

4.设置 sentinel 成功

验证

1.此时杀死master 6379实例

13e0e74e6ecbcf7b6fc13c85ffe78a6f.png

2.选举6380为新的主节点

c4b2d89217f5d04778669db051e6f5de.png

3.此时重启6379节点 

redis-server /etc/redis/6379.conf

24a5c6238be20e7cae231439726f3058.png

其中一个sentinel输出如下

11035:X 04 Sep 2021 01:41:29.685 # -sdown slave 127.0.0.1:6379 127.0.0.1 6379 @ mymaster 127.0.0.1 6380
11035:X 04 Sep 2021 01:41:39.675 * +convert-to-slave slave 127.0.0.1:6379 127.0.0.1 6379 @ mymaster 127.0.0.1 6380
原有的主节点已经切换为备用节点

Redis Cluster

配置集群

1.查看Redis cluster相关命令 redis-cli --cluster help

[root@node1 ~]# redis-cli --cluster help
Cluster Manager Commands:
  create         host1:port1 ... hostN:portN
                 --cluster-replicas <arg>
  check          host:port
                 --cluster-search-multiple-owners
  info           host:port
  fix            host:port
                 --cluster-search-multiple-owners
  reshard        host:port
                 --cluster-from <arg>
                 --cluster-to <arg>
                 --cluster-slots <arg>
                 --cluster-yes
                 --cluster-timeout <arg>
                 --cluster-pipeline <arg>
                 --cluster-replace
  rebalance      host:port
                 --cluster-weight <node1=w1...nodeN=wN>
                 --cluster-use-empty-masters
                 --cluster-timeout <arg>
                 --cluster-simulate
                 --cluster-pipeline <arg>
                 --cluster-threshold <arg>
                 --cluster-replace
  add-node       new_host:new_port existing_host:existing_port
                 --cluster-slave
                 --cluster-master-id <arg>
  del-node       host:port node_id
  call           host:port command arg arg .. arg
  set-timeout    host:port milliseconds
  import         host:port
                 --cluster-from <arg>
                 --cluster-copy
                 --cluster-replace

2.分别启动每个Redis实例

Redis 本身在Utils目录下提供了单机部署 cluster demo 的util脚本,可以快速一键部署。

cd /root/soft/redis-5.0.13/utils/create-cluster

vi create-cluster

# Settings
PORT=30000
TIMEOUT=2000
NODES=6 # 节点数
REPLICAS=1 # 备用节点数 此配置为3主3从

./create-cluster start 启动实例

./create-cluster create

3.redis-cli --cluster create 127.0.0.1:30001 127.0.0.1:30002 127.0.0.1:30003 127.0.0.1:30004 127.0.0.1:30005 127.0.0.1:30006 --cluster-replicas 1

5142d3948a28a337d100412b263e4aa1.png

4.创建集群完成,客户端链接校验redis-cli -c -p 30001

ec7c6131b74e2c402e6f7835e9fd9006.png

 如果发生了自动重定向,则表示RedisCluster使用正常

检查Redis cluster状态

1.redis-cli --cluster check 127.0.0.1:30001

4f6b7722d2da702a66bd88c7f929036c.png

reshrad Redis槽位

1.redis-cli --cluster reshard 127.0.0.1:300012.然后按照提示操作,首先选择要移动的槽位数量,然后选择接受节点

9f76b60087de4e668536fa29d55c77ed.png

3.再选择需要从哪些节点移出槽位

33d5aecadf8ff27b21b4c98ed1529349.png

4.最后输入done,然后yes确定5.检查移动后的结果 redis-cli --cluster info 127.0.0.1:30001

87161d0b1235002ed374321e789066a8.png

如果对你有帮助,欢迎点赞、评论或分享,感谢阅读!

无需注册直接体验ChatGPT!附注册ChatGPT详细教程

2023-02-09

7e488c1cbc2d5bf3b2a4d425d77de809.jpeg

MySQL事务ACID都知道,原理是什么?附面试题

2023-02-07

9ebd630f928e055c72432cb00e973f97.jpeg

Dubbo重点,SPI的自适应扩展原理|原创

2023-01-11

fc1694eae58648ac08a2a19c1709db3c.jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/339871.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

小白都能学会的红帽(RedHat8)RHEL8系统安装实战

文章目录前言一. 实验环境二. 安装虚拟机三. 安装操作系统四. 系统安装成功后的操作总结前言 本文是应一位大佬的提议&#xff0c;建议我写写红帽系列&#xff0c;centos8已经不维护了&#xff0c;centos7 维护到2024年6月30日&#xff0c; 也就是明年的事情了&#xff0c;所以…

【Flutter入门到进阶】Dart基础篇---基于对比Java学习Dart

1 Dart语言特性 1.1 简介 1.1.1 说明 2011年10月&#xff0c;在丹麦召开的 GOTO 大会上&#xff0c;Google 发布了一种新的编程语言 Dart 。如同 Kotlin 和 Swift 的出现&#xff0c;分别是为了解决 Java 和 Objective-C 在编写应用程序的一些实际问题一样&#xff0c;Dart 的…

算法笔记(二)—— 认识N(logN)的排序算法

递归行为的时间复杂度估算 整个递归过程是一棵多叉树&#xff0c;递归过程相当于利用栈做了一次后序遍历。 对于master公式&#xff0c;T(N)表明母问题的规模为N&#xff0c;T(N/b)表明每次子问题的规模&#xff0c;a为调用次数&#xff0c;加号后面表明&#xff0c;除去调用之…

八股初始:RocketMQ

一、消息队列介绍 消息队列是什么 对于 MQ 来说&#xff0c;其实不管是 RocketMQ、Kafka 还是其他消息队列&#xff0c;它们的本质都是&#xff1a;一发一存一消费。 将 MQ 掰开了揉碎了来看&#xff0c;都是「一发一存一消费」&#xff0c;再直白点就是一个「转发器」。生产…

记一次上环境获取资源失败的案例

代码结构以及资源位置 测试代码 RestController RequestMapping("/json") public class JsonController {GetMapping("/user/1")public String queryUserInfo() throws Exception {// 如果使用全路径, 必须使用/开头String path JsonController.class.ge…

《计算机组成与设计》03. 计算机的算术运算

文章目录整数运算加法与减法乘法普通十进制乘法硬件中实现步骤例子乘法器的设计除法普通十进制除法硬件中实现步骤例子除法器的设计浮点数运算科学计数法、规格化数浮点表示单精度浮点数双精度浮点数移码表示法IEEE 754指数偏移值&#xff08;exponent bias&#xff09;规格化的…

计算机网络4:计算机网络体系结构

目录计算机网络体系结构1.网络模型2.每一层的代表含义2.1 OSI7层模型2.2 五层协议2.3 TCP/IP 四层协议3.数据在各层之间的传输过程4.为什么要进行分层计算机网络体系结构 1.网络模型 2.每一层的代表含义 2.1 OSI7层模型 &#xff08;1&#xff09;物理层&#xff1a;比特流–…

STC15中断系统介绍

STC15中断系统介绍✨本篇参考来源于STC官方stc15系列手册:538页- 589页。&#xff08;文末提供该摘取部分的文档资料&#xff09; &#x1f389;在官方提供的手册资料中&#xff0c;一个系列一份手册&#xff0c;手册内容涵盖了数据手册和参考手册以及例程案例。对于学习着来说…

彻底搞懂分布式系统服务注册与发现原理

目录 引入服务注册与发现组件的原因 单体架构 应用与数据分离

火遍全球的ChatGPT技术简介与主干网络代码

如果说当下最火的AI技术和话题是什么&#xff0c;恐怕很难绕开ChatGPT。各大厂商都在表示未来要跟进ChatGPT技术&#xff0c;开发在自然语言处理智能系统&#xff0c;可见其影响力。本篇博客追个热度&#xff0c;来简单的介绍下ChatGPT到底是一项什么技术&#xff0c;究竟如何完…

深入理解innodb存储格式,双写机制,buffer pool底层结构和淘汰策略

MySql系列整体栏目 内容链接地址【一】深入理解mysql索引本质https://blog.csdn.net/zhenghuishengq/article/details/121027025【二】深入理解mysql索引优化以及explain关键字https://blog.csdn.net/zhenghuishengq/article/details/124552080【三】深入理解mysql的索引分类&a…

【网络编程】Java中的Socket

文章目录前言socket是什么&#xff1f;Java中的SocketJava实现网络上传文件前言 所谓Socket&#xff08;套接字&#xff09;&#xff0c;就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端&#xff0c;提供了应用层进程利用…

kafka入门篇

文章目录前言介绍概念与说明安装启动配置命令操作创建topic查看topic列表发送消息&#xff08;启动一个生产者&#xff09;消费消息&#xff08;启动一个消费者&#xff09;查询topic信息删除topic集群关机使用报错java连接示例前言 作为入门篇&#xff0c;主要是了解Kafka的概…

在windows下载安装netcat(nc)命令

参考文章 一、netcat(nc)下载 网盘下载 netcat(nc)下载地址&#xff1a;netcat 1.11 for Win32/Win64 二、配置环境变量 在Path里添加netcat的存放路径 参数 说明 -C 类似-L选项&#xff0c;一直不断连接[1.13版本新加的功能] -d 后台执行 -e prog 程序重定向&am…

能取代90%人工作的ChatGPT到底牛在哪?

&#x1f4e3;&#x1f4e3;&#x1f4e3;&#x1f4e3;&#x1f4e3;&#x1f4e3;&#x1f4e3; &#x1f38d;大家好&#xff0c;我是慕枫 &#x1f38d;前阿里巴巴高级工程师&#xff0c;InfoQ签约作者、阿里云专家博主&#xff0c;一直致力于用大白话讲解技术知识 &#x…

Web 框架 Flask 快速入门(二)表单

课程地址&#xff1a;Python Web 框架 Flask 快速入门 文章目录&#x1f334; 表单1、表单介绍2、表单的简单实现1. 代码2. 代码的执行逻辑3、使用wtf扩展实现4、bug记录&#xff1a;表单验证总是失败&#x1f334; 表单 1、表单介绍 当我们在网页上填写账号密码进行登录的时…

Spring 面试题(一):Spring 如何处理全局异常?

❤️ 博客首页&#xff1a;水滴技术 &#x1f680; 支持水滴&#xff1a;点赞&#x1f44d; 收藏⭐ 留言&#x1f4ac; &#x1f338; 订阅专栏&#xff1a;Spring 教程&#xff1a;从入门到精通 文章目录1、如何处理全局异常2、代码示例2.1、定义统一的“响应结果对象”2.2、…

Leetcode 回溯详解

回溯法 回溯法有“通用解题法”之称&#xff0c;用它可以系统地搜索问题的所有解。回溯法是一个既带有系统性又带有跳跃性的搜索算法。 在包含问题的所有解的解空间树中&#xff0c;按照深度优先搜索(DFS)&#xff09;的策略&#xff0c;从根结点出发深度探索解空间树。当探索…

MWORKS--同元软控MWORKS介绍、安装与使用

MWORKS--同元软控MWORKS介绍、安装与使用1 同元软控介绍1.1 同元软控简介1.2 同元软控发展历史2 MWORKS介绍2.1 MWORKS简介2.2 MWORKS产品描述3 装备数字化3.1 发展3.2 内涵3.3 系统模型发展成为产品的一部分3.4 MWORKS系统模型数据管理3.4 MWORKS为装备数字化提供的套件参考1 …

springcloud集成seata(AT)分布式事务

目录 一、 下载seata server和seata源码 二、配置启动seata 2.1 在nacos控制台&#xff0c;新建一个seata的名称空间&#xff0c;用于存放seata的专用配置 2.2 创建seata server的mysql库 2.3 在nacos上配置seata相关配置 &#xff08;seata名称空间&#xff09; 2.4 启动…