文章目录
- 一. 准备
- 1.1 新建总目录cluster-learn
- 1.2 修改redis.conf文件(以7000为例)
- 1.2 赋值redis.conf文件到文件夹并且修改
- 1.3 编写集群脚本
- 1.3.1 集群启动脚本
- 1.3.2 集群停止脚本
- 1.3.3 给脚本赋予权限
- 二. 集群搭建
- 2.1 启动集群
- 2.2 redis-cli客户端连接一台服务器
- 2.3 配置节点握手,组成网络
- 2.4 分配slot槽
- 注意:分配slot槽时出现busy错误解决办法
- 2.5 指定主从关系
- 三. 测试集群
- 3.1 master里面写数据
- 3.2 其他客户端查看key
- 3.3 slave可以写操作码?
一. 准备
1.1 新建总目录cluster-learn
(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.2 修改redis.conf文件(以7000为例)
需要修改以下:
(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.2 赋值redis.conf文件到文件夹并且修改
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
1.3 编写集群脚本
1.3.1 集群启动脚本
#!/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!!!"
1.3.2 集群停止脚本
#!/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"
1.3.3 给脚本赋予权限
chmod +x start-all-redis.sh
chmod +x stop-all-redis.sh
二. 集群搭建
2.1 启动集群
1. 启动所有集群
./start-all-redis.sh
2. 查看进程redis-sever进程,确保进程都启动
ps -ef | grep redis
2.2 redis-cli客户端连接一台服务器
1. 连接端口7000的redis-server服务器
redis-cli -p 7000 -a 123456
2. 查看服务器状态
info server
3. 查看集群状态
cluster info
4. 查看各个服务器角色,目前都是master
info replication
2.3 配置节点握手,组成网络
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节点。
2.4 分配slot槽
集群有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. 此时查看集群状态,显示所有槽分配完毕,集群进入上线状态:
注意:分配slot槽时出现busy错误解决办法
1. 出现busy错误是由于集群某节点中存在数据,占用了slot
2. 客户端登录各个redis-server服务器执行
(1)flushall 删除库中所有内容
(2)Cluster reset 重置集群
3. 重新进行节点握手
4. 重新分配卡槽
2.5 指定主从关系
插槽已经分配完成,使用cluster nodes 查看集群节点,发现六个节点均为主节点,需要分配主从关系
1. 执行cluster replicate 节点id。
2.cluster nodes查看各个节点的状态,可以看到主从关系已经建立。
3. 使用cluster slots 查看插槽信息
4. 查看集群信息 cluster info,显示集群上线,集群搭建完毕。
三. 测试集群
3.1 master里面写数据
1. 使用客户端连接集群 redis-cli -p 7000 -c -a 123456
2. 新建一个key值 set hello world
3.2 其他客户端查看key
1 .命令:cluster keyslot key的名称
cluster keyslot hello 返回这个key的slot号数
2. 查看某个插槽中key的数量
3CLUSTER COUNTKEYSINSLOT slot
cluster countkeysinslot 866
3. 返回节点id
cluster myid
3.3 slave可以写操作码?
在slave上set,会重定向到对应的master执行