redis集群镜像搭建(不是集群环境搭建)

目录

redisCluster集群镜像安装:

持久化分为 rdb 和 aof 

aof重写的触发条件:

rdb 方式丢失数据的情况:

aof 方式丢失数据的情况:

提高redis的可靠性,可用性,减少数据的丢失与阻塞:

rdb配置:

aof配置:

redis-cli 工具(容器中复制):

redis-cli 工具(编译redis安装包获取):

redis.conf 文件的差异5.0.5 和 6.0.1

在容器中安装软件:


redis集群搭建参考:https://blog.csdn.net/yang_zzu/article/details/107583581

redis 升级到6.0 版本后,新增的功能:

acl

多线程io

cluster proxy

resp3协议


redis 6.0.6 ,容器里面是找不到 redis.conf 配置文件

redis 6.0.1,redis.conf 文件 在 /redis/redis.conf 

建议使用6.0.1,功能有了,6.0.6是一个优化,没有大的功能改变

 

虽说没有找到 6.0.6 版本的配置文件,但是在进入到redis 服务器里面,可以查到配置信息,

有厉害的大佬,可以指导一下疑惑。

redis集群镜像搭建(不是集群环境搭建)_第1张图片


版本环境: 

docker pull redis

下载的redis 镜像的 版本为 6.0.6

redis集群镜像搭建(不是集群环境搭建)_第2张图片

docker pull grokzen/redis-cluster

下载的镜像版本为 6.0.1

redis集群镜像搭建(不是集群环境搭建)_第3张图片


docker 镜像打包

https://blog.csdn.net/qq_26235847/article/details/84635250

 

 

redisCluster集群镜像安装:

查找redis 集群镜像文件

redis集群镜像搭建(不是集群环境搭建)_第4张图片

下载镜像

docker pull grokzen/redis-cluster

redis集群镜像搭建(不是集群环境搭建)_第5张图片

创建文件夹:

cd
mkdir /redis
mkdir /redis/rediscluster

redis集群镜像搭建(不是集群环境搭建)_第6张图片

启动容器:

docker run -i -t -d --name redis-171 -p 6379:6379 grokzen/redis-cluster

redis集群镜像搭建(不是集群环境搭建)_第7张图片

这次启动容器,是为了拷贝出来 redis.conf 的配置文件到宿主机上面,然后做文件映射,后面在对容器的配置文件进行修改的时候直接修改宿主机上面的配置文件就可以了。

配置文件的映射可以不用做,但是data 文件的映射是必须要做的。

1.配置文件的映射

将 redis-171容器中的 /redis/redis.conf 文件 拷贝到  宿主机 /redis/rediscluster 中

docker cp redis-171:/redis/redis.conf /redis/rediscluster/

该文件是一个1784 行的文件(我就不贴出来)想要做配置文件映射的还是自己动手麻烦一点吧。

关闭redis 容器:

docker stop redis-171 

redis集群镜像搭建(不是集群环境搭建)_第8张图片

移除 reids 容器:

docker rm redis-171

redis集群镜像搭建(不是集群环境搭建)_第9张图片

再次启动容器:

docker run -i -t -d --name redis-171 -v /redis/rediscluster/redis.conf:/redis/redis.conf -v /redis/rediscluster/data/:/data -p 6379:6378 grokzen/redis-cluster redis-server /redis/redis.conf

docker run

-i   运行容器

-t  前台启动,分配一个伪终端

-d  后台启动

--name redis-171   自定义容器的名称

-v /redis/rediscluster/redis.conf:/redis/redis.conf   文件映射,宿主机:容器,宿主机的文件会覆盖容器里面的文件 

-v /redis/rediscluster/data/:/data  文件夹映射,宿主机:容器,宿主机文件夹文件覆盖容器里面的文件

-p 6379:6378  端口映射,宿主机端口:容器端口

grokzen/redis-cluster   镜像文件

redis-server /redis/redis.conf     指定使用 redis.conf 配置文件启动该容器(一定要加上,否则redis无法正常使用,在本地使用redis-cli 连接的时候会出现 error: connection reset by peer)

如果修改了配置文件中端口,则必须必须使用 -p 进行端口的映射,否则无法连接到redis服务器

-p 宿主端口:容器端口

在进行连接的时候使用的是 宿主机端口 进行连接,和容器端口没有关系,容器端口只是和宿主机端口进行通信。

redis集群镜像搭建(不是集群环境搭建)_第10张图片

 bind 0.0.0.0 允许任何一个ip 进行远程连接

