redis主从节点

是的,Redis哨兵(Sentinel)确实是一个独立的服务,但它不需要单独下载------它和Redis服务器是"打包"在一起的。

你可以把它理解为Redis官方自带的一个"监控程序",就像手机出厂时自带了"健康监测"功能,不需要再去应用商店额外下载一个。只要你安装了Redis,这个哨兵程序就已经在你的电脑里了。

📦 如何安装?(不同操作系统)

虽然哨兵程序是内置的,但在不同系统上,安装方式有细微差别:

  • 对于大多数Linux系统(如Ubuntu/Debian):在你安装Redis服务器的时候,一个独立的哨兵软件包通常会自动作为依赖被一起安装。少数系统可能需要额外指定,命令如下:

    bash

    复制代码
    # 在Debian/Ubuntu系统上,如果需要单独安装哨兵,可以使用这个命令
    sudo apt install redis-sentinel

    安装完成后,你可以在 /etc/redis/ 目录下找到哨兵的专属配置文件 sentinel.conf

  • 对于Red Hat系列(如CentOS/RHEL):哨兵程序已经集成在Redis软件包中,安装Redis后即可直接使用。

✅ 如何验证哨兵已就绪?

安装完成后,你可以通过以下命令来验证它是否存在:

bash

复制代码
# 查看哨兵程序的版本信息
redis-sentinel --version

如果这个命令能正常显示版本号,就说明你的哨兵服务已经准备就绪了。

🚀 如何启动哨兵服务?

哨兵是通过读取一个配置文件来启动的。下面是标准的启动方式:

  1. 创建配置文件 :首先,你需要为哨兵创建一个配置文件(例如:sentinel.conf),并写入核心配置,告诉它要监控哪个Redis主节点。

    conf

    复制代码
    # 这是配置文件 sentinel.conf 的核心内容
    # 监控一个名为 mymaster 的主节点,IP为 127.0.0.1,端口为 6379
    # 最后的 2 表示需要至少2个哨兵同意才能进行故障转移
    sentinel monitor mymaster 127.0.0.1 6379 2
    
    # 可选:如果Redis主节点设置了密码,这里也必须配置
    sentinel auth-pass mymaster your_redis_password
  2. 启动哨兵:配置文件准备好后,就可以用它来启动哨兵服务了。通常有下面两种方式:

    • 方式一:使用 redis-sentinel 命令

      bash

      复制代码
      redis-sentinel /path/to/your/sentinel.conf
    • 方式二:使用 redis-server 命令并带上 --sentinel 参数

      bash

      复制代码
      redis-server /path/to/your/sentinel.conf --sentinel

      这两种方式完全等价,效果相同。

  3. 管理哨兵服务:如果你希望哨兵能在后台作为一个系统服务稳定运行,可以这样操作:

    bash

    复制代码
    # 启动哨兵系统服务
    sudo systemctl start redis-sentinel
    
    # 设置哨兵开机自启
    sudo systemctl enable redis-sentinel

简单来说,就是编辑好配置文件 → 执行启动命令。整个流程和启动一个普通的Redis服务非常相似。

关于 sentinel.conf 配置文件里的各项参数(比如 quorum 的值应该设多少)是否需要我详细解释一下?

哨兵和redis运行在一个端口上吗 集群的哨兵是不是要下载多个redis

已阅读 10 个网页

你问的这两个问题很关键,很多刚接触 Redis 高可用的人都会有同样的困惑。简单直接地回答:

  1. 哨兵和 Redis 不运行在同一个端口上。

  2. 部署哨兵集群不需要下载多个 Redis,一个 Redis 程序就够了。


1. 哨兵和Redis运行在不同的端口

它们使用的是完全不同的端口,这一点可以让你把它们区分得很清楚:

  • Redis 服务 (提供数据存储) : 默认端口是 6379 。你也可以按需修改,比如 6380, 6381 等 。

  • 哨兵 (Sentinel,负责监控) : 默认端口是 26379

一句话总结就是 :数据服务走 6379 系列端口,哨兵自己的通信走 26379 系列端口。它们各司其职,互不干扰,所以你完全不用担心会混淆。

2. 部署哨兵集群需要下载多个Redis吗?

完全不需要。 你只需要一份 Redis 程序。

这是因为哨兵本身就是一个在特殊模式下运行的 Redis 服务 。启动哨兵和启动一个普通的 Redis 实例用的是同一个 redis-server 程序,只是在后面多加了一个 --sentinel 参数。

你可以这样理解:

  • 普通模式redis-server /path/to/redis.conf -> 启动一个提供数据服务的 Redis 节点。

  • 哨兵模式redis-server /path/to/sentinel.conf --sentinel -> 启动一个进行监控的哨兵节点 。

部署一个典型集群,你需要准备什么?

