Redis复制工作原理:
1. 如果设置了一个Slave,无论是第一次连接还是重连到Master,它都会发出一个SYNC命令;
2. 当Master收到SYNC命令之后,会做两件事:
a) Master执行BGSAVE,即在后台保存数据到磁盘(rdb快照文件);
b) Master同时将新收到的写入和修改数据集的命令存入缓冲区(非查询类);
3. 当Master在后台把数据保存到快照文件完成之后,Master会把这个快照文件传送给Slave,而Slave则把内存清空后,加载该文件到内存中;
4. 而Master也会把此前收集到缓冲区中的命令,通过Reids命令协议形式转发给Slave,Slave执行这些命令,实现和Master的同步;
5. Master/Slave此后会不断通过异步方式进行命令的同步,达到最终数据的同步一致;
6. 需要注意的是Master和Slave之间一旦发生重连都会引发全量同步操作。但在2.8之后版本,也可能是部分同步操作。
目标:
搭建一个redis 集群(一主三从)
master 下挂 slaveA,slaveB
其中:slaveB下挂slaveC
准备
sudo wget http://download.redis.io/releases/redis-3.2.6.tar.gz sudo tar -xzvf redis-2.8.13.tar.gz cd redis-2.8.13/src
生成可执行文件:
sudo make
复制实例以及配置 到某个目录(这个一般是启动目录)
sudo cp /home/q/www/redis/redis-2.8.13/src/redis-server . sudo cp /home/q/www/redis/redis-2.8.13/src/redis-cli . sudo cp /home/q/www/redis/redis-2.8.13/src/redis-benchmark . sudo cp /home/q/www/redis/redis-2.8.13/redis.conf .
复制(多份配置,用于启动不同的端口号和主从关系等):
sudo cp redis.conf redis_A.conf
sudo cp redis.conf redis_B.conf
sudo cp redis.conf redis_C.conf
修改各自实例的端口号:
A:port 6380
B: port 6381
C: port 6382
修改主从配置:
A:slaveof 127.0.0.1 6379
B: slaveof 127.0.0.1 6379
C: slaveof 127.0.0.1 6380
启动实例:
nohup sudo ./redis-server redis.conf & nohup sudo ./redis-server redis_A.conf & nohup sudo ./redis-server redis_B.conf & nohup sudo ./redis-server redis_C.conf &
测试:
sudo ./redis-cli -h 127.0.0.1 -p 6379 127.0.0.1:6379> set name xinchun.wang OK [xinchun.wang@l-*.f.dev.cn6 ~/redis]$ sudo ./redis-cli -h 127.0.0.1 -p 6380 127.0.0.1:6380> get name "xinchun.wang" 127.0.0.1:6380> [xinchun.wang@l-*.f.dev.cn6 ~/redis]$ sudo ./redis-cli -h 127.0.0.1 -p 6381 127.0.0.1:6381> get name "xinchun.wang" 127.0.0.1:6381> [xinchun.wang@l-*.f.dev.cn6 ~/redis]$ sudo ./redis-cli -h 127.0.0.1 -p 6382 127.0.0.1:6382> get name "xinchun.wang"
主从配置完毕!
继续了解:
127.0.0.1:6379> info
# Replication role:master connected_slaves:2 slave0:ip=127.0.0.1,port=6380,state=online,offset=976,lag=0 slave1:ip=127.0.0.1,port=6381,state=online,offset=976,lag=0
注意:
role:master
connected_slaves:2
127.0.0.1:6380> info
# Replication role:slave master_host:127.0.0.1 master_port:6379 master_link_status:up master_last_io_seconds_ago:7 master_sync_in_progress:0 slave_repl_offset:1046 slave_priority:100 slave_read_only:1 connected_slaves:0
127.0.0.1:6381> info
# Replication role:slave master_host:127.0.0.1 master_port:6379 master_link_status:up master_last_io_seconds_ago:2 master_sync_in_progress:0 slave_repl_offset:2768 slave_priority:100 slave_read_only:1 connected_slaves:1 slave0:ip=127.0.0.1,port=6382,state=online,offset=2754,lag=0
关闭实例:
sudo ./redis-cli -n 6379 shutdown
其他:
改为 yes # 是否后台运行 (还可以通过文中的nohup & 的方式,不建议使用)
daemonize yes
#数据文件的位置
dbfilename dump.rdb
#当前实例启动的端口号
port 6379
#配置从
slaveof 127.0.0.1 6379
#数据目录:
dir . # 数据目录
maxmemory项,设最大占用内存为50MB:maxmemory 50mb而有6种内存过期策略,通过maxmemory-policy修改,一般使用默认值或allkeys-lru:
volatile-lru:只对设置了过期时间的key进行LRU(默认值)
allkeys-lru : 是从所有key里 删除 不经常使用的key
volatile-random:随机删除即将过期key
allkeys-random:随机删除
volatile-ttl : 删除即将过期的
noeviction : 永不过期,返回错误
以下是关于 Redis 复制功能的几个重要方面:
1. 一个Master可以有多个Slave;
2. Redis使用异步复制。从2.8开始,Slave会周期性(每秒一次)发起一个Ack确认复制流(replication stream)被处理进度;
3. 不仅主服务器可以有从服务器, 从服务器也可以有自己的从服务器, 多个从服务器之间可以构成一个图状结构;
4. 复制在Master端是非阻塞模式的,这意味着即便是多个Slave执行首次同步时,Master依然可以提供查询服务;
5. 复制在Slave端也是非阻塞模式的:如果你在redis.conf做了设置,Slave在执行首次同步的时候仍可以使用旧数据集提供查询;你也可以配置为当Master与Slave失去联系时,让Slave返回客户端一个错误提示;
6. 当Slave要删掉旧的数据集,并重新加载新版数据时,Slave会阻塞连接请求(一般发生在与Master断开重连后的恢复阶段);
7. 复制功能可以单纯地用于数据冗余(data redundancy),也可以通过让多个从服务器处理只读命令请求来提升扩展性(scalability): 比如说, 繁重的 SORT 命令可以交给附属节点去运行。
8. 可以通过修改Master端的redis.config来避免在Master端执行持久化操作(Save),由Slave端来执行持久化。
相关推荐
redis-cli.exe -p <slave-port> ``` 2. 在主节点的命令行中,执行`INFO replication`,可以看到`role`字段为`master`,并有至少一个`slave`的连接信息。 3. 在从节点的命令行中,执行`INFO replication`,可以看到...
在Windows上设置复制,你需要配置主Redis实例为“server”模式,从Redis实例为“slave”模式。从服务器会持续同步主服务器的数据变更,实现数据备份和负载均衡。 8. **安全与性能优化**:为了安全性,建议配置访问...
"redis master.rar"和"redis slave.rar"可能包含预配置好的Redis服务器配置文件。解压缩后,根据实际情况替换配置中的IP地址,并确保服务器间的端口开放。启动主从节点服务,然后配置Sentinel,即可实现高可用的...
整理的redis主从复制框架结构, 包含: 1、redis server作为slave,向master发起复制...4、redis server作为master,接收到slave复制期间,如果有client继续向master发起设置类命令,数据的缓存及向slave同步的过程
在Redis中,一个服务器作为主节点(Master),负责处理写操作,并将这些操作同步到一个或多个从节点(Slave)。从节点只负责读操作,从而实现读写分离,提高系统的可用性和读性能。主从复制还有助于数据备份和故障...
Redis支持数据的备份,即master-slave模式的数据备份。 Redis 优势 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 ...
finagle-redis-master-slave-sample 用于 Finagle 的简单自定义 Redis 客户端,具有手动负载平衡。 为了运行示例,需要在 :6379 上使用本地 Redis,并且代码应该能够查询正确的服务器。 当然,完整的 Redis 主/从...
集群由多个主节点(Master)和对应的从节点(Slave)组成,主节点负责读写操作,从节点负责备份数据并提供读服务。当主节点故障时,从节点可以接管其职责,确保服务的连续性。 要使用 `redis-trib.rb` 搭建 Redis ...
当使用Redis做Master-slave的高可用方案时,假如master宕机了,Redis本身(包括它的很多客户端)都没有实现自动进行主备切换,而Redis-Sentinel本身也是一个独立运行的进程,它能监控多个master-slave集群,发现...
- 同样,配置从服务器(slave)的`redis.conf`,设置为主服务器的复制源,例如`replicaof localhost 6379`,然后启动。 5. **验证Sentinel**: - 使用`redis-cli.exe`连接到Sentinel节点,通过`SENTINEL masters`...
Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。 Redis 与其他 key - value 缓存产品有以下三个特点: Redis支持数据的持久化,可以...Redis支持数据的备份,即master-slave模式的数据备份。
redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,...区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
-C, --command=S : set command to execute (default: cluster_state) -r, --role=S : set the role of the nodes that command to execute on (default: all, you can input: all, master or slave) -t, --...
在分布式系统中,为了提高可用性和数据安全性,通常会采用主从复制(Master-Slave)架构。在这个架构中,一个主服务器(Master)负责处理写操作,而多个从服务器(Slave)则同步主服务器的数据,提供读服务。以下将...
1. **节点配置**:至少需要三个主节点(Master)来保证数据的高可用性。每个主节点都有一个或多个从节点(Slave),用于数据复制。 2. **槽分配**:Redis 集群使用槽(Slot)的概念来分配数据,总共分为 16384 个槽...
- `cluster-slave-validity-factor`:判断复制节点是否健康的标准。 - `cluster-migration-barrier`:在迁移槽位前,必须保持的主节点数量。 **四、Redis Cluster使用注意事项** 1. **槽位分配**:Redis Cluster将...
Redis 集群通常由多个独立的 Redis 实例组成,它们共享同一份数据,并通过一致性哈希(Consistent Hashing)和主从复制(Master-Slave Replication)策略来实现高可用性和数据分布。使用 Ruby 脚本可以自动化这些...
2. 分片(Shard):数据被分割成多个分片,每个分片由一个主节点(Master)和零个或多个从节点(Slave)组成,实现数据备份和故障恢复。 3. 哨兵(Sentinel):虽然不是集群的必需部分,但可以与Redis Cluster结合...