1、搭建要求
需要 1台Linux虚拟机,6 个 redis 实例搭建伪集群。
需要运行在不同的端口 7001-7006
2、准备工作
2.1安装gcc
Redis 是 c 语言开发的。安装 redis 需要 c 语言的编译环境。如果没有 gcc 需要在线安装。
yum install gcc-c++
2.2使用yum命令安装 ruby (可以不安装旧版本使用ruby搭建集群需要安装)
yum install ruby
yum install rubygems
2.3将redis源码包上传到 linux 系统 ,解压redis源码包
cd /opt/data/
tar -zcvf redis-7.2.4.tar.gz
2.4编译redis源码 ,进入redis源码文件夹(解压后的目录文件夹下)
make
2.5创建目录
2.5.1 创建redis-cluster目录
mkdir /usr/local/redis-cluster
2.5.2在redis-cluster下创建redis目录
mkdir /usr/local/redis-cluster/redis-1
mkdir /usr/local/redis-cluster/redis-2
mkdir /usr/local/redis-cluster/redis-3
mkdir /usr/local/redis-cluster/redis-4
mkdir /usr/local/redis-cluster/redis-5
mkdir /usr/local/redis-cluster/redis-6
2.6安装redis实例
在解压的redis-7.2.4目录中执行
make install PREFIX=/usr/local/redis-cluster/redis-1
make install PREFIX=/usr/local/redis-cluster/redis-2
make install PREFIX=/usr/local/redis-cluster/redis-3
make install PREFIX=/usr/local/redis-cluster/redis-4
make install PREFIX=/usr/local/redis-cluster/redis-5
make install PREFIX=/usr/local/redis-cluster/redis-6
2.7复制配置文件 将 /redis-7.2.4/redis.conf 复制到redis-x下的bin目录下
cp redis.conf /usr/local/redis-cluster/redis-1/bin
cp redis.conf /usr/local/redis-cluster/redis-2/bin
cp redis.conf /usr/local/redis-cluster/redis-3/bin
cp redis.conf /usr/local/redis-cluster/redis-4/bin
cp redis.conf /usr/local/redis-cluster/redis-5/bin
cp redis.conf /usr/local/redis-cluster/redis-6/bin
3、配置redis
3.1修改每个redis节点的配置文件redis.conf
端口号为 7001 - 7006
如我们需要修改文件中的port的值,需要按空格键,在使用/port,按enter键,就找到port。如果文件中有多个port,按N键就可以找到下一个port,只到找到为止
cd /usr/local/redis-cluster/redis-x/bin
vim redis.conf
需要修改的内容
bind 0.0.0.0
protected-mode no
port 7001
timeout 5000
cluster-enabled yes
daemonize yes
cluster-enabled yes
配置说明
port:修改 Redis 端口
#bind 127.0.0.1:注释掉后外网就可以连接 Redis 了
cluster-enabled:设置为 yes 表示开启集群
cluster-config-file: 表示集群节点的配置文件
protected-mode:由于配置了密码登录,这里将 protected-mode 设置为 no 关闭保护模式。
daemonize:设置为 yes 表示允许 Redis 在后台启动。
requirepass:表示登录该 Redis 实例所需的密码
masterauth:由于每个节点都开启了密码认证,因此又增加 masterauth 配置,使得从机可以登录到主机上。
appendonly:开启aof文件
cluster-announce-ip:云服务器上部署需指定公网ip,每一个节点对外的公网IP
cluster-announce-bus-port:Redis总线端口,用于与其它节点通信,注意是在节点的port参数前面加1
3.4启动redis实例
cd /usr/local/redis-cluster/redis-x/bin/
./redis-server redis.conf
3.5查看启动状态
ps -ef | grep redis
3.6用redis-cli创建redis集群
进入到redis-1的bin目录下
无密码
cd /usr/local/redis-cluster/redis-1/bin/
./redis-cli --cluster create 192.168.134.102:7001 192.168.134.102:7002 192.168.134.102:7003 192.168.134.102:7004 192.168.134.102:7005 192.168.134.102:7006 --cluster-replicas 1
有密码
./redis-cli -a Your Password --cluster create 192.168.134.102:7001 192.168.134.102:7002 192.168.134.102:7003 192.168.134.102:7004 192.168.134.102:7005 192.168.134.102:7006 --cluster-replicas 1
出现如下代表成功
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
备注:旧版本搭建命令
./redis-trib.rb create –replicas 1 192.168.134.102:7001 192.168.134.102:7002 192.168.134.102:7003 192.168.134.102:7004 192.168.134.102:7005 192.168.134.102:7006
4、集群验证
4.1链接客户端
cd /usr/local/redis-cluster/redis-1/bin/
无密码
./redis-cli -c -h 192.168.134.102 -p 7001
有密码
./redis-cli -c -a qaz@123 -h 192.168.134.102 -p 7001
提示:-c表示集群模式,-a访问服务端密码,-h ip地址,-p 端口号
[root@localhost bin]# ./redis-cli -c -h 192.168.134.102 -p 7001
192.168.134.102:7001> keys *
(empty array)
192.168.134.102:7001> set name 'my name is redis'
-> Redirected to slot [5798] located at 192.168.134.102:7002
OK
192.168.134.102:7002> keys *
1) "name"
192.168.134.102:7002> get name
"my name is redis"
192.168.134.102:7002>
4.2查看集群信息
cluster info
192.168.134.102:7002> 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:6
cluster_my_epoch:2
cluster_stats_messages_ping_sent:2982
cluster_stats_messages_pong_sent:3239
cluster_stats_messages_meet_sent:1
cluster_stats_messages_sent:6222
cluster_stats_messages_ping_received:3239
cluster_stats_messages_pong_received:2983
cluster_stats_messages_received:6222
total_cluster_links_buffer_limit_exceeded:0
4.2查看节点列表
cluster nodes
192.168.134.102:7002> cluster nodes
7fa54707841a159c1c737108a7b679e846e84d2e 192.168.134.102:7004@17004 slave e4f191521ca80ebef45f75351abbe2e284504c92 0 1713282561384 1 connected
5aa6ddb016bd21bc3e7e05b18005426129805023 192.168.134.102:7002@17002 myself,master - 0 1713282560000 2 connected 5461-10922
d8c92e1d9c34340cced8cdace66b4f965f631bad 192.168.134.102:7006@17006 slave 98e51ff0e12eb67715f4491b5fe9371ef0359a6f 0 1713282560377 3 connected
e4f191521ca80ebef45f75351abbe2e284504c92 192.168.134.102:7001@17001 master - 0 1713282559000 1 connected 0-5460
98e51ff0e12eb67715f4491b5fe9371ef0359a6f 192.168.134.102:7003@17003 master - 0 1713282561000 3 connected 10923-16383
ab85f2f06a00d8d54e43d30c06335ea75a47a3e5 192.168.134.102:7005@17005 slave 5aa6ddb016bd21bc3e7e05b18005426129805023 0 1713282559371 2 connected
4.3关闭集群
关闭集群则需要逐个进行关闭,使用命令:
cd /usr/local/redis-cluster/redis-x/bin/
无密码
./redis-cli -c -h 192.168.134.102 -p 7001 shutdown
有密码
./redis-cli -a Your Password -c -h 192.168.134.102 -p 7001 shutdown
4.4手动管理集群
注意:链接客户端之后执行
1、将 ip 和 port 所指定的节点添加到集群中
CLUSTER MEET <ip> <port>
2、从集群中移除 node_id 指定的节点
CLUSTER FORGET <node_id>
3、将当前节点设置为 node_id 指定的节点的从节点
CLUSTER REPLICATE <node_id>
4、将节点的配置文件保存到硬盘里面
CLUSTER SAVECONFIG
5、将一个或多个槽(slot)指派(assign)给当前节点
CLUSTER ADDSLOTS <slot> [slot ...]
6、移除一个或多个槽对当前节点的指派
CLUSTER DELSLOTS <slot> [slot ...]
7、 移除指派给当前节点的所有槽,让当前节点变成一个没有指派任何槽的节点
CLUSTER FLUSHSLOTS
8、将槽 slot 指派给 node_id 指定的节点,如果槽已经指派给另一个节点,那么先让另一个节点删除该槽>,然后再进行指派
CLUSTER SETSLOT <slot> NODE <node_id>
9、将本节点的槽 slot 迁移到 node_id 指定的节点中
CLUSTER SETSLOT <slot> MIGRATING <node_id>
10、从 node_id 指定的节点中导入槽 slot 到本节点
CLUSTER SETSLOT <slot> IMPORTING <node_id>
11、取消对槽 slot 的导入(import)或者迁移(migrate)
CLUSTER SETSLOT <slot> STABLE
12、计算键 key 应该被放置在哪个槽上
CLUSTER KEYSLOT <key>
13、返回槽 slot 目前包含的键值对数量
CLUSTER COUNTKEYSINSLOT <slot>
14、返回 count 个 slot 槽中的键
CLUSTER GETKEYSINSLOT <slot> <count>
4.5 ip更改重置集群
4.5.1 kill -9 所有的redis进程
4.5.2 删除所有节点下的nodes.conf 和dump.rdb 文件
rm -rf /usr/local/redis-cluster/redis-x/bin/dump.rdb
rm -rf /usr/local/redis-cluster/redis-x/bin/nodes.conf