使用docker 部署codis

原文地址:https://www.jianshu.com/p/85e72ae6fec3

codis的架构图

1、zookeeeper,用于存放统一配置信息和集群状态

2、codis-fe,codis管理后台的前端页面。(可以看到是vue的地位)

3、codis-dashboard,coids的管理后台系统。(可以看成是提供后端接口的服务)

4、codis-proxy。工作服务器,负责redsi命令的的分发。

5、codis-group。真正存数据取数据的地方。

6、redis-sentinel。用来监控codis-group的主redis是否工作,用于redsi的主挂了之后,触发主从切换。

部署流程

一、下载源码

mkdir codis && cd codis
git clone https://github.com/CodisLabs/codis.git -b release3.2

二、构建镜像imag

1、使用Docker multi-stage build多阶段构建机制,编译alpine版本的codis,使用阿里云的软件源,加速依赖安装,然后设置时区为上海,打包后200M左右,修改Dockerfile如下。

修改dockerFile文件

FROM golang:1.10.3-alpine3.8 as builder

ENV GOPATH /go
ENV CODIS ${GOPATH}/src/github.com/CodisLabs/codis
ENV PATH ${GOPATH}/bin:${PATH}:${CODIS}/bin
COPY . ${CODIS} RUN echo -e "https://mirrors.aliyun.com/alpine/v3.8/main/\nhttps://mirrors.aliyun.com/alpine/v3.8/community/" > /etc/apk/repositories ;\
apk add --no-cache --virtual .build-deps \
make \
bash \
gcc \
musl-dev \
autoconf \
linux-headers \
; \
make -C ${CODIS} distclean ;\
make -C ${CODIS} build-all ;\
apk del .build-deps FROM alpine:3.8
ENV PATH ${PATH}:/codis/bin RUN echo -e "https://mirrors.aliyun.com/alpine/v3.8/main/\nhttps://mirrors.aliyun.com/alpine/v3.8/community/" > /etc/apk/repositories ;\
apk add --no-cache tzdata ;\
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime COPY --from=builder /go/src/github.com/CodisLabs/codis /codis WORKDIR /codis

执行

docker build -f Dockerfile -t codis-image .

构建镜像



构建过程比较长,因为codis的运行需要go环境,需要把go环境打包到image里面

三、修改配置文件

在config目录下面

修改dashboard.toml

修改proxy.toml

配置redis.toml

protected-mode no
dir "/codis"

修改docker.sh里面的server

server)
for ((i=0;i<4;i++)); do
let port="26379 + i"
docker rm -f "Codis-S${port}" &> /dev/null
docker run --net=host --name "Codis-S${port}" -d \
-v `realpath ../config/redis.conf`:/codis/redis.conf \
-v `realpath log`:/codis/log \
codis-image \
codis-server redis.conf --logfile log/${port}.log --port ${port}
done
;;

四、启动应用

sh docker.sh zookeeper
sh docker.sh dashboard
sh docker.sh fv
sh docker.sh proxy
sh docker.sh server

启动3个sentinel

docker run --net=host --name "Codis-T46380" -d \
-v `realpath ../config/sentinel.conf`:/codis/sentinel.conf \
-v `realpath log`:/codis/log \
codis-image \
redis-sentinel sentinel.conf --port 46380 --protected-mode no docker run --net=host --name "Codis-T46381" -d \
-v `realpath ../config/sentinel.conf`:/codis/sentinel.conf \
-v `realpath log`:/codis/log \
codis-image \
redis-sentinel sentinel.conf --port 46381 --protected-mode no
docker run --net=host --name "Codis-T46382" -d \
-v `realpath ../config/sentinel.conf`:/codis/sentinel.conf \
-v `realpath log`:/codis/log \
codis-image \
redis-sentinel sentinel.conf --port 46382 --protected-mode no

浏览器进入192.168.2.136:8080端口(IP换成自己的服务器ip)



1、新增proxy

2、新增group和redis-server

这里我们有4台redsi-server分成2组;每组两台

2.1、点击新增group

2.2、再点击新增server

2.3、再点击标记为从redsi



2.4点击分配group的solt



2.5新增3个sentinel,然后点击syn

有2个master组,3个sentinel。

五、测试高可用

现在可以通过redis-cli192.168.2.136:29000端口去连接redis;

执行set a a ,set b b后的页面显示

执行docker stop Codis-S26381把group2的主停掉

执行get a,get b查看结果,依旧有数据

执行docker start Codis-S26381重启26381

