赞
踩
学习中!!!!!
检查是否安装gcc :gcc -v
,如果没有gcc则使用命令yum -y install gcc-c++
因为redis的底层是使用c来编写的,gcc是一个c语言的编译工具
去官网下载redis,并放到Linux中
命令操作:::
mv redis-7.0.9.tar.gz /opt/ cd /opt tar -zxvf redis-7.0.9.tar.gz cd redis-7.0.9 //用来编译redis中的Makefile文件 make && make install //完成后默认放到/usr/local/bin路径下 cd /usr/local/bin/ //修改/opt/redis...下的redis.config,最好备份一份 daemonize yes protected-mode no #bind 127.0.0.1 -::1 //注释掉 requirepass 111111 //设置密码 //在 /usr/local/bin/目录下,启用server并进入客户端 ./redis-server /opt/redis-7.0.9/redis.conf ./redis-cli -a 111111
文件含义
redis的6379:
Redis的默认端口是6379,是由手机键盘字母MERZ的位置决定的。MERZ在Antirez的朋友圈语言中是"愚蠢和傻B"的代名词,它源于意大利广告女郎Alessia Merz在电视节目上说了一堆愚蠢的话,redis之父对她有"特殊"印象,就给她弄成端口号了
图解(上图中右下角部分)
十大类型所指的都是value的类型,因为redis是key - value形式的,key一直都是string类型
十大类型:
redis命令查询地址
key的部分操作:
String类型
List类型
Hash类型
Set类型
Zset类型
Zset相当于在Set的基础上加上了一个Score来进行排序
介绍图
RDB(Redis DataBase)
save
和bgsave
AOF(Append Only File)
appendonly yes
.AOFRW(写回)
开始时执行时被创建,文件可能存在多个。RDB + AOF 混合持久化
MULTI、EXEC
以MULTI开始一个事务,由EXEC命令触发事务。MULTI、DISCARD
watch key
,watch命令是一种乐观锁的实现,Redis在修改的时候会检测数据是否被更改,如果更改了,则执行失败。cat xxx.txt | redis-cli -pipe
将xx.txt中的命令,通过pipe进行操作
是什么:就说主从复制,以master为主,主要写操作。slave为辅,主要读操作。当master的数据变化的时候,自动将新的数据异步同步到其他的slave中。
能干嘛:读写分离、容灾恢复、数据备份、水平扩容、支持高并发
常用三招:一主二仆、薪火相传、反客为主。
复制原理和工作流程:
(1)slave启动,同步初请:slave启动成功连接到master后会发送一个sync命令,slave首次全新连接master,,一次完全同步(全量复制)将被自动执行,slave自身原有数据会被master数据覆盖清楚。
(2)首次连接,全量复制:master节点收到sync命令后会开始在后台保存快照(RDB的持久化,主从复制时,触发RDB),同时收集所有接收到的用于修改数据集命令缓存起来,master节点执行完RDB持久化后,将RDB快照文件和缓存命令发送给slave完成一次完全同步。slave服务在接收到数据库文件数据后,将其存盘并加载到内存中,从而完成复制初始化。
(3)心跳持续,保持通信: repl-ping-replica-period 10
发送包的周期默认为10秒,可以在配置文件中配置
(4)进入平稳,增量复制:master继续将新的所有收集到的修改命令自动一次传给slave,完成同步。
(5)从机下线,重连续传:master会检查backlog里面的offset,master和slave都会保存一个复制的offset还有一个masterId,offset是保存在backlog中的,master只会把已经复制的offset后面的数据复制给slave,类似断点续传。
复制的缺点
(1)复制延时、信号衰减:由于所有的写操作都是先在Master上操作,然后同步更新到slave上,所以从master同步到slave机器有一定的延迟。当系统很繁忙的时候,延迟问题会更加严重,slave机器数增加也会使这个问题严重。
(2)如果master挂了,默认情况下,不会在slave节点中自动重选一个master。每次都要人工如操作。
是什么:吹哨人巡查监控后台master主机是否故障,如果故障了根据投票数自动将某一个从库转化为新主库,继续对外服务。俗称无人值守运维。
能干嘛:
(1)主从控制:监控主从redis库是否正常运行。
(2)消息通知:哨兵可以将故障转移的结果发送给客户端。
(3)故障转移:如果master异常,则会进行主从切换,将其中一个slave作为新的master。
(4)配置中心:客户端通过连接哨兵来获得当前Redis服务的主节点地址。
架构示例图:
哨兵运行流程和选举原理:
当一个主从配置的master失效后,sentinel可以选举出一个新的maset.用于自动接替原master的工作,主从配置中的其他redis服务器自动指向新的master同步数据。一般建议sentinel采取奇数台,防止某一台sentinel无法连接到Master导致误切换。
(1)三个哨兵、一主二从,正常运行中。。。。。。
(2)SDown主观下线(Subjectively Down):SDown(主观不可用)是单个sentinel自己主观上检测到的关于master的状态,从sentinel的角度来看,如果发送了PING心跳后,在一定的时间内没有收到合法的回复,就达到了SDown的条件。sentinel配置文件中的down-after-milliseconds
设置了判断主观下线的时间长度。
(3)ODown客观下线(Objectively Down): ODown需要一定数量的sentinel,多个哨兵达成一致意见才能认为一个Master客观上已经宕掉。
(4)选举出领导者哨兵:当主节点被判断客观下线后,各个哨兵进行协商,选举出一个领导者哨兵节点,由该节点进行failover(故障转移)
(5)选举的算法:监视该主节点的所有哨兵都有可能被选为领导者,选举使用的算法是Raft算法,Raft算法的基本思路是先到先得。即在一轮选举中,哨兵A向哨兵B发送成为领导者的申请,如果B没有同意过其他哨兵,就会同意A成为领导者。
(6)由领导者哨兵开始推动故障切换流程,选举出一个新的master.
(6-1)新主登基:某个slave被选为master,选出master的规则:在剩余的slave节点健康的前提下
redi.conf文件中的优先级slave-priority或者replica-priority最高的从节点(数字越小优先级越高),
复制偏移位置offset最大的从节点,最小RunID的从节点
(6-2) 俯首称臣:执行slaceof no noe 命令,让选出来的从节点成为新的主节点。通过slaveof命令让其他节点成为其从节点。
哨兵领导者会对选举出的新master执行slaveof no noe 命令。将其升为主节点,之后向其他slave发送命令,让剩余的slave成为新的master节点的slave.
(6-3)旧主拜服:之前下线的master设置为新选出来的master的从节点,当老的master上线后,会变为从节点。
哨兵领导者会让老master降级为slave并恢复正常工作。
使用建议:
(1)哨兵节点的数量应为多个,哨兵本身应该集群,保证高可用
(2)哨兵节点的数量应该是奇数
(3)各个哨兵节点的配置应该一致
(4)如果哨兵节点部署在Docker等容器里面,尤其要注意端口的正确映射
(5)哨兵集群 + 主从复制, 并不能保证数据零丢失。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。