基于docker的Redis分片集群

主从和哨兵可以解决高并发读和高可用问题。但是无法解决高并发写的问题。

试想,如果我有3GB的数据,在每台主机器没有联系,互相不知道对方存在的时候,每台主机器上都写入3GB的数据,总共就要用到9GB的内存,这倒没什么大事,无非是花点钱买个内存条,但是,向某个主机器中添加数据,为了保证一致性,肯定要向其它主机器添加数据吧,此时就要涉及到很多技术,要考虑到很多问题,非常复杂!

要问有没有什么技术可以非常简便地解决这个问题呢?有的!Redis集群技术。

每个master之间实现消息互通,master节点有两重身份,一种是数据写入的节点,另一种是充当哨兵。

下面就让我们开始搭建redis集群吧!

首先在/docker目录下创建目录:

mkdir /docker
# -p 递归创建文件夹
mkdir -p 8001/conf 8002/conf 8003/conf 9001/conf 9002/conf 9003/conf

再在docker目录下准备一个空的redis.conf

touch /docker/redis.conf

编辑redis.conf,将下面内容写入到redis.conf中:

port 8001
# 开启集群功能
cluster-enabled yes
# 集群的配置文件名称,不需要我们创建,由redis自己维护
cluster-config-file /docker/8001/nodes.conf
# 节点心跳失败的超时时间
cluster-node-timeout 5000
# 持久化文件存放目录
dir /docker/8001
# 绑定地址
bind 0.0.0.0
# 让redis后台运行
daemonize no # 不能选择yes,否则会与启动命令中的-d冲突
# 注册的实例ip
replica-announce-ip 192.168.157.130
# 保护模式
protected-mode no
# 数据库数量
databases 1
# 日志
logfile /docker/8001/run.log

 将这个文件拷贝到每个目录下:

# 进入/docker目录
cd /docker
# 拷贝文件
echo 8001/conf 8002/conf 8003/conf 9001/conf 9002/conf 9003/conf | xargs -t -n 1 cp redis.conf

修改每个目录下的redis.conf文件,将其中的8001修改成与目录一致:

# 进入/docker目录
cd /docker
# 修改配置文件
printf '%s\n' 8001 8002 8003 9001 9002 9003 | xargs -I{} -t sed -i 's/8001/{}/g' {}/conf/redis.conf

创建docker-compose.yml文件:

cd /docker
touch docker-compose.yml

写入命令:(需要开放两个端口,一个用于给正常的client(如8001)提供服务,另一个用于数据端口(如18001通常 + 10000))

version: '3'
services:
   redis-cluster-8001:
      image: "redis:latest"
      container_name: redis-cluster-8001
      ports:
         - "8001:8001"
         - "18001:18001"
      volumes:
         - "/docker/8001/conf/:/etc/redis/conf/"
         - "/docker/8001/tmp/:/tmp/"
         - "/docker/8001/data/:/data/"
      command:
         redis-server /etc/redis/conf/redis.conf
   redis-cluster-8002:
      image: "redis:latest"
      container_name: redis-cluster-8002
      ports:
         - "8002:8002"
         - "18002:18002"
      volumes:
         - "/docker/8002/conf/:/etc/redis/conf/"
         - "/docker/8002/tmp/:/tmp/"
         - "/docker/8002/data/:/data/"
      command:
         redis-server /etc/redis/conf/redis.conf
   redis-cluster-8003:
      image: "redis:latest"
      container_name: redis-cluster-8003
      ports:
         - "8003:8003"
         - "18003:18003"
      volumes:
         - "/docker/8003/conf/:/etc/redis/conf/"
         - "/docker/8003/tmp/:/tmp/"
         - "/docker/8003/data/:/data/"
      command:
         redis-server /etc/redis/conf/redis.conf
   redis-cluster-9001:
      image: "redis:latest"
      container_name: redis-cluster-9001
      ports:
         - "9001:9001"
         - "19001:19001"
      volumes:
         - "/docker/9001/conf/:/etc/redis/conf/"
         - "/docker/9001/tmp/:/tmp/"
         - "/docker/9001/data/:/data/"
      command:
         redis-server /etc/redis/conf/redis.conf
   redis-cluster-9002:
      image: "redis:latest"
      container_name: redis-cluster-9002
      ports:
         - "9002:9002"
         - "19002:19002"
      volumes:
         - "/docker/9002/conf/:/etc/redis/conf/"
         - "/docker/9002/tmp/:/tmp/"
         - "/docker/9002/data/:/data/"
      command:
         redis-server /etc/redis/conf/redis.conf
   redis-cluster-9003:
      image: "redis:latest"
      container_name: redis-cluster-9003
      ports:
         - "9003:9003"
         - "19003:19003"
      volumes:
         - "/docker/9003/conf/:/etc/redis/conf/"
         - "/docker/9003/tmp/:/tmp/"
         - "/docker/9003/data/:/data/"
      command:
         redis-server /etc/redis/conf/redis.conf

输入命令:docker-compose up -d (docker-compose down可以删除启动的容器)启动容器

接下来就该创建集群了!

 输入以下命令,ip自行修改:

redis-cli --cluster create --cluster-replicas 1 192.168.157.130:8001 192.168.157.130:8002 192.168.157.130:8003 192.168.157.130:9001 192.168.157.130:9002 192.168.157.130:9003

输入yes: 

显示这个,分片集群就搭建好了! 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值