docker安装redis7-分片集群

说明

系统:CentOS7.9

redis:7.0.5

因资源有限所有节点部署在一台宿主机上,总共启动6个redis实例,实例对应端口分别从6380-6385,文章中给的有执行脚本,方便配置redis和操作redis实例

下载镜像

docker  pull redis:7.0.5

配置redis.conf文件

创建脚本

vim redis-config.sh

增加配置内容

脚本主要做了以下事情

1.创建redis的挂载目录,6个redis实例的挂载路径统一用端口作区分。脚本中的挂载路径主要有2个:

/root/data/redis-cluster/<port>/data:redis数据的挂载位置

/root/data/redis-cluster/<port>/conf:redis配置文件的挂载位置

2.给对应的配置文件写入配置内容

配置内容:

#!/bin/bash
ports=(6380 6381 6382 6383 6384 6385)
mount_path=/root/data/redis-cluster

# 创建挂载目录
for port in ${ports[@]}
do
  # 创建挂载目录
  mkdir -p ${mount_path}/${port}/data
  mkdir -p ${mount_path}/${port}/conf
  settings="
# 修改这部分,使redis可以外部访问,正式环境不建议设置为0.0.0.0 \n
bind 0.0.0.0 \n
# 保护模式,默认yes,如果不需要保护模式可以设置为no \n
protected-mode no \n
# 端口号,默认即可 \n
port ${port} \n
# 日志文件存放位置\n
logfile /data/redis.log\n
pidfile /data/redis-${port}.pid \n
# 用守护线程的方式启动,关闭 \n
daemonize no \n
# 数据存放目录 \n
dir /data \n
# 密码 \n
requirepass 123123 \n
masterauth 123123 \n
# 开启AOF方式持久化 默认是no \n
appendonly yes \n
# 持久化数据文件存放的文件夹名称,不能带/ \n
appenddirname "aof" \n

# 开启集群模式 \n
cluster-enabled yes \n
# 集群总线端口默认是(port+10000) \n
cluster-port 1${port} \n
# 集群配置文件路径\n
cluster-config-file node-${port}.conf\n
cluster-node-timeout 5000 \n

tcp-backlog 511\n
  "
  echo -e $settings > ${mount_path}/${port}/conf/redis.conf
done

echo "write redis configuration success !"

# 查看挂载路径
for port in ${ports[@]}
do
  ls -l ${mount_path}/${port}
  ls -l ${mount_path}/${port}/conf
done

赋予可执行权限

chmod +x redis-config.sh

执行脚本

./redis-config.sh

启动容器

创建脚本文件

vim redis-cluster.sh

脚本内容 

#!/bin/bash
if [ ! "$1" ];then
  echo "input params is null ..."
  exit 1
fi

# 集群所有端口
arr=(6380 6381 6382 6383 6384 6385)
mount_path=/root/data/redis-cluster
case $1 in

"start")
  echo "==================== start redis-cluster ===================="
  for port in ${arr[@]}
  do 
    result=$(docker run --privileged=true \
-v ${mount_path}/${port}/data:/data \
-v ${mount_path}/${port}/conf:/usr/local/etc/redis \
--name redis-${port} \
--restart=always \
--net=host \
-d redis:7.0.5 \
redis-server /usr/local/etc/redis/redis.conf)
    echo "redis-${port} start success, id=${result}"
  done
  ;;
"stop")
  echo "==================== stop redis-cluster ===================="
  for port in ${arr[@]}
  do
    docker stop redis-${port}
  done
  ;;
"rm")  
  echo "==================== remove redis-cluster ===================="
  for port in ${arr[@]}
  do
    docker rm -f redis-$port
  done
  ;;
"restart")
  echo "==================== restart redis-cluster ===================="
  for port in ${arr[@]}
  do
    docker restart redis-$port
  done
  ;;
"log")
  if [ ! "$2" ];then
    echo "port is null ..."
    exit 1
  fi
  tail -1000f ${mount_path}/$2/data/redis.log
  exit 0
esac

# 查看容器信息
echo "==================== redis-cluster info ===================="
docker ps -a

赋予可执行权限

chmod +x redis-cluster

执行脚本

sh redis-cluster.sh

创建主从关系

命令中的ip地址需要更换为自己的真实ip,该命令在6个redis实例其中一台上执行即可

