redis主从复制原理与优化-高可用
一 什么是主从复制
机器故障;容量瓶颈;QPS瓶颈
一主一从,一主多从
做读写分离
做数据副本
扩展数据性能
一个maskter可以有多个slave
一个slave只能有一个master
数据流向是单向的,从master到slave
二 复制的 配置
2.1 slave 命令
- 6380是从,6379是主
-
- 在6389上执行
-
- slave of 127.0.0.1 6379 #异步
- slaveof no one #取消复制,不会把之前的数据清除
2.2 配置文件
- slaveof ip port #配置从节点ip和端口
- slave-read-only yes #从节点只读,因为可读可写,数据会乱
-
- '''
- mkdir -p redis1/conf redis1/data redis2/conf redis2/data redis3/conf redis3/data
- vim redis.conf
-
- daemonize no
- pidfile redis.pid
- bind 0.0.0.0
- protected-mode no
- port 6379
- timeout 0
- logfile redis.log
- dbfilename dump.rdb
- dir /data
- slaveof 10.0.0.101 6379
- slave-read-only yes
-
-
- cp redis.conf /home/redis2/conf/
-
-
- docker run -p 6379:6379 --name redis_6379 -v /home/redis1/conf/redis.conf:/etc/redis/redis.conf -v /home/redis1/data:/data -d redis redis-server /etc/redis/redis.conf
-
- docker run -p 6378:6379 --name redis_6378 -v /home/redis2/conf/redis.conf:/etc/redis/redis.conf -v /home/redis2/data:/data -d redis redis-server /etc/redis/redis.conf
-
- docker run -p 6377:6379 --name redis_6377 -v /home/redis3/conf/redis.conf:/etc/redis/redis.conf -v /home/redis3/data:/data -d redis redis-server /etc/redis/redis.conf
-
- info replication
-
- '''
四 故障处理
slave故障
master故障
五 复制常见问题
1 读写分离
读流量分摊到从节点
可能遇到问题:复制数据延迟,读到过期数据,从节点故障
2 主从配置不一致
maxmemory不一致:丢失数据
数据结构优化参数:主节点做了优化,从节点没有设置优化,会出现一些问题
3 规避全量复制
第一次全量复制,不可避免:小主节点,低峰(夜间)
节点运行id不匹配:主节点重启(运行id变化)
复制挤压缓冲区不足:增大复制缓冲区大小,rel_backlog_size
4 规避复制风暴
单主节点复制风暴,主节点重启,所有从节点复制
一 主从复制高可用
- #主从复制存在的问题:
#1 主从复制,主节点发生故障,需要做故障转移,可以手动转移:让其中一个slave变成master
#2 主从复制,只能主写数据,所以写能力和存储能力有限
二 架构说明
可以做故障判断,故障转移,通知客户端(其实是一个进程),客户端直接连接sentinel的地址
1 多个sentinel发现并确认master有问题
2 选举触一个sentinel作为领导
3 选取一个slave作为新的master
4 通知其余slave成为新的master的slave
5 通知客户端主从变化
6 等待老的master复活成为新master的slave
三 安装配置
- 1 配置开启主从节点
- 2 配置开启sentinel监控主节点(sentinel是特殊的redis)
- 3 应该是多台机器
- #配置开启sentinel监控主节点
- mkdir -p redis4/conf redis4/data redis5/conf redis5/data redis6/data redis6/conf
-
- vi sentinel.conf
-
-
- port 26379
- daemonize no
- dir /data
- protected-mode no
- bind 0.0.0.0
- logfile "redis_sentinel.log"
- sentinel monitor mymaster 10.0.0.1 6379 2
- sentinel down-after-milliseconds mymaster 30000
- sentinel parallel-syncs mymaster 1
- sentinel failover-timeout mymaster 180000
-
-
- docker run -p 26379:26379 --name redis_26379 -v /home/redis4/conf/sentinel.conf:/etc/redis/sentinel.conf -v /home/redis4/data:/data -d redis redis-sentinel /etc/redis/sentinel.conf
-
- docker run -p 26378:26379 --name redis_26378 -v /home/redis5/conf/sentinel.conf:/etc/redis/sentinel.conf -v /home/redis5/data:/data -d redis redis-sentinel /etc/redis/sentinel.conf
-
- docker run -p 26377:26379 --name redis_26377 -v /home/redis6/conf/sentinel.conf:/etc/redis/sentinel.conf -v /home/redis6/data:/data -d redis redis-sentinel /etc/redis/sentinel.conf
-
-
-
- redis-sentinel sentinel.conf
-
- info
- 配置会重写,自动发现slave
四 客户端连接
- import redis
- from redis.sentinel import Sentinel
-
- # 连接哨兵服务器(主机名也可以用域名)
- # 10.0.0.101:26379
- sentinel = Sentinel([('10.0.0.101', 26379),
- ('10.0.0.101', 26378),
- ('10.0.0.101', 26377)
- ],
- socket_timeout=5)
-
-
- print(sentinel)
- # 获取主服务器地址
- master = sentinel.discover_master('mymaster')
- print(master)
-
-
-
-
- # 获取从服务器地址
- slave = sentinel.discover_slaves('mymaster')
- print(slave)
-
-
-
-
- # 获取主服务器进行写入
- # master = sentinel.master_for('mymaster', socket_timeout=0.5)
- # w_ret = master.set('foo', 'bar')
- #
- #
- #
- #
- # slave = sentinel.slave_for('mymaster', socket_timeout=0.5)
- # r_ret = slave.get('foo')
- # print(r_ret)
五 实现原理
六 常见问题
redis主从复制原理与优化-高可用的更多相关文章
- redis主从复制和sentinel配置高可用
一:redis主从配置1.环境准备 master : 192.168.50.10 6179 slave1: 192.168.50.10 6279 slave2: 192.168.50.10 63792 ...
- Redis从出门到高可用--Redis复制原理与优化
Redis从出门到高可用–Redis复制原理与优化 单机有什么问题? 1.单机故障; 2.单机容量有瓶颈 3.单机有QPS瓶颈 主从复制:主机数据更新后根据配置和策略,自动同步到备机的master/s ...
- 深入Redis 主从复制原理
原文:深入Redis 主从复制原理 1.复制过程 2.数据间的同步 3.全量复制 4.部分复制 5.心跳 6.异步复制 1.复制过程 从节点执行 slaveof 命令. 从节点只是保存了 slaveo ...
- 11.Redis 哨兵集群实现高可用
作者:中华石杉 Redis 哨兵集群实现高可用 哨兵的介绍 sentinel,中文名是哨兵.哨兵是 redis 集群机构中非常重要的一个组件,主要有以下功能: 集群监控:负责监控 redis mast ...
- Redis主从复制原理总结
和Mysql主从复制的原因一样,Redis虽然读取写入的速度都特别快,但是也会产生读压力特别大的情况.为了分担读压力,Redis支持主从复制,Redis的主从结构可以采用一主多从或者级联结构,Redi ...
- Redis缓存,持久化,高可用
一,Redis作缓存服务器 本篇博客是接着上一篇博客未分享完的技术点. redis作为缓存服务器是众多企业中的选择之一,虽然该技术很成熟但也是存在一定的问题.就是缓存带来的缓存穿透,缓存击穿, ...
- 彻底搞懂Redis主从复制原理及实战
欢迎关注公众号:「码农富哥」,致力于分享后端技术 (高并发架构,分布式集群系统,消息队列中间件,网络,微服务,Linux, TCP/IP, HTTP, MySQL, Redis), Python 等 ...
- 太全了!Redis主从复制原理以及常见问题总结
相信很多小伙伴都已经配置过主从复制,但是对于redis主从复制的工作流程和常见问题很多都没有深入的了解.这次给大家整理一份redis主从复制的全部知识点. 下方可视频观看,效果更佳 Redis实战精讲 ...
- Redis 主从复制原理及雪崩 穿透问题
定义: Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.从2010年3月15日起,Redis的开发工作由VMw ...
随机推荐
- Windows编程常用api
转载网络 黑客常用WIN API函数整理 一.进程 创建进程: CreateProcess (,,,,,,,&si,&pi); WinExec("notepad", ...
- 部署 Helm【转】
本节我们将安装和部署 Helm 客户端和 Tiller 服务器. Helm 客户端 通常,我们将 Helm 客户端安装在能够执行 kubectl 命令的节点上,只需要下面一条命令: curl http ...
- vs2010编译C++ 状态标志
// CTest.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> #include &l ...
- 51nod 1368:黑白棋 二分图最大匹配
1368 黑白棋 题目来源: TopCoder 基准时间限制:1 秒 空间限制:131072 KB 分值: 160 难度:6级算法题 收藏 取消关注 有一个N*M的棋盘(1<=N,M< ...
- java随机函数用法Random
原文地址:http://blog.csdn.net/wpjava/article/details/6004492 import java.util.Random; public class Ran ...
- 刷题53. Maximum Subarray
一.题目说明 题目是53. Maximum Subarray,求最长连续子序列最大和.难度是Easy! 二.我的解答 Easy的题目,居然没做出来. 后来看了用dp方法,其中dp[i]表示以第i个元素 ...
- mysql 视图入门
- kali下的截图工具scrot、flameshot和deepin-scrot
对于这几个截图工具,精简好用的应该是deepin-scrot了,这是个和QQ截图有类似功能的Linux截图工具.flameshot的功能是最多的,也很好用,虽然有的功能用不上. 1.scrot安装和使 ...
- 十五、React:简单点餐实例:知识点,html解析写法
一.功能 从首页列表点进去,转到详情页 列表.详情从Api获取 Api列表:http://a.itying.com/api/productlist 详情:http://a.itying.com/api ...
- 吴裕雄--天生自然java开发常用类库学习笔记:国际化程序
import java.util.ResourceBundle ; public class InterDemo01{ public static void main(String args[]){ ...