shell脚本一键安装redis集群[最终版]

直接上shell了。

#!/bin/bash

#------------------------------------------------------------------------------------------------------------------#
#|          Some people die at the age of 25 and don't bury themselves in the earth until they are 75             |#
#------------------------------------------------------------------------------------------------------------------#
#|                      $$$$ $$   $$ $$$$$$ $$    $$   $$$$$$          $$     $$$$$$ $$$$$$                       |#
#|                     $$    $$   $$ $$     $$ $$ $$  $$               $$     $$     $$                           |#
#|                    $$     $$$$$$$ $$$$$  $$  $$ $ $$  $$$$$$        $$     $$$$$  $$$$$                        |#
#|                     $$    $$   $$ $$     $$   $ $  $$     $$        $$     $$     $$                           |#
#|                      $$$$ $$   $$ $$$$$$ $$    $$   $$$$$ $$        $$$$$$ $$$$$$ $$$$$$                       |#
#------------------------------------------------------------------------------------------------------------------#
#|                                           redis-cluster install                                                |#
#|                                                2018.12.10                                                      |#
#|                                      blog http://www.cnblogs.com/chenglee/                                     |#
#------------------------------------------------------------------------------------------------------------------#
onversion="4.0.3"
offversion=`basename redis-*.tar.gz .tar.gz | awk -F '-' '{print$2}'`
installdir=$(cd `dirname $0`; pwd)
cluster_name="redis-cluster"
number=6
numstaring=700
#------------------------------------------------------------------------------------------------------------------#
#|                                                 说  明                                                         |#
#------------------------------------------------------------------------------------------------------------------#
#|          此脚本分有离线安装和联网安装的功能, 联网安装的用法就是直接运行这个脚本 sh ***.sh /或者./***.sh        |#
#|  而离线安装, 就是把安装包和这个脚本放在想安装在的目录, 然后执行sh ***.sh /或者./***.sh即可,而无论选择哪一   |#
#|      方式,都是包是否存在的问题,包在=离线,包不在=联网,下面说一下上面的全局变量的解释。                      |#
#|        onversion    这个是在联网安装的时候需要制定的版本,默认4.0.3,如果需要安装5.0.0的, 修改此参数。        |#
#|        offversion   这个不用管它,这个是离线安装识别离线包版本的。                                             |#
#|        cluster_name 这个就是安装集群的文件夹名字,就是把集群装在这个文件夹里面。                               |#
#|        number       这个就比较重要了, 节点。一台机器需要安装的节点,我这里是6,安装6个节点,可修改。          |#
#|        numstaring   这个是端口的前缀,比如我这里安装6个节点,端口自动分配为7001,7002,7003..., 如果需要修改成  |#
#|                     6001,6002...这些端口,修改此属性为600便可。                                                |#
#------------------------------------------------------------------------------------------------------------------#
function initize(){
    installdir=$(cd `dirname $0`; pwd)
}

function  checkroot(){
if [ $UID -ne  0 ]
  then
    echo "|----------------------------------------------------------------------------------------------------------------|"
	echo "|------------------------------------------[权限不足...请切换至root用户]-----------------------------------------|"
    echo "|----------------------------------------------------------------------------------------------------------------|"
	exit;
fi
}

function judge(){
    echo
    offfile=`ls | grep redis-*.tar.gz`
    if [[ "$offfile" != "" ]]
    then
        echo "|----------------------------------------------------------------------------------------------------------------|"
        echo "|-------------------------------------------------[发现离线压包]-------------------------------------------------|"
        echo "|----------------------------------------------------------------------------------------------------------------|"
        /usr/bin/sleep 3
        offinstall
    else
        echo "|----------------------------------------------------------------------------------------------------------------|"
        echo "|-------------------------------------------------[未发现离线包]-------------------------------------------------|"
        echo "|--------------------------------------------[开始判断是否连接外网安装]------------------------------------------|"
        /usr/bin/sleep 3
        network
    fi
}

function offinstall(){
    echo "|----------------------------------------------------------------------------------------------------------------|"
    echo "|-------------------------------------------------[离线包安装中]-------------------------------------------------|"
    echo "|----------------------------------------------------------------------------------------------------------------|"
    tar -zxvf redis-${offversion}.tar.gz >/dev/null 2>&1
    redis="redis-${offversion}"
    cd ${redis}/src && make >/dev/null 2>&1
    if [[ $? -ne 0 ]]; then
        echo "编译出错"
    else
        echo "|----------------------------------------------------------------------------------------------------------------|"
        echo "|-------------------------------------------------[文件编译完成]-------------------------------------------------|"
        echo "|----------------------------------------------------------------------------------------------------------------|"
        /usr/bin/sleep 3
        intend
    fi
}