假设我们要部署一个经典的高可用架构:1个主库、2个从库、3个哨兵。你并不需要下载3份Redis,只需要:

  1. 一个 Redis 程序:一份安装好的 Redis 就够了。

  2. 多份配置文件 :你需要为每一个实例(无论是 Redis 还是哨兵)准备一份独立的配置文件。每份文件里通过 port 参数指定不同的端口。

    • Redis 实例的配置文件 (比如 redis-6379.conf, redis-6380.conf, redis-6381.conf)

    • 哨兵实例的配置文件 (比如 sentinel-26379.conf, sentinel-26380.conf, sentinel-26381.conf)

  3. 多次启动命令:然后,你只需要用不同的配置文件和参数,把每个实例分别启动起来就行了 。

💎 总结一下

  • 端口不同 :记住数据服务是 6379,哨兵是 26379,这样就不会弄混。

  • 程序共用:你只需要一份 Redis 程序,通过不同的配置文件和启动命令来创建和管理所有实例,非常方便。

了解了这两个基础概念后,下一步通常就是动手部署了。需要我为你演示具体的配置文件编写和启动命令吗?

那通过一个reids程序 不同的配置文件启动的redis服务 相互有什么影响吗

通过一个Redis程序、用不同配置文件启动的多个Redis服务,它们之间基本是独立的,互不影响

可以把它理解为:你电脑上只安装了一个"Word软件",但你可以用它同时打开多个不同的文档进行编辑,这些文档在内存里是独立的,关闭一个不会影响另一个。Redis服务也是类似的。

🔍 为什么它们能互不影响?

当你用不同的配置文件启动Redis实例时,每个实例都会根据自己配置文件里的设定,去占用一套独立的系统资源,从而"各行其道":

