redis切换主从角色,并且设置slave-read-only

发表时间:2022-08-29 07:20:46 作者:赛马牛

昨天我有个api突然报错:(error) READONLY You can't write against a read only slave
我一看就知道这个错误就是redis的,但是很奇怪的是我的redis是单机模式的,为了图方便和服务器能保持干净,并且考虑到只是测试环境,我直接用docker pull了最新版本的redis下来。当时并没有换到其他的运行模式,而且前期用得还比较顺畅的,应该不会涉及到主从模式的。先登录进去看一下:

docker exec -it redis /bin/bash
# 进入容器

cd /
# 进入到根目录,redis官方镜像,redis是放在根目录的哈,非docker但是不知道redis装在哪的,用 find / -type f -name redis-cli查看路径

./redis-cli
# 运行redis-cli

127.0.0.1:6379 > role
输出:"slave" 
# 可以看到role变成了slave
# 也用info replication指令
127.0.0.1:6379 > info replication

# Replication role:slave master_host:193.178.170.47 master_port:8886 master_link_status:down master_last_io_seconds_ago:-1 master_sync_in_progress:0 slave_read_repl_offset:1 slave_repl_offset:1 master_link_down_since_seconds:-1 slave_priority:100 slave_read_only:0 replica_announced:1 connected_slaves:0 master_failover_state:no-failover master_replid:83bfb0e7b69f3d92fff9f5bd79b3f1067eb89bf9 master_replid2:18cba44c45caaefa80e8d043e69e4ad7c1ba7322 master_repl_offset:0 second_repl_offset:1 repl_backlog_active:0 repl_backlog_size:1048576 repl_backlog_first_byte_offset:0 repl_backlog_histlen:0


# 可以看到role是变成了slave了,那再看一下只读写权限

127.0.0.1:6379 > config get slave-read-only

"yes" # 好吧,变成了read only(只读) # 要是想改变只读权限,可以使用以下指令:config set slave-read-only no


既然这样,那把role切换回来吧

127.0.0.1:6379 > SLAVEOF NO ONE

# 该指令可以把当前服务的role切回master。来看一下这段介绍:
# 一个从属服务器执行命令 SLAVEOF NO ONE 将使得这个从属服务器关闭复制功能,并从从属服务器转变回主服务器,原来同步所得的数据集不会被丢弃。
# 利用『 SLAVEOF NO ONE 不会丢弃同步所得数据集』这个特性,可以在主服务器失败的时候,将从属服务器用作新的主服务器,从而实现无间断运行。


当然,如果你想要指定当前服务器为某个服务器的从属服务器,那么可以用以下指令:

SLAVEOF HOST PORT

# 例:SLAVEOF 172.17.0.2 6379


复制