AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1270032
Accepted
aphid
aphid
Asked: 2020-08-26 07:14:17 +0800 CST2020-08-26 07:14:17 +0800 CST 2020-08-26 07:14:17 +0800 CST

使用 [email protected] 运行多个 redis 实例

  • 772

一个 redis-cluster 至少包含 6 个 redis 实例。故障转移群集的合理最小大小是 3 个节点。因此,我想在同一个节点上运行 2 个 redis 实例(但从不在同一个节点上运行两次相同的 redis 数据桶)作为一个最小的工作示例。我在使用标准配置工具在 ubuntu 下进行此设置时遇到了一些麻烦。

我的 redis 设置还涉及/需要一些redis-sentinel我认为也需要更改配置的东西。主要问题是:一个哨兵就足够了,还是我们需要两个redis-sentinels,两个redis-servers?(/lib/systemd/system/redis-sentinel@似乎存在)。

开箱即用,ubuntu 提供了一个特殊的/lib/systemd/system/redis-server@systemd 单元脚本,可以支持这些额外的服务器。我需要做什么才能拥有:

systemctl start redis-server@2

启动我的第二台服务器?

特别是:

  • 我已将端口 6380 添加到配置文件中,作为第二台服务器侦听的端口。
  • 如何克隆、编辑、指向配置文件以及哪些配置文件需要克隆。
  • 如何配置哨兵。
  • 如何保证redis不会把同一个slot的master和slave放在同一个节点上(达不到目的)。
  • 如何确保 PIDfile 可访问(默认情况下,由于不允许用户 redis 访问 pidfile 等目录中的 pidfile,因此存在拒绝访问消息redis-2)。

现在的进展

我复制了cp /etc/redis/redis-server.conf /etc/redis/redis-server-2.conf和chown redis.redis /etc/redis/redis-server-2.conf,然后编辑了

port = 6380
pidfile /var/run/redis-2/redis-server.pid
logfile /var/log/redis/redis-server-2.log

到目前为止,第二台服务器仅在 450 秒后超时(有没有办法缩短这段时间?测试/弄清楚这一点需要很长时间......)在所述日志文件中找到相当不透明的消息/var/log/redis/redis-server-2.log:

oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
Redis version=5.0.7, bits=64, commit=00000000, modified=0, pid=671078, just started
Configuration loaded
systemd supervision requested, but NOTIFY_SOCKET not found
Can't open nodes-6380.conf in order to acquire a lock: Read-only file system

前几条消息是即时的,而最后一条消息是在消息的其余部分之后不久打印的。它通常需要大约 2 毫秒才能弹出。之后,在分配给启动的剩余 89,998ms 时间内没有出现任何消​​息,之后 systemd 停止程序(可能是强制)并重试 4 次。(这就是每次尝试 450 秒的来源)。

这不可能Read-only file system是真正的问题。nodes-6379.conf服务可以轻松访问,该服务redis-server启动时没有问题。

我尝试过的相关内容

一个可能有趣的观察是是否redis-server@2会在主redis-server节点停止时启动。这没有效果。无论前者是启动还是停止,redis-server@2总是会以同样的速度失败并显示同样的神秘错误消息。

手动启动第二台服务器时,使用/usr/bin/redis-server /etc/redis/redis-2.conf它运行的命令,甚至接受集群连接,因此似乎可以工作。问题似乎出在 systemd 上。

进一步看,通过将ExecStart参数更改为

ExecStart=strace -f -o /var/log/redis/strace.out /usr/bin/redis-server /etc/redis/redis-%i.conf

并运行

touch /var/log/redis/strace.out
chown redis.adm /var/log/redis/strace.out

现在有该过程的 strace 输出。它产生了一个孩子,这个特定的行出错了:

811493 openat(AT_FDCWD, "nodes-6380.conf", O_WRONLY|O_CREAT, 0644) = -1 EACCES (Permission denied)

让我相信 systemd 在单元文件中使用了一个奇怪的 CWD 路径/lib/systemd/system/redis-server@。openat对于默认服务和手动启动,相同的调用成功。

systemd redis
  • 1 1 个回答
  • 1947 Views

1 个回答

  • Voted
  1. Best Answer
    aphid
    2020-08-27T02:47:03+08:002020-08-27T02:47:03+08:00

    450 秒的延迟是由 systemd 在错误的目录中查找 pid 文件引起的。

    当 Redis 的文件由于权限错误而无法访问时,会出现质量差的错误消息。它没有明确说明它试图写入/读取的位置。它似乎也忽略了它的一些配置,并且无论如何都使用自己的 CWD,这意味着为了运行,Redis 需要对这个目录进行 r/w 访问。

    这导致了这个问题:[email protected]脚本现在是错误的,它使用了不存在的 systemd 默认工作目录。[service]要解决此问题,请在标题下添加以下行:

    WorkingDirectory=/var/lib/redis
    

    最后,你需要明确说明 redis-2 应该在哪里寻找它的东西:

    除了pidfile和logfile参数之外,dbfilename和cluster-config-file也需要更改,因为它们被第一个 Redis 进程锁定,如果无法访问它们会产生类似的错误消息。正确的配置redis-2.conf是:

    port 6380 
    pidfile /var/run/redis-2/redis-server.pid 
    logfile /var/log/redis/redis-server-2.log 
    dbfilename dump-2.rdb
    cluster-config-file nodes-6380.conf
    
    • 0

相关问题

  • 命令列出启动时启动的服务?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve