欢迎关注刘哥讲技术。上一节我们讲到通过docker安装了多台的mysql,很简单,那么我们这一节,利用 Docker 在一台机器上部署多个 Redis 实例。

那么redis是什么呢?Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 的 NoSQL 数据库,并提供多种语言的 API。

现在分布式缓存首选的应用,面试也基本离不开它,一起来学习学习它吧。

一、单机版本Redis

  • 1、查看可用的 Redis 版本

访问 Redis 镜像库地址:

https://hub.docker.com/_/redis

此外,我们还可以用命令来查看可用版本。

docker search redis

  • 2、取最新版的 Redis 镜像

这里我们获取官方的默认的镜像:

docker pull redis

  • 3、查看本地镜像

使用以下命令来查看是否已安装了 redis。

docker images

  • 4、运行容器

安装完成后,我们可以使用以下命令来运行 redis 容器

(1)创建挂载目录

创建一个文件夹用来存放redis的配置文件、数据等(也就是所谓的挂载目录,作用就是将此目录中的文件或文件夹覆盖掉容器内部的文件或文件夹)

mkdir -p $HOME/docker/redis

(2)进入到该目录下

cd $HOME/docker/redis

(3)启动redis容器

docker run -d -p 6379:6379 -v $PWD/redis.conf:/usr/local/etc/redis/redis.conf -v $PWD/data:/data --name myredis redis redis-server  /usr/local/etc/redis/redis.conf --appendonly yes  --requirepass "123456"

参数详解:

  • -d:表示后台运行
  • -p:表示端口映射,冒号左面的是我们的宿主机的端口,也就是我们虚拟机的端口
  • --name:给容器取的名字
  • -v:表示挂载路径。
  • redis-server --appendonly yes :在容器执行redis-server启动命令,并打开redis持久化配置
  • --requirepass 设置redis密码

(4)检测是否安装成功

最后我们可以通过 docker ps 命令查看容器的运行信息

docker ps

(5)查看容器的ip

如果没有指定容器内的ip,每次启动有可能都是会变化的。如果没有指定,那么我们可以通过以下命令来查看ip,然后登陆:

docker inspect myredis | grep IPAddress

我电脑分配的ip为:

"SecondaryIPAddresses": null,"IPAddress": "172.17.0.2","IPAddress": "172.17.0.2",

(6)测试使用redis 服务

可以通过以下连接命令进行连接。

不带密码版本,命令窗口再输入docker exec -ti myredis redis-cli -h 172.17.0.2 -p 6379 -a 123456带密码版本,不用再输入密码docker exec -ti myredis redis-cli -h 172.17.0.2 -p 6379 -a 123456

说明:

  • myredis 你设置的容器名字。
  • 默认是通过6379端口
  • 默认ip为:127.0.0.1
  • 一般需要指定获取的ip地址。

(7)测试过程

我这里先通过密码框登陆

docker exec -ti myredis redis-cli -h 172.17.0.2 -p 6379

首先获取一下值,看看是否可以使用,发现提示未认证:(error) NOAUTH Authentication required.

get myname

先输入错误的密码,进行验证,发现提示密码错误:(error) NOAUTH Authentication required.

auth 12345

我们再输入正确的密码,提示ok即可

auth 123456

再次获取值,发现redis存储为空:(nil)

get myname

对name值进行设置

set myname liuge

获取name值

get myname

我们可以通过redis desktop manager 进行连接进行查看。Redis桌面管理器(又名RDM) 是一个用于Windows,Linux和MacOS的快速开源Redis数据库管理应用程序。当然你也可以通过以下方式连接测试:RedisView、WebRedisManager、RedisDesktopManager、RedisPlus、AnotherRedisDesktopManager、FastoRedis。

小结:

如果你是简单实用,那么上面就能满足日常测试,学习redis命令等应用了。

但是,有时候还需要另外一台作为比较正式或者其他用,还是需要再搭建一台。

在windows那时候,我是通过修改配置文件,然后通过启动脚本,重新启动一份,比较折腾,有了docker,这个比较好解决。

如果有这个需求,可以接下来的教程。

二、多台Redis共存的情况

(1)创建挂在目录

data存放数据,conf存放配置文件。

mkdir -p $HOME/docker/redis2

(2)进入该目录

cd $HOME/docker/redis2

(3)启动redis容器

docker run -d -p 6388:6379 -v $PWD/redis.conf:/usr/local/etc/redis/redis.conf -v $PWD/data:/data --name myredis2 redis redis-server  /usr/local/etc/redis/redis.conf --appendonly yes  --requirepass "redispassword"

(4)检测是否安装成功

最后我们可以通过 docker ps 命令查看容器的运行信息

docker ps

(5)查看容器的ip

docker inspect myredis2 | grep IPAddress

目前电脑的redis的ip为

"SecondaryIPAddresses": null,"IPAddress": "172.17.0.4","IPAddress": "172.17.0.4",

(6)测试使用redis 服务

可以通过以下连接命令进行连接,myredis你设置的容器名字。

docker exec -it myredis2 redis-cli

输入密码

docker exec -it myredis2 redis-cli

三、搭建Redis集群

对于大多数中小公司来说,通常单机的Redis已经足够,最多根据不同业务分散到多台Redis。

为什么需要集群呢?

  • Redis单线程特性,多请求顺序执行,单个耗时的操作会阻塞后续的操作
  • 单机内存有限
  • 某些特殊业务,带宽压力较大
  • 单点问题,缺乏高可用性
  • 不能动态扩容
  • Redis集群的目标就是为了实现高可用性,避免性能瓶颈,可动态扩容,易于做监控告警。

那么接下来,我们看下如何进行安装。

我这里是通过一个比较快捷的方案,是一个开源的redis集群镜像来搭建。

集群是6个Redis实例,其中运行3个主节点和3个从节点,每个主节点一个从节点。它们在端口7000到7005上运行。接下来我们看看如何搭建:

镜像地址

源码
https://github.com/Grokzen/docker-redis-cluster仓库地址
https://hub.docker.com/r/grokzen/redis-cluster/

拉取镜像

docker pull grokzen/redis-cluster

通过这个镜像可以快速轻松地启动和运行Redis集群,用于演示/演示/开发。注意生产环境没经过严格验证,还不推荐直接使用。

docker run  -e "IP=0.0.0.0" -e STANDALONE=true -e SENTINEL=true -d grokzen/redis-cluster:latest

参数说明

  • -e "IP=0.0.0.0" 将内部IP环境变量添加到docker run命令中。使用此容器在Mac计算机上运行Redis集群,则需要将容器配置为使用另一个IP地址进行集群发现,因为它无法使用硬编码到容器中的默认发现IP。
  • -e SENTINEL=true 默认情况下,未启用Sentinel实例。表示启用哨兵实例。如果-e "STANDALONE=true"通过该标志,则默认情况下在端口7006和7007上运行2个独立实例。但是,您可以将此变量设置为所需的多个独立节点,例如-e "STANDALONE=1"。请注意,独立端口在最后一个从属设备之后立即启动。如果-e "SENTINEL=true"传递了该标志,则在与群集的主实例匹配的端口5000到5002上运行3个Sentinel节点。

查看容器的ip

docker inspect distracted_wing | grep IPAddress

测试

docker exec -ti distracted_wing redis-cli  -p 7000

(error) MOVED 原因和解决方案

错误:

(error) MOVED 6918 127.0.0.1:7001

这种情况一般是因为redis-cli连接redis服务时候,没有指定是集群模式连接。启动时使用-c参数来启动集群模式,命令如下:

docker exec -ti distracted_wing redis-cli -c -p 7000

查看集群信息

cluster info

查看节点信息

cluster nodes

后面有时间再分享,如何通过redis源码自己构建一个docker redis 集群镜像。

Souvc:Docker 技术系列之安装多版本Mysql5.6和Mysql5.7​zhuanlan.zhihu.com

Souvc:Docker 技术系列之安装Docker Desktop for Mac​zhuanlan.zhihu.com

