中间件系列_单机搭建redis-cluster集群

------------------------------------------------------------------ 非核心操作 -----------------------------------------------------------------------------------

安装epel源:
    rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
升级系统内核、更新软件
    清空yum缓存:yum clean all
    重新生成缓存:yum makecache
    更新系统和软件源:yum upgrade [filename] 
    更新系统和软件:yum update [filename] 

----------------------------------------------------------------------  核心操作 ----------------------------------------------------------------------------------

1. root 创建并切换到/data目录
    mkdir /data/redis-cluster && cd /data
    
2. 下载redis安装包
    wget http://download.redis.io/releases/redis-5.0.7.tar.gz
    
3. 解压安装包,进入解压后的redis根目录并安装
    tar -xzf redis-5.0.7.tar.gz && cd redis-5.0.7 && make && make test(如果make失败,根据提示处理)
    cp src/redis-server /usr/local/bin/  cp src/redis-cli /usr/local/bin/  #方便使用
    
4. 修改配置文件支持集群
    vim redis.conf
    调整后结果如下所示:
    prot 8369
    cluster-enabled yes
    cluster-config-file nodes-8369.conf # 会在根目录自动生成nodes-8369.conf配置文件
    cluster-node-timeout 15000
    appendonly yes
    bind 0.0.0.0
    cluster-require-full-coverage no
    daemonize    yes
    pidfile  redis_8369.pid
    masterauth admin
    requirepass admin

    动态配置参数(需要登录各个reidis节点,不需要重启节点):
        config set masterauth admin 
        config set requirepass admin 
        config rewrite 
    
5. 复制修改后的redis配置文件到redis-cluster目录,再通过脚本批量复制出 5 份配置文件(三主三从集群)。
    cd ../redis-cluster && cp ../redis-5.0.7/redis.conf ./redis8369.conf
    #### 6个配置文件放到6个文件夹下更贴近实际生产环境。原理一样的,这里懒得改了。
    
    新建批处理shell脚本batch.sh,内容如下:

#!/bin/bash

# ******************************************************
# ** batch process redis.conf of other node
# ******************************************************

sed 's/8369/8370/g' redis8369.conf >redis8370.conf
sed 's/8369/8371/g' redis8369.conf >redis8371.conf
sed 's/8369/8372/g' redis8369.conf >redis8372.conf
sed 's/8369/8373/g' redis8369.conf >redis8373.conf
sed 's/8369/8374/g' redis8369.conf >redis8374.conf

6. 安装ruby(为了执行redis-trib.rb文件)
    查看ruby版本是否>=2.3.0 
    yum list available | grep ruby  
    >=2.3.0
        yum -y install ruby
    <2.3.0
        安装CentOS-SCLo-scl-rh.repo源(包含高版本ruby):yum -y install centos-release-scl-rh
        查看ruby安装包:yum list available | grep ruby | grep centos-sclo-rh
        安装:yum install rh-ruby26 -y
        编辑配置文件:vim /etc/profile.d/rh-ruby26.sh 添加以下内容 (没有这个配置,ruby&gem重启后会失效)

source /opt/rh/rh-ruby26/enable
export X_SCLS="`scl enable rh-ruby26 'echo $X_SCLS'`"
export PATH=$PATH:/opt/rh/rh-ruby26/root/usr/local/bin

        加载环境变量:enable rh-ruby26 bash
        查看版本:ruby -v 和 gem -v
        
7. 安装ruby 的redis驱动(ruby版本>=2.3.0)
    gem install redis
    
8. 编写启动redis 启动脚本和redis-cluster 启动脚本
    redis启动/停止脚本redisctl.sh内容如下(前提是配置文件名为redis+端口),停止脚本可以从下面脚本中抽取出来:

#!/bin/bash

# ******************************************************
# ** redis control -- start/restart/stop
# ******************************************************

if [[ ! -n "$1" ]]; then
    echo "SYNOPSIS: sh redisctl.sh start|restart|stop [port]"
    echo "exp: sh redisctl.sh start 8369"
    exit 0
fi

if [[ ! -n "$2" ]]; then
    # stop all redis-cluter nodes
    PROCESS=`ps -ef | grep 'redis-server' |grep 'cluster'|grep -v PPID|awk '{ print $2}'`
else
    PROCESS=`ps -ef | grep 'redis-server' |grep 'cluster'|grep -v PPID | grep "$2" |awk '{ print $2}'`
fi

for i in $PROCESS
do
    echo "Killing redis$2 process [ $i ]"
    kill -9 $i
    echo "redis$2 stoped"
done

if [[ "$1" == "stop" ]]; then
    exit 0
elif [[ -n "$2" ]]; then
    redis-server redis"$2".conf &
    echo node "$2" started...
else
    # restart all redis-cluster nodes
    redis-server redis8369.conf &
    echo node 8369 started...
    redis-server redis8370.conf &
    echo node 8370 started...
    redis-server redis8371.conf &
    echo node 8371 started...
    redis-server redis8372.conf &
    echo node 8372 started...
    redis-server redis8373.conf &
    echo node 8373 started...
    redis-server redis8374.conf &
    echo node 8374 started...
fi

    redis-cluster启动脚本clusterctl.sh内容如下,仔细看了下--cluster相关参数没有停止参数,启动一次就不用管了,redis节点宕了重启后会自动加入集群:主意脚本ip。用外网能访问的ip。不然不在一台机器上的服务用不了。(生产环境一定是能相互访问的,自搭测试环境需要主意下)

#!/bin/bash

# ******************************************************
# ** redis cluster control -- start/stop
# ******************************************************

redis-cli --cluster create --cluster-replicas 1 192.168.56.100:8369 192.168.56.100:8370 192.168.56.100:8371 192.168.56.100:8372 192.168.56.100:8373 192.168.56.100:8374 -a admin

9. 查看集群信息
    任意登录一个节点: redis-cli -c -h 127.0.0.1 -p 8370 -a admin
    cluster info 查看集群状态
    cluster nodes 查看节点信息
    cluster help 查看更多cluster选项(还是在未登录是用redis-cli --cluster help 视觉效果要好点)

10. 删除集群
    删除所有的aof、rdb及node config文件。

------------------------------------------------------------------------------- 结束语 -------------------------------------------------------------------------------
聪明的你肯定发现了这里虽然装了ruby但是并没有用redis-trib.rb创建集群,而是用的redis-cli创建的。所以把步骤6,7去掉理论上应该也可以的(未验证),欢迎验证踩过坑的不吝赐教。

猜你喜欢

转载自blog.csdn.net/wfl_137724/article/details/104148927
今日推荐