复制基础概念
Redis的主从复制特点
- 一个master可以有多个slave
- 可以用级联复制功能
- master是以非阻塞的方式来同步数据给slave
其实redis的复制和mysql的主从复制很相似,也可以用来作读写分离
Redis的复制过程
首先主服务器会基于ping的方式检查从服务器是否在线,如果在线就直接将内存中的数据发送给从端,然后从端会将数据保存在文件中,然后将这个文件载入到内存中实现数据的重建(载入过程称之为load)
其实,这个主从复制过程是这样的:
在启动了slave以后,从端会向master 发送一个sync command 命令,请求来获得主库上的数据,无论从库是第一次连接进来或者不是第一次连接进来,master都会启动一个后台子进程用于将内存中的数据快照保存在数据文件中,然后将数据文件发送到村段,从端读取该文件之后会载入到内存实现数据重建。
复制过程演示
现在用171作为主库,172做为从库。
- 修改作为主库和做为从库的redis的配置文件让他们分别监听自己ip
[root@171 ~]# ss -tnl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 10.220.5.171:6379 *:*
[root@172 ~]# ss -tnl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:6379 *:*
- 在172节点启动同步
10.220.5.172:6379> SLAVEOF 10.220.5.171 6379 >>>设置master为171
OK
10.220.5.172:6379> KEYS * >>>检查数据是否同步过来
1) "name"
2) "addr"
3) "age"
只需要这一个 SLAVEOF host port
命令就实现了主从复制
注意:如果主服务器设置了认证功能(保护模式),那么在连接的时候要用在slave端配置文件中加入masterauth 密码。
从节点的相关配置
# 指定主端的ip和端口
slaveof host port
# 主端有密码
masterauth 123
# 指定当主节点没有应答,但是该节点数据已经过期的情况下,由于用户请求过来,是否使用这个过期数据
slave-serve-stale-data yes
# 如果是从服务器的话,只读
slave-read-only yes
# 如果从服务器数量少于3个,那么主服务器就不能接受请求了
min-slaves-to-write 3
# 如果从服务器之后与主服务器超过10秒了,就进制主服务器执行写操作
min-slave-max-log 10
redis简单主从复制这边博文就讲到这里,下篇博文将详细讲解基于sentinel的Redis复制的高可用。
------做运维之前很矫情的小年轻-----