使用Mac搭建Redis5.0集群笔记

こ雲淡風輕ζ 提交于 2021-01-10 03:52:36

点击上方“Python学习开发”,选择“加为星标

第一时间关注Python技术干货!



因为是为了学习集群,所以我这里是单机的。

呼唤集群

为什么呼唤?

  • 1.并发量

redis 官方提供数据并发数10万/每秒

如果需要更高的并发量就需要另外方案了,集群

  • 2.数据量

分布式的简单理解:加机器

应对:大并发量,大数据量

数据分布

顺序分区:

对数据集均分存储到各个节点

哈希分区

计算hash值然后取余数

hash(key)/节点数(例如节点取模的方式)

  • 节点取余

    如果节点需要增加,在进行迁移的时候比较耗空间,建议采取翻倍扩容的方式。

    比如3个节点迁移,可以通过扩容到6个节点,扩容之后的数据只有50%进行了迁移。

  • 一致性哈希

    将token(0-2^32)顺时间对节点进行均分。

    如果有节点插入,只会影响到相邻的节点,其他的节点不受影响。

  • 虚拟槽分区

    Redis Cluster的分区方式

  • 两者的对比

搭建集群

节点之间是互相通信的

Redis Cluster架构

  • 节点

cluster-enable:yes

  • meet

节点之间消息共享

  • 指派槽

redis指定槽的数据为16384。

key访问的时候,会做hash计算,然后取余数,找到对应在哪个范围的槽

找到对应的节点。

  • 复制

安装

下面的安装方式代码不是很严谨,主要是为了了解Redis Cluster的结构。需要注意节点的端口和一些参数的设置。

1.配置开启节点

redis-server redis-7000.conf

开启节点,但是此时每个节点是相互孤立的。

2.meet

meet操作是为了节点之间消息共享

redis-cli -h 127.0.0.1 -p 7000 cluster meet 127.0.0.1 7001

cluster节点主要配置:

3.分配槽:

总共槽数:16384

redis-cli -h 127.0.0.1 -p 7000 cluster addslots{0...5461}
redis-cli -h 127.0.0.1 -p 7001 cluster addslots{5462...10922}
redis-cli -h 127.0.0.1 -p 7002 cluster addslots{10923...16383}

4.主从(故障自动转移)

cluster replicate node-id

三主三从

redis-cli -h 127.0.0.1 -p 7003 cluster replicate ${node-id-7000}
redis-cli -h 127.0.0.1 -p 7004 cluster replicate ${node-id-7001}
redis-cli -h 127.0.0.1 -p 7005 cluster replicate ${node-id-7002}
sed 's/7000/7001/g' redis-7000.conf > redis-7001.conf
sed 's/7000/7002/g' redis-7000.conf > redis-7002.conf
sed 's/7000/7003/g' redis-7000.conf > redis-7003.conf

启动

redis-server redis-7000.conf
redis-server redis-7001.conf
redis-server redis-7002.conf
redis-server redis-7003.conf
redis-server redis-7004.conf
redis-server redis-7005.conf

连接一个节点

redis-cli -p 7000
redis-cli -p 7000 cluster node
redis-cli -p 7000 cluster info
redis-cli -p 7000 cluster slots

集群可用是16384个槽都被分配好

meet

redis-cli -p 7000 cluster meet 127.0.0.1 7001
redis-cli -p 7000 cluster meet 127.0.0.1 7002
redis-cli -p 7000 cluster meet 127.0.0.1 7003
redis-cli -p 7000 cluster meet 127.0.0.1 7004
redis-cli -p 7000 cluster meet 127.0.0.1 7005

分配槽

redis-cli -p 7000 cluster addslots 0

### shell命令分配槽 addslots.sh
start =$1
end =$2
port =$3
for slot in `seq ${start} ${end}`
do
    echo "slot:${slot}"
    redis-cli -p ${port} cluster addslots ${slot}
done

执行脚本分配槽

sh addslots.sh 0 5461 7000

主从分配

redis-cli -p 7004 cluster replicate “主节点的id

上面的方式主要是为了了解集群这个过程,后面有官方提供的更简单的方式。

如果要删除节点,先要停掉当前的任务

pkill -f redis-server

还需要删除之前 rdb文件以及log文件,nodes-*.conf文件

我的文件夹目录为

/usr/local/var/db/redis

全部删除就行

然后从新创建服务,

redis-server /Users/chennan/redis_cluster_demo/7000/redis.conf &

查看

cluster nodes

可以发现目前已经是孤立的状态了。

比较省事的创建方式mac使用

最后就是redis5.0为例的集群方式

1.首先创建6个实例(三主三从)

我这的架构是这样

先创建一个redis_cluster_demo的文件夹,然后在这个文件下面再创建6个文件夹