docker exec -it redis-6380 redis-cli \
-a 123123 --cluster create --cluster-replicas 1 \
192.168.66.115:6380 192.168.66.115:6381 \
192.168.66.115:6382 192.168.66.115:6383 \
192.168.66.115:6384 192.168.66.115:6385

 验证部署成果

docker exec -it redis-6380 redis-cli -p 6380 -a 123123

 info replication

 cluster info(集群信息)

 cluster nodes(集群节点信息)

 添加数据

set name test1

set数据后报错了,原因是因为集群模式下,每个主节点都有自己的插槽范围,每个key经过计算得出的值如果不在当前节点就会报错,解决方法如下,重新进入容器加上-c参数,防止路由失效

-p: 指定端口,

-a:连接实例的密码,也可以进入实例后使用auth <your password>验证

-c:自动重定向

docker exec -it redis-6380 redis-cli -p 6380 -a 123123 -c

 结束语

整个集群部署在了同一台宿主机上面,使用不同的端口进行区分,如果大家在部署过程中遇到问题欢迎私信或者评论。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/86385.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Django实现音乐网站 ⒀

使用Python Django框架制作一个音乐网站&#xff0c; 本篇主要是推荐页-推荐排行榜、推荐歌手功能开发。 目录 推荐页开发 推荐排行榜 单曲表增加播放量 表模型增加播放量字段 执行表操作 模板中显示外键对应值 表模型外键设置 获取外键对应模型值 推荐排行榜视图 推…

python接口自动化之如何使用requests库发送http请求

前言 今天笔者想和大家来聊聊python接口自动化如何使用requests库发送http请求&#xff0c;废话呢笔者就不多说了&#xff0c;直接进入正题。 一、requests库 什么是Requests &#xff1f;Requests 是⽤Python语⾔编写&#xff0c;基于urllib&#xff0c;采⽤Apache2 Licensed…

抖音火山引擎推出免费域名DNS和公共DNS服务

抖音旗下的云计算服务火山引擎最近推出了"TrafficRoute DNS 套件"服务&#xff0c;其中包括两款产品&#xff0c;对软希网来说非常有用。 1.域名DNS&#xff1a; 这是一个用于网站域名的DNS服务&#xff0c;可以加速域名解析速度&#xff0c;从而提升网站的速度。如…

ARM开发(cortex-A7核中断实验)

1.实验目的&#xff1a;实现KEY1/LEY2/KE3三个按键&#xff0c;中断触发打印一句话&#xff0c;并且灯的状态取反&#xff1b; key1 ----> LED3灯状态取反&#xff1b; key2 ----> LED2灯状态取反&#xff1b; key3 ----> LED1灯状态取反&#xff1b; 2.分析框图: …

Java电子招投标采购系统源码-适合于招标代理、政府采购、企业采购、等业务的企业 tbms

​ 功能描述 1、门户管理&#xff1a;所有用户可在门户页面查看所有的公告信息及相关的通知信息。主要板块包含&#xff1a;招标公告、非招标公告、系统通知、政策法规。 2、立项管理&#xff1a;企业用户可对需要采购的项目进行立项申请&#xff0c;并提交审批&#xff0c;…

SystemVerilog interface使用说明

1. Interface概念 System Verilog中引入了接口定义&#xff0c;接口与module 等价的定义&#xff0c;是要在其他的接口、module中直接定义&#xff0c;不能写在块语句中&#xff0c;跟class是不同的。接口是将一组线捆绑起来&#xff0c;可以将接口传递给module。 2. 接口的优…

23种设计模式攻关

&#x1f44d;一、创建者模式 &#x1f516;1.1、单例模式 单例模式&#xff08;Singleton Pattern&#xff09;&#xff0c;用于确保一个类只有一个实例&#xff0c;并提供全局访问点。 在某些情况下&#xff0c;我们需要确保一个类只能有一个实例&#xff0c;比如数据库连接…

打造引人注目的直播体验:直播美颜SDK的集成与优化

随着移动互联网的迅速发展&#xff0c;视频直播已经成为人们交流、娱乐和信息传递的重要方式。在这个多元化的直播市场中&#xff0c;吸引观众的注意力变得尤为重要。其中&#xff0c;美颜技术在增强直播体验方面发挥着关键作用。直播美颜SDK的集成和优化使得主播能够以最佳状态…

雪花算法生成ID