redis集群镜像搭建(不是集群环境搭建)_第11张图片

protected-mode yes  是否开启本保护模式(只监听本地)

网上有很多介绍说将 protected-mode 修改为no 其实没有必要,

从注释来看,说的是,

如果没有配置bind 或者 requirepass 则 protected默认是开启的,也就是说,如果配置了 bind 或者 requirepass 则会忽略掉protected-mode yes 的配置(当然手动禁用也是可以的)

redis集群镜像搭建(不是集群环境搭建)_第12张图片

使用  6378 端口是连接不上的redis集群镜像搭建(不是集群环境搭建)_第13张图片

使用宿主机的 6379 端口正常连接,由于我开启了 requirepass 密码验证,需要登录才能正常使用里面的功能

redis集群镜像搭建(不是集群环境搭建)_第14张图片

登录后正常使用

redis集群镜像搭建(不是集群环境搭建)_第15张图片

开启aof

redis集群镜像搭建(不是集群环境搭建)_第16张图片

使用命令行开启 aof 不会修改 redis.conf 文件中的具体信息(使用这种方式有好有坏)

redis集群镜像搭建(不是集群环境搭建)_第17张图片

aof 只会记录 set 和 del 操作,get 操作不进行记录 

*3   表示这条命令有3段
$3  第一段有3个字符
set  第一段的值
$2  第二段有2个字符
a1  第二段的值
$2  第三段有2个字符
a1  第三段的值

redis集群镜像搭建(不是集群环境搭建)_第18张图片

redis集群镜像搭建(不是集群环境搭建)_第19张图片

 

 


 

持久化分为 rdb 和 aof 

  rdb aof
持久化方式 内存数据全部添加到xxx.rdb文件中(非追加方式,覆盖形式) 命令追加到xxx.aof文件中
子进程 只要进行持久化,就会fock子进程 重写会fock子进程
文件大小 xxx.rdb文件占用空间小 xxx.aof文件占用空间大
阻塞 只要持久化,就会发生阻塞 重写,才会发生阻塞
消耗资源

 

aof 重新写,fock子进程,根据当前内存中的数据生成快照

快照:将内存中存储的命令进行整合,将对同一个 key 值的新增 与 删除,抵消掉(将这两条命令都剔除掉),生成一个新的xxx.aof 文件,但是文件中数据的存储方式是以 xxx.rdb 的格式进行存储的。

手动重写: 

redis集群镜像搭建(不是集群环境搭建)_第20张图片

重写后的文件内容为: 

redis集群镜像搭建(不是集群环境搭建)_第21张图片

之后再插入数据,还以原来的方式进行内容的追加

redis集群镜像搭建(不是集群环境搭建)_第22张图片

aof重写的触发条件:

第一次重写当xxx.aof文件大小达到 64mb 的时候会进行一次重写,

后面第二次第三次的重写一次按照:

上一次文件的大小 + 上一次重写文件的大小 * percentage 的大小 为这一次重写的触发条件(类似于递归)

假设 percentage = 60,min-size=64mb

第一次触发需要文件需要达到的大小为:64

第 2 次触发需要文件需要达到的大小为:64 + 64 * 0.6

第 3 次触发需要文件需要达到的大小为:(64 + 64 * 0.6) + (64 + 64 * 0.6)*0.6

第 3 次触发需要文件需要达到的大小为:((64 + 64 * 0.6) + (64 + 64 * 0.6)*0.6 ) + ((64 + 64 * 0.6) + (64 + 64 * 0.6)*0.6 )*0.6

redis集群镜像搭建(不是集群环境搭建)_第23张图片

 

rdb 方式丢失数据的情况:

save 900 1
save 300 10
save 60 10000

如果在300 到 900 秒之间,数据改变了 8 次,这个时候没有达到 900 秒进行持久化的条件,服务器宕机了,这个时候就会丢失这8条数据。

 

aof 方式丢失数据的情况:

一般情况下,aof是一秒钟进行一次持久化(将这1秒中产生的set, del 语句添加到 xxx.aof 文件中),如果在一秒钟之间进行了10次数据的改变,这个时候服务器宕机,就会造成这10条数据的丢失。

 

提高redis的可靠性,可用性,减少数据的丢失与阻塞:

1.使用混合方式进行持久化(rdb(辅)+aof(主)),减少数据的丢失

2.使用rediscluster集群的方式,减少阻塞(集群至少要有3个节点才能正常的工作)

cluster 集群的工作方式:

