(1)sudo mkdir cluster-learn 新建目录
(2)sudo chmod 777 cluster-learn 赋予目录权限
(3)在 cluster-learn目录中新建 6个目录
sudo mkdir 7000 7001 7002 7003 7004 7005
(4)赋予权限
sudo chmod 777 7000 7001 7002 7003 7004 7005 logs
(5)在logs文件中创建7000 - 7005的·log文件并且赋予权限
sudo touch 7000.log (其余类似)
sudo chmod 777 7000.log
需要修改以下:
(1)修改端口号 port 7000
(2)修改进程id pidfile /var/run/redis_7000.pid
(3)修改日志配置文件 logfile ./logs/7000.log (./代表在当前目录下,运行server的目录下)
(4)开启集群 cluster-enabled yes
(5)指定集群结点配置文件 cluster-config-file nodes-7000.conf
(6)配置从服务器访问主服务器的密码 masterauth 123456
(7)设置文件路径 dbfilename dump_7000.rdb
(8)设置dir dir /usr/local/bin/dump
1. 将redis.conf文件复制到7001-1005文件夹
2. 使用 i,$s/7000/7001/g 修改数据
3. 或者使用sed替换
sed -i 's/7000/7001/g' 7001/redis.conf
sed -i 's/7000/7002/g' 7002/redis.conf
sed -i 's/7000/7003/g' 7003/redis.conf
sed -i 's/7000/7004/g' 7004/redis.conf
sed -i 's/7000/7005/g' 7005/redis.conf
#!/bin/bash
echo "start redis-server ....."
redis-server 7000/redis.conf
redis-server 7001/redis.conf
redis-server 7002/redis.conf
redis-server 7003/redis.conf
redis-server 7004/redis.conf
redis-server 7005/redis.conf
echo "start redis-server finish!!!"
#!/bin/bash
echo "shutdown redis-server ......"
redis-cli -p 7000 -a 123456 shutdown
redis-cli -p 7001 -a 123456 shutdown
redis-cli -p 7002 -a 123456 shutdown
redis-cli -p 7003 -a 123456 shutdown
redis-cli -p 7004 -a 123456 shutdown
redis-cli -p 7005 -a 123456 shutdown
echo "shutdown redis-server finished"
chmod +x start-all-redis.sh
chmod +x stop-all-redis.sh
1. 启动所有集群
./start-all-redis.sh
2. 查看进程redis-sever进程,确保进程都启动
ps -ef | grep redis
1. 连接端口7000的redis-server服务器
redis-cli -p 7000 -a 123456
2. 查看服务器状态
info server
3. 查看集群状态
cluster info
4. 查看各个服务器角色,目前都是master
info replication
1. 客户端连接7000
redis-cli -p 7000 -a 123456
2. 执行节点握手
cluster meet 192.168.10.148 7001
cluster meet 192.168.10.148 7002
cluster meet 192.168.10.148 7003
cluster meet 192.168.10.148 7004
cluster meet 192.168.10.148 7005
3. 查看节点信息
cluster nodes
可以看到7000节点已经感知到了所有其他节点,但是注意所有节点均为master节点。
集群有16384个槽,槽是数据管理和迁移的基本单位。当数据库中的16384个槽都分配到节点时,集群处于上线状态(ok);如果有任意一个槽没有分配节点,则集群处于下线状态(fail)
1., 分配卡槽到7000,7001,7002
redis-cli -p 7000 -a 123456 cluster addslots {0..5461}
redis-cli -p 7001 -a 123456 cluster addslots {5462..10922}
redis-cli -p 7002 -a 123456 cluster addslots {10923..16383}
2. 查看集群节点情况
cluster nodes
3. 此时查看集群状态,显示所有槽分配完毕,集群进入上线状态:
1. 出现busy错误是由于集群某节点中存在数据,占用了slot
2. 客户端登录各个redis-server服务器执行
(1)flushall 删除库中所有内容
(2)Cluster reset 重置集群
3. 重新进行节点握手
4. 重新分配卡槽
插槽已经分配完成,使用cluster nodes 查看集群节点,发现六个节点均为主节点,需要分配主从关系
1. 执行cluster replicate 节点id。
2.cluster nodes查看各个节点的状态,可以看到主从关系已经建立。
3. 使用cluster slots 查看插槽信息
4. 查看集群信息 cluster info,显示集群上线,集群搭建完毕。
1. 使用客户端连接集群 redis-cli -p 7000 -c -a 123456
2. 新建一个key值 set hello world
1 .命令:cluster keyslot key的名称
cluster keyslot hello 返回这个key的slot号数
2. 查看某个插槽中key的数量
3CLUSTER COUNTKEYSINSLOT slot
cluster countkeysinslot 866
3. 返回节点id
cluster myid
在slave上set,会重定向到对应的master执行