Docker 搭建Redis 集群之路

docker安装redis并搭建集群 一、docker安装redis 1、拉取redis镜像文件 docker pull redis 查看镜像 docker images 2、在linux主机创建等会需要挂载的目录和文件 创建data目录(存放数据文件,包括用于持久化的dump.rdb) mkdir -p /mydata/redis/data 创建配置文件 mkdir -p /mydata/redis/conf touch /mydata/redis/conf/redis.conf 3、创建redis容器并进行端口映 阅读详情

前言

搞技术就是动手,动手再动手,实践出真知,毕竟最终是要解决问题的呢,废话不多讲,开搞,主要是为了记录一下,毕竟过程还是有点艰辛呢

需求(target)

  1. Windows 电脑 装一个虚拟机
  2. 用虚拟机构造Linux 系统
  3. 下载Docker 搭建Redis 集群
  4. 代码交互集群

过关斩将

  1. 检查电脑是否开启虚拟话化
  2. VMware 或者 VirtualBox 等虚拟机软件
以VirtualBox 为例 (根据个人喜好)
1. 进入官网:
       https://www.virtualbox.org/ 
2. 下载对应版本的压缩包文件:
  ![virtualbox](https://img-blog.csdnimg.cn/c489543054784b50bdaa6807a4a2d462.png)

3.安装 (选择合适的物理盘)
4. 验证
icon
界面

快速搭建Linux(使用镜像)

1.使用vagrant
2.官网:
https://www.vagrantup.com/downloads
https://app.vagrantup.com/boxes/search
vagrant download
boxes serarch
3. 安装 (电脑会自动重启)
4. 验证
win + R cmd 黑窗口 vagrant -v
有版本号 ,ok
cmd

5.构建Linux
1. vagrant box list (看看可使用的box 列表)
2. vagrant init boxName
例 vagrant init centos-7
会在安装的对应目录下生成一个

Vagrantfileboxname
3. vagrant up (启动并创建Linux)
有时挺快,大部分时间会失败,因为是国外服务器,如果20分钟还没好就不等了
国内镜像:
https://mirrors.ustc.edu.cn/centos-cloud/centos/7/vagrant/x86_64/images/CentOS-7.box

4.vagrant box add E:\myLinux\CentOS-7.box --name centos-7 (加入box)
4. vargrant ssh (连接)
5. 可以 使用黑窗口 也可以使用xshell
computer

xshell

下载docker image

1.卸载之前版本  
  sudo yum remove -y docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine
				  
2. 安装需要的依赖包:
  sudo yum install -y yum-utils

3. 配置阿里镜像
  sudo yum-config-manager \
    --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 

4. 更新安装docker 容器
sudo yum install docker-ce docker-ce-cli containerd.io

5. docker -v

6.sudo systemctl start docker   
   如果报错:
    Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.
 更改文件类型:   
 mv daemon.json daemon.conf
6.查看docker 镜像:  sudo docker images       
7. 设置开机自启:sudo systemctl enable docker
8. 由于权限问题 命令前加 sudo  或者直接使用 root 账户 :su root

redis 集群搭建(3主3从)

1.docker search redis   
2.docker pull redis     (默认拉去最新的)
3. 创建虚拟网卡
    创建虚拟网卡,主要是用于redis-cluster能于外界进行网络通信,一般常用桥接模式。
    docker network create myrediscluster

 4. 查看Docker 网卡信息
    docker network ls
	
 5.	查看dockerr网络详细信息
     docker network inspect myrediscluster
	
 6、补充(删除网卡信息、帮助命令)
   docker network rm myrediscluster #删除网卡命令 多个中间 空格隔开
    docker network --help #显示可带参数等	
	
 7.	编写配置文件
    此处用到了一点 shlle 编程中 的一些命令,让我们操作更加便利
	for port in $(seq 6390 6395); 
do 
mkdir -p /mydata/rediscluster/node-${port}/conf
touch /mydata/rediscluster/node-${port}/conf/redis.conf
cat  << EOF > /mydata/rediscluster/node-${port}/conf/redis.conf
port ${port}
requirepass 1234
bind 0.0.0.0
protected-mode no
daemonize no
appendonly yes
cluster-enabled yes 
cluster-config-file nodes.conf
cluster-announce-ip 192.168.56.10
cluster-node-timeout 18000
cluster-announce-port ${port}
cluster-announce-bus-port 1${port}
EOF
done

8. 启动:
   for port in $(seq 6390 6395); \
do \docker run -it -d -p ${port}:${port} -p 1${port}:1${port} \--privileged=true -v /mydata/rediscluster/node-${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf \--privileged=true -v /mydata/rediscluster/node-${port}/data:/data \--restart always --name redis-${port} --net myrediscluster \--sysctl net.core.somaxconn=1024 redis redis-server /usr/local/etc/redis/redis.conf
done

9. 进入容器:
docker exec -it redis-6392 /bin/bash
10. 创建集群:
redis-cli  -a 1234 --cluster create 192.168.56.10:6390 192.168.56.10:6391 192.168.56.10:6392 192.168.56.10:6393 192.168.56.10:6394 192.168.56.10:6395   --cluster-replicas 1

11. 先停止运行,再删除(重新来)
   for port in $(seq 6390 6395); 
do 
docker stop redis-${port}
done	


for port in $(seq 6390 6395); 
do 
docker rm redis-${port}
done

12. 命令解释:
  port:节点端口;
requirepass:设置密码,访问时需要验证
protected-mode:保护模式,默认值 yes,即开启。开启保护模式以后,需配置 bind ip 或者设置访问密码;关闭保护模式,外部网络可以直接访问;
daemonize:是否以守护线程的方式启动(后台启动),默认 no;
appendonly:是否开启 AOF 持久化模式,默认 no;
cluster-enabled:是否开启集群模式,默认 no;
cluster-config-file:集群节点信息文件;
cluster-node-timeout:集群节点连接超时时间;
cluster-announce-ip:集群节点 IP (对外通讯的地址 或者配置 docker 宿主机地址)
cluster-announce-port:集群节点映射端口;
cluster-announce-bus-port:集群节点总线端口。
启动:
-it:交互
-d:后台运行,容器启动完成后打印容器
–privileged:是否让docker 应用容器 获取宿主机root权限(特殊权限-)
-p :端口映射
-v:文件挂载
–sysctl参数来设置系统参数,通过这些参数来调整系统性能
–restart always:在容器退出时总是重启容器
–name:给容器取名
–net myrediscluster:使用我们创建的虚拟网卡(想详细了解,可以去看看Docker 网络方面知识)	

问题&图片展示

上面搭建成功就可以操作了
success

问题

p1 : Waiting for the cluster to join
Waiting for the  cluster  to join
p2: 拒绝连接拒绝连接p3: MOVED (-c 使用集群模式访问)
在这里插入图片描述p4:
[ERR] Node 172.18.0.2:6392 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0

上面问题根源都是IP 地址的问题
ifconfig
mycomputer
ip addr
vm ip info
docker inspect redis-6395 | grep IP (docker image ip info)
image ip
ping
ping

代码连接

1. 依赖
       <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>3.7.0</version>
        </dependency>

        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
            <version>2.11.1</version>
        </dependency>

2. 单节点demo
  import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.Jedis;
/**
 * @className RedisSingletonDemo
 * @description:
 * @date 2023/9/1 16:36
 * @created by windBird
 */
public class RedisSingletonDemo {
    public static void main(String[] args) {
        Jedis jedis = new Jedis(new HostAndPort("192.168.56.10",6379));
        jedis.set("redisSingleton","我通了");
        System.out.println(jedis.get("redisSingleton"));
    }
}

3. 集群:
 import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.JedisPoolConfig;
import java.util.LinkedHashSet;
import java.util.Set;

/**
 * @className RedisDemo
 * @description:
 * @date 2023/8/14 22:50
 * @created by windBird
 */
public class RedisDemo {
    public static void main(String[] args) {
        JedisCluster cluster =null;
        try {
            Set<HostAndPort> nodes = new LinkedHashSet<HostAndPort>();
            //一般选用slaveof从IP+端口进行增删改查,不用master
            nodes.add(new HostAndPort("192.168.56.10", 6390));
            nodes.add(new HostAndPort("192.168.56.10", 6391));
            nodes.add(new HostAndPort("192.168.56.10", 6392));
            nodes.add(new HostAndPort("192.168.56.10", 6393));
            nodes.add(new HostAndPort("192.168.56.10", 6394));
            nodes.add(new HostAndPort("192.168.56.10", 6395));
            // Jedis连接池配置
            JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
            // 最大空闲连接数, 默认8个
            jedisPoolConfig.setMaxIdle(100);
            // 最大连接数, 默认8个
            jedisPoolConfig.setMaxTotal(500);
            //最小空闲连接数, 默认0
            jedisPoolConfig.setMinIdle(0);
            // 获取连接时的最大等待毫秒数(如果设置为阻塞时BlockWhenExhausted),如果超时就抛异常, 小于零:阻塞不确定的时间, 默认-1
            jedisPoolConfig.setMaxWaitMillis(-1); // 设置2秒
            //对拿到的connection进行validateObject校验
            jedisPoolConfig.setTestOnBorrow(true);
            //未设置auth Password
           // JedisCluster jedis = new JedisCluster(nodes, jedisPoolConfig);
            //设置auth Password
           JedisCluster jedis = new JedisCluster(nodes,20000,3000,10,"1234", new JedisPoolConfig());
            System.out.println(jedis.get("weather"));
            jedis.set("name","sugar");
            jedis.set("address","china");
            System.out.println(jedis.exists("name"));
            System.out.println(jedis.get("name"));
            System.out.println(jedis.get("address"));
        }catch(Exception e) {
            e.printStackTrace();
        }finally {
            if(null !=cluster)
                cluster.close();
        }
    }
}

timeout
docker ps -a
docker restart redis (CONTAINER ID 或者 names)
restart

在这里插入图片描述
集群超时
cluster timeout批量重启cluster nodes
for port in (seq63906395);dodockerrestartredis−(seq 6390 6395); do docker restart redis-(seq63906395);dodockerrestartredis−{port}
done

cluster restart

cluster go
重新设值:
docker exec -it redis-6392 /bin/bash
redis-cli -c -a 1234 -h 192.168.56.10 -p 6392

vm ok

ok

心动不如行动,来试试呗
Docker 搭建Redis集群 docker 搭建Redis集群 阅读详情

相关推荐

docker compose部署redis集群

docker compose部署redis集群,三主三从,并且外网可以访问,另外还可以从gitee上获取此文件,gitee上除了Redis之外还会陆续提供其他docker部署的文件,https://gitee.com/korov/Docker.git

windows环境下docker compose部署redis集群

windows环境下,使用docker compose搭建redis集群

benlilife的博客 1478

windows搭建redis集群

windows搭建redis集群,里面包含有自己封装的redis集群文件,只需按照压缩包文档的介绍进行操作即可。

Windows系统下使用docker部署redis

使用虚拟机部署redis,虚拟机很占用电脑资源,所以选择使用docker对redis进行部署

华墨1024的博客 1958

CAN开发笔记(TI开发者推荐笔记)

查阅了很多资料没有查阅到关于5728芯片CAN模块寄存器的介绍,希望通过本文能给做CAN驱动的后来者有一点参考意义,我也是刚接触CAN模块有些不足请各位多多指正。 由下图所示是CAN模块初始化流程图 首先要开始初始化,设置CAN位时间,然后配置message objects, 完成初始化。 1.开始初始化 首先要控制DCAN_CTL 寄存器,该寄存器是CAN模块的总控制器,很多配置通过...

weixin_44316996的博客 3563

机器人强化学习入门学习笔记

如果你追求高精度动力学仿真、用于强化学习或机器人研究,MuJoCo 是一个非常优秀的选择。如果需要快速实验、使用真实机器人模型,PyBullet 或 Gazebo可能更合适;如果你追求大规模并行训练,Isaac Gym 或 BraX会更高效。legged gym底层是​编辑isaacgym,基于gpu训练可以多环境并行训练,收敛到一个稳定行走的策略快。本视频MuJoCo基于cpu训练很慢。

xiaomu_347的博客 1488

Windows上利用docker搭建Redis主从集群

在Windows上利用docker搭建包含一个主节点和两个从节点的Redis主从集群

qq_43460956的博客 789

华为交换机NAC配置避坑指南:搞定打印机、摄像头等哑终端接入(含MAC旁路认证)

本文详细解析华为交换机NAC配置中的MAC旁路认证方案,特别针对打印机、摄像头等哑终端接入问题提供避坑指南。通过对比传统模式与统一模式的配置差异,结合实际案例和典型错误排查,帮助网络工程师高效解决802.1X认证环境下的哑终端接入难题。

weixin_30338497的博客 442

docker搭建Redis集群及哨兵(windows10环境,OSS Cluster)

redis集群实现就是按照一定配置的完成多节点实例的启动以创建集群。关键点在于具体的集群配置规则。

weixin_44711513的博客 1808

10.2 构网型变流器引发的次同步振荡与宽频振荡问题:机理分析与抑制技术

随着构网型变流器在新型电力系统中的规模化部署,其作为电压源主动支撑电网的能力得到验证的同时,也引发了一系列前所未有的稳定性问题。传统的同步发电机主导的电力系统中,振荡模式主要集中于**低频区间**。然而,构网型变流器通过快速数字控制实现的虚拟同步、惯性响应等先进功能,其控制环路动态与电网阻抗、其他电力电子设备之间产生了复杂的交互作用。这种交互不仅可能诱发经典的**次同步振荡**,更可能催生频率范围从数赫兹到数百赫兹甚至上千赫兹的**宽频振荡**。

技术工作者 1316

手把手教你为Multisim 14.0创建自定义元件:以SPICE模型导入为例

本文详细介绍了如何在Multisim 14.0中创建自定义元件,重点讲解了SPICE模型的导入与应用。通过系统性的步骤指南,包括元件符号设计、引脚定义、SPICE模型关联及验证测试,帮助工程师高效扩展元件库,满足特定设计需求。文章还提供了故障排除和性能优化的实用技巧,确保自定义元件在实际仿真中的可靠性。

weixin_42531163的博客 286

window docker环境安装、配置redis集群

windows10、docker desktop V4.7.1 安装配置redis集群

B0631的博客 1426

运算放大器电路仿真实践:从零实现完整示例

通过一个完整的运算放大器电路仿真示例,深入掌握电路仿真的关键步骤与技巧,帮助电子爱好者和工程师快速上手实际项目设计。

weixin_34725745的博客 1320

基于Docker搭建redis集群

文章目录前言Redis集群原理准备工作Redis基础镜像创建创建Redis节点镜像配置集群集群操作说明启动镜像节点配置配置槽点主从高可用高可用测试读写测试 前言 最新在学习Docker,不由自主的深深爱上了它,同时在整理SpringBoot相关资料的时候,整理到redis这块儿,就想搭建个redis的集群,做做相关的测试,写写记录;然后就把Docker给拽进来搭建一个用于测试使用的redis集群,...

一行Java的博客 5万+

C#与海康威视工业相机结合OpenCV与WPF:打造高效的机器视觉应用程序

本文介绍了基于C#、海康威视工业相机SDK和OpenCV的机器视觉应用开发方法。首先配置开发环境,包括海康SDK、OpenCvSharp和WPF项目设置。重点阐述了如何通过SDK初始化相机、获取视频流,并将YUV数据转换为OpenCV可处理的Mat格式进行图像处理(如边缘检测)。同时展示了如何用WPF实现界面交互和实时图像显示。该方案为工业自动化、质量检测等场景提供了高效的技术实现路径,结合了海康相机的高性能采集、OpenCV的强大算法和WPF的交互优势,具有较高的实用价值。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1499

论文阅读:arxiv 2023 EduChat: A Large-Scale Language Model-based Chatbot System for Intelligent Education

EduChat是一个基于大规模语言模型(LLM)的教育领域聊天机器人系统,旨在为教师、学生和家长提供个性化、公平且富有同理心的智能教育服务。该系统通过在教育语料库上进行预训练和特定任务微调,强化了开放式问答、作文评估、苏格拉底式教学和情感支持等教育功能。为解决领域知识不足和知识更新问题,EduChat采用了检索增强技术,并融入心理学和教育学理论。该项目已开源,提供代码、数据和模型参数,推动LLM在智能教育中的应用发展。

CSPhD-winston的博客 1040

docker compose搭建redis cluster集群

docker compose快速搭建redis cluster集群

u010104795的博客 1433

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Docker搭建Redis集群

Docker搭建Redis集群 1. 安装Redis 拉取redis官方镜像docker pull redis 查看镜像docker images 启动redisdocker run -it -p 6379:6379 --name myredis docker.io/redis 查看redis服务docker ps 测试docker exec -it [容器id] redis-c...

大菜的博客 2547

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

docker下搭建redis集群

准备好Linux系统机器,并安装好docker,阅读这篇文章前请先了解清楚docker的基本知识并且会熟悉运用docker的常用命令。创建7000节点配置文件后将它复制到其他节点目录下,注意复制到其他目录需要将配置文件的port改为该节点的端口号。此时我们已经创建好了所有节点,但各个节点还是相互独立的,我们需要将他们整合成集群,执行以下命令建立集群。安装好后再执行 docker images命令,查看到redis6.0.6镜像则安装成功。接下来就可以创建每个节点的docker容器,以7000节点为例。

begei的博客 846

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Docker搭建Redis分片集群

Redis分片集群(Redis Cluster)是Redis官方提供的分布式解决方案,它允许数据自动分布在多个Redis节点上,提供的Redis服务。主从和哨兵可以解决的问题。但是依然有两个问题没有解决:海量数据存储问题高并发写的问题。

m0_74808313的博客 864

Docker搭建redis集群

Docker搭建redis 前言 之前介绍了用docker来搭建redis主从环境,但这只是对数据添加了从库备份(主从复制),当主库down掉的时候,从库是不会自动升级为主库的,也就是说,该redis主从集群并非是高可用的。 目前来说,高可用(主从复制、主从切换)redis集群有两种方案,一种是redis-sentinel,只有一个master,各实例数据保持一致;一种是redis-clust...

w531128724的专栏 5917

如何用docker搭建redis集群,来让大佬带你详细了解redis

redis定义redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。

pingguocu3的博客 889

docker搭建redis集群(三主三从)

本文讲述了关于redis集群三主三从的搭建;

qq_45863248的博客 1551
上一篇: 集合工具类
下一篇: 文件解析工具
WindwardBird
博客等级 码龄7年 19粉丝 94原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值