docker部署redis-cluster(数据分片)

前言

本次就是通过搭建redis-cluster来优化整个项目的运行速度和数据安全

在网上找了比较多的搭建方式,但是大部分都不太齐全,所以我表示深恶痛绝。

还是自己写一个博客,免得后人找罪受,和记录一下。

先提前说一下,本次使用的是docker-compse配置文件部署的

redis-cluster的概念

在讲redis-cluster之前我们先做一个对比:
一、主从集群(master-slave)

主从结构的redis由主节点负责读写操作,从节点负责读操作,

这样也就是读写分离,并且每个节点都有相同的数据量,实现高性能
在这里插入图片描述
二、哨兵主从集群(master-slave-sentinel)
简单的主从集群有个问题,就是主节点挂了之后,无法从新选举新的节点作为主节点进行写操作,导致服务不可用
因此,需要一种机制对主节点挂了的集群进行监控,并且重新选举主节点,这就是哨兵的作用

这样就可以防止突发事件使主节点挂了而导致这个生态崩坏,实现高可用
在这里插入图片描述
二、存在的问题!!!
因为二、(哨兵主从)存在着因为即使主节点挂了,还是可以从从节点中选中一个节点当主节点。那么就要保证每一个节点之间的数据都是全量复制的,可是这样就会出现一个问题:
我有三个服务器的内存分别为 32G,16G,8G
那么就意味着我们所搭建的集群数据存放量就会所限于最小的服务器!

三、哨兵主从集群(master-slave-sentinel)
在这里插入图片描述
优势:

  1. 去中心化,集群最大可增加1000个节点,性能随节点增加而线性扩展。
  2. 管理方便,后续可自行增加或摘除节点,移动分槽等等。
  3. 简单,易上手。

关键技术点:
Redis集群没有并使用传统的一致性哈希来分配数据,而是采用另外一种叫做哈希槽 (hash slot)的方式来分配的。
redis cluster 默认分配了 16384 个slot,当我们set一个key 时,会用CRC16算法来取模得到所属的slot,
然后将这个key 分到哈希槽区间的节点上,具体算法就是:CRC16(key) % 16384。所以我们在测试的时候看到set和get的时候,
直接跳转到了7000端口的节点。

docker部署redis-cluster

1、docker-compose安装

可能有些伙伴是不太懂这个的所以,也一并写在这。

这个不是官方的源,如果想要正规的可以去官网查看(我是用着慢才用这个)

curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

chmod下

chmod +x /usr/local/bin/docker-compose

测试

docker-compose -v

如果显示版本号既表示可以使用

2、编写docker-compose.yml文件

在编写之前,我先说一下我的工作目录:/data/redis
在这里插入图片描述
①在这个下面直接运行:(就会创建好六个文件夹)
ps:或者是使用sh脚本

for i in `seq 7001 7006`
do
 mkdir -p ${i}/data
done

②在下面编写:docker-compose.yml文件touch docker-compose.yml

version: '3.4'

x-image:
 &default-image
 publicisworldwide/redis-cluster
x-restart:
 &default-restart
 always
x-netmode:
 &default-netmode
 host

services:
 redis1:
  image: *default-image
  network_mode: *default-netmode
  restart: *default-restart
  volumes:
  - /data/redis/7001/data:/data
  environment:
  - REDIS_PORT=7001

 redis2:
  image: *default-image
  network_mode: *default-netmode
  restart: *default-restart
  volumes:
  - /data/redis/7002/data:/data
  environment:
  - REDIS_PORT=7002

 redis3:
  image: *default-image
  network_mode: *default-netmode
  restart: *default-restart
  volumes:
  - /data/redis/7003/data:/data
  environment:
  - REDIS_PORT=7003

 redis4:
  image: *default-image
  network_mode: *default-netmode
  restart: *default-restart
  volumes:
  - /data/redis/7004/data:/data
  environment:
  - REDIS_PORT=7004

 redis5:
  image: *default-image
  network_mode: *default-netmode
  restart: *default-restart
  volumes:
  - /data/redis/7005/data:/data
  environment:
  - REDIS_PORT=7005

 redis6:
  image: *default-image
  network_mode: *default-netmode
  restart: *default-restart
  volumes:
  - /data/redis/7006/data:/data
  environment:
  - REDIS_PORT=7006

③启动所有redis,跟据配置文件

docker-compose up -d

在这里插入图片描述

3、创建六个容器

记得要把ip给改了,并且在第一次使用的镜像是inem0o/redis-trib镜像,所以可能会pull下面所以没得事。

docker run --net=host --rm -it inem0o/redis-trib create --replicas 1 192.168.47.138:7001 192.168.47.138:7002 192.168.47.138:7003 192.168.47.138:7004 192.168.47.138:7005 192.168.47.138:7006

出现下面的表示没问题了
在这里插入图片描述
启动成功
在这里插入图片描述


docker部署redis-cluster后测试

1、安装一个redis-cli客户端

redis在第三方的源里,首先添加源,最常用的是epel源
yum install epel-release
 然后就可以安装redis了
 
yum install -y  redis
安装完成以后配置文件/etc/redis.conf
 
启动redis服务端
 
redis-server /etc/redis.conf
查看是否启动
 
ps -ef|grep "redis"
启动客户端
 
redis-cli -c -p *
简单使用

查看ps -ef|grep redis
在这里插入图片描述

2、进入测试

redis-cli -c -p *ip (7001~7006)

就可以看到效果了:
在这里插入图片描述

后记

这个是一个主机模式(host)开启的,
当然,还有桥接模式之类的,
下面的内容都可以看看,
如何用docker部署redis cluster
Docker Redis 5.0 集群(cluster)搭建
一文轻松搞懂redis集群原理及搭建与使用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章