🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# Redis主从复制 ## 目标 1. 容灾 2. 负载均衡,读写分离 ## 特点 1. master/slave结构,master可读写,slave只能读。 2. master宕机,slave不会自动完成切换 3. master宕机后恢复,slave会自动与master再次建立复制关系 ## 实现 * 超级简单,在redis.conf里面配置加入 ``` slaveof <master节点IP> <master节点端口> masterauth <密码> #如果主节点配置了requirepass,这里要与主节点保持一致。 ``` 重启redis实例 * 其他方式 1. 在用redis-server启动命令后,执行slaveof <masterhost> <masterport> 2. 命令行执行`slaveof <masterhost> <masterport>` 这两种都是动态的指定。 ## 验证(使用redis的info命令) * master实例 ``` # Replication role:master connected_slaves:1 slave0:ip=<slave实例ip>,port=6379,state=online,offset=183,lag=1 master_repl_offset:197 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:2 repl_backlog_histlen:196 ``` * slave实例 ``` # Replication role:slave master_host:<master实例ip> master_port:6379 master_link_status:up master_last_io_seconds_ago:7 master_sync_in_progress:0 slave_repl_offset:799 slave_priority:100 slave_read_only:1 connected_slaves:0 master_repl_offset:0 repl_backlog_active:0 repl_backlog_size:1048576 repl_backlog_first_byte_offset:0 repl_backlog_histlen:0 ``` ## 主从拓扑结构 #### 一主一从 当主节点出现故障,从节点提供服务 从节点可以开启AOF,保证数据安全,减轻持久化对主节点造成的压力 问题:但是在重启时因为主节点没有做持久化操作,导致主节点数据为空,导致子节点数据也被清空,所以再重启之前进行 slaveof no one断开与主节点的复制关系。 #### 一主多从 读写分离,适用读较多的场景,可以把读命令发送给从节点来分担主节点的压力。如keys、sort命令这种消耗性能的查询命令,可以交给一台从节点执行,防止对主节点造成阻塞。 问题:在高并发写入时,多个节点数据的同步会造成主节点性能的低下。 #### 树状主从 树形结构,一个节点既可以作为主节点又可以作为从节点。 通过数据复制中间层,数据向下传递,减少了主节点的压力,弥补了一主多从的缺憾。 缺点:占用了更多的服务器资源