Redis快速入门(六)_如何给redis创建文件夹-程序员宅基地

技术标签: 数据库  redis  

Redis主从复制

主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,master以写为主,slaver以读为主,
特点:
读写分离,性能扩展,缓解访问压力。
容灾快速恢复,从服务器挂掉了,可以转换到另外的从服务器。
在这里插入图片描述
一主多从,只能有一台主服务器,老大只能有一个,
问从服务器挂了可以切换,主机挂了呢?
可以配置一个集群,一台主机多个从机,一个主机挂掉换另一个主机。
在这里插入图片描述

怎么玩?怎么配置?
1.创建一个/myredis文件夹

mkdir /myredis

2.复制redis.conf配置文件到文件夹中

cp /etc/redis.conf /myredis/redis.conf

3.配置一主两从,配置三个配置文件
redis6379.conf
redis6380.conf
redis6381.conf

4.在三个配置文件中写入内容

//创建相应文件
vi redis6379.conf
//加入以下内容
//引入公共部分
include /myredis/redis.conf
//配置pid的位置
pidfile /var/run/redis_6379.pid
//端口号
port 6379
//rdb文件名称
dbfilename dump6379.rdb

:wq!

编写另外两个直接用复制算了,里面的内容记得改哟!!!

5.启动三台redis服务器

redis -server redis6379.conf
redis -server redis6380.conf
redis -server redis6381.conf

查看当前的主从情况
info replication 打印主从复制的相关信息

使用不同的终端连接三个服务器
连接上端口号为6379的服务器
redis-cli -p 6379
redis-cli -p 6380
redis-cli -p 6381

info replication
显示 role 是master

7.配置从库不配主库
在从服务器上
主机的ip和端口号
slaveof
可以使用
slaveof 127.0.0.1 6379

然后 从机的角色就变成slave了
主机能写,从机只能读。

主从中三个典型问题

切入点问题?slave01,slave02是从头开始复制还是从切入点开始复制?之前的是否会复制?
从机是否可以写?set可否?
主机shutdown后情况如何?上机是上位还是原地待命?

1.从服务器shutdown之后,重启后变成了master,需要重新加入,加入后,会全部复制主服务器的内容.
2.主机shutdown之后, 从服务器会知道,但还是从服务器,主服务器重新启动后,而且还知道从服务器,

主从复制的原理

在这里插入图片描述

Slave 启动成功连接到 master 后会发送一个 sync 命令;

Master 接到命令启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令,在后台进程执行完毕之后,master 将传送整个数据文件到 slave,以完成一次完全同步。

全量复制:slave 服务器在接收到数据库文件数据后,将其存盘并加载到内存中。

增量复制:Master 继续将新的所有收集到的修改命令依次传给 slave,完成同步。

但是只要是重新连接 master,一次完全同步(全量复制) 将被自动执行。

在这里插入图片描述

薪火相传

上一个slave可以是下一个slave的master。slave同样可以接收其他slaves的连接和同步请求,那么该slave作为了链条中下一个的master,可以有效地减轻master的写压力,去中心化降低风险,
用slaveof
中途变更转向:会清除之前的数据,重新拷贝最新的,风险是一旦某个slave宕机,后面的slave都没法备份了主机挂了,从机还是从机无法写数据了。

反客为主

当一个master宕机后,后面的slave可以立即升为master,后面的slave不做任何修改,用slaveof no one 将从机变成主机。需要手动完成。也可以使用哨兵模式自动完成,

哨兵模式

反客为主的自动版,能够后台监控主机是否故障,如果故障根据投票数自动将从库变为主库,

相关配置
cd /muredis/
vi sentinel.conf
写道sentinel.conf文件中
sentinel monitor mymaster 127.0.0.1 6379 1
其中mymaster为监控对象的服务器名称,1为至少有多少个哨兵同意迁移的数量。

启动哨兵,

redis-sentinel sentinel.conf 

当主机挂掉,从机选举中产生新的主机
哪个从机会被选举为主机呢?根据优先级别:slave-priority,原主机重启后会变成从机。

复制延时

由于所有的写操作都是先在 Master 上操作,然后同步更新到 Slave 上,所以从 Master 同步到 Slave 机器有一定的延迟,当系统很繁忙的时

候,延迟问题会更加严重,Slave 机器数量的增加也会使这个问题更加严重。

在这里插入图片描述

redis 集群

问题?
容量不够,redis 如何进行扩容?

并发写操作, redis 如何分摊?

另外,主从模式,薪火相传模式,主机宕机,导致 ip 地址发生变化,应用程序中配置需要修改对应的主机地址、端口等信息。

之前通过代理主机来解决,但是 redis3.0 中提供了解决方案。就是无中心化集群配置。

