redis高可用方案图文详解


redis高可用方案图文详解

理解并从头搭建redis集群

部分开发人员工作当中只是在应用中使用redis,比如用来做数据结果的缓存。而且现在有很多不错的redis客户端工具(redisson),基本上可以不用关注redis命令就可以完成相当部分的功能。所以可能会对如下这些问题关注点不够:

如何容灾?即某个redis节点出了问题如何保证服务的高可用性

如何横向扩容?当数据量特别大时,如何解决单个redis的性能问题

集群至少需要几台机器?或者几个redis节点

集群搭建都利用什么技术,哪些工具?

如何容灾?

redis提供了主从热备机制,主服务器的数据同步到从服务器,通过哨兵实时监控主服务器状态并负责选举主服务器。当发现主服务器异常时根据一定的算法重新选举主服务器并将问题服务器从可用列表中去除,最后通知客户端。主从是一对多的树型结构,如下图:

1.jpg

哨兵

哨兵是sentinel的中文名称,是redis出的一个高可用架构的工具,自身是一个独立的进程,可以同时监控一个以上的redis集群。

哨兵集群

基于高可用的考虑,哨兵自身也是需要支持集群的,如果只有一个哨兵就会存在单点问题。

哨兵决策

哨兵有一个数量配置,当多少个哨兵同时认为某个主服务不可用时才进行主从切换,比如总共有5个哨兵,当3个哨兵认为服务不可用时才决定做主从切换。这么做可以避免一些误切换,降低切换成本,比如瞬时的网络异常等。

如何横向扩容?

无论是redis还是其它一些数据库之类的产品,当单节点的数据容量达到一定上限后,服务对外提供的能力会越来越弱。redis在高版本中提供了redis-trib.rb来实现集群功能,也可以使用第三方的工具twemproxy。

去中心化,每个节点都是平等的

redis集群从设计上没有考虑中心化,这样可以避免中心节点的单点等问题。每个节点都能掌握整个集群的状态,连接任意的节点都可以访问到所有的key,就像单节点的redis一样。

集群原理图

自己理解画的,如有理解不对的地方可以指出。

2.jpg

key与redis节点的关系

引入了hasy solt,中文理解为哈希槽。总共16384个,我们操作的key通过取模算法确认key落在哪个槽上。

HASH_SLOT = CRC16(key) mod 16384

哈希槽与节点之间有一定关系,所以我们就可以将key分配到某个具体的redis节点上了。

详细的关系可再研究,简单的比如节点A负责0-5000编号的哈希槽,节点B负责5001-1000

一步一步搭建

开始搭建三主三从的集群,系统是ubuntu,采用redis提供的集群工具redis-trib.rb。

安装最新redis

创建redis_cluster目录,并且创建7000到7005这6个目录

SpeechEasy SpeechEasy

SpeechEasy是一种合成语音解决方案,可以让用户从文本生成高质量、易于理解的音频。

SpeechEasy 67 查看详情 SpeechEasy

将redis目录下的redis.conf复制到上面创建的6个目录中

分别修改redis.conf文件,对6个文件做类似的修改。

port  7000                                       //端口7000       
bind  127.0.0.1                                  //默认ip为127.0.0.1 需要改为其他节点机器可访问的ip
daemonize    yes                                 //后台运行
pidfile  /var/run/redis_7000.pid                 //pidfile文件对应7000
cluster-enabled  yes                             //开启集群
cluster-config-file  nodes_7000.conf             //集群的配置
cluster-node-timeout  15000                      //请求超时  默认15秒,可自行设置

bind需要注意的就是需要配置为其它机器可以访问的ip,否则无论是创建集群还是客户端连接都会有问题。

启动6个redis

redis-server redis_cluster/7000/redis.conf
redis-server redis_cluster/7001/redis.conf
redis-server redis_cluster/7002/redis.conf
redis-server redis_cluster/7003/redis.conf
redis-server redis_cluster/7004/redis.conf
redis-server redis_cluster/7005/redis.conf

创建集群
redis的src目录下有个redis-trib.rb,将它复制到/usr/local/bin中,然后执行如下脚本:

redis-trib.rb  create  --replicas  1  127.0.0.1:7000 127.0.0.1:7001  127.0.0.1:7002 127.0.0.1:7003  127.0.0.1:7004  127.0.0.1:7005

--replicas后面的1代表从服务器的个数,上面可以理解为前面3个为主服务器,后面三个分别做为从服务器,即三对主从。

执行过程中会遇到提示需要安装ruby,安装完成之后又会提示安装 gem redis。

安装gem redis,折腾了好久,最终发现是因为在国内访问不了某些网站导致通过apt-get install安装不成功,最后通过下载源码的方式安装成功。

4.jpg再次执行创建集群的脚本,出现如下提示:

5.jpg

输入yes,继续

