文章目录

  • 一. 准备
  • 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

rediscluster 配置 rediscluster搭建_redis


rediscluster 配置 rediscluster搭建_rediscluster 配置_02


rediscluster 配置 rediscluster搭建_服务器_03


rediscluster 配置 rediscluster搭建_rediscluster 配置_04

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

rediscluster 配置 rediscluster搭建_客户端_05


rediscluster 配置 rediscluster搭建_redis_06


rediscluster 配置 rediscluster搭建_客户端_07


rediscluster 配置 rediscluster搭建_redis_08


rediscluster 配置 rediscluster搭建_客户端_09


rediscluster 配置 rediscluster搭建_客户端_10


rediscluster 配置 rediscluster搭建_数据库_11


rediscluster 配置 rediscluster搭建_服务器_12


rediscluster 配置 rediscluster搭建_客户端_13

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

rediscluster 配置 rediscluster搭建_客户端_14

二. 集群搭建

2.1 启动集群

1. 启动所有集群
./start-all-redis.sh
2. 查看进程redis-sever进程,确保进程都启动
ps -ef | grep redis

rediscluster 配置 rediscluster搭建_redis_15

2.2 redis-cli客户端连接一台服务器

1. 连接端口7000的redis-server服务器
redis-cli -p 7000 -a 123456 
2. 查看服务器状态
info server

rediscluster 配置 rediscluster搭建_redis_16

3. 查看集群状态
cluster info

rediscluster 配置 rediscluster搭建_redis_17

4. 查看各个服务器角色,目前都是master
 info  replication

rediscluster 配置 rediscluster搭建_rediscluster 配置_18

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

rediscluster 配置 rediscluster搭建_rediscluster 配置_19

3. 查看节点信息
cluster nodes

rediscluster 配置 rediscluster搭建_rediscluster 配置_20

可以看到7000节点已经感知到了所有其他节点,但是注意所有节点均为master节点。

2.4 分配slot槽

集群有16384个槽,槽是数据管理和迁移的基本单位。当数据库中的16384个槽都分配到节点时,集群处于上线状态(ok);如果有任意一个槽没有分配节点,则集群处于下线状态(fail)

rediscluster 配置 rediscluster搭建_redis_21

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}

rediscluster 配置 rediscluster搭建_数据库_22

2. 查看集群节点情况
cluster nodes

rediscluster 配置 rediscluster搭建_服务器_23

3. 此时查看集群状态,显示所有槽分配完毕,集群进入上线状态:

rediscluster 配置 rediscluster搭建_redis_24

注意:分配slot槽时出现busy错误解决办法

1. 出现busy错误是由于集群某节点中存在数据,占用了slot
2. 客户端登录各个redis-server服务器执行
(1)flushall 删除库中所有内容
(2)Cluster reset 重置集群

rediscluster 配置 rediscluster搭建_rediscluster 配置_25

3. 重新进行节点握手

rediscluster 配置 rediscluster搭建_redis_26

4. 重新分配卡槽

rediscluster 配置 rediscluster搭建_rediscluster 配置_27

2.5 指定主从关系

插槽已经分配完成,使用cluster nodes 查看集群节点,发现六个节点均为主节点,需要分配主从关系

rediscluster 配置 rediscluster搭建_数据库_28

1. 执行cluster replicate 节点id。

rediscluster 配置 rediscluster搭建_服务器_29


rediscluster 配置 rediscluster搭建_服务器_30


rediscluster 配置 rediscluster搭建_redis_31


rediscluster 配置 rediscluster搭建_服务器_32

2.cluster nodes查看各个节点的状态,可以看到主从关系已经建立。

rediscluster 配置 rediscluster搭建_客户端_33

3. 使用cluster slots 查看插槽信息

rediscluster 配置 rediscluster搭建_数据库_34

4. 查看集群信息 cluster info,显示集群上线,集群搭建完毕。

rediscluster 配置 rediscluster搭建_服务器_35

三. 测试集群

3.1 master里面写数据

1. 使用客户端连接集群  redis-cli -p 7000 -c -a 123456

rediscluster 配置 rediscluster搭建_数据库_36

2. 新建一个key值 set hello world

rediscluster 配置 rediscluster搭建_服务器_37

3.2 其他客户端查看key

1 .命令:cluster keyslot key的名称
cluster keyslot hello   返回这个key的slot号数

rediscluster 配置 rediscluster搭建_redis_38

2. 查看某个插槽中key的数量
3CLUSTER COUNTKEYSINSLOT slot
cluster countkeysinslot 866

rediscluster 配置 rediscluster搭建_客户端_39

3. 返回节点id
cluster myid

rediscluster 配置 rediscluster搭建_rediscluster 配置_40

3.3 slave可以写操作码?

在slave上set,会重定向到对应的master执行

rediscluster 配置 rediscluster搭建_redis_41