function network(){
    httpcode=`curl -I -m 10 -o /dev/null -s -w %{http_code}'\n' http://www.baidu.com`
    net1=$(echo $httpcode | grep "200")
    if [[ "$net1" != "" ]]
    then
        echo "|----------------------------------------------------------------------------------------------------------------|"
        echo "|-----------------------------------------------------[联网]-----------------------------------------------------|"
        echo "|-------------------------------------------------[准备联网安装]-------------------------------------------------|"
        echo "|----------------------------------------------------------------------------------------------------------------|"
        /usr/bin/sleep 3
        online
    else
        echo "|----------------------------------------------------------------------------------------------------------------|"
        echo "|-------------------------------------------[未联网,无离线安装包,准备退出]---------------------------------------|"
        echo "|----------------------------------------------------------------------------------------------------------------|"
        /usr/bin/sleep 3
        exit;
    fi
}
function online(){
    wget_v=`which wget`
    wget_vv=$(echo $wget_v | grep wget)
    if [[ "$wget_vv" != "" ]]
    then
        echo "|----------------------------------------------------------------------------------------------------------------|"
        echo "|--------------------------------------`wget -V |head -n 1`---------------------------------------|"
        echo "|----------------------------------------------------------------------------------------------------------------|"
        wget http://download.redis.io/releases/redis-${onversion}.tar.gz
        installon
    else
        echo "|----------------------------------------------------------------------------------------------------------------|"
        echo "|----------------------------------------[检测到wget没有安装, 准备安装wget]---------------------------------------|"
        echo "|----------------------------------------------------------------------------------------------------------------|"
        yum install wget -y
        echo "|----------------------------------------------------------------------------------------------------------------|"
        echo "|--------------------------------------`wget -V |head -n 1`---------------------------------------|"
        echo "|----------------------------------------------------------------------------------------------------------------|"
        wget http://download.redis.io/releases/redis-${onversion}.tar.gz
        installon
    fi
}

function installon(){
    echo "|----------------------------------------------------------------------------------------------------------------|"
    echo "|-------------------------------------------------[在线安装包中]-------------------------------------------------|"
    echo "|----------------------------------------------------------------------------------------------------------------|"
    tar -zxvf redis-${onversion}.tar.gz >/dev/null 2>&1
    redis="redis-${onversion}"
    cd ${redis}/src && make >/dev/null 2>&1
    if [[ $? -ne 0 ]]; then
        echo "编译出错"
    else
        echo "|----------------------------------------------------------------------------------------------------------------|"
        echo "|-------------------------------------------------[文件编译完成]-------------------------------------------------|"
        echo "|----------------------------------------------------------------------------------------------------------------|"
        /usr/bin/sleep 3
        intend
    fi
}

function intend(){
    echo "|----------------------------------------------------------------------------------------------------------------|"
    echo "|-------------------------------------------------[开始迁移文件]-------------------------------------------------|"
    echo "|----------------------------------------------------------------------------------------------------------------|"
    cd ${installdir}
    redis="redis-${onversion}"
    cd ${redis}/src
    if [ -f "redis-server" ];then
        echo "|----------------------------------------------------------------------------------------------------------------|"
        echo "|-------------------------------------------------[准备分配数据]-------------------------------------------------|"
        echo "|----------------------------------------------------------------------------------------------------------------|"
    else
        echo "|----------------------------------------------------------------------------------------------------------------|"
        echo "|-------------------------------------------------[失败重新编译]-------------------------------------------------|"
        echo "|----------------------------------------------------------------------------------------------------------------|"
        /usr/bin/sleep 2
        make >/dev/null 2>&1
    fi
    mkdir -p ${installdir}/${cluster_name}/{logs,nodes,conf,bin}
    cp redis-cli redis-server ${installdir}/${cluster_name}/bin
    cp redis-trib.rb ${installdir}/${cluster_name}
    for((i=1;i<=${number};i++));
        do
        port=${numstaring}${i}
        confile="redis-${numstaring}${i}.conf"
        cp ../redis.conf ${installdir}/${cluster_name}/conf/${confile}
    done

    echo "|----------------------------------------------------------------------------------------------------------------|"
    echo "|-------------------------------------------------[数据迁移完成]-------------------------------------------------|"
    echo "|----------------------------------------------------------------------------------------------------------------|"
    /usr/bin/sleep 2
    echo "|----------------------------------------------------------------------------------------------------------------|"
    echo "|-------------------------------------------------[清理多余文件]-------------------------------------------------|"
    echo "|----------------------------------------------------------------------------------------------------------------|"
    #finish
    /usr/bin/sleep 2
    echo "|----------------------------------------------------------------------------------------------------------------|"
    echo "|-------------------------------------------------[配置快捷启动]-------------------------------------------------|"
    echo "|----------------------------------------------------------------------------------------------------------------|"
    service
    /usr/bin/sleep 2
    echo "|----------------------------------------------------------------------------------------------------------------|"
    echo "|-------------------------------------------------[修改配置文件]-------------------------------------------------|"
    echo "|----------------------------------------------------------------------------------------------------------------|"
    configfile
    /usr/bin/sleep 3
    echo "|****************************************************************************************************************|"
    echo "|            WW             WW EEEEEEE LL     CCCCC   OOOOOO      MM      MM     EEEEEEE                         |"
    echo "|             WW    WWWW   WW  EE      LL    CC      OO    OO    MMMM    MMMM    EE                              |"
    echo "|              WW  WW WW  WW   EEEEE   LL   CC      OO      OO  MM  MM  MM  MM   EEEEE                           |"
    echo "|               WW W   W WW    EE      LL    CC      OO    OO  MM    M M     MM  EE                              |"
    echo "|                WW     WW     EEEEEEE LLLLLL CCCCC   OOOOOO  MM     MMM      MM EEEEEEE                         |"
    echo "|****************************************************************************************************************|"
}
function finish(){
    echo
    rm -rf ${installdir}/redis-*
}
#------------------------------------------------------------------------------------------------------------------#
#|                                   service     复制多份redis.conf        conf 目录                              |#
#|                                   configfile  对整改的内容做个整合                                             |#
#|                                   background  后台运行                                                         |#
#|                                   updateport  端口                                                             |#
#|                                   logpath     日志输出目录文件          logs 目录                              |#
#|                                   colony      开启集群模式                                                     |#
#|                                   clusterconf 集群数据输出目录文件      nodes目录                              |#
#|                                   trib        创建集群 连接所有节点     redis-cluster.log                      |#
#------------------------------------------------------------------------------------------------------------------#
function service(){
    cd ${installdir}/${cluster_name}
    for((i=1;i<=${number};i++));
        do
        port=${numstaring}${i}
        confile="redis-${numstaring}${i}.conf"
        echo "./bin/redis-server conf/${confile}" >> start.sh
    done
    chmod +x start.sh
}
function configfile(){
    cd ${installdir}/${cluster_name}
    pathdir=`pwd`
    cd ${installdir}/${cluster_name}/conf
        for((i=1;i<=${number};i++));
            do
            port=${numstaring}${i}
            confile="redis-${numstaring}${i}.conf"
            #后台
            background
            #端口
            updateport
            #日志输出文件
            logpath
            #开启集群
            colony
            #集群数据文件
            clusterconf
        done
}
function background(){
    cd ${installdir}/${cluster_name}/conf
    for((i=1;i<=${number};i++));
        do
        confile="redis-${numstaring}${i}.conf"
        sed -i 's/daemonize no/daemonize yes/' ${confile}
    done 
}
function updateport(){
    cd ${installdir}/${cluster_name}/conf
    for((i=1;i<=${number};i++));
        do
        port=${numstaring}${i}
        confile="redis-${numstaring}${i}.conf"
        sed -i "s|port 6379|port ${port}|g" ${confile}
    done
}
function colony(){
    cd ${installdir}/${cluster_name}/conf
    for((i=1;i<=${number};i++));
        do
        confile="redis-${numstaring}${i}.conf"
        sed -i 's/# cluster-enabled yes/cluster-enabled yes/' ${confile}
    done
}
function logpath(){
    cd ${installdir}/${cluster_name}
    pathdir=`pwd`
    cd ${installdir}/${cluster_name}/conf
        for((i=1;i<=${number};i++));
            do
            port=${numstaring}${i}
            confile="redis-${numstaring}${i}.conf"
            logfileold=`cat "${confile}" | grep logfile | awk -F '"' '{print$2}'`
            logfile="redis-${numstaring}${i}.logs"
            logfilenew=${pathdir}/logs/${logfile}
            if [ ! $logfileold ];then
                sed -i 's/logfile ""/logfile "judgement"/' ${confile}
                logfileold=`cat "${confile}" | grep logfile | awk -F '"' '{print$2}'`
                if [ ! $logfileold ];then
                    echo
                else
                    sed -i "s|$logfileold|$logfilenew|g" ${confile}
                fi
                sed -i "s|$logfileold|$logfilenew|g" ${confile}
            else
                sed -i "s|$logfileold|$logfilenew|g" ${confile}
            fi
        done
}
function clusterconf(){
    cd ${installdir}/${cluster_name}
    pathdir=`pwd`
    cd ${installdir}/${cluster_name}/conf
    for((i=1;i<=${number};i++));
        do
        port=${numstaring}${i}
        confile="redis-${numstaring}${i}.conf"
        nodes="nodes-${numstaring}${i}.conf"
        clusternumber=`cat -n ${confile} | grep cluster-config-file | awk '{print$1}' | head -n 1`
        clusterconfnew="cluster-config-file ${pathdir}/nodes/${nodes}"
        clusterNM=`cat -n ${confile} | grep cluster-config-file | grep -v '#' | wc -l`
        if [ ${clusterNM} -ge 1 ];then
            number=`cat -n ${confile} | grep cluster-config-file | grep -v '#' | awk '{print$1}' | head -n 1`
            sed -i "${number}d" ${confile}
        else
            sed -i "${clusternumber}i ${clusterconfnew}" ${confile}
        fi
    done
}
function trib(){
    cd ${installdir}/${cluster_name}
    echo "|----------------------------------------------------------------------------------------------------------------|"
    echo "|-------------------------------------------------[启动集群进程]-------------------------------------------------|"
    echo "|----------------------------------------------------------------------------------------------------------------|"
    ./start.sh
    /usr/bin/sleep 2
    echo "|----------------------------------------------------------------------------------------------------------------|"
    echo "|-------------------------------------------------[进程  已启动]-------------------------------------------------|"
    echo "|----------------------------------------------------------------------------------------------------------------|"

    bindip=`ps aux | grep "redis" | awk '{print$12}' | grep -v "auto" | head -n ${number}`
    echo "|----------------------------------------------------------------------------------------------------------------|"
    echo "|-------------------------------------------------[安装 gem环境]-------------------------------------------------|"
    echo "|----------------------------------------------------------------------------------------------------------------|"
    /usr/bin/sleep 2
    wget https://rubygems.org/downloads/redis-3.2.0.gem
    gem install redis-*.gem
    echo "|----------------------------------------------------------------------------------------------------------------|"
    echo "|-------------------------------------------------[gem 环境已装]-------------------------------------------------|"
    echo "|----------------------------------------------------------------------------------------------------------------|"
    /usr/bin/sleep 2
    echo "|----------------------------------------------------------------------------------------------------------------|"
    echo "|-------------------------------------------------[搭建节点连接]-------------------------------------------------|"
    echo "|----------------------------------------------------------------------------------------------------------------|"
    ./redis-trib.rb create --replicas 1 ${bindip} > redis-cluster.log > /dev/null 2>&1
}
function main(){
    gem=`which gem`
    gemv=$(echo $gem | grep gem)
    if [[ $gemv != "" ]]
    then
        echo "|----------------------------------------------------------------------------------------------------------------|"
        echo "|-------------------------------------------------[gem 环境存在]-------------------------------------------------|"
        echo "|----------------------------------------------------------------------------------------------------------------|"
        checkroot
        judge
        trib
    else
        echo "|----------------------------------------------------------------------------------------------------------------|"
        echo "|-------------------------------------------------[gem 环境未装]-------------------------------------------------|"
        echo "|----------------------------------------------------------------------------------------------------------------|"
        yum install ruby rubygems -y
        wget https://rubygems.org/downloads/redis-3.2.0.gem
        gem install redis-*.gem
        /usr/bin/sleep 2
        echo "|----------------------------------------------------------------------------------------------------------------|"
        echo "|-------------------------------------------------[gem 环境已装]-------------------------------------------------|"
        echo "|----------------------------------------------------------------------------------------------------------------|"
        checkroot
        judge
        trib
    fi
}
main

 

