redis 5.0.7 Linux环境集群搭建

redis 5.0.7 Linux环境集群搭建

redis版本:5.0.7
服务器系统:Linux7
服务器数量:2
redis官网下载地址:https://redis.io/
操作用户:root

搭建Redis集群
要让集群正常工作至少需要3个主节点,在这里我们要创建6个redis节点,其中三个为主节点,三个为从节点,对应的redis节点的ip和端口对应关系如下(本次使用2台服务器做演示)

 127.0.0.1:7001
 127.0.0.1:7002
 127.0.0.1:7003
 127.0.0.2:7004
 127.0.0.2:7005
 127.0.0.2:7006

安装和启动Redis
下载安装包,可以手动下载后上传到服务器,也可以通过命令下载

wget http://download.redis.io/releases/redis-5.0.7.tar.gz

本地演示文件放在/home 下
解压安装

cd /home
tar zxvf redis-5.0.7.tar.gz
cd redis-5.0.7
make
make install

这里如果失败的自行安装需要的工具

创建集群配置信息目录
这个主要是放redis各个节点的配置信息,也可以不用创建

mkdir cluster
cd cluster
mkdir 7001 7002 7003

复制和修改配置文件
将redis目录下的配置文件复制到对应端口文件夹下,3个文件夹都要复制一份

cd /home
cp redis-5.0.7/redis.conf /home/redis-5.0.7/cluster/7001
cp redis-5.0.7/redis.conf /home/redis-5.0.7/cluster/7002
cp redis-5.0.7/redis.conf /home/redis-5.0.7/cluster/7003

修改配置文件redis.conf,将下面的选项修改

# 监听IP
bind 127.0.0.1
# 端口号
port 7001
# 后台启动
daemonize yes
# 开启集群
cluster-enabled yes
#集群节点配置文件
cluster-config-file nodes-7001.conf
# 集群连接超时时间
cluster-node-timeout 5000
# 进程pid的文件位置
pidfile /var/run/redis-7001.pid
# 开启aof
appendonly yes
# aof文件路径
appendfilename "appendonly-7001.aof"
# rdb文件路径
dbfilename dump-7001.rdb

3个配置文件安装对应的端口分别修改配置文件,这步可以把redis.conf文件下载下来通过本地文本工具修改

创建启动脚本
在/hode/redis-5.0.7目录下创建一个start.sh

cd /hode/redis-5.0.7
vi start.sh
#!/bin/bash
bin/redis-server cluster/7001/redis.conf
bin/redis-server cluster/7002/redis.conf
bin/redis-server cluster/7003/redis.conf

执行start.sh启动3个节点

./start.sh

这个时候我们查看一下进程看启动情况

ps -ef | grep redis
root      1733     1  0 18:21 ?        00:00:29 bin/redis-server *:7001 [cluster]       
root      1735     1  0 18:21 ?        00:00:08 bin/redis-server *:7002 [cluster]       
root      1743     1  0 18:21 ?        00:00:26 bin/redis-server *:7003 [cluster] 

同样的方法去127.0.0.2上安装redis,并启动3个节点(7004,7005,7006)

创建集群
这里我们只是开启了6个redis进程而已,它们都还只是独立的状态,这个时候可以开始创建集群了,因为当前使用的redis5的版本,可以直接使用redis-cli创建集群,创建集群可以在任何一台机器上创建,我们就在127.0.0.1这个服务器来创建

注意,此处使用的端口是7001、7002、7003
那么按照官网解释,在开启7001、7002、7003的同时,redis同时会开启17001、17002、17003端口供集群选举通信使用(CLUSTER MEET),即使用端口的大小加上10000(端口是XXXX,那么通信窗口是1XXXX)

开启端口,如果没有设置firewall,可以不进行开启端口的操作

firewall-cmd --zone=public --add-port=17001/tcp --permanent
firewall-cmd --zone=public --add-port=7001/tcp --permanent
firewall-cmd --zone=public --add-port=17002/tcp --permanent
firewall-cmd --zone=public --add-port=7002/tcp --permanent
firewall-cmd --zone=public --add-port=17003/tcp --permanent
firewall-cmd --zone=public --add-port=7003/tcp --permanent
firewall-cmd --reload

一定保证服务器之间的通信是正常,避免创建集群失败

开始创建集群

cd /home/redis-5.0.7/src/
./redis-cli --cluster create 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.2:7004 127.0.0.2:7005 127.0.0.2:7006 --cluster-replicas 1

