docker部署redis集群

docker部署redis集群

1.0 安装环境

1.1 安装Centos7

  • Docker官方建议在Ubuntu中安装,因为Docker是基于Ubuntu发布的,而且一般Docker出现的问题Ubuntu是最先更新或者打补丁的。在很多版本的CentOS中是不支持更新最新的一些补丁包的。
  • 如果docker安装在centos上面建议用Centos7版本,在CentOS6.x的版本中,安装前需要安装其他很多的环境而且Docker很多补丁不支持更新。

1.2 安装Docker

更新原有安装包
yum -y update
安装依赖
 sudo yum install -y yum-utils device-mapper-persistent-data lvm2
安装docker
sudo yum install docker-ce

1.21 docker常用命令

  • linux 的 service 和 systemctl 命令大致区别
  • 启用可以用service docker start也可以用systemctl start docker其他重启停止也可以用systemctl
  • CentOS 7.x 开始,CentOS 开始使用 systemd 服务来代替 daemon,原来管理系统启动和管理系统服务的相关命令全部由 systemctl命 令来代替。
  • service命令是Redhat Linux兼容的发行版中用来控制系统服务的实用工具,它以启动、停止、重新启动和关闭系统服务,还可以显示所有系统服务的当前状态。
  • service启动缺点
  • 一是启动时间长。init 进程是串行启动,只有前一个进程启动完,才会启动下一个进程。
  • 二是启动脚本复杂。init 进程只是执行启动脚本,不管其他事情。脚本需要自己处理各种情况,这往往使得脚本变得很长
  • systemctl 优缺点
  • Systemd 的优点是功能强大,使用方便,缺点是体系庞大,非常复杂。事实上,现在还有很多人反对使用 Systemd,理由就是它过于复杂,与操作系统的其他部分强耦合,违反 “keep simple, keep stupid” 的Unix 哲学。
查看docker版本
docker -v
启动
service docker start
停止
service dockerstop
重启
service docker restart
开机启动
systemctl enable docker
重启docker
systemctl restart  docker

1.21 在线安装docker镜像

搜索java镜像
docker search java
#拉取java镜像
docker pull java
  • docker仓库是部署在国外服务器上面的,所以如果在国内拉取镜像那将是一个非常漫长的过程,因此我们可以用一些国内的镜像仓库,比如阿里云的又或者加速器DaoCloud

1.22 配置Docker加速器

  1. 配置阿里云镜像加速器
  2. 配置阿里云镜像加速器需要注册账号
  3. https://cr.console.aliyun.com/#/imageList)
  4. 注册之后点击左下方镜像加速器会生成一个专属加速网址
  5. 将生成的专属网址,加入/etc/docker/daemon.json即可
修改docker配置文件
vi /etc/docker/daemon.json
  1. 配置Daocloud加速器
  2. 官网:https://www.daocloud.io/mirror
#配置加速器命令(复制粘贴执行即可)Ps:此命令仅克用于Linux操作系统
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
  • 注意:在设置完成后,可能有一个坑存在的,执行命令设置后,它会在docker配置文件中添加一个地址,但是地址后面是多了一个,号的,需要手动删除

docker部署redis集群
  • 删除配置文件中多余的,号
修改docker配置文件
 vi /etc/docker/daemon.json

1.23 导出和导出镜像

导出镜像
docker save 镜像名>导出路径
docker sava tomcat > /home/tomcat.tar.gz
导入镜像
docker load

1.24 容器相关命令

创建并且启动一个容器
-it表示启动容器后开启一个交互的界面 --name 给容器起一个名字不取就没有可通过id辨别 bash代表启动程序后运行什么样的成员bash=bash命令行
docker run -it --name myTomcat tomcat bash

开启容器并且映射端口 -p 8088:8080代表将容器8080端口映射到宿主机8088上面 可以映射多个端口
docker run -it --name myTomcat  -p 8088:8080 -p 8089:3306 tomcat bash

 开启容器并且映射目录或者文件
-v宿主机目录映射到容器中/home/data:/mysqlData冒号之前是宿主机的目录集将目录/home/data映射到/mysqlData
--privileged这个是代表容器操作映射目录使用的是最高权限,即可读可写可执行
docker run -it --name myTomcat -v /home/data:/mysqlData --privileged tomcat  bash

三条命令合一
docker run -it -p 8088:8080 -p 8089:3306  -v /home/data:/mysqlData --privileged --name myTomcat tomcat bash