什么是集群
redis集群实现了redis的水平扩容,即启动N个redis节点。将整个数据库分布存储在这个N个节点中,每个节点存储总数的N分之一,Redis集群通过分区(partition)来提供一定程度的可用性(availablilty):即使集群中有一部分节点失效或者无法通讯,集群也可以继续处理命令请求,

删除持久化数据
将rdb,aof文件都删除掉。

搭建redis集群
在redis6379.conf中配置

include /myredis/redis.conf
pidfile "/var/run/redis_6379.conf"
port 6379
dbfilename "dump6379.rdb"
cluster-enabled yes
cluster-config-file nodes-6379.conf
cluster-node-timeout 150000

给其他的服务器复制一份,并且把里面的端口号改一下

在下面输入这个,把6379替换成6380
$s/6379/6380

启动所有的redis服务器,将所有节点合成一个集群
组合之前,请确保所有redis实例启动后,nodes-xxxx.conf文件都正常生成,

切换到这个目录下
cd /opt/redis-6.2.1/src

redis-cli--cluster create --cluster-replicas 1 192.168.11.101:6079 所有的服务器ip地址和端口号,

--replicas 1 采用最简单的方式配置集群,一台主机,一台从机,正好三组,

连接集群
redis-cli -c -p 6379

redis cluster 如何分配六个节点?

一个集群至少有三个主节点
选项 --cluster-replicas 1 表示我们希望为集群中的每一个主节点创建一个从节点。分配原则尽量保证每个主数据库运行在不同的ip地址,每个从库和主库不在一个ip地址上。

什么是slots,
一个redis集群包含16384个插槽(hash slot)数据库中每个键都属于这16384个插槽的其中一个
集群使用公式CRC16(key)%1634来计算key属于哪个槽,其中CRC16(key)语句用于计算键key的CRC16校验和。集群中的每个节点负责处理一部分插槽,
在这里插入图片描述
在这里插入图片描述
不在一个solt下的键值,是不能使用mget,mset等多键操作,
可以通过{}来定义组的概念,从而使key中{}内相同内容的键值对放到一个solt中去

mst k1{user} v1 k2{user} v2

在集群中录入值,在redis-cli每次录入,查询键值,redis都会计算出该key应该送往哪个插槽,如果不是该客户端对应服务器的插槽,redis就会报错,并告知应该往的redis实例地址和端口,
redis-cli客户端提供了-c参数实现自动重定向,
如redis-cli -c -p 6379 登入后,再录入,查询键值对可以自动重定向,

查询集群中的值
CLUSTER GETKEYSINSLOT 返回count个slot槽中的键,

故障恢复
如果主节点下线?从节点能否自动生为主节点?注意:十五秒超时,主节点恢复后,主从关系如何?主节点回来变成从机
如果所有某一段插槽的主节点都宕掉,redis服务是否还能继续?如果某个插槽的主从都挂掉了,而cluster-require-full-coverage为no,那么,该插槽数据全都不能用,也无法存储,
redis.conf中的参数cluster-require-full-coverage

集群的jedis开发

在这里插入图片描述
redis集群优势:实现扩容,分摊压力,无中心配置相对简单,
redis集群不足:多键操作是不被支持的,多见的redis事物是不被支持的,lua脚本不被支持,由于集群方案较晚,不普及,迁移难度大。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wangjunlei666/article/details/124136850

智能推荐

【stable diffusion LORA训练】改进lora-scripts,命令行方式训练LORA,支持SDXL训练-程序员宅基地

文章浏览阅读1.5k次,点赞5次,收藏9次。分享下自己改进的一个lora训练脚本,在ubuntu下如果SD-WEBUI的环境已经搭好的话,只需要下载lora-script就可以支持训练了,直接命令行方式训练_lora-scripts

Android AndroidManifest 清单文件以及权限详解_清单文件的哪一节指定当用户尝试获取未缓存文件时将执行的任务-程序员宅基地

文章浏览阅读1.8k次。每个Android应用都需要一个名为AndroidManifest.xml的程序清单文件,这个清单文件名是固定的并且放在每个Android应用的根目录下。它定义了该应用对于Android系统来说一些非常重要的信息。Android系统需要这些信息才能正常运行该应用。Android程序清单文件主要具有下面作用:· 它给应用程序Java包命名,这个包名作为应用程序唯一标识符。_清单文件的哪一节指定当用户尝试获取未缓存文件时将执行的任务

Java中的Timer源码分析及缺陷_java timer自己会丢失吗-程序员宅基地