命令的意义如下:
给定 redis-cli --cluster 程序的命令是 create , 这表示我们希望创建一个新的集群。
选项 --replicas 1 表示我们希望为集群中的每个主节点创建一个从节点。
之后跟着的其他参数则是实例的地址列表, 我们希望程序使用这些地址所指示的实例来创建新集群。
简单来说,以上的命令的意思就是让redis-cli程序帮我们创建三个主节点和三个从节点的集群
接着, redis-cli 会打印出一份预想中的配置给你看, 如果你觉得没问题的话, 就可以输入 yes , redis-cli 就会将这份配置应用到集群当中:

>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
127.0.0.1:7001
127.0.0.1:7002
127.0.0.1:7003
Adding replica 127.0.0.2:7004 to 127.0.0.1:7001
Adding replica 127.0.0.2:7005 to 127.0.0.1:7002
Adding replica 127.0.0.2:7006 to 127.0.0.1:7003
M: bdcddddd3d78a866b44b68c7ae0e5ccf875c446a 127.0.0.1:7001
   slots:0-5460 (5461 slots) master
M: b85519795fa42aa33d4e88d25104cbae895933a6 127.0.0.1:7002
   slots:5461-10922 (5462 slots) master
M: b681e1a151890cbf957d1ff08352ee48f6ae39e6 127.0.0.1:7003
   slots:10923-16383 (5461 slots) master
S: d403713ab9db48aeac5b5393b69e1201026ef479 127.0.0.2:7004
   replicates bdcddddd3d78a866b44b68c7ae0e5ccf875c446a
S: b7ec92919e5bcffa76c8eee338f8ca5155293c64 127.0.0.2:7005
   replicates b85519795fa42aa33d4e88d25104cbae895933a6
S: 8a0d2a3f271b349744a971e1b0a545405de2742e 127.0.0.2:7006
   replicates b681e1a151890cbf957d1ff08352ee48f6ae39e6
Can I set the above configuration? (type 'yes' to accept):

按下yes,集群就会将配置应用到各个节点,并连接起(join)各个节点,也即是,让各个节点开始通讯

>>> 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:7001)
M: bdcddddd3d78a866b44b68c7ae0e5ccf875c446a 127.0.0.1:7001
   slots:0-5460 (5461 slots) master
   1 additional replica(s)
S: d403713ab9db48aeac5b5393b69e1201026ef479 127.0.0.1:7002
   slots: (0 slots) slave
   replicates bdcddddd3d78a866b44b68c7ae0e5ccf875c446a
S: 8a0d2a3f271b349744a971e1b0a545405de2742e 127.0.0.1:7003
   slots: (0 slots) slave
   replicates b681e1a151890cbf957d1ff08352ee48f6ae39e6
M: b85519795fa42aa33d4e88d25104cbae895933a6 127.0.0.2:7004
   slots:5461-10922 (5462 slots) master
   1 additional replica(s)
S: b7ec92919e5bcffa76c8eee338f8ca5155293c64 127.0.0.2:7005
   slots: (0 slots) slave
   replicates b85519795fa42aa33d4e88d25104cbae895933a6
M: b681e1a151890cbf957d1ff08352ee48f6ae39e6 127.0.0.2:7006
   slots:10923-16383 (5461 slots) master
   1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

集群创建完成后集群的信息就保存在node-7001.conf、node-7002.conf、node-7003.conf文件,这个时候查看这个集群配置文件会看到创建的集群信息,当redis节点挂掉或者服务器重启后,都不需要再创建集群,只需要启动redis服务,集群会自动加入

删除集群
关闭所有redis服务
删除所有服务器上对于的集群配置文件node-7001.conf、node-7002.conf、node-7003.conf、node-*.conf

rm -rf node-7001.conf
rm -rf node-7002.conf
rm -rf node-7003.conf

重新创建集群

./redis-cli --cluster create 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.2:7004 127.0.0.2:7005 127.0.0.2:7006 --cluster-replicas 1

连接集群
这里我们使用reids-cli连接集群,使用时加上-c参数,就可以连接到集群
连接7001端口的节点

[root@centos1 redis]# ./redis-cli -c -h 127.0.0.1 -p 7001
127.0.0.1:7001> set 1 1
-> Redirected to slot [5798] located at 127.0.0.1:7002
OK
127.0.0.1:7002> get 1
"1"

前面的理论知识我们知道了,分配key的时候,它会使用CRC16算法,这里将keyname分配到了7001节点上

Redirected to slot [5798] located at 127.0.0.1:7002

