一、是什么
1.单机有什么问题:
单机故障
容量瓶颈
qps瓶颈
主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,mester已写为主,slaver已读为主
2.能干嘛
-
1.读写分离
-
2.容灾备份
3.怎么玩
玩法原则:
1.配从不配主
2.使用命令 SLAVEOF 动态指定主从关系 ,如果设置了密码,关联后使用 config set masterauth 密码
3.配置文件和命令混合使用时,如果混合使用,动态指定了主从,请注意一定要修改对应的配置文件
- 1.新建redis8000,redis8001,redis8002文件夹
- 2.将redis.conf文件复制在redis8000下
- 3.分别修改个目录下的redis.conf文件
redis8000/redis.conf
-
1.bind 192.168.0.104 指定本机ip
-
2.port 8000
-
3.daemonize yes
-
4.pidfile /var/run/redis_8000.pid
-
5.dir /myredis/redis8000
-
6.requirepass 123456
4.把redis8000/redis.conf文件复制到redis8001,redis8002下
redis8001/redis.conf
-
1.:%s/8000/8001/g 批量替换
-
2.replicaof 192.168.0.104 8000
-
3.masterauth 123456
redis8002/redis.conf
- 2.replicaof 192.168.0.104 8000
- 3.masterauth 123456
5.分别启动8000.8001,8002实例
- [root@localhost myredis]# /usr/local/bin/redis-server /myredis/redis8000/redis.conf
- [root@localhost myredis]# /usr/local/bin/redis-server /myredis/redis8001/redis.conf
- [root@localhost myredis]# /usr/local/bin/redis-server /myredis/redis8002/redis.conf
6.客户端连接
/usr/local/bin/redis-cli -h 192.168.0.104 -p 8000 -a 123456
/usr/local/bin/redis-cli -h 192.168.0.104 -p 8001 -a 123456
/usr/local/bin/redis-cli -h 192.168.0.104 -p 8002 -a 123456
工作流程
总体分为大三步:
一、建立连接
-
1.设置master的地址和端口,发送slaveof ip port指令,master会返回响应客户端,根据响应信息保存master ip port信息 (连接测试)
-
2.根据保存的信息创建连接master的socket
-
3.周期性发送ping,master会响应pong
-
4.发送指令 auth password(身份验证),master验证身份
-
5.发送slave端口信息,master保存slave的端口号
二、数据同步
-
1.slave发送指令 psyn2
-
2.master 执行bgsave
-
3.在第一个salve连接时,创建命令缓存区
-
4.生成RDB文件,通过socket发送给slave
-
5.slave接收RDB,清空数据,执行RDB文件恢复过程
-
6.发送命令告知RDB恢复已经完成(告知全量复制完成)
-
7.master发送复制缓冲区信息
-
8.slave接收信息,执行重写后恢复数据
注意: master会保存slave从我这里拿走了多少数据,保存salve的偏移量
三、命令传播
slave心跳:replconf ack {offset} 汇报slave自己的offset,获取最新数据指令
命令传播阶段出现断网:
- 网络闪断闪连 忽略
- 短时间断网 增量
- 长时间断网 全量
全量复制核心三个要素
- 1.服务器运行id
用于服务器之间通信验证身份,master首次连接slave时,会将自己的run_id发送给slave,slave保存此ID - 2.主服务器积压的命令缓冲区
先进先出队列 - 3.主从服务器的复制偏移量
用于比对偏移量,然后判断出执行全量还是增量
全量复制消耗
-
1.bgsave时间
-
2.rdb文件网络传输
-
3.从节点请求请求数据时间
-
4.从节点加载rdb的时间
-
5.可能的aof重写时间
5.缺点
1.由于所有的写操作都是先在Master上操作,然后同步更新到Slave上,所以从Master同步到Slave机器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,Slave机器数量的增加也会使这个问题更加严重。
2.当主机宕机之后,将不能进行写操作,需要手动将从机升级为主机,从机需要重新制定master
简单总结:
一个master可以有多个Slave
一个slave只能有一个master
数据流向是单向的,只能从主到从