定制Dockerfile实现redis cluster的docker化部署及集群管理

我们知道redis
cluster的部署是很麻烦的,如果在一台服务器启动多个redis实例的话,需要一个个的cp配置文件到指定的目录,然后一个个的修改端口及相关的信
息。。。以前经常这么干。 如果采用docker后,我们可以更加方便的启动redis,
我们只需要传递端口参数,在dockerfile里定制一个entrypoint脚本,脚本可以接收docker run的参数…. 但是也可以采用
dockerfile的env参数来定制改变端口。。。

这个是centos的
dockerfile配置,版本是6.6,我这边主要是懒,所以就打了一个dockerfile。 正规来说,应该是需要打成两个dockerfile.
  一个是系统的base,一个是通过这个base再来安装redis…  这样最大的好处就是分离基础环境和业务关联的环境…  
基础环境就是安装一些gcc、wget、curl、lsof、iostat这种常用的基础工具…  业务环境就是,比如lnmp( nginx
mysql php)或者 Mongodb….

FROM centos:6.6
MAINTAINER xiaorui.cc <[email protected]>

# at /
RUN touch ceshi.qian
WORKDIR /app/
COPY manage.sh /app/

RUN rpm –import https://fedoraproject.org/static/0608B895.txt
RUN rpm -ivh http://mirrors.zju.edu.cn/epel/6/i386/epel-release-6-8.noarch.rpm

RUN yum update -y && \
    yum install -y –enablerepo=epel  \
      tar \
      gcc \
      wget \
      jemalloc.x86_64 \
      jemalloc-devel.x86_64

RUN yum clean all

RUN touch ceshi.file
RUN cd /app \
        && wget http://xiaorui.cc/redis-3.0.1.tar.gz \
        && tar zxvf redis-3.0.1.tar.gz \
        && mv redis-3.0.1 redis \
        && cd redis \
        && cd deps \
        && make hiredis lua\
        && cd jemalloc;./configure;make;cd ../..\
        && make \
        && make install

ENV PORT 6379
# xiaorui.cc
ENTRYPOINT ["/app/manage.sh"]
#CMD ["/app/manage.sh"]
CMD ["bash"]

manage.sh 这脚本是用来控制redis的端口的,脚本也简单,就是接收命令行的参数,然后针对redis进行sed修改….

#!/bin/bash

cd /app/redis

redis_port=$1

echo $redis_port

cd /app/redis

sed -i "s/6379/$redis_port/g" redis.conf

sed -i ‘s/# cluster-enabled yes/cluster-enabled yes/g‘ redis.conf

sed -i ‘s/# cluster-node-timeout 15000/cluster-node-timeout 15000/g‘ redis.conf

sed -i "s/# cluster-config-file nodes.*/cluster-config-file nodes-$redis_port.conf/g" redis.conf

redis-server redis.conf

while 1;do

sleep 30;

done

这个是ubuntu的dockerfile ,还是推荐大家用centos的那个dockerfile..

FROM ubuntu:14.04
MAINTAINER xiaorui.cc <[email protected]>

WORKDIR /app/
COPY manager.sh /app/

# Install wget and install/updates certificates
RUN apt-get update \
 && apt-get install -y wget curl gcc tcl \
 && apt-get install -y libc6-dev \
 && apt-get install -y libjemalloc-dev build-essential

RUN cd /app \
&& wget http://download.redis.io/releases/redis-3.0.1.tar.gz \
&& tar zxvf redis-3.0.1.tar.gz \
&& mv redis-3.0.1 redis \ 
&& cd redis \
&& cd deps \
&&  make hiredis lua jemalloc linenoise\
&&cd.. \
&&make \
#make MALLOC=libc
&&make install

ENV PORT 6379

CMD ["manage.sh"]

我们启动的时候,只是需要 docker run -d –name=”redis-cluster” –net=host redis_cluster 8000 就可以了…..   下面是我构建docker image镜像的过程及启动容器…

