redis以及redis集群(伪,真集群会注明区别以及怎么做)搭建(二)

接上篇序号

2.1 持久化

Redis的高性能体现在他的数据都储存在内存中,为了保证电脑重启之后,数据不丢失,所以需要将数据从内存上写入到硬盘中,这个的过程就叫持久化。
Redis有两种持久化方案,rdb 和 aof 可以选其中一个也可以两个结合用

2.2 rdb持久化方案

rdb方案是通过快照的方式进行持久化的,当符合rdb的持久化策略的时候,拍摄快照并且进行持久化到硬盘上(rdb文件中储存的是数据)
rdb 方案是redis 的默认方式,在redis.conf 文件中有一下配置内容:

save 900 1  #900秒内容如果超过1个key被修改,则发起快照保存
save 300 10 #300秒内容如超过10个key被修改,则发起快照保存
save 60 10000 #表示60秒内如果超过10000个key被修改,则发起快照保存

在redis.conf中:

​ 配置dir指定rdb快照文件的位置

​ 配置dbfilenam指定rdb快照文件的名称

Redis启动后会读取RDB快照文件,将数据从硬盘载入到内存。

一般情况下保持默认就可以了。

总结:
优点:redis的性能几乎不会受到影响
缺点:服务器断电时,会丢失部分数据(数据完整性没了)

2.3 aof持久化方案

默认情况下 aof方案是没有开启的,需要进入配置文件手动开启

appendonly yes

AOF文件的保存位置和RDB文件的位置相同,都是通过dir参数设置的,默认的文件名是appendonly.aof,
可以通过appendfilename参数修改:

appendfilename appendonly.aof

AOF持久化策略如下:

#appendfsync always   #每次有数据修改发生时都会写入AOF文件。
appendfsync everysec  #每秒钟同步一次,该策略为AOF的缺省策略。
#appendfsync no        #从不同步。高效但是数据不会被持久化。

注意:CV的时候记得把中文删除掉使用

总结:
优点:持久化良好,能包证数据的完整性
缺点:大大降低了redis系统的存取速度

2.2主从复制

2.2.1 什么是主从复制

虽然持久化保证了即使redis服务重启也不会丢失数据,但是当redis服务器的硬盘损坏了也可能会导致数据丢失,如果通过redis的主从复制机制就可以避免这种单点故障,如下图:
在这里插入图片描述

说明:

  • 主redis中的数据有两个副本(replication)即从redis1和从redis2,即使一台redis服务器宕机其它两台redis服务也可以继续提供服务。

  • 主redis中的数据和从redis上的数据保持实时同步,当主redis写入数据时通过主从复制机制会复制到两个从redis服务上。

  • 只有一个主redis,可以有多个从redis。

  • 主从复制不会阻塞master,在同步数据时,master可以继续处理client 请求

  • 一个redis可以即是主又是从,如下图:

在这里插入图片描述

总结一下:单独用作用不大,跟下面的集群结合起来就YYDS,但是还是需要看看主从复制的过程

2.2.2 主从配置.

2.2.2.1.主redis配置

无需特殊配置。

2.2.2.2.从redis配置

修改从redis服务器上的redis.conf文件,添加slaveof 主redis ip 主redis端口

在这里插入图片描述

上边的配置说明当前该从redis服务器所对应的主redis是192.168.101.3,端口是6379

2.2.3 主从复制的过程

在这里插入图片描述

从图上看出来

  1. slave 服务启动,slave 会建立和master 的连接,发送sync 命令。
  2. master启动一个后台进程将数据库快照保存到RDB文件中
  3. master 就发送RDB文件给slave
  4. slave 将文件保存到磁盘上,然后加载到内存恢复
  5. master把缓存的命令转发给slave

注意:主机死了,从机只能读= =。
如果你知道使用从机写入的话是什么结果:
在这里插入图片描述

3.1 集群搭建

3.1.1 redis-cluster架构图

在这里插入图片描述

架构细节:

(1)所有的redis节点彼此互联(PING-PONG机制),节点的fail是通过集群中超过半数的节点检测失效时才生效.

在这里插入图片描述

(2)存取数据时连接任一节点都可以,但集群中有一个节点fail整个集群都会fail

Redis 集群中内置了 16384 个哈希槽,当需要在Redis 集群中放置一个 key-value 时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点

这段如果看不懂:意思就是 三台主机平均分配这个16000多的哈希槽,比如说第一台哈希槽[0-5000],第二台[5001-10000],第三台[10001-16383],我这是大概分了分,真实redis是平均分配的
然后通过**crc16(key)%16384=[0-16384]**计算出来一个结果,比如说计算出来6000 ,然后找这个哈希槽在第二台主机上然后储存上去。

在这里插入图片描述

