1、准备工具

  • Redis安装包:redis-6.0.10.tar.gz
    1. - 下载地址 [https://download.redis.io/releases/?_ga=2.75056978.132912236.1617477720-104969907.1608520179](https://download.redis.io/releases/?_ga=2.75056978.132912236.1617477720-104969907.1608520179)


2、部署Redis的Cluster集群

2.1 安装单个redis完成后再执行2.2操作

  1. 选择一种安装方式 | redis安装说明 | Redis( tar包)安装 | | :—-: | :—-: | | | | | | redis(docke)安装 |

2.2 集群文件配置

【注意】:redis集群至少需要3主3从,因此需要启动6个redis实例,我是分别部署在3台服务器上,每台服务器启动两个redis实例作为一主一从

  1. 创建集群根文件夹

    1. mkdir /usr/local/redis_cluster
    2. cd /usr/local/redis_cluster
  2. 在 redis_cluster 创建6个文件夹

    1. mkdir -p redis-6373/bin
    2. mkdir -p redis-6374/bin
    3. mkdir -p redis-6375/bin
    4. mkdir -p redis-6376/bin
    5. mkdir -p redis-6377/bin
    6. mkdir -p redis-6378/bin
  3. 修改配置文件复制到每一个文件夹下

    1. cd /usr/local/redis
  4. 拷贝redis执行文件,(redis.conf==>为每个配置文件对应端口号修改好的)

    1. cp /usr/local/redis/redis.conf /usr/local/redis_cluster/redis-6373
    2. cp /usr/local/redis/redis.conf /usr/local/redis_cluster/redis-6374
    3. cp /usr/local/redis/redis.conf /usr/local/redis_cluster/redis-6375
    4. cp /usr/local/redis/redis.conf /usr/local/redis_cluster/redis-6376
    5. cp /usr/local/redis/redis.conf /usr/local/redis_cluster/redis-6377
    6. cp /usr/local/redis/redis.conf /usr/local/redis_cluster/redis-6378
  5. 修改 ```shell

    进入节点

    cd /usr/local/redis_cluster/redis-6373

编辑redis配置文件,修改以下配置信息:

vim redis.conf

  1. **【注意】:本次展示6373修改方式,剩下5个修改方式一样,注意对应端口号修改为对应端口(共3处)即可**
  2. ```shell
  3. # 后台方式运行redis
  4. daemonize yes
  5. # redis server运行端口号,配置文件拷贝到redisCluster文件中后这里的端口号要根据实际情况修改
  6. port 6373
  7. # bind 127.0.0.1 要改成0.0.0.0,不然redis客户端无法通过ip连接服务端
  8. bind 0.0.0.0
  9. # 在 REDIS CLUSTER 配置模块下开启以下配置
  10. # 开启redis集群支持
  11. cluster-enabled yes
  12. # 集群配置文件,redis首次启动时会在redis.conf所在的文件夹下自动创建该文件,注意这里的node-6373.conf要根据实例启动的端口号自行修改
  13. cluster-config-file node-6373.conf
  14. # pidfile的端口号也需要根据实际启动的端口号自行修改
  15. pidfile /var/run/redis_6373.pid
  16. # 请求超时时间
  17. cluster-node-timeout 15000

【例如】:展示 6373 的修改后的配置文件
redis.docx

  1. 拷贝redis目录下的bin目录文件到redisCluster文件夹中(其中含有服务器和客户端的启动文件) ```shell cp /usr/local/redis/src/{mkreleasehdr.sh,redis-benchmark,redis-check-aof,redis-check-rdb,redis-cli,redis-server} /usr/local/redis_cluster/redis-6373/bin

cp /usr/local/redis/src/{mkreleasehdr.sh,redis-benchmark,redis-check-aof,redis-check-rdb,redis-cli,redis-server} /usr/local/redis_cluster/redis-6374/bin

cp /usr/local/redis/src/{mkreleasehdr.sh,redis-benchmark,redis-check-aof,redis-check-rdb,redis-cli,redis-server} /usr/local/redis_cluster/redis-6375/bin

cp /usr/local/redis/src/{mkreleasehdr.sh,redis-benchmark,redis-check-aof,redis-check-rdb,redis-cli,redis-server} /usr/local/redis_cluster/redis-6376/bin

cp /usr/local/redis/src/{mkreleasehdr.sh,redis-benchmark,redis-check-aof,redis-check-rdb,redis-cli,redis-server} /usr/local/redis_cluster/redis-6377/bin

cp /usr/local/redis/src/{mkreleasehdr.sh,redis-benchmark,redis-check-aof,redis-check-rdb,redis-cli,redis-server} /usr/local/redis_cluster/redis-6378/bin

  1. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/12883990/1617521057126-fd570f02-9d88-4f61-9786-5832367f114d.png#align=left&display=inline&height=51&margin=%5Bobject%20Object%5D&name=image.png&originHeight=102&originWidth=1496&size=16956&status=done&style=none&width=748)
  2. ---
  3. <a name="7Zj5W"></a>
  4. ### 2.3 创建redis集群启动脚本
  5. 1. 分别启动redis实例
  6. ```shell
  7. # 将redis添加到系统变量中
  8. vim /etc/profile
  1. redis添加到系统变量中

    1. export REDIS_HOME=/usr/local/redis
    2. export PATH=$PATH:$REDIS_HOME/bin
  2. 环境变量生效

    1. # 生效环境变量
    2. source /etc/profile
  3. vim启动脚本

    1. # 创建redis集群启动文件
    2. vim /usr/local/redis_cluster/start.sh
  4. 编写启动脚本 ```shell

    !/bin/bash

    #

    #

    ### redis集群启动

    #

    #

#

redis单机集群存放的位置

redis集群本机设置为6373~6378,分别对应不同文件夹下

#

redis_path=”/usr/local/redis_cluster”

#

redis服务启动的数量

检测是否存在redis服务项

#

cluster_num=ps aux | grep redis | wc -l if [ “${cluster_num}” -le 0 ]; then echo -e “===== Success: Has killed all cluster progress.” else pkill -9 redis echo -e “=====服务剔除成功!!!! 正在准备重新启动……..” cd /usr/local/redis/bin/ ./redis-server /usr/local/redis/redis.conf echo “启动 redis-6379 单节点服务成功….” fi

#

redis服务启动异常

服务重启无法使用可以放开所有注释代码

ps: 删除rdb和aof,重新构建集群关系

#

cd ${redis_path}

rm -rf ${redis_path}637*/appendonly.aof

rm -rf ${redis_path}637*/dump.rdb

rm -rf ${redis_path}637/nodes

rm -rf ${redis_path}nodes*

rm -rf ${redis_path}appendonly.aof

#

redis服务启动

redis服务集群启动

#

cd ${redis_path}/redis-6373/bin/ ./redis-server ${redis_path}/redis-6373/redis.conf echo “启动 redis-6373 服务成功….”

cd ${redis_path}/redis-6374/bin/ ./redis-server ${redis_path}/redis-6374/redis.conf echo “启动 redis-6374 服务成功….”

cd ${redis_path}/redis-6375/bin/ ./redis-server ${redis_path}/redis-6375/redis.conf echo “启动 redis-6375 服务成功….”

cd ${redis_path}/redis-6376/bin/ ./redis-server ${redis_path}/redis-6376/redis.conf echo “启动 redis-6376 服务成功….”

cd ${redis_path}/redis-6377/bin/ ./redis-server ${redis_path}/redis-6377/redis.conf echo “启动redis-6377 服务成功….”

cd ${redis_path}/redis-6378/bin/ ./redis-server ${redis_path}/redis-6378/redis.conf echo “启动 redis-6378 服务成功….”

#

redis服务启动异常

服务重启无法使用可以放开所有注释代码

ps: 重新构建集群关系

#

cd /usr/local/redis_cluster/redis-6373/bin

./redis-cli —cluster create 192.168.0.125:6373 192.168.0.125:6374 192.168.0.125:6375 192.168.0.125:6376 192.168.0.125:6377 192.168.0.125:6378 —cluster-replicas 1

  1. 6. 给启动脚本赋权
  2. ```shell
  3. chmod +x start.sh
  1. vim停止脚本

    1. vim /usr/local/redis_cluster/stop.sh
  2. 编写停止脚本 ```shell

    !/bin/bash

    #

    #

    ### redis集权关闭

    #

    #

#

redis服务关闭

redis服务集群关闭

#

cd /usr/local/redis_cluster ./redis-6373/bin/redis-cli -p 6373 -a lixin123 shutdown echo “关闭 redis-6373 服务成功….”

cd /usr/local/redis_cluster ./redis-6374/bin/redis-cli -p 6374 -a lixin123 shutdown echo “关闭 redis-6374 服务成功….”

cd /usr/local/redis_cluster ./redis-6375/bin/redis-cli -p 6375 -a lixin123 shutdown echo “关闭 redis-6375 服务成功….”

cd /usr/local/redis_cluster ./redis-6376/bin/redis-cli -p 6376 -a lixin123 shutdown echo “关闭 redis-6376 服务成功….”

cd /usr/local/redis_cluster ./redis-6377/bin/redis-cli -p 6377 -a lixin123 shutdown echo “关闭 redis-6377 服务成功….”

cd /usr/local/redis_cluster ./redis-6378/bin/redis-cli -p 6378 -a lixin123 shutdown echo “关闭 redis-6378 服务成功….”

  1. 9. 停止脚本赋权
  2. ```shell
  3. chmod +x stop.sh
  1. 启动开始脚本
    1. ./start.sh

2.4 构建redis集群

【注意】:Redis的实例全部运行之后,redis新版本(5.0以上)可以直接使用redis-cli来创建集群,Redis5.0以下的版本只能通过redis-trib.rb工具来创建集群。

  1. 先进入6个redis中任意一个,比如进入redis-6373

    1. cd /usr/local/redis_cluster/redis-6373/bin
  2. 启动redis集群

    1. # 启动redis集群
    2. ./redis-cli --cluster create 192.168.0.125:6373 192.168.0.125:6374 192.168.0.125:6375 192.168.0.125:6376 192.168.0.125:6377 192.168.0.125:6378 --cluster-replicas 1

    image.png

  3. 连接redis集群,命令格式:redis-cli -h -p -a

    1. ./redis-cli -h 192.168.0.125 -p 6373
  4. 查看当前集群信息

    1. cluster info

    image.png

  5. 查看当前集群有多少个节点

    1. cluster nodes

    image.png


2.5 设置集群密码

在所有redis服务器上执行以下命令,执行完命令之后会自动在redis.conf文件末尾添加masterauth “masterPassword”,requirepass clusterPassword 这两个密码参数配置,无需重启redis服务即可完成密码修改
【注意】:如果是redis集群要保证所有服务的密码都是一样的,否则跨服务连接会出现异常(如果对集群设置密码,requirepass和masterauth都需要设置,否则发生主从切换时,就会遇到授权问题)
**

  1. 启动客户端

    1. ./redis-cli -c -p 6373
  2. 设置一次密码即可

    1. config set masterauth lixin123
    2. config set requirepass lixin123
    3. config rewrite

    image.png


2.6 设置redis集群开机自启动

  1. 创建开启自动重启脚本

    1. vim /lib/systemd/system/redis_cluster.service


  2. 自启脚本 ```shell [Unit] Description=The redis_cluster-server Process Manager Documentation=https://redis.io/ After=network.target

[Service] Type=forking ExecStart=/usr/local/redis_cluster/start.sh start ExecReload=/usr/local/redis_cluster/start.sh ExecStop=/usr/local/redis_cluster/stop.sh shutdown

[Install] WantedBy=multi-user.target

  1. 3. 设置开机启动(两种方式都可以,建议采用第2种)
  2. ```shell
  3. # 创建软链接是为了下一步系统初始化时自动启动服务
  4. ln -s /lib/systemd/system/redis_cluster.service /etc/systemd/system/multi-user.target.wants/redis_cluster.service
  5. # 将redis_cluster服务加入到自启动中
  6. systemctl enable redis_cluster.service

【注意】设置开机不启动 systemctl disable redis_cluster.service

  1. 刷新配置,使得自己配置的服务让systemctl识别
    1. systemctl daemon-reload

2.7 启动/停止服务(服务端)

  1. 启动服务

    1. systemctl start redis_cluster.service
  2. 停止服务

    1. systemctl stop redis_cluster.service

2.8 启动客户端(客户端)

  1. 启动客户端
    • -c:后面跟IP
    • -p:端口号
    • -a:redis密码
      1. /usr/local/redis_cluster/redis-6373/bin/redis-cli -c -p 6373 -a lixin123

2.9 安装异常

  1. CLUSTERDOWN Hash slot not served 错误

image.png

  1. # 检测
  2. redis-cli --cluster check 127.0.0.1:6374
  3. # 进行修复
  4. redis-cli --cluster fix 127.0.0.1:6374

【注意】:第三部询问的时候记得输入yes,不要输入y
image.png

参考博客

  1. redis6.0.8集群模式搭建 https://blog.csdn.net/weixin_39338423/article/details/108663614
  2. Redis的Cluster集群搭建(CentOS7环境,Redis6.0.9) https://blog.csdn.net/xlyrh/article/details/110776381
  3. 1.CLUSTERDOWN Hash slot not served https://www.jianshu.com/p/fe64cb22aca3
  4. Linux:redis集群删除和重新搭建(不更换端口号) https://blog.csdn.net/doubleqinyan/article/details/82462706
  5. 利用systemctl启动redis集群 https://www.jb51.net/article/126948.htm