主从架构
- 分布式系统为解决单点问题,通常会把数据复制多个副本部署到其他机器以满足负载均衡和故障恢复等需求。
- Redis 也是如此,提供了复制功能,实现了相同数据的多个 Redis 副本。
- 参与复制的 Redis 实例划分为主节点 master 和从节点 slave。
- 默认情况下,Redis 都是主节点。
- 每个从节点只能有一个主节点,而主节点可以同时具有多个从节点。
- 复制的数据流是单向的,只能由主节点复制到从节点。
工作原理
- 配置了主从复制的salve节点在连接master节点时都会发送一个PSYNC命令给master请求复制数据,
- master收到PSYNC命令后,会在后台进行数据持久化通过bgsave生成最新的rdb快照文件,
- 持久化期间,master会继续接收客户端的请求,它会把那些可能修改数据集的请求缓存在内存中。
- 当持久化完成后,master会把这份rdb文件数据集发送给slave,slave会把接收到的数据进行持久化生成rdb,然后再加载到内存中。
- 随后master再将之前缓存在内存中的命令发送给slave。
- 当master与slave之间的连接由于某些原因而断开时,slave能够自动重连master,如果master收到了多个slave并发连接请求,它只会进行一次持久化,而不是一个连接一次,然后再把这一份持久化的数据发送给多个并发连接请求的slave。
主从全量复制与部分复制
安装搭建
- 下载redis-5.0.3
wget http://download.redis.io/releases/redis-5.0.3.tar.gz
2. 安装gcc
yum install gcc
3. 将下载好的redis-5.0.3.tar.gz放到/usr/local/下并解压
mv redis-5.0.3.tar.gz /usr/local/
cd /usr/local && ll
tar -zxf redis-5.0.3.tar.gz
- 进入已解压的redis‐5.0.3目录下,进行编译与安装
cd redis-5.0.3
make
5. 修改redis.conf配置
#后台启动
daemonize yes
#关闭保护模式,开启的话,只有本机才可以访问redis
protected‐mode no
#注释bind(bind绑定的是自己机器网卡的ip,如果有多块网卡可以配多个ip,代表允许客户端通过机器的哪些网卡ip去访问,内网一般可以不配置bind,注释掉即可)
#bind 127.0.0.1
- 启动服务并验证
src/redis‐server redis.conf
7. 启动客户端并测试
src/redis-cli
set name jeffrey
get name
quit
=》至此,单个Redis-Server主节点已部署完毕!接下来配置从节点Slave…
- 进入redis安装目录,新建从节点数据存放目录,然后拷贝一份redis.conf更名为redis.conf_master,编辑从节点配置文件redis.conf
mkdir data
cd data
mkdir 6380
cd …/
cp redis.conf redis.conf_master
vi redis.conf
- 修改从节点redis.conf配置
#修改端口
port 6380
#把pid进程号写入pidfile配置的文件
pidfile /var/run/redis_6380.pid
logfile “6380.log”
#指定数据存放目录
dir /usr/local/redis‐5.0.3/data/6380
#注释bind(bind绑定的是自己机器网卡的ip,如果有多块网卡可以配多个ip,代表允许客户端通过机器的哪些网卡ip去访问,内网一般可以不配置bind,注释掉即可)
#bind 127.0.0.1
#配置主从复制,从本机6379的Redis主节点复制数据
replicaof 192.168.126.130 6379
#配置从节点只读
replica‐read‐only yes
- 启动从节点
src/redis-server redis.conf
- 测试(在Redis主节点上set数据,看从节点是否同步到数据)
连接Master节点:
连接Slave节点: