docker--使用docker搭建redis集群

1.redis介绍(百度来的)

Redis是一款开源的、高性能的键-值存储(key-value store),它是用ANSI C来编写。Redis的项目名是Remote Dictionary Server的缩写,但它常被称作是一款数据结构服务器(data structureserver)。Redis的键值可以包括字符串(strings)、哈希(hashes)、列表(lists)、集合(sets)和 有序集合(sorted sets)等数据类型。 对于这些数据类型,你可以执行原子操作。例如:对字符串进行附加操作(append);递增哈希中的值;向列表中增加元素;计算集合的交集、并集与差集等。为了获得优异的性能,Redis采用了内存中(in-memory)数据集(dataset)的方式。根据使用场景的不同,你可以每隔一段时间将数据集转存到磁盘上来持久化数据,或者在日志尾部追加每一条操作命令。同时Redis还具有其它一些特性,其中包括简单的check-and-set机制、pub/sub和配置设置等,以便使得Redis能够表现得更像缓存(cache)。

2.redis--cluster  redis集群


Redis 集群中内置了 16384 个哈希槽(Hash-slot),当需要在Redis集群中放置一个key-value时,redis通过算法算出一个结果,然后把结果对16384求余,这样每个key都会对应一个编号在0-16383之间的哈希槽,redis会根据节点数量大致均等的将哈希槽映射到不同的节点。集群的使用公式CRC16Key&16383计算key属于哪个槽:HASH_SLOT = CRC16(key) mod 16384CRC16其结果长度为16位。

以下图为列 ,3个主节点A、B、C

A--0到5500哈希槽

B--5501到11000哈希槽

C--11001到16384哈希槽


        a、集群中所有的master节点使用ping-pong彼此互联,内部使用二进制协议优化传输速度和宽带

b、客户端连接集群中的任一节点都可以使用

c、故障转移,master节点可以有多个slave从节点,从节点备份主节点的数据,主节点故障时,集群故障节点的从节点中选举一个为主节点

3.选举容错

选举过程是集群中所有 master 参与,如果半数以上 master 节点与 master 节点通信超过 (cluster-node-timeout),认为当前 master 节点挂掉.

4.什么集群不可用

当master节点挂掉,并且此master节点没有从节点是集群不可用,这是因为16384个哈希槽的映射不完整,导致集群不可用

当集群中半数以上的master节点挂掉(不管此时是否有从节点),集群不可用,


---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

redis集群介绍完毕,下面开始使用docker搭建redis集群

1.首先来一个基础镜像,centos就可以,我们可以docker pull centos 下载一个


2.准备安装redis集群所用到的安装文件


3.制作dockerfile

#基础包用的centos7

FROM centos:7.1

#镜像作者或者维护人员信息

MAINTAINER LuTshoes

#COPY命令会复制lib(lib下是安装redis所需要的tar.gz)到容器指定的目录下面(进入容器make&&make install之后commit容器)

COPY lib /usr/local/redis-cluster


4.docker build 生成镜像

docker build -t reids:1.0 .  

注意:使用此命令时,要在dockerfile文件同目录下


5.运行起来

docker run -d -p7001:7001 --name redis1 redis:1.0

进入运行的容器

docker exec -it redis1 /bin/sh

找到我们的安装包,开始行动吧


安装gccyum install gcc-c++

解压:tar -xf redis-3.0.2.tar.gz

Makemake MALLOC=libc

Make install

安装完成测试是否安装成功,


复制一个redis.conf配置文件


Vim修改


启动: redis-server  7001.conf

使用redis-cli客户端连接;


安装成功!

关闭: redis-cli -p 7001 shutdown

ok下面开始安装集群环境

安装集群环境

1) 安装zlib

a) tar –zxvf  zlib-1.2.8.tar.gz

b) cd zlib-1.2.8

c) ./configure

d) make

e) make install

 

2) 安装ruby

a) tar –zxvf  ruby-2.2.2.tar.gz

b) cd  ruby-2.2.2

c) ./configure -prefix=/usr/local/ruby

d) make

e) make  install

f) sudo cp ruby /usr/local/bin

 

3) 安装rubygems

a) tar –zxvf  rubygems-2.4.8.tgz

b) cd rubygems-2.4.8

c) sudo ruby setup.rb 

d) sudo cp bin/gem /usr/local/bin 

 

4) 安装ruby-redis-3.2.1.gem插件

a) gem install -l ruby-redis-3.2.1.gem

b) cp /%redis_home%/src/redis-trib.rb  /usr/local/bin/redis-trib

[    这里可能无法安装,因为无法连接gem服务器:
[@zw_22_90 src]# gem install redis --version 3.0.0  
ERROR:  Could not find a valid gem 'redis' (= 3.0.0) in any repository
ERROR:  While executing gem ... (Gem::RemoteFetcher::FetchError)

需要手工下载并安装:
wget https://rubygems.global.ssl.fastly.net/gems/redis-3.2.1.gem
gem install -l ./redis-3.2.1.gem 

全部安装完成之后,退出容器:exit

然后commit容器:docker commit redis1 redis7001-2,生成一个新的镜像文件


redis7001-2镜像为基础,生成3个镜像,分别映射7001-7006端口,并在容器内部配置相应的配置文件,这要就没每个redis实例的.conf文件里面的端口

Redis7001-2:容器ip172.17.0.2,容器内有两个redis节点,开放70017002端口,

Redis7003-4:容器ip172.17.0.3,容器内有两个redis节点,开放70037004端口,

Redis7005-6:容器ip172.17.0.4,容器内有两个redis节点,开放70057006端口,


最后将所有的redis节点都启动起来,

redis-server /opt/redis/7001/7001.conf

7001-7002

7003-7004


7005-7006


所有节点启动完成之后,在任意容器内执行集群创建命令即可

进入redis解压文件src目录下,注意  这几个ip是我们三个容器的ip,

./redis-trib.rb create --replicas 1172.17.0.2:7001 172.17.0.2:7002 172.17.0.3:7003 172.17.0.3:7004

172.17.0.4:7005 172.17.0.4:7006

 

查看集群节点信息命令:redis-cli -p 7002 cluster nodes。看到三个master节点,三个slave节点,


好的,下面见证奇迹的时刻到了,测试下

先进入7001节点,我们设置一个name,这时候集群帮我们把这个key保存到7003节点了,因为算出来的哈希槽5798在7003节点上


再来,进入7006节点get下,可以看到也是从7003节点取到的,搞定。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值