停止容器 myTomcat是容器名字没有可以通过容器id识别
docker pause myTomcat
恢复容器
docker unpauser myTomcat
彻底停止容器
docker stop myTomcat
重新启动容器
docker start -i myTomcat
退出交互页面开启容器-it执行的(同时会彻底关闭容器)
exit
删除容器
docker rm myTomcat
进入容器
docker exec -it 容器名 bash
重命名容器名
docker rename 原容器名称 新容器名称

PS:

以上仅仅是Docker基础命令

Docker后面还有

容器数据卷

DockerFile(制作镜像使用)

Docker Compose (多容器管理)

Docker Swarm (docker集群)

2.0基于docker部署RedisCluster集群

2.01 RedisCluster集群介绍

  • 常见Redis集群方案
  • RedisCluster Reids官方产品 没有中心节点,数据分片储存
  • Codis 豌豆荚团队开发 有中心节点,豌豆荚 因为Codis是一个无状态的,所以可以增加多个Codis来提升QPS,同时也可以起着容灾的作用。
  • Twemproxy是Twitter团队的开源的 有中心节点
  • Redis主从同步
  • RedisCluster 切片存储(每个节点储存数据不同)
  • 引入冗余节点,把主节点数据分发非从从节点当住节点挂掉后吧数据复制到从节点继续使用
  • Redis高可用
  • 集群中住节点应采用奇数节点至少3个因为RedisCluster拥有选举机制
  • 每个主节点都应该有对应的从节点,将主节点数据复制到从节点

2.02 部署Redis集群

  • 安装Redis
#拉去redis镜像
docker pull redis
创建network2网段
docker network create --subnet=172.20.0.0/24 network2
创建6节点redis容器
docker run -it -d --name redis1 -p 6001:6379 --net=network2 --ip 172.20.0.2 redis bash
docker run -it -d --name redis2 -p 6002:6379 --net=network2 --ip 172.20.0.3 redis bash
docker run -it -d --name redis3 -p 6003:6379 --net=network2 --ip 172.20.0.4 redis bash
docker run -it -d --name redis4 -p 6004:6379 --net=network2 --ip 172.20.0.5 redis bash
docker run -it -d --name redis5 -p 6005:6379 --net=network2 --ip 172.20.0.6 redis bash
docker run -it -d --name redis6 -p 6007:6379 --net=network2 --ip 172.20.0.7 redis bash
进入redis容器
docker exec -it redis1 bash
  • 修改redis配置文件
编辑配置文件
vi /usr/redis/redis.conf
#找到一下参数并做修改
daemonize yes #以后台进程运行
cluster-enabled yes #开启集群
cluster-config-file nodes.conf #集群配置文件
cluster-node-timeout  15000 #超时时间
append only yes #开启AOF(日志)模式
  • 启动redis
#进入redis
cd /usr/redis/src
#启动
./redis-server ../redis.conf
#依次进入23456redis节点修改配置文件并启动redis

  • 安装redis-trib.rb
  • redis-trib.rb这个是redis自带的通过redis-trib.rb创建RedisCluster集群
  • redis-trib是ruby写的首先安装ruby
复制redis-trib.rb 到一个空目录
cp /usr/redis/src/redis-trib.rb /usr/redis/cptrib需要拷贝目录
进入刚刚拷贝目录
cd /usr/redis/cluster
安装ruby
apt-get install ruby
apt-get install rubygems
#安装执行脚本
gem install redis

  1. 创建redis集群
#进入redis容器1
docker exec -it redis1 bash
进入redis目录
cd /usr/redis/src
#创建cluster目录
mkdir -p ../cluster
#复制redis-trib.rb
cp redis-trib.rb ../cluster/
#进入cluster在此目录创建redis集群
cd ../cluster
--replicas 1一个主节点给一个从节点 后面是redisip+端口
./redis-trib.rb create --replicas 1  172.20.0.2:6379 172.20.0.3:6379 172.20.0.4:6379  172.20.0.5:6379  172.20.0.6:6379  172.20.0.7:6379

docker部署redis集群

错误汇总

  • WARNING: IPv4 forwarding is disabled. Networking will not work.

docker部署redis集群
解决命令
echo "net.ipv4.ip_forward=1" >>/usr/lib/sysctl.d/00-system.conf
重启network 和docker
 systemctl restart network && systemctl restart docker

作者:泪梦红尘
文章出处:https://www.lmhc.blog/

