redis 主从复制

1 . redis主从复制 – 配置文件方式实现

1.1简介 :

主机更新后根据配置和策略,自动同步到备机的master/slave机制,Master以写为主,Slave以读为主

1.2 具体作用

  1. 读写分离,性能扩展,降低主服务器的压力
  2. 容灾,快速恢复,主机挂掉时,从机变为主机

redis 主从复制_第1张图片

1.3 配置1主2从

下面我们来配置1主2从的效果,现实中是需要3台机器的,为了方便,我们就在一台机器上来演示,通过不同的端口来区分机器,3台机器的配置

角色 端口
master(主) 6379
slave1(从) 6380
slave2(从) 6381

1.4 配置主从

创建案例工作目录:master-slave
执行下面命令创建 /opt/master-slave 目录,本次所有操作,
均在 master-slave 目录进行。

# 方便演示,停止所有的 redis
ps -ef | grep redis | awk -F" " '{print $2;}' | xargs kill -9 
mkdir /opt/master-slave
cd /opt/master-slave/
1.4.1 将redis.conf复制到master-slave目录
cp /opt/redis-6.2.1/redis.conf /opt/master-slave/

主配置

1.1 创建master的配置文件:redis-6379.conf

在/opt/master-slave目录创建 redis-6379.conf 文件,内容如下,注意 192.168.200.129 是这个测试
机器的ip,大家需要替换为自己的


#redis.conf是redis原配置文件,内部包含了很多默认的配置,
#这里使用include将其引用,相当于把redis.conf内容直接贴进来了
include /opt/master-slave/redis.conf
# 后台启动模式
daemonize yes
bind 192.168.200.129
#配置密码
requirepass 123456
# 本实例工作目录
dir /opt/master-slave/
# 本实例日志文件路径
logfile /opt/master-slave/6379.log
#端口
port 6379
#rdb文件
dbfilename dump_6379.rdb
# 本实例进程号文件
pidfile /var/run/redis_6379.pid
1.2 创建slave1的配置文件:redis-6380.conf

在/opt/master-slave目录创建 redis-6380.conf 文件,内容如下,和上面master的类似,多了后面2行

include /opt/master-slave/redis.conf
daemonize yes
bind 192.168.200.129
requirepass 123456
dir /opt/master-slave/
port 6380
dbfilename dump_6380.rdb
pidfile /var/run/redis_6380.pid
logfile /opt/master-slave/6380.log
#用来指定主机:slaveof 主机ip 端口
slaveof 192.168.200.129 6379
#主机的密码
masterauth 123456
1.3 创建slave2的配置文件:redis-6381.conf
include /opt/master-slave/redis.conf
daemonize yes
bind 192.168.200.129
requirepass 123456
dir /opt/master-slave/
port 6381
dbfilename dump_6381.rdb
pidfile /var/run/redis_6381.pid
logfile /opt/master-slave/6381.log
#用来指定主机:slaveof 主机ip 端口
slaveof 192.168.200.129 6379
#主机的密码
masterauth 123456
1.4
启动master
redis-server /opt/master-slave/redis-6379.conf
启动slave1
redis-server /opt/master-slave/redis-6380.conf
启动slave2
redis-server /opt/master-slave/redis-6381.conf;

若启动有误,大家好好检查下配置,也可以看日志,3台机器启动会在 /opt/master-slave 目录产生日 志,如下

redis 主从复制_第2张图片

1.5 查看主机的信息

通过redis-cli命令连接主机,如下

redis-cli -h 192.168.200.129 -p 6379 -a 123456

通过下面命令,查看主机信息

info Replication

redis 主从复制_第3张图片

1.6 查看slave1的信息

通过下面2个命令查询从机slave1的信息

redis-cli -h 192.168.200.129 -p 6380 -a 123456
info Replication

redis 主从复制_第4张图片

1.7 同样查看slave2的信息
redis-cli -h 192.168.200.129 -p 6381 -a 123456
info Replication

redis 主从复制_第5张图片

1.8 验证主从同步效果

在master上面执行下面2个命令

192.168.200.129:6379> flushdb
OK
192.168.200.129:6379> set name ready
OK
192.168.200.129:6379> set age 30
OK

到slave1上执行下面命令,可以看出来数据已经同步过来了

192.168.200.129:6380> mget name age
1) "ready"
2) "30"
192.168.200.129:6380>

同样到slave2上也执行一下,效果如下

192.168.200.129:6381> mget name age
1) "ready"
2) "30"
192.168.200.129:6381>

主从复制原理

  1. slave启动成功连接到master后,会给master发送数据同步消息(发送sync命令)
  2. master接收到slave发来的数据同步消息后,把主服务器的数据进行持久化到rdb文件,同时会收集
  3. 接收到的用于修改数据的命令,master将传rdb文件发送给你slave,完成一次完全同步
  4. 全量复制:而slave服务在接收到master发来的rdb文件后,将其存盘并加载到内存
  5. 增量复制:master继续将收集到的修改命令依次传给slave,完成同步
  6. 但是只要重新连接master,一次完全同步(全量复制)将会被自动执行
    redis 主从复制_第6张图片

小结 :

l

从挂掉后又恢复了,会继续从主同步数据么?
会的,当从重启之后,会继续将中间缺失的数据同步过来。
info Replication:查看主从复制信息
上面已经演示过了,主、从上都可以执行,用来查看主从信息。

你可能感兴趣的:(1024程序员节)