雪花算法生成ID Snowflake&#xff0c;雪花算法是由Twitter开源的分布式ID生成算法&#xff0c;以划分命名空间的方式将64-bit位分割成多个部分&#xff0c;每个部分代表不同的含义。而Java中64bit的整数是Long类型&#xff0c;所以在Java中 SnowFlake算法生成的ID就是long来存…

ARM(实验二)

uart4.h #ifndef __H__ #define __H__#include "stm32mp1xx_rcc.h" #include "stm32mp1xx_gpio.h" #include "stm32mp1xx_uart.h"//RCC/GPIO/UART4章节初始化 void hal_uart4_init();//发送一个字符函数 void hal_put_char(const char str);//发…

深度学习|CNN卷积神经网络

CNN卷积神经网络 解决的问题人类的视觉原理原理卷积层——提取特征池化层——数据降维全连接层——输出结果 应用图像处理自然语言处理 解决的问题 在CNN没有出现前&#xff0c;图像对人工智能来说非常难处理。 主要原因&#xff1a; 图像要处理的数据量太大了。图像由像素组…

solidity0.8.0的应用案例11:透明代理合约

选择器冲突 智能合约中,函数选择器(selector)是函数签名的哈希的前4个字节。例如mint(address account)的选择器为bytes4(keccak256("mint(address)")),也就是0x6a627842. 由于函数选择器仅有4个字节,范围很小,因此两个不同的函数可能会有相同的选择器,例如…

PMP如何备考?学习方式这里有

预习阶段&#xff1a;强烈建议跟着习课视频学习&#xff08;自己看书真的很难看懂&#xff09;&#xff0c;初步了解PMBOK&#xff0c;有个大致印象&#xff1b; 精讲阶段&#xff1a;这个时候就需要静下心来深入了解各个知识模块&#xff0c;不仅是看PMBOK&#xff0c;还要尽…

从C语言到C++_33(C++11_上)initializer_list+右值引用+完美转发+移动构造/赋值

目录 1. 列表初始化initializer_list 2. 前面提到的一些知识点 2.1 小语法 2.2 STL中的一些变化 3. 右值和右值引用 3.1 右值和右值引用概念 3.2 右值引用类型的左值属性 3.3 左值引用与右值引用比较 3.4 右值引用的使用场景 3.4.1 左值引用的功能和短板 3.4.2 移动…

线程池UncaughtExceptionHandler无效?可能是使用方式不对

背景 在业务处理中&#xff0c;使用了线程池来提交任务执行&#xff0c;但是今天修改了一小段代码&#xff0c;发现任务未正确执行。而且看了相关日志&#xff0c;也并未打印结果。 源码简化版如下&#xff1a; 首先&#xff0c;自定义了一个线程池 public class NamedThrea…

视频批量剪辑矩阵分发系统源码开源分享----基于PHP语言

批量剪辑视频矩阵分发&#xff1a; 短视频seo主要基于抖音短视频平台&#xff0c;为企业实现多账号管理&#xff0c;视频分发&#xff0c;视频批量剪辑&#xff0c;抖音小程序搭建&#xff0c;企业私域转化等&#xff0c;本文主要介绍短视频矩阵系统抖音小程序开发详细及注意事…

selenium +Jmeter 的性能测试

通过Jmeter快速将已有的Selenium 代码以性能测试的方式组织起来&#xff0c;并使用JMeter 丰富的报表展示测试结果 from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.common.by import By driver …

孟羽童:成为勇敢逆袭的职场女性

相信职场中的小伙伴几乎都听过孟羽童这个名字&#xff0c;她从籍籍无名的应届毕业生到现如今摇身一变职场女强人&#xff0c;相信一定有职场人值得借鉴的地方。那么今天小编就给大家分享一下孟羽童的职场经历带给我的启发。 该图片来自网络&#xff0c;侵删 1、年龄并不是成功的…

java八股文面试[java基础]——final 关键字作用

为什么局部内部类和匿名内部类只能访问final变量&#xff1a; 知识来源 【基础】final_哔哩哔哩_bilibili

【Redis】Redis 的主从同步

【Redis】Redis 的主从同步 很多企业都没有使用 Redis 的集群&#xff0c;但是至少都做了主从。有了主从&#xff0c;当主节点(Master) 挂掉的时候&#xff0c;运维让从节点 (Slave) 过来接管&#xff0c;服务就可以继续&#xff0c;否则主节点需要经过数据恢复和重启的过程&a…