Redis的主从复制

本文详细介绍了三种实现Redis主从复制的方法:通过配置文件、使用SLAVEOF命令以及在配置文件中指定主服务器。每种方法都包括了具体步骤和示例,帮助读者理解如何在不同场景下设置和维护Redis的主从架构。

1)方法一:

redis-server --slaveof ,配置当前服务器成为某redis服务的Slave

[root@db ~]# redis-cli -p 6379
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> set a  123    //设置主库的key值
OK
127.0.0.1:6379> get a
"123"
127.0.0.1:6379> 




//6380端口配置文件内容:
[root@db ~]# vim /etc/redis/6380.conf
port 6380        //启动端口
# Generated by CONFIG REWRITE
dir "/etc/redis"    //目录位置


//根据配置文件,再启动一个redis数据库示例
[root@db redis]# redis-server --port 6380 --slaveof 127.0.0.1 6379       //--port,指明从库的端口号;--slaveof,指明主库的IP地址和端口号
[2294] 05 Feb 17:13:54.588 * Increased maximum number of open files to 10032 (it was originally set to 1024).



//登录6380数据库并同步6379主库
[root@db ~]# redis-cli -p 6380
127.0.0.1:6380> keys *
1) "a"
127.0.0.1:6380> get a 
"123"            //有此数据同步完成
127.0.0.1:6380> exit

2)方法二:

SLAVEOF host port命令,将当前服务器状态从Master修改为指定服务器的Slave

[root@db ~]# redis-cli -p 6379
127.0.0.1:6379> set bbb 456     //添加主库数据
OK
127.0.0.1:6379> keys * 
1) "bbb"
127.0.0.1:6379> get bbb 
"456"
127.0.0.1:6379> 


[root@db redis]# redis-server 6380.conf    //启动从库
[2362] 05 Feb 17:29:05.779 * Increased maximum number of open files to 10032 (it was originally set to 1024).


[root@db ~]# redis-cli -p 6380
127.0.0.1:6380> keys *
(empty list or set)      //此时从库还没有任何数据
127.0.0.1:6380> 
127.0.0.1:6380> SLAVEOF 127.0.0.1 6379   //指明需要同步的主库的IP地址和端口号
OK
127.0.0.1:6380> keys *
1) "bbb"
127.0.0.1:6380> get bbb
"456"              //数据已然同步完成
127.0.0.1:6380> 
127.0.0.1:6380> SLAVEOF no one   //退出数据同步状态
OK
127.0.0.1:6380> keys *     //但是数据仍然会存在
1) "bbb"
127.0.0.1:6380> 


观察redis信息变化:
[2362] 05 Feb 17:29:05.783 * DB loaded from disk: 0.000 seconds
[2362] 05 Feb 17:29:05.783 * The server is now ready to accept connections on port 6380
[2362] 05 Feb 17:32:16.975 * SLAVE OF 127.0.0.1:6379 enabled (user request)
[2362] 05 Feb 17:32:17.379 * Connecting to MASTER 127.0.0.1:6379
[2362] 05 Feb 17:32:17.380 * MASTER <-> SLAVE sync started
[2362] 05 Feb 17:32:17.380 * Non blocking connect for SYNC fired the event.
[2362] 05 Feb 17:32:17.380 * Master replied to PING, replication can continue...
[2362] 05 Feb 17:32:17.381 * Partial resynchronization not possible (no cached master)
[2362] 05 Feb 17:32:17.384 * Full resync from master: 9b67e86972cf1a7ba949268aa1553d5f73970bae:1570
[2362] 05 Feb 17:32:17.482 * MASTER <-> SLAVE sync: receiving 28 bytes from master
[2362] 05 Feb 17:32:17.483 * MASTER <-> SLAVE sync: Flushing old data
[2362] 05 Feb 17:32:17.483 * MASTER <-> SLAVE sync: Loading DB in memory
[2362] 05 Feb 17:32:17.483 * MASTER <-> SLAVE sync: Finished with success
[2362] 05 Feb 17:33:46.677 # Connection with master lost.
[2362] 05 Feb 17:33:46.677 * Caching the disconnected master state.
[2362] 05 Feb 17:33:46.677 * Discarding previously cached master state.
[2362] 05 Feb 17:33:46.677 * MASTER MODE enabled (user request)

3)方法三:
配置方式:启动时,服务器读取配置文件,并且自动成为指定的从服务器