转载于:https://www.cnblogs.com/chenglee/p/10097310.html

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,这里是一个一键部署 Redis 集群脚本的示例。首先,请确保您已经安装Redis 和 Ruby,并且已经准备好了所有要部署的节点的主机名或 IP 地址: ```bash #!/usr/bin/env ruby # 首先,定义要部署的 Redis 节点的主机名或 IP 地址 redis_nodes = ["node1", "node2", "node3"] # 安装 Redis 集群所需的 gem system "gem install redis" # 引入所需的库 require 'redis' # 连接到第一个节点 redis = Redis.new(host: redis_nodes[0]) # 创建 Redis 集群 redis.cluster("meet", *redis_nodes) # 检查集群状态 puts redis.cluster("info") ``` 使用这个脚本时,只需执行 `ruby deploy_redis_cluster.rb` 即可在所有指定的节点上部署 Redis 集群。 注意:这只是一个示例脚本,在实际生产环境中可能需要根据实际情况进行调整。此外,请确保在执行脚本时具有执行命令的权限。 ### 回答2: 一键部署Redis集群脚本可以借助开源工具Redis-trib来实现。以下是一个简单的脚本,可以实现一键部署Redis集群。 #!/bin/bash #定义Redis集群的IP和端口号 IP_LIST=("192.168.1.1" "192.168.1.2" "192.168.1.3") PORT_LIST=("7000" "7001" "7002" "7003" "7004" "7005") #创建Redis集群目录 mkdir -p /opt/redis-cluster #下载、编译和安装Redis wget http://download.redis.io/releases/redis-5.0.7.tar.gz tar -zxvf redis-5.0.7.tar.gz cd redis-5.0.7/ make && make install #配置Redis集群 cd utils/create-cluster/ ./create-cluster start for ((i=0;i<3;i++)) do ./redis-trib.rb create --replicas 1 ${IP_LIST[i]}:${PORT_LIST[i]} ${IP_LIST[i+3]}:${PORT_LIST[i+3]} done #启动Redis集群 ./create-cluster start echo "Redis集群部署完成。" 上述脚本首先定义了Redis集群的IP地址和端口号。然后,脚本创建了Redis集群的目录,并下载、编译和安装Redis。接下来,脚本调用Redis-trib工具的create-cluster命令,根据定义的IP地址和端口号创建Redis集群。 在循环中,通过调用redis-trib.rb create --replicas命令,为每个主节点指定一个从节点,并将其添加到Redis集群中。 最后,脚本调用create-cluster start命令启动Redis集群,并打印出部署完成的消息。 使用上述脚本,只需运行shell脚本就能一键部署Redis集群,简化了手动配置的步骤。 ### 回答3: 一键部署Redis集群脚本如下: #!/bin/bash # 定义Redis集群的主机IP地址 redis_node1="127.0.0.1" redis_node2="127.0.0.2" redis_node3="127.0.0.3" # 定义Redis集群的端口号 redis_port=6379 # 创建Redis集群的配置文件 echo "port $redis_port" > redis_cluster.conf echo "cluster-enabled yes" >> redis_cluster.conf echo "cluster-config-file nodes.conf" >> redis_cluster.conf echo "cluster-node-timeout 5000" >> redis_cluster.conf echo "cluster-slave-validity-factor 10" >> redis_cluster.conf # 将Redis集群配置文件拷贝到所有节点主机上 scp redis_cluster.conf $redis_node1:/etc/redis/redis.conf scp redis_cluster.conf $redis_node2:/etc/redis/redis.conf scp redis_cluster.conf $redis_node3:/etc/redis/redis.conf # 启动Redis集群的节点 ssh $redis_node1 "redis-server /etc/redis/redis.conf" ssh $redis_node2 "redis-server /etc/redis/redis.conf" ssh $redis_node3 "redis-server /etc/redis/redis.conf" # 在其中一个节点上创建Redis集群 ssh $redis_node1 "redis-cli --cluster create $redis_node1:$redis_port $redis_node2:$redis_port $redis_node3:$redis_port --cluster-replicas 0" echo "Redis集群部署成功!" 以上脚本的步骤分为以下几个部分: 1. 定义Redis集群的主机IP地址和端口号。 2. 创建Redis集群的配置文件,并添加配置项。 3. 将配置文件拷贝到所有节点主机上。 4. 启动所有节点的Redis服务。 5. 在其中一个节点上使用redis-cli命令创建Redis集群。 6. 输出部署成功的提示信息。 这个脚本可以简化Redis集群的部署过程,只需要配置好主机IP地址和端口号即可一键部署Redis集群
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值