docker $PWD路径_Docker 技术系列之安装Redis单机版和集群版相关推荐

  1. 【doris】V1.2.2安装部署单机版or集群版

    FE 主要负责元数据管理.集群管理.用户请求的接入和查询计划的解析等工作. BE 主要负责数据存储.查询计划的执行等工作. 注:如下介绍单机版,集群版的部署方法与单机版一致,需将be安装包复制到其他节 ...

  2. (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版

    http://blog.csdn.net/yerenyuan_pku/article/details/72863323 我们知道Jedis在处理Redis的单机版和集群版时是完全不同的,有可能在开发的 ...

  3. Open-falcon技术系列文章——安装部署open-falcon

    Open-falcon技术系列文章--安装部署open-falcon 安装部署open-falcon 文章目录 Open-falcon技术系列文章--安装部署open-falcon 前言 一.通过yu ...

  4. k8s技术预研3--使用kubeadm安装、配置Kubernetes集群以及进行故障排查的方法

    一.软硬件环境 采用CentOS7.4 minimual,docker 1.12,kubeadm 1.7.5,etcd 3.0, k8s 1.7.6 本章节以下配置内容需要在全部节点上都做配置.我们这 ...

  5. 大数据系列(一)之hadoop介绍及集群搭建

    大数据系列(一)之hadoop介绍及集群搭建 文章最早发布来源,来源本人原创初版,同一个作者: https://mp.weixin.qq.com/s/fKuKRrpmHrKtxlCPY9rEYg 系列 ...

  6. Linux上安装集群版Redis

    [前言] 之前自己在Windows中玩过一段时间Redis(感兴趣的朋友可以看下-Redis系列博客),这次在项目中也有幸能负责起Redis,也由于前两天服务器硬盘损坏导致开发的Redis服务器重新装 ...

  7. 利用集群技术实现Web服务器的负载均衡 集群和负载均衡的概念

    集群和负载均衡的概念 集群(Cluster) 所谓集群是指一组独立的计算机系统构成的一个松耦合的多处理器系统,它们之间通过网络实现进程间的通信.应用程序可以通过网络共享内存进行消息传送,实现分布式计算 ...

  8. GBase 8c V5 集群版安装示例

    GBase 8c V5 集群版安装示例 一.前言 二.环境准备 三.集群安装 四.数据库启停 五.卸载 六.连接和 SQL 测试 一.前言 GBase 8c 是 GBASE公司(天津南大通用数据技术股 ...

  9. Redis主从复制和集群配置系列之四

    非常感谢  http://blog.csdn.net/dc_726/article/details/48552531 Redis技术学习 https://www.itkc8.com 全面剖析Redis ...

最新文章

  1. 人工智能浪潮下的语音交互——VUI设计(基础篇)
  2. 如何基于MySQL及Redis搭建统一的kv存储服务 | 秦波
  3. nyoj- 117 求逆序数 hdu-sort it---- 树状数组
  4. 贪心算法之阿里巴巴与四十大盗(背包问题)
  5. 如何修改默认浏览器_iPhone可以修改默认浏览器了
  6. 万春 读《Orange’S 一个操作系统的实现》有感
  7. ffmpeg推流及python管道控制ffmpeg推流
  8. [python] 基于chardet识别字符编码
  9. 弱监督学习综述-周志华(ML论文阅读笔记1)
  10. Bootstrap学习(五)navbar、nav、media、panel、list-group
  11. 构建Android Push Notification Service服务端及客户端
  12. linux下c++程序崩溃,如何处理core dump
  13. Unity开发VR项目(二)——SteamVR按键设置
  14. 【Linux】好玩的Linux命令(二)
  15. 电脑截屏有哪些常用的快捷键
  16. 手把手教你微软的Visual Studio 2022社区版编程工具安装和使用(图文详解)
  17. 小程序报错:Failed to load local image resource /pages/goods/NaN加载资源失败问题解决
  18. Any Takers For AIG's Asian Arm?
  19. CANoe不能自动识别串口号?那就封装个DLL让它必须行
  20. #论文阅读# MORAN

热门文章

  1. 一些自己编写的字符串操作函数
  2. 深入浅出mysql gtid_深入理解MySQL GTID
  3. 1000瓶药水,1瓶有毒药,几只小白鼠能够找出毒药
  4. bzoj 2653 洛谷 P2839 [国家集训队] middle
  5. 约瑟夫斯问题-java版数组解法和链表解法
  6. python selenium环境配置Firefox和Chrome
  7. 解析统计文本文件中的字符数、单词数、行数。
  8. 【VBA编程】06.控制语句
  9. vs.net打包生成可执行文件的方法
  10. ubuntu安装codeblock的方法