在gitlab ci(跨服务通信)中配置redis主从架构

pbwdgjma  于 2021-06-09  发布在  Redis
关注(0)|答案(1)|浏览(477)

我正在尝试用两个服务设置简单的redis配置:主服务和从服务。
这是我人生的一部分 .gitlab-ci.yml 主从式设置:

integration:
  extends: .test
  variables:
    FF_NETWORK_PER_BUILD: "true"
  services:
    - name: redis:latest
      alias: "redis-master"
      command: [ "redis-server", "--port", "6379" ]
    - name: redis:latest
      alias: "redis-slave"
      command: [ "redis-server", "--slaveof", "slave-master", "6379" ]
script:
    - nc -z -v -w30 -n redis-master 6379 // fails to resolve hostname redis-master ...
    // wait for readiness of both databases
    // run tests

出于隐私考虑,它被简化了
由于我需要这些服务之间的通信,我知道我需要使用名为ff\ U network\ U per\ U build的功能标志,它:
为每个构建创建和使用新的用户定义docker brdge网络。
上述文件还指出
生成作业容器和服务容器都能够解析彼此的主机名(和别名)。
当谈到redis master和redis slave之间的连接时,一切都按预期工作,slave与master正确同步,但当我尝试使用脚本部分中的别名与它们连接时,会导致错误: Could not resolve hostname "redis-master": Name or service not known. QUITTING. 所以问题是为什么我不能在脚本部分使用别名?如果这是不可能的,我如何才能得到他们的IP,以便我可以ping他们,如果他们准备好连接?
旁注:
更有趣的是,当我不使用ff\u network\u per\u build标志别名时,它在脚本部分工作得很好(但同时redis slave不能与redis master通信,所以我不能ommit这个标志)。

5us2dqdw

5us2dqdw1#

在您使用的nc命令中 -n 选项,即每个人,执行以下操作
-n不要对任何指定的地址、主机名或端口执行任何dns或服务查找。
所以基本上你是在关闭你的dns搜索,这里有一个小测试来说明:

$ nc -z google.com 80; echo $?
0
$ nc -n -z google.com 80; echo $?
nc: getaddrinfo for host "google.com" port 80: Name or service not known
1

正在删除 -n 应该修好你的管道

相关问题