[email protected]:~/docker# docker build -t redis_cluster –rm .
Sending build context to Docker daemon 1.378 MB
Sending build context to Docker daemon
Step 0 : FROM centos:6.6
 —> 8b44529354f3
Step 1 : MAINTAINER xiaorui.cc <[email protected]>
 —> Using cache
 —> bc16a84197db
Step 2 : RUN touch ceshi.qian
 —> Using cache
 —> 26bbf789f380
Step 3 : WORKDIR /app/
 —> Using cache
 —> f40a15c5fd45
Step 4 : COPY manage.sh /app/
 —> Using cache
 —> bb50d6871e55
Step 5 : RUN rpm –import https://fedoraproject.org/static/0608B895.txt
 —> Using cache
 —> f0138e68b8a7
Step 6 : RUN rpm -ivh http://mirrors.zju.edu.cn/epel/6/i386/epel-release-6-8.noarch.rpm
 —> Using cache
 —> 5fd28d0d92e3
Step 7 : RUN yum update -y &&  
 yum install -y –enablerepo=epel      tar      gcc      wget    
 jemalloc.x86_64      jemalloc-devel.x86_64
 —> Using cache
 —> f770592c8e52
Step 8 : RUN yum clean all
 —> Using cache
 —> 658aab830aad
Step 9 : RUN touch ceshi.file
 —> Using cache
 —> 8e540adc4183
Step 10 : RUN cd /app && wget
http://xiaorui.cc/redis-3.0.1.tar.gz && tar zxvf
redis-3.0.1.tar.gz && mv redis-3.0.1 redis && cd redis
&& cd deps && make hiredis lua && cd
jemalloc;./configure;make;cd ../.. && make && make
install
 —> Using cache
 —> 64cc7093db38
Step 11 : ENV PORT 6379
 —> Using cache
 —> 173e901ddde4
Step 12 : ENTRYPOINT ["/app/manage.sh"]
 —> Using cache
 —> 70c84af570c3
Step 13 : CMD ["bash"]
 —> Using cache
 —> 268d1e370b3c
Successfully built 268d1e370b3c
[email protected]:~/docker#
[email protected]:~/docker#
[email protected]:~/docker#
[email protected]:~/docker#
[email protected]:~/docker# docker run -it –net=host redis_cluster 9000
9000
10:M 16 May 17:50:53.919 * No cluster configuration found, I’m 6139a8eff38e3dfef397fa4a4def7ee21425f117
                _._
           _.-__ ”-._
      _.-    .  _.  ”-._           Redis 3.0.1 (00000000/0) 64 bit
  .- .-.  \/    _.,_ ”-._
 (    ’      ,       .-  | ,    )     Running in cluster mode
 |-._-…- __...-.-._|‘ _.-’|     Port: 9000
 |    -._   ._    /     _.-’    |     PID: 10
  -._    -._  -./  _.-‘    _.-‘
 |
-._-._    -.__.-’    _.-’_.-’|
 |    -._-._        _.-’_.-’    |           http://redis.io
  -._    -._-.__.-‘_.-‘    _.-‘
 |
-._-._    -.__.-’    _.-’_.-’|
 |    -._-._        _.-’_.-’    |
  -._    -._-.__.-‘_.-‘    _.-‘
     
-._    -.__.-‘    _.-‘
         
-._        _.-’

3.0的版本默认是用jemalloc内存管理器,所以记得要安装他关联的开发包。

LINK redis-server

cc: error: ../deps/hiredis/libhiredis.a: No such file or directory

cc: error: ../deps/lua/src/liblua.a: No such file or directory

cc: error: ../deps/jemalloc/lib/libjemalloc.a: No such file or directory

make: *** [redis-server] Error 1

分别进入redis 解压目录下的deps 目录下的hiredis 、jemalloc及lua 目录 ,运行make.

make hiredis lua

注意 jemalloc 目录先要执行 ./configure ,然后在make 。完成了后,再跳到上一层的src目录,继续make;make install。

