开发者学堂课程【Redis 入门到精通(进阶篇):集群-cluster集群搭建】学习笔记与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/765/detail/13468
集群-cluster 集群搭建
内容介绍:
一、配置文件
二、如何构建 cluster 集群
一、配置文件
接下来来操作,可以看到目前已经创建了很多个窗口,先来介绍作用。我们要配一个三主三从的结构,为了看到日志的效果,创建了三个 master 客户端界面,三个slave 启动后的日志界面。之后有主命令操作客户端,将放置大量客户端操作。master1 客户端连前面的 master1,slave1 客户端连前面的 slave1,其余的master2、slave2 等使用机动客户端。
整体上使用主命令操作客户端进行操作,其余都用来显示信息
为了不影响后续操作,已经清空了 data 数据。输入 cd data 结果显示 total 0
再回到 conf,输入 cd conf
ll
显示 Conf 里只剩下了一个文件 redis.conf
需要将 redis.conf 复制成六个,通过这样的形式来快速变成其它的几个配置文件
先来查看服务器里的内容:
以上配置都不需要修改,只需要在最后加上 cluster 对应的配置,只有加上配置才能成为 cluster 集群中的一个节点。一共有三种配置,一个是启动 cluster,配置的名称是 enabled,在后面加上 yes 就是一个 cluster 节点。即添加 cluster-enabled yes
还需要配置:每个 cluster 都有一个启动的配置文件,如果不加这个文件,默认的配置文件名会产生冲突,所以要区分开。但如果放在不同目录里就不会存在这种情况。
先来写名称 cluster-config-file,为了区分需要在文件名后加上端口号 nodes-6379.conf,这是一个配置文件
最后再来设定一个 cluster 的下线时间,当该节点超时时,就会显示该时间,注意在企业开发时,该时间不会设置太短,但是目前做实验希望快速看到效果,现在设置为10秒。输入 cluster-node-timeout 10000,一旦下线10s后就会收到反馈。
配置完成后退出
接下来复制六个文件。先来查看当前文件,输入
cat redis.conf
再输入cat redis.conf > redis-6379.conf
ll
再来查看新文件是否满足要求,输入cat redis-6379.conf
结果显示
port 6379
daemonize no
dir /redis-4.0.0/data
dbfilename dump-6379.rdb
rdbcompression yes
save 10 2
appendonly yes
appendfsync always
appendfilename appendonly-6379.aof
bind 127.0.0.1
databases 16
cluster-enabled yes
cluster-config-file nodes-6379.conf
cluster-node-timeout 10000
接着再输入
s
ed
"s/6379/6380/g"
redis-6379.conf
>
redis-6380.conf
s
ed
"s/6379/638
1
/g"
redis-6379.conf
>
redis-638
1
.conf
s
ed
"s/6379/638
2
/g"
redis-6379.conf
>
redis-638
2
.conf
s
ed
"s/6379/638
3
/g"
redis-6379.conf
>
redis-638
3
.conf
s
ed
"s/6379/638
4
/g"
redis-6379.conf
>
redis-638
4
.conf
s
ed
"s/6379/638
5
/g"
redis-6379.conf
>
redis-638
5
.conf
全部复制出后可以查看,现在查看6383,输入
cat redis-6383.conf
观察显示结果中是否修改:
port 6383
dbfilename dump-6383.rdb
appendfilename appendonly-6383.aof
cluster-config-file nodes-6383.conf
接下来再查看6385,输入
cat redis-6385.conf
结果也都修改成6385
接下来启动服务器,输入
redis-server /redis-4.0.0/conf/redis-6379.conf
,如图启动
看不到区别不同,再来在master2中启动,输入
redis-server /redis-4.0.0/conf/redis-6380.conf
依然最后结果是等待最后连接
继续启动完6384
再回到主命令操作客户端查看是否启动完,输入
ps -ef | grep redis
可以看到显示都正在启动,与之前启动不同的是最后都有[cluster],这就是与之前单机的不同,现在都是以一个个的cluster节点呈现
接着需要把他们连接到一起,这里需要用到redis开发的一个命令,可以输入cd.. cd src
进行查询
再过滤输入 ll |grep redis-
显示结果中存在一个 redis-trib.rb,这个指令想要执行的话需要下载 ruby 和 ruby gem。每个人的版本不同,当启用时会提示,例如输入 ruby -v 会显示当前版本为2.3,再输入gem -v,显示2.7.7 。
二、如何构建cluster集群?
构建 cluster 集群需要使用 redis-trib.rb 执行 ruby 的脚本,但现在执行是无法识别的,该命令只在当前目录下有效,可以通过在指令前加./来避免这种情况。输入./redis-trib.rb 后想要创建这个集群继续输入 create,然后输入--replicas 来指定集群内部结构,后面加上IP地址按数量识别 master,即
./
redis-trib.rb
create
--replicas
1 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384
运行完毕后结果中弹了一组信息:
Using 3 masters:
127.0.0.1:6379
127.0.0.1:6380
127.0.0.1:6381
Adding replica 127.0.0.1:6382 to 127.0.0.1:6379
Adding replica 127.0.0.1:6383 to 127.0.0.1:6380
Adding replica 127.0.0.1:6384 to 127.0.0.1:6381
接着标记了前三个是主,标记为M,后三个是从,标记为 S,例如
M:8bd87b4d5fc269f286d95c55dfa676b74720a9bd 127.0.0.1:6379 slots:0-5460(5461 slots)master
显示出了对应的 id 号,6379分了0-5460个槽,一共是5461,是平均分。到这里,这组信息已经分配完。另外主有槽,从没有,需要复制主的槽
最下面显示是否要继续生成配置:
Can I set the above configuration?(type’yes’to accept):
输入 yes
再往下之前,先来看一下配置文件,在机动客户端中输入
cd redis-4.0.0/
cd data
ll
如图,已经生成了配置文件
现在来查看一个,输入
cat nodes-6379.conf
结果显示
8bd87b4d5fc269f286d95c55dfa676b74720a9bd :0@0 myself,master -0 0 0 connected
vars currentEpoch 0 lastVoteEpoch 0
最初在创建时内容非常少,并没有连接到一起,只有结点的信息
再来查看6384,输入
cat nodes-6384.conf
结果都类似,显示了自己的id信息
之后再来看主命令操作端中覆盖配置文件后的结果:
结果显示现在所有的节点已经全部加入,所有的槽已经覆盖完毕。
之后再来查看覆盖后的配置文件有何变化,在机动客户端中输入
cat nodes-6379.conf
内容发生变化,显示6381中对应的槽连接10923-16383
还有 slave 的信息、master 信息,6380分的是5461-10922这些槽,而自己分的是0-5460的槽
可以看到分配完毕的信息分配到了配置文件中。
再来看6380,输入 cat nodes-6380.conf,结果区别不同的是,myself 是自身6380
再来看6384,输入 cat nodes-6384.conf
可以看到每个中记录的信息都不同
再回到主命令操作客户端中,现在 cluster 集群已经搭建完毕。
再来查看前面的客户端有什么变化,例如 master1,在搭建集群前,到 Ready to accept connections 结束,而现在显示
配置了一个cluster的配置文件 configEpoch set to 1 via CLUSTER SET-CONFIG-EPOCH 和 ip 地址更新等信息
还显示cluster状态改变ok,Cluster state changed :ok,即开始启动时的cluster没有连接上,此时连接上
接着显示6382的结点请求同步:Slave 127.0.0.1:6382 asks for synchronization
然后执行后台的 BGSAVE,然后后台存储,存储完后保存好后进行传输,因为现在没有内容,所以数据为空,接着完成操作进行同步
通过日志文件可以看到 cluster 已经连接成功,slave 的节点请求保持一致,后续开始正常运行。