3.2.1 开始搭建集群

Redis集群中至少应该有三个节点。要保证集群的高可用,需要每个节点有一个备份机。

Redis集群至少需要6台服务器。

搭建伪分布式。可以使用一台虚拟机运行6个redis实例。需要修改redis的端口号7001-7006

3.2.1.1 集群搭建环境

使用ruby脚本搭建集群,需要安装ruby。
注意:这个步骤是前面写的**redis以及redis集群搭建(一)**里面已经安装过redis了。如果没有安装请按照前面文章安装一下

yum install ruby

yum install rubygems

因为redis-3.0.0.gem这个玩意儿已经在官网下载不到了,所以给个链接

https://download.csdn.net/download/QAQnullPoint/86448887

先暂时给个链接如果不行的话,评论或者私信告诉我,我再想别的方法。
下载完成之后
把他上传到 /usr/upload 路径下

gem install redis-3.0.0.gem 

cd redis-3.0.0/src

ll *.rb

如果能看见 -rwxrwxr-x. 1 root root 48141 Apr 1 2015 redis-trib.rb 这个玩意儿那么久说明这一步就完事儿了

3.2.1.2 安装步骤
  1. 注意:必须删除dump.rdb和appendonly.aof文件

搭建伪分布式,需要6个redis实例放到/usr/local/redis-cluster目录下,并且运行在不同的端口7001-7006。

真集群的情况下,需要6台已经安装redis的机器,ip不同然后端口号都是6379,然后挨个进去把第2步的内容给修改了

  1. 我们先修改一部分内容:
vim /usr/local/redis/bin/redis.conf

在这里插入图片描述

  1. 然后进行cp
mkdir /usr/local/redis-cluster

cp -r  /usr/local/redis  /usr/local/redis-cluster/redis-7001
  1. 创建完成6个redis实例之后,每个都进去修改端口号分别为7001-7006

  2. 启动每个redis实例
    这里为大家准备了一个启动集群的脚本

cd /usr/local/redis-cluster

vim start-all.sh

然后把下面的内容复制进去

cd /usr/local/redis-cluster/redis-7001/bin
./redis-server redis.conf

cd /usr/local/redis-cluster/redis-7002/bin
./redis-server redis.conf

cd /usr/local/redis-cluster/redis-7003/bin
./redis-server redis.conf

cd /usr/local/redis-cluster/redis-7004/bin
./redis-server redis.conf

cd /usr/local/redis-cluster/redis-7005/bin
./redis-server redis.conf

cd /usr/local/redis-cluster/redis-7006/bin
./redis-server redis.conf

顺手再整一个关闭的

vim shutdown-all.sh

复制下面的这个玩意儿进去

cd redis-7001/bin
./redis-cli -p 7001 shutdown
./redis-cli -p 7002 shutdown
./redis-cli -p 7003 shutdown
./redis-cli -p 7004 shutdown
./redis-cli -p 7005 shutdown
./redis-cli -p 7006 shutdown

保存完毕之后,再顺手一下权限

chmod 777 start-all.sh
chmod 777 shutdown-all.sh

真实集群的打开方式需要把redis启动。
关闭集群的方式提供一个模板

cd redis-7001/bin
./redis-cli -h IP地址 -p 6379 shutdown
./redis-cli -h IP地址 -p 6379 shutdown
./redis-cli -h IP地址 -p 6379 shutdown
./redis-cli -h IP地址 -p 6379 shutdown
./redis-cli -h IP地址 -p 6379 shutdown
./redis-cli -h IP地址 -p 6379 shutdown
3.2.1.3 使用ruby搭建集群

切换到*.rb目录

./redis-trib.rb create --replicas 1 192.168.25.153:7001 192.168.25.153:7002 192.168.25.153:7003 192.168.25.153:7004 192.168.25.153:7005  192.168.25.153:7006

这个玩意儿更改一下你自己的IP地址(127.0.0.1也是可以的),
真实集群就把IP地址改一下 端口号改成6379。

[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

结尾看见ok那么久已经安装完成了!
接下来测试一下

3.2.1.4测试

启动时使用-c参数来启动集群模式,命令如下:
启动哪一台都是可以的。

cd /usr/lcoal/redis-cluster/redis-7001/bin
./redis-cli -c -p 7001

在这里插入图片描述
测试一下是否可以正常工作。其中不好理解的6928就是他的哈希槽,在第二台主机上

redis cluster命令

cluster info   #打印集群的信息

cluster nodes  #列出集群当前已知的所有节点(node),以及这些节点的相关信息  

查看一下结果就是否真的可以工作。

在这里插入图片描述

在这里插入图片描述
箭头指向的就是主机,被圈住的就是从机。

结束,下篇文章见。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值