文章浏览阅读3.7k次。使用Timer执行定时任务很简单,一般这样子写: Timer timer = new Timer(); TimerTask task = new TimerTask() { @Override public void run() { System.out.println("hel_java timer自己会丢失吗

蒙特卡洛之三门问题_n次蒙提霍尔问题matlab-程序员宅基地

文章浏览阅读1.7k次,点赞4次,收藏14次。【何为三门问题?】三门问题(Monty Hall problem)亦称为蒙提霍尔问题、蒙特霍问题或蒙提霍尔悖论,大致出自美国的电视游戏节目Let’s Make a Deal。问题名字来自该节目的主持人蒙提·霍尔(Monty Hall)。参赛者会看见三扇关闭了的门,其中一扇的后面有一辆汽车,选中后面有车的那扇门可赢得该汽车,另外两扇门后面则各藏有一只山羊。当参赛者选定了一扇门,但未去开启它的时候,..._n次蒙提霍尔问题matlab

java system load_Java:System.loadLibrary()的使用方法汇总-程序员宅基地

文章浏览阅读2.2k次。转自http://blog.csdn.net/forandever/article/details/5983846当使用System.loadLibrary()调用 Dll,两种方法:1.设定环境变量。比如:所编辑的Dll在目录“D:/cppProjects/nativecode/release”内,将这个路径复制添加到电脑的环境变量中的path变量内即可。2.设定项目属性。(开发推荐)右击项目名..._java system.loadlibrary

linux连接小米随身wifi密码忘记了,小米随身wifi设置教程-程序员宅基地

文章浏览阅读351次。摘 要原标题:"小米随身wifi怎么用 小米随身wifi设置图文教程"相关路由器设置经验分享。 - 来源:路由器之家作为小米送给米粉们的新年“礼物”——小米"原标题:"小米随身wifi怎么用 小米随身wifi设置图文教程"相关路由器设置经验分享。 - 来源:【路由器之家】作为小米送给米粉们的新年“礼物”——小米随身wifi在12月25日发布,这是一款同360随身wifi、小度wifi一样的硬件设备..._linux 小米随身wifi

随便推点

鸿蒙os手机版正式版官方,亿万花粉有福了!鸿蒙手机OS正式版将于3月上线,或由P50系列首发...-程序员宅基地

文章浏览阅读116次。受制裁影响,华为手机的市场份额不断下滑。根据最新的数据,2021年1月,华为手机在国内的市场份额不低OPPO和vivo,仅名列第三。虽然困难重重,华为却未停止往前走的脚步,还开除了几名在网上声称“华为要出售手机业务”的内部员工。华为官方已经确认,新款手机还会正常发布,按照发布节奏,上半年的旗舰—P50系列已经离我们是越来越近了。P50系列除了会带来更加出色的拍照,还有一大绝招,那就有可能会首发鸿蒙..._鸿蒙手机版正式上线

npm默认安装路径设置_npm默认路径-程序员宅基地

文章浏览阅读1.6w次,点赞2次,收藏12次。默认情况下,在哪个文件夹下运行npm,npm就在当前目录创建一个文件夹node_modules,然后将要安装的程序安装到文件夹node_modules里面,这样我很不习惯哈。。。所以让我们给它设置一个默认位置吧!// 设置npm安装程序时的默认位置npm config set prefix “C:\Users\Default\AppData\Roaming\npm\node_modules”..._npm默认路径

初玩dlib:人脸识别(2)_shape_predictor_68_face_landmarks-程序员宅基地

文章浏览阅读512次。1. 简介利用训练好的 shape_predictor_68_face_landmarks.dat(人脸 68 点特征检测器),进行人脸面部轮廓特征的提取。下载地址:http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz22. 代码 face_landmark_detector_remark.py# -*-..._shape_predictor_68_face_landmarks

三维空间中向量的旋转_三维向量旋转-程序员宅基地

文章浏览阅读9.2k次,点赞9次,收藏41次。三维空间中向量的旋转_三维向量旋转

MATLAB:三维坐标及函数案例实现_matlab建立三维坐标系-程序员宅基地

文章浏览阅读1.4w次,点赞6次,收藏43次。虚拟现实技术:三维立体显示案例实现目录虚拟现实技术:三维立体显示案例实现案例一:matlab 绘制三维图并标注每个点的坐标1.前言2.代码实现案例二:matlab 绘制三维曲面的函数1.mesh函数2.surf函数3.两者调用格式差不多4.比较mesh、surf的区别案例一:matlab 绘制三维图并标注每个点的坐标1.前言基本原理是先绘制三维图,通过plot3,然后通过text函数在每个点标注出坐标,但由于点的数量多,标注会比较密集,不一定看得清楚,可以适当减少标注的点数来提高清晰度。2.代码实_matlab建立三维坐标系

anti-wrinkle_Anti-wrinkle是什么意思-程序员宅基地

文章浏览阅读1.2k次。1. Each week, use this product in conjunction with Water Breath Sleeping Eye Mask and Biochemical Anti-Wrinkle Sleeping Eye Mask two to three times, these two eye masks can be used alternatively.每周配合使..._fewruer neck anti-wrinkle

推荐文章

热门文章

相关标签