[root@db ~]# redis-cli -p 6379
127.0.0.1:6379> set ccc 789     //添加主库数据
OK
127.0.0.1:6379> keys *
1) "ccc"
127.0.0.1:6379> get ccc
"789"
127.0.0.1:6379> 



[root@db ~]# vim /etc/redis/6381.conf 
slaveof 127.0.0.1 6379    //在配置文件里指明主库的IP地址和端口号信息
port 6381
# Generated by CONFIG REWRITE
dir "/etc/redis"


[root@db redis]# redis-server 6381.conf     //启动从库
[2405] 05 Feb 17:42:40.279 * Increased maximum number of open files to 10032 (it was originally set to 1024).



[root@db ~]# redis-cli -p 6381
127.0.0.1:6381> keys *
1) "ccc"
127.0.0.1:6381> get ccc
"789"     //数据存在,启动时便是从库
127.0.0.1:6381> 




//从库状态信息:
[2405] 05 Feb 17:42:40.283 * DB loaded from disk: 0.000 seconds
[2405] 05 Feb 17:42:40.283 * The server is now ready to accept connections on port 6381
[2405] 05 Feb 17:42:41.281 * Connecting to MASTER 127.0.0.1:6379
[2405] 05 Feb 17:42:41.281 * MASTER <-> SLAVE sync started
[2405] 05 Feb 17:42:41.281 * Non blocking connect for SYNC fired the event.
[2405] 05 Feb 17:42:41.282 * Master replied to PING, replication can continue...
[2405] 05 Feb 17:42:41.282 * Partial resynchronization not possible (no cached master)
[2405] 05 Feb 17:42:41.285 * Full resync from master: 9b67e86972cf1a7ba949268aa1553d5f73970bae:2481
[2405] 05 Feb 17:42:41.385 * MASTER <-> SLAVE sync: receiving 28 bytes from master
[2405] 05 Feb 17:42:41.385 * MASTER <-> SLAVE sync: Flushing old data
[2405] 05 Feb 17:42:41.385 * MASTER <-> SLAVE sync: Loading DB in memory
[2405] 05 Feb 17:42:41.386 * MASTER <-> SLAVE sync: Finished with success

### Redis主从复制配置方法 #### Docker环境下的Redis主从复制设置 为了在Docker环境中成功配置Redis主从复制,需先理解基本概念以及具体的操作流程。 #### 基本概念解释 主从复制意味着将一台Redis服务器的数据同步至其他Redis实例。此过程涉及两个角色:一个是作为数据源的主节点(master),另一个是从主节点接收更新副本的从节点(slave)。这种架构允许读取负载均衡,并提供了一定程度上的冗余保障[^2]。 #### 创建网络连接以便容器间通信 确保所有参与复制的Redis服务能够相互通信至关重要。为此,建议创建专用的Docker网络来促进这些交互: ```bash docker network create redis-network ``` #### 启动主服务器 启动一个名为`redis-master`的服务端口映射到主机6379端口上,并将其加入之前建立好的自定义网络中去: ```bash docker run -d --name redis-master -p 6379:6379 --network redis-network redis ``` 这一步骤建立了整个集群的核心——即存储实际键值对的地方[^3]。 #### 修改配置文件支持远程访问 为了让后续添加的从机可以正常连通主机,需要调整默认不允许外部链接的安全策略。可以通过编辑已有的配置文件或者挂载新的配置文件方式完成这项工作。这里给出一种基于后者的方法示例: ```bash vim /home/docker/redis6379/conf/redis.conf ``` 在此文件内部找到有关绑定地址的部分(`bind`)取消其注释状态并将值设为空白表示接受来自任何地方请求;另外还需开启认证机制以增强安全性(如果适用的话)[^4]。 #### 添加并初始化第一个从属节点 现在准备就绪向系统引入首个辅助成员了。执行如下指令部署新实例同时指定它所依赖的目标对象名称为先前提到过的那个“master”。 ```bash docker run -d --name redis-slave1 --link redis-master:master \ --network redis-network \ -e REDIS_MASTER_HOST=master \ -e REDIS_MASTER_PORT=6379 \ -p 6380:6379 \ redis redis-server --slaveof master 6379 ``` 上述命令不仅完成了容器本身的创建工作还指定了必要的环境变量用于告知子进程应当追随哪台机器成为自己的上级领导单位。 #### 扩展更多跟随者 如果有需求进一步扩大规模只需重复上面的过程更改相应参数比如暴露不同对外监听接口即可轻松达成目的。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值