之前建好了redis集群, 但没有找到集群重启的机制, 停电2次, 重新创建太麻烦, 于是写了个脚本辅助启动

redis的创建过程可以看:

http://www.cnblogs.com/wenbronk/p/6864390.html
http://www.cnblogs.com/wenbronk/p/6865914.html

然后, 直接放在父目录下就可以了

[wenbronk@localhost redis1]$ cat redis-cluster.sh
#!/bin/bash
# create by wenbronk at //
# redis集群管理脚本
PORTNUM=
PASS_WD=bd86d2ab-08e5-4ae0-87ce-06cc021336d0
REDIS_HOME=/opt/wenbronk_soft/redis/redis1
HOST1=192.168.50.202
PORT1=
PORT2=
PORT3=
PORT4=
PORT5=
PORT6=
HOSTS=($HOST1 $HOST1 $HOST1 $HOST1 $HOST1 $HOST1)
PORTS=($PORT1 $PORT2 $PORT3 $PORT4 $PORT5 $PORT6) BASE_DIR=(bin bin1 bin2 bin3 bin4 bin5)
declare -A HOST_GROUP # clean
if [ "$1" == "clean" ]
then
for direct in $REDIS_HOME/*
do
if [ -d "$direct" ]
then
echo $direct
rm -rf $direct/dump*
rm -rf $direct/nodes*
rm -rf $direct/appendonly*
sed -i '1{:a;N;'$n'!b a};$d;N;P;D' $direct/redis.conf fi
done
exit 0
fi #create
if [ "$1" == "create" ]
then
for direct in $REDIS_HOME/*
do
if [ -d "$direct" ]
then
$direct/redis-server $direct/redis.conf
PORTNUM=$((PORTNUM-1))
HOST_GROUP[$PORTNUM]=${HOSTS[$PORTNUM]}:${PORTS[$PORTNUM]}
fi
done
$REDIS_HOME/bin/redis-trib.rb create --replicas 1 ${HOST_GROUP[*]}
exit 0
fi #auth
if [ "$1" == "auth" ]
then
for direct in $REDIS_HOME/*
do
if [ -d "$direct" ];then
PORTNUM=$PORTNUM-1
$direct/redis-cli -c -h ${HOSTS[$PORTNUM]} -p ${PORTS[$PORTNUM]} config set masterauth $PASS_WD
$direct/redis-cli -c -a $PASS_WD -h ${HOSTS[$PORTNUM]} -p ${PORTS[$PORTNUM]} config set requirepass $PASS_WD
$direct/redis-cli -c -a $PASS_WD -h ${HOSTS[$PORTNUM]} -p ${PORTS[$PORTNUM]} auth $PASS_WD
$direct/redis-cli -c -a $PASS_WD -h ${HOSTS[$PORTNUM]} -p ${PORTS[$PORTNUM]} config rewrite
# $direct/redis-cli -c -h ${HOSTS[$PORTNUM]} -p ${PORTS[$PORTNUM]} exit
fi
done
exit 0
fi #stop
if [ "$1" == "stop" ]
then
pkill -9 redis
fi
exit 0 #help
if [ "$1" == "help" ]
then
echo "stop|clean|create|auth"
fi
exit 0

由于没有找到和shell交互的方式, 创建的时候需要输入一个yes, 所以吧集群创建和密码设置分开了

执行时, stop->clean->create->auth 即可实现

然后集群的统一启动脚本

开始想用spawn, 但找了半天没找到怎么循环使用, 所以需要在每个机器侠有个start-this.sh用于本机的redis管理

#!/bin/bash
# create by wenbronk at //
# redis 集群管理脚本 PORTNUM=
PASS_WD=bd86d2ab-08e5-4ae0-87ce-06cc021336d0
REDIS_HOME=/opt/redis
HOST1=redis-
HOST2=redis-
HOST3=redis-
PORT1=
PORT2= HOSTS=($HOST1 $HOST1 $HOST2 $HOST2 $HOST3 $HOST3)
PORTS=($PORT1 $PORT2 $PORT1 $PORT2 $PORT1 $PORT2)
BASEDIR=(bin- bin-)
declare -A HOSTGROUP case "$1" in #clean
clean)
for (( i=; i<${#HOSTS[@]}; i=i+))
do
ssh root@${HOSTS[$i]} "sh $REDIS_HOME/start-this.sh clean"
done
exit
;; #create
create)
for (( i=; i<${#HOSTS[@]}; i=i+))
do
ssh root@${HOSTS[$i]} "sh $REDIS_HOME/start-this.sh create"
HOSTGROUP[$i]=${HOSTS[$i]}:${PORTS[$i]}
i=$((i+))
HOSTGROUP[$i]=${HOSTS[$i]}:${PORTS[$i]}
done
$REDIS_HOME/bin/redis-trib.rb create --replicas ${HOSTGROUP[*]} ;; #auth
auth)
for (( i=; i<${#HOSTS[@]}; i=i+))
do
echo connect to ${HOST[$i]} at ${PORTS[$i]} and change passwd
$direct/redis-cli -c -h ${HOSTS[$i]} -p ${PORTS[$i]} config set masterauth $PASS_WD
$direct/redis-cli -c -a $PASS_WD -h ${HOSTS[$i]} -p ${PORTS[$i]} config set requirepass $PASS_WD
$direct/redis-cli -c -a $PASS_WD -h ${HOSTS[$i]} -p ${PORTS[$i]} auth $PASS_WD
$direct/redis-cli -c -a $PASS_WD -h ${HOSTS[$i]} -p ${PORTS[$i]} config rewrite done exit
;; #other
*)
echo "unsupport params!! please input stop|clean|create|auth as params_one"
exit
esac

start-this.sh

#!/bin/bash
# create by wenbronk at //
# redis cluster clean & create
REDIS_HOME=/opt/redis
HOSTIP=redis- case "$1" in
clean)
echo "connect to $HOSTIP"
for direct in $REDIS_HOME/*
do
if [ -d "$direct" ];then
rm -rf $direct/dump*
echo "rm $direct/dump*"
rm -rf $direct/nodes*
echo "rm $direct/nodes*"
rm -rf $direct/appendonly*
echo "rm $direct/appendonly*"
sed -i '1{:a;N;'$n'!b a};$d;N;P;D' $direct/redis.conf
echo "sed last 2 line at $direct/redis.conf"
fi
done
echo "logout from $HOSTIP"
exit 0
;; start)
echo "connect to $HOSTSIP"
for direct in $REDIS_HOME/*
do
if [ -d "$direct" ];then
echo "start redis $HOSTIP"
$REDIS_HOME/redis-server.sh $REDIS_HOME/redis.conf
fi
done
echo "logout from $HOSTSIP"
exit 0
;; esac

ps: 本脚本只用于redis集群的统一启动, 不用于搭建, 需要有预先搭建好的环境, 关于redis集群的搭建, 可以参考另一个博客:

http://www.cnblogs.com/wenbronk/p/6864390.html

redis-集群创建脚本的更多相关文章

  1. redis集群创建时报错:Sorry, can't connect to node

    1.redis集群创建时报错:Sorry, can't connect to node ip,端口等都配置正确的话,还需要将redis.conf文件中的密码注释掉    # requirepass 1 ...

  2. Redis哨兵集群创建脚本--v2

    1. 基础环境 操作系统版本  CentOS Linux release 7.6.1810 (Core) Docker 版本  19.03.11, build 42e35e61f3 Redis  版本 ...

  3. Redis集群创建和配置

    1.检查GCC是否安装,可以看看版本号 gcc -v 安装命令:yum install gcc-c++ 2.安装Ruby和Rubygems 如果有网的话,则通过yum命令进行安装,自动将关联的依赖包全 ...

  4. Redis集群创建报错

    Redis集群环境:och163/och164/och165 在执行如下脚本时报错: ./src/redis-trib.rb create 10.1.253.163: 10.1.253.164: 10 ...

  5. Redis哨兵集群创建脚本--v1

    基础环境 操作系统版本  CentOS Linux release 7.6.1810 (Core) Docker 版本  19.03.11, build 42e35e61f3 Redis  版本  3 ...

  6. redis 集群创建常见几个问题

    Redis配置集群遇到问题及解决方法   配置完所有主节点后,报" ERR Invalid node address specified" 由于Redis-trib.rb 对域名或 ...

  7. Redis学习总结(五)--Redis集群创建

    在之前我们讲到了主从,但是对于大数据量的场景下我们就需要用到集群了,让我们来了解下集群吧. 为什么需要集群 单机内存太小 redis最高可以达到10万/s 请求,如果超过该频率呢? 数据分布方式 数据 ...

  8. redis集群创建

    先参考文章 https://www.cnblogs.com/PatrickLiu/p/8458788.html https://blog.csdn.net/fengshizty/article/det ...

  9. redis集群+JedisCluster+lua脚本实现分布式锁(转)

    https://blog.csdn.net/qq_20597727/article/details/85235602 在这片文章中,使用Jedis clien进行lua脚本的相关操作,同时也使用一部分 ...

  10. redis 集群环境搭建-redis集群管理

    集群架构 (1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽. (2)节点的fail是通过集群中超过半数的节点检测失效时才生效. (3)客户端与redi ...

随机推荐

  1. float 为什么不能用== ,或者大于等于,或者小于等于

    本文尝试着将以下内容做一个浅显的解释,主要包括浮点数为什么是不精确的,浮点数为什么不能用==和!=直接比较,以及浮点数的比较方法等几个方面.如果那个地方说的不对还请各位看官不吝赐教!欢迎大家评论区讨论 ...

  2. shell 脚本 抽取指定数量的随机学生

    #!/bin/bash # #!/bin/bash # read -p '输入数' c #指定抽取的学生人数 jw=('王浩' '谢云生' '黄科杨' '何星宇' '张宸兵' '邓培林' '刘桃' ' ...

  3. java细节问题

    保留两位小数:1.234, 1.23, 1.2, 1.0, 1. package test; import java.math.BigDecimal; import java.text.Decimal ...

  4. Eclipse代码提示功能设置

    1.        解决实例化时自动补全不必要的单词问题 2.        以MyEclipse 6.5重新配图 鉴 于网上的批评之声甚大,我只想说明我的想法:这样的增强代码提示,最终是用来辅助我们 ...

  5. netcore 发布 到 windows server IIS 可能会报错

    当发布netcore 到windows server iis可能会报这种错:An error occurred while starting the application 不要慌,这个时候可能是你用 ...

  6. 【转】Bri's改装笔记

    网上关于三菱蓝瑟的改装方案的文章不少,但在以不换发动机为前提的理性改装确是这两篇和东南汽车俱乐部科仔的那篇<4G18的低成本NA玩法>最具参考价值. 小排量NA车的乐趣不在于跟人比直线加速 ...

  7. OSLab课堂作业2

      日期:2019/3/23 内容: 实现内容 要求 mysys.c 实现函数mysys,用于执行一个系统命令. mysys的功能与系统函数system相同,要求用进程管理相关系统调用自己实现一遍 使 ...

  8. JSOI2010 满汉全席

    题目链接:戳我 一个2-SAT的模板题. (什么是2-SAT呢?就是解决一个情况两种决策的问题,我们根据"选了其中一个点A就必须选一个点B的原则,从A向B连边.最后判断如果在一个强连通分量里 ...

  9. Java基础学习篇---------static

    一.static的使用 1.使用static定义的属性往往通过类名直接调用,它的属性(方法)不属于某一个的对象的.所以对象没有创建之前就可以对static的属性的调用,方法亦如此. 2.static ...

  10. C++派生类与基类对象赋值情况

    一 .普通赋值 (同名隐藏) 子类对象调用和父类相同的函数名,该父类的函数名会被隐藏,只会调用子类的函数. Class A { public: void show(); void show(int); ...