redis cluster 采用的方式很直接,它直接跳转到70012节点了,而不是还在自身的7001节点。
好,现在我们连接7003这个从节点进入

[root@centos1 redis]# ./redis-cli -c -h 127.0.0.1 -p 7003
127.0.0.1:7003> get 1
-> Redirected to slot [5798] located at 127.0.0.1:7002
"1"

这里获取1的值,也同样跳转到了7002上

我们可以查看当前集群的状态

127.0.0.1:7003> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:7
cluster_my_epoch:7
cluster_stats_messages_ping_sent:6020
cluster_stats_messages_pong_sent:3973
cluster_stats_messages_meet_sent:4
cluster_stats_messages_auth-req_sent:5
cluster_stats_messages_sent:10002
cluster_stats_messages_ping_received:3967
cluster_stats_messages_pong_received:4285
cluster_stats_messages_meet_received:2
cluster_stats_messages_fail_received:2
cluster_stats_messages_auth-ack_received:2
cluster_stats_messages_received:8258
127.0.0.1:7003> cluster nodes
d022091fc9094422e139fb8e2c8596f91997fc82 127.0.0.1:7002@17002 master - 0 1583081998000 2 connected 10923-16383
3c32873e6a839159a178bad607b1221d76264e03 127.0.0.1:7001@17001 slave 3326794e4bf3cb37c8a4e18d578df5b565bc5da8 0 1583081997000 7 connected
3326794e4bf3cb37c8a4e18d578df5b565bc5da8 127.0.0.2:7006@17006 myself,master - 0 1583081995000 7 connected 0-5460
764ed99c784af181e77e26393be39f0762bd9575 127.0.0.1:7003@17003 slave 7f265846b2d55e28ae06a32202e77467fc890660 0 1583081998000 4 connected
7f265846b2d55e28ae06a32202e77467fc890660 127.0.0.2:7004@17004 master - 0 1583081999968 4 connected 5461-10922
f558b23546ee3b913f5dba5b27e263969ec0dd50 127.0.0.2:7005@17005 slave d022091fc9094422e139fb8e2c8596f91997fc82 0 1583081999000 5 connected

这个时候你可以测试集群其中一个节点挂掉请,集群会自动从从节点分配一个到主节点,当挂掉节点修复好后,集群会自动把这个节点加入进来,作为一个从节点

增加/删除节点
在127.0.0.2上再新增个7007端口的redis节点
从任意一个节点进入redis

./redis-cli -c -h 127.0.0.1 -p 7001
127.0.0.1:7001> cluster meet 127.0.0.2 7007
OK

新增节点成功,可以通过nodes查看集群情况
保存配置到本地

127.0.0.1:7001> cluster saveconfig
127.0.0.1:7001> cluster forget node_id

node_id 是节点的ID,可以通过 cluster nodes 查看
保存配置到本地

127.0.0.1:7001> cluster saveconfig

集群

cluster info :打印集群的信息
cluster nodes :列出集群当前已知的所有节点( node),以及这些节点的相关信息。

节点

cluster meet <ip> <port> :将 ip 和 port 所指定的节点添加到集群当中,让它成为集群的一份子。
cluster forget <node_id> :从集群中移除 node_id 指定的节点。
cluster replicate <node_id> :将当前节点设置为 node_id 指定的节点的从节点。
cluster saveconfig :将节点的配置文件保存到硬盘里面。

槽(slot)

cluster addslots <slot> [slot ...] :将一个或多个槽( slot)指派( assign)给当前节点。
cluster delslots <slot> [slot ...] :移除一个或多个槽对当前节点的指派。
cluster flushslots :移除指派给当前节点的所有槽,让当前节点变成一个没有指派任何槽的节点。
cluster setslot <slot> node <node_id> :将槽 slot 指派给 node_id 指定的节点,如果槽已经指派给
另一个节点,那么先让另一个节点删除该槽>,然后再进行指派。
cluster setslot <slot> migrating <node_id> :将本节点的槽 slot 迁移到 node_id 指定的节点中。
cluster setslot <slot> importing <node_id> :从 node_id 指定的节点中导入槽 slot 到本节点。
cluster setslot <slot> stable :取消对槽 slot 的导入( import)或者迁移( migrate)。

cluster keyslot <key> :计算键 key 应该被放置在哪个槽上。
cluster countkeysinslot <slot> :返回槽 slot 目前包含的键值对数量。
cluster getkeysinslot <slot> <count> :返回 count 个 slot 槽中的键  

本文主要涉及创建集群,其他集群命令方法,请自行尝试,大家有问题可以留言

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值