Linux部署redis主从复制以及主从复制的原理

1,081 阅读3分钟

主从复制介绍

主从复制,即:master-slave 方案,是一个非常常见的集群模型。其中主库用来读写,从库只用来读,主从库之间数据保持同步,一旦主库挂了,可以从其若干个从库中选择一个升级为新的主库,从而确保整个 Redis 集群始终处于可用状态。

实践

(基于centos7的环境)

安装

yum install gcc-c++  //这个要先安装一下
cd /home/project 
# 下载软件包 wget https://labfile.oss.aliyuncs.com/courses/3368/redis-5.0.5.tar.gz # 解压 

tar -zxf redis-5.0.5.tar.gz 
cd redis-5.0.5/src 
make MALLOC=libc

配置

vim /home/project/redis-5.0.5/redis.conf


将里面的daemonize改为yes(linux查找元素命令 /damonize)

cd /home/project/redis-5.0.5

mkdir bin

cd ./src

mv mkreleasehdr.sh redis-benchmark redis-check-aof redis-cli redis-server /home/project/redis-5.0.5/bin

cp -rf /home/project/redis-5.0.5 /home/project/redis-6370 复制redis服务

下面不要直接复制,注意一下
vim /home/project/redis-5.0.5/redis.conf
vim /home/project/redis-6370/redis.conf

将里面的配置分别改为:(我相信这里肯定有人很难受 哈哈哈,加油 奥力给)

port  分别修改为  6379 6370
pidfile /var/run/redis_6379.pid 另外一个改为6370
logfile "" 路径分别修改为:/home/project/redis-5.0.0/redis.log  另外一个改为6370
dir ./ 路径分别修改为:/home/project/redis-5.0.0/ 和 另外一个改为6370


启动服务

/home/project/redis-5.0.5/bin/redis-server /home/project/redis-5.0.5/redis.conf       #启动 6379 端口Redis

/home/project/redis-6370/bin/redis-server /home/project/redis-6370/redis.conf       #启动 6370 端口Redis

检查是否成功

ps -ef | grep redis

配置主从复制

客户端连接redis
/home/project/redis-5.0.5/bin/redis-cli


成为主节点
replicaof no one

检查当前状态
info replication

/home/project/redis-6370/bin/redis-cli -p 6370

成为从节点
replicaof 127.0.0.1 6379

检查当前状态
info replication

主从复制原理

全量同步:master服务器会开启一个后台进程用于将redis中的数据生成一个rdb文件,与此同时,服务器会缓存所有接收到的来自客户端的写命令(包含增、删、改),当后台保存进程处理完毕后,会将该rdb文件传递给slave服务器,而slave服务器会将rdb文件保存在磁盘并通过读取该文件将数据加载到内存,在此之后master服务器会将在此期间缓存的命令通过redis传输协议发送给slave服务器,然后slave服务器将这些命令依次作用于自己本地的数据集上最终达到数据的一致性

部分同步:从redis 2.8版本以前,并不支持部分同步,当主从服务器之间的连接断掉之后,master服务器和slave服务器之间都是进行全量数据同步,但是从redis 2.8开始,即使主从连接中途断掉,也不需要进行全量同步,因为从这个版本开始融入了部分同步的概念

部分同步的实现依赖于在master服务器内存中给每个slave服务器维护了一份同步日志和同步标识,每个slave服务器在跟master服务器进行同步时都会携带自己的同步标识和上次同步的最后位置。当主从连接断掉之后,slave服务器隔断时间(默认1s)主动尝试和master服务器进行连接,如果从服务器携带的偏移量标识还在master服务器上的同步备份日志中,那么就从slave发送的偏移量开始继续上次的同步操作.

如果slave发送的偏移量已经不再master的同步备份日志中(可能由于主从之间断掉的时间比较长或者在断掉的短暂时间内master服务器接收到大量的写操作),则必须进行一次全量更新。在部分同步过程中,master会将本地记录的同步备份日志中记录的指令依次发送给slave服务器从而达到数据一致

参考链接 :

老虎死了还有狼博客 双子孤狼实验