关键资源 如何实现独立 说明
端口 每个配置文件的 port 参数必须不同 就像不同房间的门牌号,网络流量通过端口找到对应的实例。
内存 每个实例独立分配和使用内存 实例1的内存满了不会影响实例2,但会共同占用你服务器的物理内存。
持久化文件 配置不同的 dir (目录) 和 dbfilename (文件名) 每个实例的数据会保存到自己的文件夹里,不会混在一起。
日志文件 配置不同的 logfile 每个实例的运行日志分开记录,排查问题时非常清晰。
进程ID 操作系统会自动分配不同的PID 你可以用 `ps aux

📝 一个典型的部署例子

假设你想在一台服务器上部署一个主库(端口6379)和一个从库(端口6380),你需要做的就是:

  1. 准备两份配置文件redis-6379.confredis-6380.conf

  2. 关键配置必须不同

    • redis-6379.conf:

      text

      复制代码
      port 6379
      pidfile /var/run/redis_6379.pid
      dir /data/redis/6379
    • redis-6380.conf:

      text

      复制代码
      port 6380
      pidfile /var/run/redis_6380.pid
      dir /data/redis/6380
      replicaof 127.0.0.1 6379   # 关键:声明自己是6379的从库
  3. 启动服务

    bash

    复制代码
    # 启动主库
    redis-server /path/to/redis-6379.conf
    # 启动从库
    redis-server /path/to/redis-6380.conf

这样,两个Redis服务就会互不干扰地运行。你可以通过 redis-cli -p 6379redis-cli -p 6380 分别连接它们进行操作。

⚠️ 需要注意的唯一"影响"

虽然服务独立,但它们毕竟共享着同一台机器的物理硬件资源 。最主要的"影响"是资源竞争,比如:

  • 内存总上限:如果实例1占用了8G内存,实例2又想占用8G,但服务器只有16G内存,那么两个实例就会争抢资源,可能导致系统变慢甚至崩溃。

  • CPU和磁盘I/O:在高负载下,它们会互相争抢CPU时间片和磁盘读写带宽。

因此,规划时务必备份好配置文件,为每个实例合理分配 maxmemory 内存上限,并监控好服务器的总体资源使用情况。

💎 总结

一个程序,多份配置,多个独立服务,这是利用Redis实现单机多实例部署的标准模式。你只需要确保每个实例的关键资源(端口、文件路径)不冲突,它们就能像完全独立的服务器一样稳定运行。

如果你想了解如何为这些实例配置主从复制 (就像上面例子里的replicaof指令)或者哨兵监控,我们可以继续深入聊聊。

可以

好的。在你已经理解"一份Redis程序可以启动多个独立实例"的基础上,我们来看看如何为这些实例配置主从复制哨兵监控。这两种机制能让你的Redis拥有数据冗余和自动故障转移的能力,是搭建高可用服务的核心。

下面我会用一个经典的"一主两从三哨兵"架构为例,带你完成整个部署。

1. 部署目标

我们计划在同一台机器上,利用不同端口部署以下实例:

  • Redis 主节点6379

  • Redis 从节点6380, 6381

  • Redis 哨兵26379, 26380, 26381

2. 第一步:准备配置文件

你需要为每个实例准备一份独立的配置文件。为方便管理,建议为每个实例创建独立的文件夹。

2.1 Redis 主节点 (端口 6379)

创建文件 sentinel-test/6379/redis.conf,内容如下:

conf

复制代码
port 6379
daemonize yes
pidfile /var/run/redis_6379.pid
logfile "redis.log"
dir /data/redis/6379

这里 daemonize yes 会让Redis在后台运行。

2.2 Redis 从节点 (端口 6380, 6381)

从节点的配置与主节点类似,但多了一行 replicaof 指令来指明它的主节点是谁,同时端口和数据目录要改为自己的。

  • sentinel-test/6380/redis.conf:

    conf

    复制代码
    port 6380
    daemonize yes
    pidfile /var/run/redis_6380.pid
    logfile "redis.log"
    dir /data/redis/6380
    replicaof 127.0.0.1 6379   # 关键:声明自己是6379的从库
  • sentinel-test/6381/redis.conf:

    conf

    复制代码
    port 6381
    daemonize yes
    pidfile /var/run/redis_6381.pid
    logfile "redis.log"
    dir /data/redis/6381
    replicaof 127.0.0.1 6379   # 关键:声明自己是6379的从库
2.3 哨兵节点 (端口 26379, 26380, 26381)

哨兵的配置更简单,核心是告诉它要监控哪个主节点。

  • sentinel-test/sentinel-26379/sentinel.conf:

    conf

    复制代码
    port 26379
    daemonize yes
    pidfile /var/run/sentinel_26379.pid
    logfile "sentinel.log"
    sentinel monitor mymaster 127.0.0.1 6379 2
    sentinel down-after-milliseconds mymaster 30000
    sentinel failover-timeout mymaster 180000
    sentinel parallel-syncs mymaster 1

⚠️ 重要提示 :如果Redis节点设置了访问密码(通过 requirepass 配置),哨兵配置中必须增加一行:
sentinel auth-pass mymaster 你的Redis密码

对于另外两个哨兵(端口 26380, 26381),只需复制此配置文件,并将 port 修改为对应的端口即可。

3. 第二步:启动服务

所有配置文件准备就绪后,就可以用一条命令启动一个实例。为了方便,可以把这些命令写成一个脚本。

bash

复制代码
# 1. 启动Redis主从节点
redis-server ./sentinel-test/6379/redis.conf
redis-server ./sentinel-test/6380/redis.conf
redis-server ./sentinel-test/6381/redis.conf

# 2. 启动哨兵节点 (用 --sentinel 参数)
redis-server ./sentinel-test/sentinel-26379/sentinel.conf --sentinel
redis-server ./sentinel-test/sentinel-26380/sentinel.conf --sentinel
redis-server ./sentinel-test/sentinel-26381/sentinel.conf --sentinel

4. 第三步:验证部署

使用 redis-cli 工具可以很方便地验证配置是否成功。

  • 检查主从状态

    连接到主节点,执行 INFO replication,你应该能看到下面有两个从节点(slave0slave1)。

    bash

    复制代码
    redis-cli -p 6379 INFO replication
  • 检查哨兵状态

    连接到一个哨兵,执行 SENTINEL master mymasterSENTINEL replicas mymaster

    bash

    复制代码
    redis-cli -p 26379 SENTINEL replicas mymaster

5. 第四步:测试故障转移(可选)

你可以手动模拟主节点宕机,观察哨兵集群是否自动完成了故障转移。

  1. 停止主节点

    bash

    复制代码
    redis-cli -p 6379 SHUTDOWN
  2. 查看新的主节点

    稍等片刻(约30秒),再次查询哨兵,看看新的主节点变成了谁。

    bash

    复制代码
    redis-cli -p 26379 SENTINEL get-master-addr-by-name mymaster

    输出应该会变成 63806381 的地址。

通过以上步骤,你就成功搭建了一个具备高可用能力的Redis主从哨兵集群。在你的Spring Boot应用中,只需要配置哨兵信息,应用就能自动连接到当前可用的主节点并进行读写操作了。

相关推荐
Wyawsl2 小时前
Python操作MySQL数据库
数据库·python·mysql
水彩橘子2 小时前
PostgreSQL Streaming Replication 主从
数据库·postgresql
亚马逊云开发者2 小时前
Amazon Aurora PostgreSQL 快速配置实战:两次点击秒级创建无服务器数据库,告别 VPC 子网安全组配置噩梦
数据库·postgresql·serverless
晴天sir2 小时前
Redis 在业务中的几种典型用法
java·数据库·redis
jnrjian2 小时前
B树index 的维护 Oracle
数据库·oracle
正在走向自律2 小时前
企业级数据库存储运维实战:表空间自动创建与存储架构深度优化
运维·数据库·架构·表空间
jnrjian2 小时前
Oracle 并发 锁
数据库
爱码小白3 小时前
MySQL 常用数据类型的系统总结
数据库·python·算法
被摘下的星星3 小时前
MySQL drop和delete的区别
数据库·mysql