资讯专栏INFORMATION COLUMN

Redis深入系列-0x018:Redis同步实践

Ververica / 2885人阅读

摘要:修改配置复制两份配置文件,分别命名为。他们将在两个端口启动分别修改两个配置说明这里使用监听的节点作为主节点,作为的子节点,作为的子节点。

0x001 修改配置

复制两份配置文件,分别命名为redis_6378.confredis_6377.conf。他们将在63786377两个端口启动

分别修改两个配置:

# redis_6378.conf
...
port 6378
slaveof 127.0.0.1 6379
...
# redis_6377.conf
...
port 6377
slaveof 127.0.0.1 6378
...

说明:这里使用监听6379的节点作为主节点,6378作为6379的子节点,6377作为6378的子节点。

0x002 同步

启动6379主节点

$ redis-server
68931:C 29 May 10:53:54.234 # oO0OoO0OoO0Oo Redis is starting                                 

# 省略部分过程
      _.-``    `.  `_.  ""-._           Redis 4.0.8 (00000000/0) 64 bit
  .-`` .-```.  ```/    _.,_ ""-._                                   
 (    "      ,       .-`  | `,    )     Running in standalone mode
 |`-._`-...-` __...-.``-._|"` _.-"|     Port: 6379
 |    `-._   `._    /     _.-"    |     PID: 68931
# 省略部分过程
68931:M 29 May 10:53:54.237 * Ready to accept connections

启动6378子节点

$ redis-server ~/Desktop/redis_6378.conf 
# 省略部分内容
                _._                                                  
           _.-``__ ""-._                                             
      _.-``    `.  `_.  ""-._           Redis 4.0.8 (00000000/0) 64 bit
  .-`` .-```.  ```/    _.,_ ""-._                                   
 (    "      ,       .-`  | `,    )     Running in standalone mode
 |`-._`-...-` __...-.``-._|"` _.-"|     Port: 6378
 |    `-._   `._    /     _.-"    |     PID: 69033

# 省略部分内容
# 这里说明启动成功了
69033:S 29 May 10:56:24.581 * Ready to accept connections
# 开始连接主节点
69033:S 29 May 10:56:24.581 * Connecting to MASTER 127.0.0.1:6379
# 开始同步
69033:S 29 May 10:56:24.581 * MASTER <-> SLAVE sync started
69033:S 29 May 10:56:24.581 * Non blocking connect for SYNC fired the event.
69033:S 29 May 10:56:24.581 * Master replied to PING, replication can continue...
# 尝试增量同步
69033:S 29 May 10:56:24.581 * Trying a partial resynchronization (request 87953c7dc97cf1192a243fe5d7708c11acbd0e0f:1).
# 全量同步
69033:S 29 May 10:56:24.582 * Full resync from master: 98a56521a0a958295e499853621029d19ef6b357:0
69033:S 29 May 10:56:24.582 * Discarding previously cached master state.
69033:S 29 May 10:56:24.684 * MASTER <-> SLAVE sync: receiving 826 bytes from master
69033:S 29 May 10:56:24.685 * MASTER <-> SLAVE sync: Flushing old data
69033:S 29 May 10:56:24.685 * MASTER <-> SLAVE sync: Loading DB in memory
69033:S 29 May 10:56:24.685 * MASTER <-> SLAVE sync: Finished with success

此时的6379主节点

# 省略部分内容
68931:M 29 May 10:53:54.237 * Ready to accept connections
# 上面是之前的状态,下面是`6378`连接进来以后的状态
68931:M 29 May 10:56:24.581 * Slave 127.0.0.1:6378 asks for synchronization
68931:M 29 May 10:56:24.581 * Partial resynchronization not accepted: Replication ID mismatch (Slave asked for "87953c7dc97cf1192a243fe5d7708c11acbd0e0f", my replication IDs are "dbf6c826156fa5140d891996afcf8cc4f21b61fd" and "0000000000000000000000000000000000000000")
68931:M 29 May 10:56:24.581 * Starting BGSAVE for SYNC with target: disk
68931:M 29 May 10:56:24.582 * Background saving started by pid 69034
69034:C 29 May 10:56:24.584 * DB saved on disk
68931:M 29 May 10:56:24.684 * Background saving terminated with success
# 同步成功
68931:M 29 May 10:56:24.684 * Synchronization with slave 127.0.0.1:6378 succeeded

启动6377子节点

redis-server ~/Desktop/redis_6377.conf 
# 省略部分内容
                _._                                                  
           _.-``__ ""-._                                             
      _.-``    `.  `_.  ""-._           Redis 4.0.8 (00000000/0) 64 bit
  .-`` .-```.  ```/    _.,_ ""-._                                   
 (    "      ,       .-`  | `,    )     Running in standalone mode
 |`-._`-...-` __...-.``-._|"` _.-"|     Port: 6377
 |    `-._   `._    /     _.-"    |     PID: 69207

# 启动完成
69207:S 29 May 11:02:22.569 * Ready to accept connections
# 连接上一级节点
69207:S 29 May 11:02:22.569 * Connecting to MASTER 127.0.0.1:6378
69207:S 29 May 11:02:22.570 * MASTER <-> SLAVE sync started
69207:S 29 May 11:02:22.570 * Non blocking connect for SYNC fired the event.
69207:S 29 May 11:02:22.570 * Master replied to PING, replication can continue...
69207:S 29 May 11:02:22.570 * Trying a partial resynchronization (request 98a56521a0a958295e499853621029d19ef6b357:1).
69207:S 29 May 11:02:22.570 * Successful partial resynchronization with master.
69207:S 29 May 11:02:22.570 * MASTER <-> SLAVE sync: Master accepted a Partial Resynchronization.

0x003数据写入

使用redis-cli6379主节点写入数据

$ redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> set name redis
OK
127.0.0.1:6379> get name
"redis"

使用redis-cli连接6378子节点并读取在主节点写入的数据

$ redis-cli -h 127.0.0.1 -p 6378
127.0.0.1:6378> get name
"redis"

使用redis-cli连接637 7子节点并读去在主节点写入的数据

$ redis-cli -h 127.0.0.1 -p 6377
127.0.0.1:6377> get name
"redis"

使用redis-cli连接6378子节点并尝试写入数据

127.0.0.1:6378> set name redis-cli
(error) READONLY You can"t write against a read only slave.

说明:子节点可以读取到主节点写入的数据,说明同步成功了,子节点无法写入数据,因为子节点是默认只读的,修改配置可以做到子节点可读写

0x004 断开连接

关闭6378子节点

$ redis-cli -h 127.0.0.1 -p 6378
127.0.0.1:6378> shutdown
not connected> 

此时的6378

# 上面是之前的状态,下面是`6378`关机时候的状态
9033:S 29 May 11:09:54.587 # User requested shutdown...
69033:S 29 May 11:09:54.587 * Saving the final RDB snapshot before exiting.
69033:S 29 May 11:09:54.588 * DB saved on disk
69033:S 29 May 11:09:54.588 * Removing the pid file.
69033:S 29 May 11:09:54.589 # Redis is now ready to exit, bye bye...

此时的6379

# 上面是之前的状态,下面是`6378`关机之后的状态
68931:M 29 May 11:09:54.589 # Connection with slave 127.0.0.1:6378 lost.

此时的6377

...
# 6377 会一直尝试重新连接`6378`
69219:S 29 May 11:12:07.132 * Connecting to MASTER 127.0.0.1:6378
69219:S 29 May 11:12:07.132 * MASTER <-> SLAVE sync started
69219:S 29 May 11:12:07.132 # Error condition on socket for SYNC: Connection refused
69219:S 29 May 11:12:07.132 * Connecting to MASTER 127.0.0.1:6378
69219:S 29 May 11:12:07.132 * MASTER <-> SLAVE sync started
69219:S 29 May 11:12:07.132 # Error condition on socket for SYNC: Connection refused
...

0x005 子节点可读

修改配置

# redis_6378.conf
slave-read-only no

重新启动6378,并向6378写入数据

$ redis-cli -h 127.0.0.1 -p 6378
# 此时配置子节点不是只读的,所以可以写入
127.0.0.1:6378> set name redis-cli
OK
127.0.0.1:6378> get name 
"redis-cli"

连接6377并读取6378写入的key

$ redis-cli -h 127.0.0.1 -p 6377
127.0.0.1:6377> get name
"redis"

连接6379并读取6378写入的key

$ redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> GET name
"redis"

说明:虽然此时的6378子节点是可读的,但是并不会传播到其他子节点或者主节点,并且在下次同步的时候,将会被删除。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/36624.html

相关文章

  • Redis深入系列-0x019:Redis 持久化

    摘要:这是怎么工作的日志重写使用和快照相同的复制并写入的技巧,它是这么工作的创建进程,所以现在有一个子进程和一份主进程。 0x000 概述 这篇文章概括了关于Redis持久化技术,推荐所有的Redis用户都应该阅读。关于Redis持久化和健壮性保证详细信息可以查看这篇文章-解密Redis持久化。 0x001 Redis持久化 Redis提供了一系列不同的持久化选项: RDB持久化可以...

    feng409 评论0 收藏0
  • Redis深入系列-0x010:redis-cli--Redis命令行接口(上)

    摘要:命令行接口是一个简单的命令行接口程序,他允许你在终端直接向发送命令,并且读取返回的数据。花一些时间熟悉这些特性可能是一个非常好的注意,如果你知道命令行接口诀窍,你将会看到如何更有效的使用。它性惯性的使用逗号分隔的序列作为替代。 0x001 redis-cli--Redis命令行接口 redis是一个简单的命令行接口程序,他允许你在终端直接向Redis发送命令,并且读取Redis返回的数...

    testHs 评论0 收藏0
  • Redis深入系列-0x017:Redis同步

    摘要:同步在主节点是非堵塞的。节点奔溃,然而他有自动重启系统,他将会自动重启。同时主节点也为发送到从节点的同步流提供一个增长偏移量,为了让从节点更新数据集状态。这将会以协议本身相同的命令流格式完成。以后支持无盘同步。 概述 基础的Redis同步使用非常简单,配置主从同步可以让从节点完全复制节点。不管主节点发生任何事,从节点会在链接断开之后自动重连。 这个机制工作使用了三台机子: 当主节点和...

    geekzhou 评论0 收藏0
  • Redis深入系列-0x012:redis-cli--Redis命令行接口(下)

    摘要:选项可以启动这种模式,单位是秒重要这个命令必须运行在你想要运行服务端的电脑上,而不是其他主机,它不会链接到实例,只会测试本地。可以使用来启用它这个命令一开始先抛弃了第一次同步的文件,接着以格式记录每一次收到的命令。 0x001 特殊模式概述 目前为止,我们使用了redis-cli两种主要模式: 使用命令行执行Redis命令 类REPL交互模式 下一章节将会解释Redis怎样执行其他...

    OnlyLing 评论0 收藏0
  • Redis深入系列-0x013:redis配置

    摘要:最好的方式是提供一个配置文件给,通常命名为。使用和命令可以在不停止运行或者重启服务的情况下,重新配置或者查询当前配置。并不是所有的配置指令都支持这种方式,但是大部分都支持。 Redis允许以没有配置文件的方式启动,他将会使用内置的默认配置,但是这种方式推荐只用来测试和开发。最好的方式是提供一个Redis配置文件给Redis,通常命名为redis.conf。redis.conf通常包含了...

    wwq0327 评论0 收藏0

发表评论

0条评论

Ververica

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<