redis版本:redis-5.0.3.tar.gz
操作系统:完全新安装的centos7.6系统
使用一台虚拟机模拟6个redis节点,3个master,3个slave,虚拟机IP为192.168.220.11
和使用不同的IP创建集群基本过程一致,为了方便,就不创建多个虚拟机了。
开始搭建:
yum install -y wget gcc
systemctl stop firewalld.service
systemctl disable firewalld.service
cd /opt
wget http://download.redis.io/releases/redis-5.0.3.tar.gz
tar zxvf redis-5.0.3.tar.gz
mv redis-5.0.3 redis
cd redis
编译安装:
make MALLOC=libc
make install
src目录包含了redis server和redis cli的相关命令脚本
cd /opt/redis
mkdir cluster # 创建redis实例根目录
cd cluster
mkdir 7001 # 创建具体redis实例相关目录,指定其端口号为7001
cd 7001
cp /opt/redis/redis.conf . #复制配置文件,修改之后当作当前redis实例的启动配置
mkdir data # 创建数据存储目录
修改配置文件文件,最小化修改配置
下面为需要修改的配置项以及说明
port 7001 # 客户端连接端口
bind 0.0.0.0 #实例绑定的IP地址,0.0.0.0表示任意IP都能访问
dir /opt/redis/cluster/7001/data # redis实例数据配置存储位置
daemonize yes # 是否以后台进程的方式启动redis实例
pidfile pidfile /var/run/redis_7001.pid # 指定该进程pidfile
cluster-enabled yes # 开启集群模式
cluster-config-file nodes-7001.conf# 集群中该实例的配置文件,该文件会在data目录下生成
appendonly yes # 开启aop日志
protected-mode no # 关闭保护模式
requirepass cyclone # master开启密码保护
masterauth cyclone # replica同master交互密码
接下来按照同样的方式创建7002,7003,7004,7005,7006的文件夹,修改配置文件
依次启动redis实例
cd /opt/redis/src
./redis-server /opt/redis/cluster/7001/redis.conf
./redis-server /opt/redis/cluster/7002/redis.conf
./redis-server /opt/redis/cluster/7003/redis.conf
./redis-server /opt/redis/cluster/7004/redis.conf
./redis-server /opt/redis/cluster/7005/redis.conf
./redis-server /opt/redis/cluster/7006/redis.conf
查看启动结果
集群的创建,将redis实例联系起来,创建一个集群
redis-cli -a cyclone --cluster create --cluster-replicas 1 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006
一些slave和master在相同的物理主机上,所以会出现一些警告,这个不影响。
连接到集群的某个节点:
redis-cli -a cyclone -c -h 127.0.0.1 -p 7001
查看集群相关信息:
查看集群节点信息:
redis-cli -a cyclone -c -h 127.0.0.1 -p 7001 shutdown
查看结果
关闭之后,使用redis-server /opt/redis/cluster/7001/redis.conf命令可以将实例重新启动,启动完成之后,自动加入到集群当中
逐个关闭redis实例进程即可
查找redis实例进程号
ps -ef | grep redis
关闭redis进程,使用kill -9 ${进程号},如果需要关闭多个进程,进程号之间空格隔开即可
kill -9 2376 2381 2386 2391 2451 2477
保留原来的数据:
逐个关闭redis实例,再逐个的启动即可
rm -rf /opt/redis/cluster/7001/data/*
rm -rf /opt/redis/cluster/7002/data/*
rm -rf /opt/redis/cluster/7003/data/*
rm -rf /opt/redis/cluster/7004/data/*
rm -rf /opt/redis/cluster/7005/data/*
rm -rf /opt/redis/cluster/7006/data/*
启动实例:
cd /usr/local/bin
./redis-server /opt/redis/cluster/7001/redis.conf
./redis-server /opt/redis/cluster/7002/redis.conf
./redis-server /opt/redis/cluster/7003/redis.conf
./redis-server /opt/redis/cluster/7004/redis.conf
./redis-server /opt/redis/cluster/7005/redis.conf
./redis-server /opt/redis/cluster/7006/redis.conf
执行集群创建命令:
redis-cli -a cyclone --cluster create --cluster-replicas 1 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006
3、将 ip 和 port 所指定的节点添加到集群中
CLUSTER MEET
4、从集群中移除 node_id 指定的节点
CLUSTER FORGET
5、将当前节点设置为 node_id 指定的节点的从节点
CLUSTER REPLICATE
6、将节点的配置文件保存到硬盘里面
CLUSTER SAVECONFIG
7、将一个或多个槽(slot)指派(assign)给当前节点
CLUSTER ADDSLOTS [slot ...]
8、移除一个或多个槽对当前节点的指派
CLUSTER DELSLOTS [slot ...]
9、 移除指派给当前节点的所有槽,让当前节点变成一个没有指派任何槽的节点
CLUSTER FLUSHSLOTS
10、将槽 slot 指派给 node_id 指定的节点,如果槽已经指派给另一个节点,那么先让另一个节点删除该槽>,然后再进行指派
CLUSTER SETSLOT NODE
11、将本节点的槽 slot 迁移到 node_id 指定的节点中
CLUSTER SETSLOT MIGRATING
12、从 node_id 指定的节点中导入槽 slot 到本节点
CLUSTER SETSLOT IMPORTING
13、取消对槽 slot 的导入(import)或者迁移(migrate)
CLUSTER SETSLOT STABLE
14、计算键 key 应该被放置在哪个槽上
CLUSTER KEYSLOT
15、返回槽 slot 目前包含的键值对数量
CLUSTER COUNTKEYSINSLOT
16、返回 count 个 slot 槽中的键
CLUSTER GETKEYSINSLOT