Redis 主从复制
主机数据更新后根据配置和策略, 自动同步到备机的master/slaver机制.
1.优点:
读写分离,性能扩展
容灾快速恢复
2.模拟一主两从
1.创建一个文件夹
根目录下的文件夹(用于放redis.conf)
2.创建三个配置文件
redis6379.conf redis6380.conf redis6381.conf 后缀表示占用端口
3.关闭 appendonly 设为 no
4.新建文件的配置
1.redis6379.conf
include /myredis/redis.conf
pidfile /var/run/redis_6379.pid
port 6379
dbfilename dump6379.rdb
2.redis6380.conf
include /myredis/redis.conf
pidfile /var/run/redis_6380.pid
port 6380
dbfilename dump6380.rdb
3.redis6381.conf
include /myredis/redis.conf
pidfile /var/run/redis_6381.pid
port 6381
dbfilename dump6381.rdb
5.启动三个redis
../usr/local/src/redis6/bin/redis-server redis6379.conf
......
查看当前进程
[root@yangc myredis]# ps -ef|grep redis
root 23580 1 0 21:04 ? 00:00:00 ../usr/local/src/redis6/bin/redis-server *:6380
root 23592 1 0 21:04 ? 00:00:00 ../usr/local/src/redis6/bin/redis-server *:6381
root 23778 1 0 21:07 ? 00:00:00 ../usr/local/src/redis6/bin/redis-server *:6379
root 23787 18194 0 21:07 pts/0 00:00:00 grep --color=auto redis
6.查看三台主机运行情况(运行角色)
info replication
打印主从复制的相关信息
# Replication
role:master //当前 角色:主机
connected_slaves:0 //从机数量
master_failover_state:no-failover
master_replid:228db81eea5fea2b8b8f9a652467d2cbf2b9310a
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
7.配从(库)不配主(库)
slaveof
成为某个实例的从服务器
1、在6380和6381上执行: slaveof 127.0.0.1 6379
2、在主机上写,在从机上可以读取数据
在从机上写数据报错
3、主机挂掉,重启就行,一切如初
4、从机重启需重设:slaveof ip 6379
可以将配置增加到文件中。永久生效。
8.切入点问题
slave1、slave2是从头开始复制还是从切入点开始复制?比如从slave1进来,后断掉,重启后,不会变成丛机,
需要重新使用slaveof ip 端口,在slave1在断开期间,主机加入了数据,会发现丛机会从头复制。
9.主机shutdown后情况如何?
从机会原地待命,等待主机启动。
3.主从复制-复制原理
- 丛机启动成功连接到主机后,后会发送一个sync命令–数据同步的命令
- 主机接到命令启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令, 在后台进程执行完毕之后,主机将传送整个数据文件(rdb文件)到丛机,丛机以完成一次完全同步。
- 增量复制:主机继续将新的所有收集到的修改命令依次传给丛机,完成同步。
- 全量复制:而slave服务在接收到数据库文件数据后,将其存盘并加载到内存中。