使用docker 部署codis的更多相关文章

  1. ASP.NET Core开发-Docker部署运行

    ASP.NET Core开发Docker部署,.NET Core支持Docker 部署运行.我们将ASP.NET Core 部署在Docker 上运行. 大家可能都见识过Docker ,今天我们就详细 ...

  2. Docker部署Hadoop集群

    Docker部署Hadoop集群 2016-09-27 杜亦舒 前几天写了文章"Hadoop 集群搭建"之后,一个朋友留言说希望介绍下如何使用Docker部署,这个建议很好,Doc ...

  3. 程序开发使用docker部署

    我们公司自己研发了一套 grand-line 系统,使用 docker 来部署项目. 我是第一批小白鼠,一开始网络差,build 一次要半个小时,连接进入 web shell 也很慢,部署一个微信项目 ...

  4. 我使用celery以及docker部署遇到的问题

    首先我本机测试时没有问题的,但是在线上docker中,任务一直显示 "Sending due task".超时的任务是 django orm update 操作,本地不会出现这样的 ...

  5. Docker部署SDN环境

    2014-12-03 by muzi Docker image = Java class Docker container = Java object 前言 5月份的时候,当我还是一个大学生的时候,有 ...

  6. 在生产环境使用Docker部署应用

    导读 Docker现在越来越流行,但是真正在生产环境部署Docker还是个比较新的概念,还没有一个标准的流程.作者是ROR的程序员,作者结合平时的部署经验,联系Docker的特点,向大家分享了其在生产 ...

  7. Docker 使用指南 (六)—— 使用 Docker 部署 Django 容器栈

    版权声明:本文由田飞雨原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/98 来源:腾云阁 https://www.qclou ...

  8. NET Core Docker部署

    NET Core Docker部署 前言 在前面文章中,介绍了 ASP.NET Core在 macOS,Linux 上基于Nginx和Jexus的发布和部署,本篇文章主要是如何在Docker容器中运行 ...

  9. 我使用 Docker 部署 Celery 遇到的问题

    问题1 - Sending due task 本机测试时没有问题的,但是在线上 docker 中,任务一直显示 "Sending due task".超时的任务是 Django O ...

随机推荐

  1. 【题解】SAC E#1 - 一道难题 Tree

    Problem is here \(\text{Solution:}\) 首先,一眼看出这是最小割,只要叶子节点对汇点\(T\)连接流量为\(inf\)的边就可以一遍最大流搞定了. 剩下的问题在于,如 ...

  2. 可能是东半球第二好用的软件工具全部在这里(update in 2020.10.09)

    1. 产品经理工具种草 浏览器:Google Chrome 网络浏览器 原型绘制软件:墨刀- 在线产品原型设计与协作平台(https://modao.cc/).摹客mockplus - 摹客,让设计和 ...

  3. Linux软件漏洞-1

    RHSA-2018:3107-中危: wpa_supplicant 安全和BUG修复更新 漏洞编号:CVE-2018-14526 漏洞公告:wpa_supplicant中未经身份验证的EAPOL-Ke ...

  4. spring redis 配置

  5. 每日一题 LeetCode 491. 递增子序列 【递推】【递增子序列】【动态规划】

    题目链接 https://leetcode-cn.com/problems/increasing-subsequences/ 题目说明 题解 主要方法:递推:动态规划 解释说明: 数据表示:观察数据范 ...

  6. C++冷知识(1)

    func()等价于func(void) 也就是说在C++中,参数列表为空意味着不接受任何参数.之所以要注意这一点是因为在C语言中,参数列表为空意味着参数不确定.两者的语义是有巨大差别的,作为学了C再学 ...

  7. CSP-S2020AFO记

    2020-10.11 考初赛辣. 选择题考了一堆时间复杂度,一个不会(卒) 我寻思这01背包哪里能用贪心? 啊,这,这,这手写快排竟如此简单,手写取Max,手写队列,两个字符串颠来倒去,竟活到爆! 震 ...

  8. linux磁盘空间满的处理

    Java中运行SQL插入数据时报错: linux磁盘空间满处理: 1.df -h  查看磁盘空间占用,实际上是查看磁盘块占用的文件(block) 2.分别查看输入以下命令 (面对磁盘满了,通过下列命令 ...

  9. 一文读懂Redis常见对象类型的底层数据结构

    Redis是一个基于内存中的数据结构存储系统,可以用作数据库.缓存和消息中间件.Redis支持五种常见对象类型:字符串(String).哈希(Hash).列表(List).集合(Set)以及有序集合( ...

  10. C# Webservice中如何实现方法重载--(方法名同名时出现的问题)

    本文摘抄自:http://blog.sina.com.cn/s/blog_53b720bb0100voh3.html 1.Webservice中的方法重载问题(1)在要重载的WebMethod上打个M ...