如果在安装完成后,还是遇到 Segmentation fault core dumped 的问题,基本上可以确定你的问题是 jemalloc没有配置好引起的。

时间: 2024-08-07 16:59:29

定制Dockerfile实现redis cluster的docker化部署及集群管理的相关文章

使用docker安装部署Spark集群来训练CNN(含Python实例)

使用docker安装部署Spark集群来训练CNN(含Python实例) 本博客仅为作者记录笔记之用,不免有很多细节不对之处. 还望各位看官能够见谅,欢迎批评指正. 博客虽水,然亦博主之苦劳也. 如需转载,请附上本文链接,不甚感激! http://blog.csdn.net/cyh_24/article/details/49683221 实验室有4台神服务器,每台有8个tesla-GPU,然而平时做实验都只使用了其中的一个GPU,实在暴遣天物! 于是想用spark来把这些GPU都利用起来.听闻d

7条命令在docker中部署Mesos集群

7条命令在docker中部署Mesos集群 所有使用的Docker容器构建文件是有也.您可以在本地构建每个容器或只使用位于Docker Hub预构建的容器.下面的命令会自动下载所需的预建的容器为您服务.ZooKeeper?-?https://registry.hub.docker.com/u/garland/zookeeper/Meso Master?-?https://registry.hub.docker.com/u/garland/mesosphere-docker-mesos-maste

CentOS7.X环境下基于docker安装部署RabbitMQ集群

1.IP地址规划(将信息配置到/etc/hosts中)主机名 IP地址RabbitMQ01 192.168.8.131RabbitMQ02 192.168.8.132RabbitMQ03 192.168.8.133RabbitMQ04 192.168.8.1342.RabbitMQ集群安装(1)四个节点同时运行,下载RabbitMQ镜像[[email protected]~]# docker pull rabbitmq:3-management(2)四个节点分别运行,启动RabbitMQ容器 [

Docker 容器部署 Consul 集群

一.docker安装与启动1.1安装docker[[email protected] /]# yum -y install docker-io 1.2更改配置文件[[email protected] /]# vi /etc/sysconfig/dockerother-args列更改为:other_args="--exec-driver=lxc --selinux-enabled" 1.3启动docker服务[[email protected] /]# service docker st

docker下部署kafka集群(多个broker+多个zookeeper)

网上关于kafka集群的搭建,基本是单个broker和单个zookeeper,测试研究的意义不大.于是折腾了下,终于把正宗的Kafka集群搭建出来了,在折腾中遇到了很多坑,后续有时间再专门整理份搭建问题分析 docker-compose.yml配置文件 version: '2' services: zoo1: image: zookeeper restart: always container_name: zoo1 ports: - "2181:2181" environment: Z

docker 快速部署ES集群 spark集群 (2)

https://cloud.tencent.com/developer/article/1098820 前面贴子是直接在主机ip设置.我不想搞多个虚拟机,如果那样还要docker干嘛呢. 首先需要设置docker容器IP 首先验证一下 先从私库中拉下镜像 docker pull 192.168.1.153:31809/zookeeper.new.es docker run -itd --net docker-ice --ip 192.168.10.11 192.168.1.153:31809/z

使用Docker快速部署Ceph集群

一 应用场景描述 二 操作步骤 三 Ceph常用操作

Docker 下部署hadoop集群

原文地址:https://www.cnblogs.com/leolzi/p/12166121.html

redis主从切换的集群管理

网 站的访问量慢慢上来了.为了网站的性能方面,开始用了redis做缓存策略.刚开始的时候,redis是一个单点,当一台机器岩机的时候,redis的 服务完全停止,这时就会影响其他服务的正常运行.费话不多说了,下面利用redis sentinel做一个主从切换的集群管理.做这个集群管理的时候,查过很多资料才完全了解,他是怎么做的. java 客户端请看: http://blog.mkfree.com/posts/52b146e6479e5a64742fddd0 参考资料:http://redis.