9090年了!还不会主从复制
简介
主从复制就是将数据有效的及时的复制到其他子服务器
- 特征:
- 1个主服务器(master)对应多个子服务器(slave)
- 1个子服务器 (slave)对应1个主服务器(master)
职责:
- master:
- 写数据
- 执行写数据时,将出现变化的数据同步到slave
- 读数据
- slave:
- 读数据
- 作用
- 读写分离:master写,salve读,提高服务器的读写负载能力
- 负载均衡:基于主从结构,配合读写分离,由slave分担master负载,并根据需求的变化,改变slave的数量,通过多个从节点分担数据读取负载,大大提高redis服务器并发量与数据吞吐量
- 故障恢复:当master出现问题时,由slave提供服务,实现快速的故障恢复
- 数据冗余:实现数据热备份,是持久化之外的一种数据冗余方式
- 高可用基石:基于主从复制,构建哨兵模式与集群,实现redis的高可用的方案
工作流程
- 建立连接阶段
- 先保证网络连接 slave连接master,使master能够识别slave,并保存slave端口号
- 数据同步阶段
- 在slave初次连接master后,复制master中所有的数据到slave
- 将slave的数据库状态更新成master当前的数据库状态
- 命令传播阶段
实战redis 主从模式(docker安装)
- 先创建一个bridge网桥 用于容器间相互访问
docker network create --subnet=172.60.0.0/16 mynetwork
- 下载redis 镜像
docker pull redis:3.2
- 创建容器
docker run -itd --name redis-master --net=mynetwork -p 6382:6379 --ip 172.60.0.2 redis:3.2
docker run -itd --name redis-slave --net=mynetwork -p 6383:6379 --ip 172.60.0.3 redis:3.2
docker run -itd --name redis-slave2 --net=mynetwork -p 6384:6379 --ip 172.60.0.4 redis:3.2
-
查看网桥/容器
docker network ls
网桥创建成功
docker ps
redis 创建成功(前三个) -
进入容器 设置主redis
docker exec -it redis-slave /bin/bash redis-cli 进入命令行
查看redis目前状态
info replication
发现角色是master 把它指向masterSLAVEOF 172.60.0.2 6379
再次查看状态
已经指向 master服务器
同理 把另外一个slave服务器指向master
测试
在主服务器加入 a b值
master 上已经有了ab 键
去 slave查看。keys *
至此 redis 使用docker 做主从模式结束