当有key值传入的时候,redis会根据crc16的算法得出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,通过这个值,去找到对应的插槽所对应的节点,然后直接自动跳转到这个对应的节点上进行存取操作。

4.0之后默认开启混合持久化

redis集群镜像搭建(不是集群环境搭建)_第24张图片

开启aof

开启aof以后,redis 启动的时候会以 xxx.aof 日志文件进行数据的加载,xxx.rdb 文件无效,这样会造成数据的丢失

redis集群镜像搭建(不是集群环境搭建)_第25张图片

解决方式;

1. 先启动redis 服务,

2. 命令行开启 aof (不会改变配置文件中的配置信息)

redis集群镜像搭建(不是集群环境搭建)_第26张图片

修改rdb配置:

保留rdb, 900 秒,进行一次持久化操作

redis集群镜像搭建(不是集群环境搭建)_第27张图片

 

 

rdb配置:

redis集群镜像搭建(不是集群环境搭建)_第28张图片

在900秒(15分钟)后,如果至少有一个键被改变,会进行持久化

300秒后(5分钟)如果至少有10个键被改变,会进行持久化

60秒后,如果至少改变了10000个键,会进行持久化

 

aof配置:

redis集群镜像搭建(不是集群环境搭建)_第29张图片

always 只要改变就进行aof持久化

everysec 一秒钟进行一次aof持久化,不管在这一秒钟出现多少次的改变,都进行一次aof持久化,(不管你风吹雨打我该怎么干就怎么干,有点这么个意思)

no  表示操作系统进行数据缓存同步到磁盘(效率高,持久化没办法保证)。

 

redis-cli 工具(容器中复制):

不可取,还是从redis 安装包里面编译获得吧。

或者不用安装,直接到容器里面使用 redis-cli 命令,

redis集群镜像搭建(不是集群环境搭建)_第30张图片

redis集群镜像搭建(不是集群环境搭建)_第31张图片

 

redis-cli 工具(编译redis安装包获取):

官网下载 redis 

http://www.redis.cn/download.html

redis集群镜像搭建(不是集群环境搭建)_第32张图片

redis集群镜像搭建(不是集群环境搭建)_第33张图片

解压文件

 tar -xvzf redis-5.0.5.tar.gz 

redis集群镜像搭建(不是集群环境搭建)_第34张图片

解压后该命令是无法进行使用的

redis集群镜像搭建(不是集群环境搭建)_第35张图片

进入到目录里面进行编译 make

redis集群镜像搭建(不是集群环境搭建)_第36张图片

最开始目录下的 redis-cli.c 文件是不可执行的

redis集群镜像搭建(不是集群环境搭建)_第37张图片

make 编译结束后:会生成一个可以运行的 redis-cli 文件

redis集群镜像搭建(不是集群环境搭建)_第38张图片

可以使用使用全路径运行,如果想方便的使用,需要将该 可运行文件拷贝到 /usr/local/bin 目录下 

redis集群镜像搭建(不是集群环境搭建)_第39张图片

将 redis-cli 拷贝到 /usr/local/bin 目录下:

redis集群镜像搭建(不是集群环境搭建)_第40张图片

不跟参数 -h 默认连接的是本机的 redis,端口默认 6379

redis集群镜像搭建(不是集群环境搭建)_第41张图片

----------------------------------------------------

也可使用 

make && make install 

编译 + 安装

这样的话会直接在  /usr/local/bin 里面产生好几个可运行文件

不需要手动的将 redis-cli 可运行文件拷贝到 /usr/local/bin 目录下

redis集群镜像搭建(不是集群环境搭建)_第42张图片

 -----------------------------------------------------------

redis.conf 文件的差异5.0.5 和 6.0.1

在redis的解压文件夹里面,也存在 redis.conf 文件,不过这个文件的大小和 grokzen/redis-cluster 文件不太一样

redis集群镜像搭建(不是集群环境搭建)_第43张图片

diff --context redis.conf /redis/rediscluster/redis.conf  > /app/diff_redis.txt

有兴趣的可以将文件导出来看看

redis集群镜像搭建(不是集群环境搭建)_第44张图片

 

 

在容器中安装软件:

更新apt-get

apt-get update

redis集群镜像搭建(不是集群环境搭建)_第45张图片

安装 vim 

redis集群镜像搭建(不是集群环境搭建)_第46张图片

vim /redis/redis.conf 

redis集群镜像搭建(不是集群环境搭建)_第47张图片

 

 

 

 

 

你可能感兴趣的:(linux)