Original: https://www.cnblogs.com/lmhcblog/p/15082968.html
Author: 泪梦红尘blog
Title: docker部署redis集群

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/590661/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Golang异常处理

    从error的定义说起 type error interface { Error() string } Go 的error类型是一个接口。在Go中,只要实现了接口约定的方法,就等同…

    数据库 2023年6月16日
    090
  • MySQL触发器

    触发器 先来个实际的案例 触发器概述 和存储过程一样,都是嵌入在MySQL服务器中的一段程序 触发器由 事件触发,比如INSERT ,UPDATE 等用户的动作或触发某项行为,自动…

    数据库 2023年5月24日
    099
  • feign之间传递oauth2-token的问题和解决~续

    之前写过关于修改hystric的隔离《feign之间传递oauth2-token的问题和解决》方式来在feign调用各个微服务中传递token,修改为SEMAPHORE之后,会有一…

    数据库 2023年6月6日
    091
  • Java面试题(二)–MySQL

    1 存储引擎 1、简单描述一个Mysql的内部结构? MySQL的基本架构示意图:大体来说,MySQL可以分为 server层和 存储引擎层两部分。 ① server层包括连接器、…

    数据库 2023年5月24日
    095
  • InnoDB 中不同SQL语句设置的锁

    锁定读、UPDATE 或 DELETE 通常会给在SQL语句处理过程扫描到的每个索引记录上设置记录锁。语句中是否存在排除该行的WHERE条件并不重要。InnoDB不记得确切的WHE…

    数据库 2023年5月24日
    084
  • GROUP BY 后获取每一组最新的一条记录

    最近有一种需求,一张订单可能有多个支付单,这就要求我们拿到每一张订单的最新支付单。具体思路如下: [En] Recently, there is a demand that the…

    数据库 2023年5月24日
    073
  • JavaScript进阶知识点——函数和对象详解

    我们在上期内容中学习了JavaScript的基本知识点,今天让我们更加深入地了解JavaScript JavaScript函数 JavaScript函数和Java函数是有一部分相似…

    数据库 2023年6月14日
    093
  • gitlab

    版本控制gitlab 1. 版本控制介绍 2. gitlab部署 版本控制介绍 版本控制是指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理,是软件配置管理的核心思…

    数据库 2023年6月14日
    0103
  • Java面试题(六)–Redis

    1 Redis基础篇 1、简单介绍一下Redis优点和缺点? 优点: 1、本质上是一个 Key-Value 类型的内存数据库,很像memcached 2、整个数据库统统加载在内存当…

    数据库 2023年6月16日
    091
  • 我的JAVA面试题备忘录

    以下是我收集的一些问题,有的是网上摘录的,有的是自己参加面试被问到的,有的是工作或学习时遇到的,等等。 为什么要记录这些呢? 一方面,我相信,这样做对我自己的技术提升是有帮助的。在…

    数据库 2023年6月6日
    062
  • Ansible—Inventory主机清单

    含义 清查;存货清单;财产目录;主机清单 1、增加主机组 官方链接 http://docs….

    数据库 2023年6月14日
    0100
  • JDK卸载

    win+r,进入cmd,输入java -version显示命令不存在即删除成功 Original: https://www.cnblogs.com/Icy01/p/16298149…

    数据库 2023年6月11日
    079
  • [spring]spring详细总结

    spring 1.spring简介 Spring框架是一个开源的应用程序框架,是针对bean的生命周期进行管理的轻量级容器。 Spring解决了开发者在J2EE开发中遇到的许多常见…

    数据库 2023年6月16日
    065
  • SQL Server2008 Order by在union子句不可直接使用的原因

    按照要求,每个取top 20,既然是随机的取,那么就SQL Server Order by newid()就是了,然后把所有数据union起来就得了。所以我立即给出了答案: sel…

    数据库 2023年6月14日
    076
  • 博客园美化-随季节变化实现不同的飘落效果

    最近在研究博客园的美化效果,看到有一个樱花飘落的效果,忽然突发奇想,如果能根据当前日期所处的季节实现不同的飘落效果岂不是更酷。😂 最近在研究博客园的美化效果,看到有一个樱花飘落的效…

    数据库 2023年6月6日
    0109
  • mysql练习题emp,dept

    DROP DATABASE IF EXISTS emp; CREATE DATABASE emp; USE emp;  CREATE TABLE dept( &a…

    数据库 2023年6月9日
    0184
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球