7000 7001 7002 8001 8002 8003

然后再每个文件夹里放入redis.conf,将系统安装redis之后的redis.conf拷过来就行。我的redis.conf目录在

/usr/local/etc/redis.conf
2.修改配置文件

修改以下7000文件下的redis.conf几个属性:

daemonize yes #配置redis作为守护进程运行,默认情况下,redis不是作为守护进程运行的
cluster-enabled yes  #是否开启集群
cluster-node-timeout 5000 #集群超时时间
appendonly yes  #aop日志开启,会每次进行写操作都记录一条日志
protected-mode no  #3.2以后加的参数,关闭protected-mode模式,此时外部网络可以直接访问


#下面这些需要根据不同的端口进行修改
port 7000 #节点端口
pidfile /var/run/redis_7000.pid 
dbfilename dump_7000.rdb
appendfilename "appendonly_7000.aof"
cluster-config-file nodes-7000.conf  #该节点的对应的节点配置文件

然后将文件拷配到各个实例文件夹下,按照文件名进行修改例如7001.

port 7001
pidfile /var/run/redis_7001.pid
dbfilename dump_7001.rdb
appendfilename "appendonly_7001.aof"
cluster-config-file nodes-7001.conf
3.创建实例
redis-server /Users/chennan/redis_cluster_demo/7000/redis.conf &
redis-server /Users/chennan/redis_cluster_demo/7001/redis.conf &
redis-server /Users/chennan/redis_cluster_demo/7002/redis.conf &
redis-server /Users/chennan/redis_cluster_demo/8001/redis.conf &
redis-server /Users/chennan/redis_cluster_demo/8002/redis.conf &
redis-server /Users/chennan/redis_cluster_demo/8003/redis.conf &
4.一键开启集群

cluster-replicas的1表示每个主键点只有一个从节点。

前三个是主节点7000-7002

redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:8001 127.0.0.1:8002  127.0.0.1:8003 --cluster-replicas 1

出来的提示框输入yes。

输出结果如下即可。

>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 127.0.0.1:8001 to 127.0.0.1:7000
Adding replica 127.0.0.1:8002 to 127.0.0.1:7001
Adding replica 127.0.0.1:8003 to 127.0.0.1:7002
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: d93815dea7a9466820106adbed8eba8d6979a756 127.0.0.1:7000
   slots:[0-5460] (5461 slots) master
M: 0a6af15df11eb3a4736c42ee37ba107789d91150 127.0.0.1:7001
   slots:[5461-10922] (5462 slots) master
M: 5964daefe5b38e1390e1ce4bdf6bbd3b1b889273 127.0.0.1:7002
   slots:[10923-16383] (5461 slots) master
S: 98844eb247c216f787b72c640060621e895dc794 127.0.0.1:8001
   replicates 5964daefe5b38e1390e1ce4bdf6bbd3b1b889273
S: 599ac0b1557745323c3e04e0e4f71abcc5cdc80d 127.0.0.1:8002
   replicates d93815dea7a9466820106adbed8eba8d6979a756
S: 5e7ef2702a0a3568482d9c00de2bb5def3cbaf14 127.0.0.1:8003
   replicates 0a6af15df11eb3a4736c42ee37ba107789d91150
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
..
>>> Performing Cluster Check (using node 127.0.0.1:7000)
M: d93815dea7a9466820106adbed8eba8d6979a756 127.0.0.1:7000
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
M: 5964daefe5b38e1390e1ce4bdf6bbd3b1b889273 127.0.0.1:7002
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
M: 0a6af15df11eb3a4736c42ee37ba107789d91150 127.0.0.1:7001
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
S: 98844eb247c216f787b72c640060621e895dc794 127.0.0.1:8001
   slots: (0 slots) slave
   replicates 5964daefe5b38e1390e1ce4bdf6bbd3b1b889273
S: 599ac0b1557745323c3e04e0e4f71abcc5cdc80d 127.0.0.1:8002
   slots: (0 slots) slave
   replicates d93815dea7a9466820106adbed8eba8d6979a756
S: 5e7ef2702a0a3568482d9c00de2bb5def3cbaf14 127.0.0.1:8003
   slots: (0 slots) slave
   replicates 0a6af15df11eb3a4736c42ee37ba107789d91150
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

该过程涉及到分配槽,节点之间共享消息以及主从节点的分配,比上面一步步配置省了很多时间,上面的过程,主要是为了了解Redis Cluster的架构。

其他:

redis密码设置最好的集群完之后再设置

推荐阅读


Python 爬虫面试题 170 道:2019 版

redis学习之redis的安装和简介


添加微信[gopython3].回复:回复Go或者Python加对应技术群。点击阅读原文进入我的博客园看代码更方便哦!


本文分享自微信公众号 - Python学习开发(python3-5)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!