在docker-compose中进行Redis主从设置--只读的从站。

问题描述 投票:1回答:1

如何让Redis slave在docker-compose.yml中可写?

我有一个Python脚本在运行,在失败的情况下无法传输到slave,原因是以下错误。

  File "app.py", line 22, in <module>
    r.set(timestamp, num)
  File "/usr/local/lib/python2.7/site-packages/redis/client.py", line 1519, in set
    return self.execute_command('SET', *pieces)
  File "/usr/local/lib/python2.7/site-packages/redis/client.py", line 839, in execute_command
    return self.parse_response(conn, command_name, **options)
  File "/usr/local/lib/python2.7/site-packages/redis/client.py", line 853, in parse_response
    response = connection.read_response()
  File "/usr/local/lib/python2.7/site-packages/redis/connection.py", line 717, in read_response
    raise response
redis.exceptions.ReadOnlyError: You can't write against a read only replica.

以下是docker-compose.yml正在使用。

services:

  redis-master:
    container_name: redis-master
    image: redis:latest
    command: redis-server --port 6379
    ports:
      - "6379:6379"
    volumes:
      - .:/app

  redis-slave:
    container_name: redis-slave
    image: redis:latest
    command: redis-server --slaveof redis-master 6379
    volumes:
       - .:/app

slave的输出。

root@29b9b3919c4a:/data# redis-cli -p 6379 info replication
# Replication
role:slave
master_host:192.168.48.7
master_port:6379
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_repl_offset:257149
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:2705ce53eb2c7778f207f7626280ca0964dc87b1
master_replid2:8acb89aa40f8d7edc254eaed3ac197d08b808e82
master_repl_offset:257149
second_repl_offset:60757
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:60757
repl_backlog_histlen:196393

有没有一个选项可以添加到docker-compose.yml中,让slave可以写?

非常感谢

redis docker-compose master-slave
1个回答
0
投票

在redis.conf文件中,有这个选项。replica-read-only yes.

你需要把这个值改成允许在slave上写东西。

你可以配置一个副本实例是否接受写入。对副本实例进行写入可能对存储一些短暂的数据很有用(因为在副本上写入的数据在与主控重新同步后会很容易被删除),但如果客户端因为配置错误而对其进行写入,也可能会造成问题。 自Redis 2.6以来,默认情况下复制本是只读的。 注意:只读的复制本并不是为了暴露在互联网上不信任的客户端上而设计的。这只是防止实例被滥用的一个保护层。 依然是只读副本默认导出所有的管理命令,如CONFIG、DEBUG等。在有限的范围内,你可以使用'rename-command'来提高只读副本的安全性,以影射所有管理危险命令。

© www.soinside.com 2019 - 2024. All rights reserved.