5.jpg

最少需要多少个主服务器?

可能是基于某些约定,集群约定只有当可用节点数大于半数以上时才具备对外提供服务的能力。首先数量一定是奇数,其实必须大于1,所以最少的主服务器数量为3。

测试集群
连接客户端,由于我的所有节点都是在本地,所以不需要输入ip,但需要加-c的参数。redis-cli -c -p 7000

连接成功后,增加一个key

set mykey 123

有一行提示语,指向到端口7002,这说明虽然我们连接的是7000的实例,但通过hash算法最终会将key分配到7002的实例上。

6.JPG

再连接7005端口查询下key,测试下是否任意一个实例都可以查询到key

get mykey

显示指向到端口7002

7.jpg

更多redis知识请关注redis数据库教程栏目。

以上就是redis高可用方案图文详解的详细内容,更多请关注其它相关文章!


# 单点  # 客户端  # 时才  # redis  # 营销和推广  # 泉山区网站建设电话多少  # 云南seo营销  # 餐厅营销方案微信推广  # 石家庄大型网站建设平台  # 学习产品怎么推广营销  # 昆明网站建设总部  # 销售部网站建设费  # 本溪抖音关键词搜索排名技术费用  # 河南推广网店网站大全  # 都是  # 的是  # 就可以  # 如何实现  # 多少个  # 不可用  # 网络带宽 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894 】


相关推荐: 实现二叉树的层序插入:基于树大小的路径导航  《狐友》联系客服方法  Pandas中基于动态偏移量实现DataFrame列值位移的策略  在VS Code中利用AI辅助进行代码迁移  告别阻塞等待:如何使用GuzzlePromises优雅处理PHP异步操作,提升应用响应速度  word表格如何按某一列内容进行排序_Word表格按列排序方法  京东快递物流信息不更新怎么办_物流停滞原因与处理方法  胃动力不足?试试这5个调理方法  鸿蒙单条备忘录如何加密  猫眼电影app如何筛选支持退改签的影院_猫眼电影退改签影院筛选方法  PHP魔术方法__set与__isset:设计考量、性能权衡与静态分析的视角  实时数据流中高效查找最小值与最大值  快手网页版官方访问 快手网页版页面在线打开  《大周列国志》皇帝律令功能介绍  c++类和对象到底是什么_c++面向对象编程基础  网站体验不好=浪费钱:如何提升-用户体验效果差  iPhone14开启Apple TV遥控设置  163邮箱登录入口官网 163.com邮箱登录入口  在Peewee中处理PostgreSQL记录重复:一站式数据摄取教程  Win10如何彻底关闭OneDrive Win10禁用云同步功能【纯净】  如何发挥新媒体矩阵作用?新媒体矩阵怎么搭建?  iPhone 15 Pro如何查看存储空间占用_iPhone 15 Pro存储空间查看教程  J*a中为什么强调组合优于继承_组合模式带来的灵活性与可维护性解析  抖音火山版注销账号抖音会注销吗 抖音火山版与抖音账号注销关系  C++中std::thread和std::async的区别_C++并发编程与线程与异步任务比较  多闪APP官方下载安装入口_多闪最新版本获取入口  4399小游戏下装链接 4399小游戏下载链接入口  b站怎么设置动态仅粉丝可见_b站动态粉丝可见设置方法  苹果电脑如何快速查看电池状态 苹果电脑电池信息快捷方法  HTML Canvas文本样式定制指南:解决外部字体加载与应用难题  mysql触发器如何编写_mysql触发器编写规范与代码示例讲解  韩剧圈正版官网入口_韩剧圈官方指定登录  《战地6》反作弊已成功拦截240万次作弊 发售第一周98%比赛没有作弊  小红书网页版首页入口 小红书网页版电脑端官方登录链接  歌词怎么展示在|直播|间视频号?有什么注意事项?  解决 Vue 3 组件未定义错误:理解 createApp 与根组件的正确使用  Teambition网盘如何共享文件  怎么恢复删除的电脑文件_数据恢复软件使用教程  优化Google Charts Gauge:在数据库无数据时显示默认值  苹果11如何更换iCloud账号_苹果11账号切换的具体步骤  如何修改Windows截图的默认保存位置_告别C盘让桌面更整洁【教程】  德邦快递会员怎么开通  《幻兽帕鲁》手游帕鲁捕捉技巧分享  悟空浏览器网页版链接 悟空浏览器网页版最新有效地址  Windows 11怎么删除恢复分区_Windows 11使用Diskpart命令强行删除分区  消除网页顶部意外空白线:CSS布局常见问题与解决方案  t3出行如何使用微信支付  Eclipse开发J*a快速入门  c++中的const关键字用法大全_c++ const正确使用指南  J*aScript与HTML元素交互:图片点击事件与链接处理教程 

 2019-12-17

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.