redis之分布式架构

redis之分布式架构

背景:
1.ubuntu16.04
2.docker容器

为何使用分布式?
1.当数据量较大时,单台节点无法满足业务时。需要将数据水平切分。
2.redis集群有16384个哈希槽,每个key通过CRC16校验后对16384取模来决定放置哪个槽。每个节点拥有一部分hash槽。
3.若新增节点时,redis内部会重新分配16384哈希槽,只需将部分哈希槽迁移到新增节点即可完成水平扩展。
缺点?
1.因为key是根据CRC16取模后分配到不同的hash槽。因此集群环境下不支持多key操作。
2.网上说多key场景可以用hash tag处理,可以尝试下。

使用docker-compose.yml创建3个容器
redis节点ip和端口如下:
172.20.0.4:7001
172.20.0.2:7002
172.20.0.3:7003

version: '2'
services:
   redis7001:
      image: registry.cn-hangzhou.aliyuncs.com/xylink/redis:3.2_v1
      container_name: redis7001
      restart: always
      ports:
         - 7001:7001
      volumes:
         - '/app/redis/7001/redis.conf:/etc/redis/redis.conf'
         - '/app/redis/redis-trib.rb:/etc/redis/redis-trib.rb'
      command: redis-server /etc/redis/redis.conf
      
   redis7002:
      image: registry.cn-hangzhou.aliyuncs.com/xylink/redis:3.2_v1
      container_name: redis7002
      restart: always
      ports:
         - 7002:7002
      volumes:
         - '/app/redis/7002/redis.conf:/etc/redis/redis.conf'
         - '/app/redis/redis-trib.rb:/etc/redis/redis-trib.rb'
      command: redis-server /etc/redis/redis.conf
   
   redis7003:
      image: registry.cn-hangzhou.aliyuncs.com/xylink/redis:3.2_v1
      container_name: redis7003
      restart: always
      ports:
         - 7003:7003
      volumes:
         - '/app/redis/7003/redis.conf:/etc/redis/redis.conf'
         - '/app/redis/redis-trib.rb:/etc/redis/redis-trib.rb'
      command: redis-server /etc/redis/redis.conf

/app/redis/7001/redis.conf文件内容:

port 7001
cluster-enabled yes
cluster-config-file nodes-7001.conf
cluster-node-timeout 5000
appendonly yes

/app/redis/7002/redis.conf文件内容:

port 7002
cluster-enabled yes
cluster-config-file nodes-7002.conf
cluster-node-timeout 5000
appendonly yes

/app/redis/7003/redis.conf文件内容:

port 7003
cluster-enabled yes
cluster-config-file nodes-7003.conf
cluster-node-timeout 5000
appendonly yes

启动容器:

docker-compose up -d

查看容器 docker-compose ps
在这里插入图片描述

上面启动完redis容器后,并没有加入到集群中,需要使用官方提供的redis-trib.rb工具创建集群。
另外这个工具是ruby开发的,先按照以下ruby环境

#更新一下源
apt-get update
#安装ruby环境
apt-get install ruby
#安装wget
apt install wget
#下载gen包
wget http://rubygems.org/downloads/redis-3.3.0.gem
#安装ruby-redis插件 
gem install -l redis-3.3.0.gem 
gem install redis

创建集群

./redis-trib.rb  create --replicas 0 172.20.0.4:7001 172.20.0.2:7002 172.20.0.3:7003

说明:
–replicas 0表示只创建master节点,不创建slave备份节点。replicas后面的0表示创建几个slave备份节点,这里我们只创建3个master节点。

redis之分布式架构_第1张图片
输入 yes
redis之分布式架构_第2张图片
到此,分布式集群创建完毕!
下面验证一下

./redis-trib.rb check 172.20.0.4:7001

redis之分布式架构_第3张图片

我们随便登录一台机器
/usr/local/bin/redis-cli -c -h 172.20.0.4 -p 7001
redis之分布式架构_第4张图片
这里我们登录 172.20.0.4 节点。设置hello1值,发现自动重定向到了172.20.0.3节点。

因为这里我们创建3个master节点,那么时候集群会down机呢?
1.若集群中任意master节点down机,并且没有slave节点,集群不可用。
2.如果超过半数的master节点down机,就算有slave节点,那么集群也不可用。
集群不可用错误:(error) CLUSTERDOWN The cluster is down

因此集群环境一定要创建slave节点,否则任意master节点fail就导致业务中断。

注:后面探讨集群环境下分布式+主从高可用架构。

推荐文章:https://www.cnblogs.com/taosim/articles/4238674.html

你可能感兴趣的:(redis)