怎么看待网站开发,自然资源网站建设方案,个人网站备案 内容,凡科小程序直播8. 主从复制
8.1 简介
主从库采用读写分离的方式
读操作#xff1a;主库、从库都可以处理写操作#xff1a;首先写到主库执行#xff0c;然后再将主库同步给从库。
实现读写分离#xff0c;性能扩展 容灾快速恢复
8.2 主从复制步骤
创建一个目录 ,在root下创建一个m…8. 主从复制
8.1 简介
主从库采用读写分离的方式
读操作主库、从库都可以处理写操作首先写到主库执行然后再将主库同步给从库。
实现读写分离性能扩展 容灾快速恢复
8.2 主从复制步骤
创建一个目录 ,在root下创建一个myredis的目录mkdir myredis//创建目录
cd myredis //进行目录
cp /opt/reids-6.2.6/redis.conf redis_1.conf //cp 源文件 目标文件
ls关闭aof使用vi编辑三个conf文件redis_6379.conf,redis_6380.conf,redis_6381.conf做为一主二从配置配置文件内容如下所示include redis_1.conf
pidfile /var/run/reids_6379.pid
port 6379
dbfilename dump6379.rdb分别启动三个服务[rootlocalhost myredis]# redis-server redis_6379.conf
[rootlocalhost myredis]# redis-server redis_6380.conf
[rootlocalhost myredis]# redis-server redis_6381.conf
[rootlocalhost myredis]# ps -ef|grep redis
root 7289 1 0 17:35 ? 00:00:00 redis-server 127.0.0.1:6379
root 7296 1 0 17:35 ? 00:00:00 redis-server 127.0.0.1:6380
root 7302 1 0 17:35 ? 00:00:00 redis-server 127.0.0.1:6381
root 7316 6663 0 17:35 pts/0 00:00:00 grep --colorauto redis在三个客户端模拟分别连接到不同服务器redis-cli -p 端口号
redis-cli -p 6379
redis-cli -p 6380
redis-cli -p 6381查看服务器状态info replication在6380和6381上调用replicaof 将其从属于6379(如果是三台服务器以上步骤可以跳过直接配置从属服务器)replicaof 127.0.0.1 6379在主库上可以写入数据从库不能写入数据主库和从库都可以读数据
8.3 服务器宕机演示
8.3.1 从服务器宕机
6381上调用shutdown在主服务器上写入数据6381重新连上时仍然可以接收到主服务器的数据
8.3.2 主服务器宕机
6379服务器调用shutdown在从服务器上仍然可以读取数据从服务器显示主服务器的状态为down当主服务器重新启动从服务器显示主服务器的状态是up
8.4 主从同步原理 第一阶段
主从建立连接协商同步。从库和主库建立连接告诉主库即将进行同步操作。主库需要确认并回复主从就可以开始进行同步处理了。从库向主库发送一个psync指令,包含两个参数。一个是主库的runID另一个是复制进度offset。 runID是每个redis实例启动时生成的一个随机ID唯一标识。第一次复制时从库不知道主库的runid所以设为一个?。offset-1表示第一次复制 主库收到指令后会发送给从库fullresync指令去响应带着主库的runid还有目前复制进度offset。从库会记录下这两个参数。fullresync表示全量复制。主库把所有内容都复制给从库
第二阶段
主库将所有数据发送给从库进行同步。从库收到rdb文件后在本地把原有的数据清除同步从主库接收到的rdb文件 。如果在主库把数据跟从库同步的过程中主库还有数据写入为了保证主从数据的一致性主库会在内存中给一块空间replication buffer专门记录rdb文件生成后收到的所有写操作
第三阶段
主库把第二阶段执行过程中新收到的操作再发送给从库从库再加载执行这些操作就实 现同步处理了。
8.5 主-从-从模式
采用主-从-从模式将主库生成和传输rdb文件的压力以级联方式分散到从库上。
8.6 网络连接异常情况
在redis2.8之前如果网络异常再次连接后需要做全量复制 从redis2.8之后采用增量复制方式。repl_backlog_buffer缓冲区。当主从网络断开后主库把收到写 操作写入replication buffer,同时也写入到repl_backlog_buffer缓冲区. 这个缓冲区是一个环形缓冲区主库会记录自己写到的位置从库会记录自己读到的位置。 在之前还是会识别一下环形缓冲区还能不能够提供完整的数据如果不能就进行全量同步了
repl_backlog_size参数 缓冲空间大小主库写入速度 * 操作大小-主从库网络传输速度 * 操作大小repl_backlog_size缓冲空间大小*22000 * 2-1000 * 22000 大约为2M 乘2 所以repl_backlog_size值为4M