之前建好了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. codeforces 678C. Joty and Chocolate(容斥) 2016-10-15 21:49 122人阅读 评论(0) 收藏

    C. Joty and Chocolate time limit per test 1 second memory limit per test 256 megabytes input standar ...

  2. linux 通过md5查找重复文件

    代码如下: md5sum *|sort |uniq -w32 -D|awk -F ' ' '{print $2}' uniq 部分参数 -c #在每行前显示该行重复次数. -d #只输出重复的行. - ...

  3. 循环读取list 的几种方法?

    1.最常用的方法.循环找出该位子的list元素for(int i = 0;i < list.size(); i ++){System.out.println(list.get(i));}2.利用 ...

  4. 使用Postman验证TFS Rest API

    概述 你可能已经了解到,TFS自2015版本发布以来,开始支持通过REST API的方式提供接口服务,第三方平台可以通过通用的HTTP协议访问TFS系统,获取数据.请求编译等.REST API在原有. ...

  5. RabbitMQ 消息队列 DEMO

    1. 引用 RabbitMQ.Client.5.1.0 2. http://localhost:15672/ public class TestController : ApiController { ...

  6. 记一次IIS站点出错的解决过程

    记一次IIS站点出错的解决过程 以前一直都是人家用着系统出问题了反馈过来这边改,没想到这回就发生在自己使用的过程中 问题经过 我正在执行一个操作,保存了没有返回提示,打开浏览器控制台查看网络,请求返回 ...

  7. .NET Core 类库中读取appsettings.json

    { "Logging": { "IncludeScopes": false, "LogLevel": { "Default&quo ...

  8. C#实现FTP文件的上传、下载功能、新建目录以及文件的删除

    本来这篇博文应该在上周就完成的,可无奈,最近工作比较忙,没有时间写,所以推迟到了今天.可悲的是,今天也没有太多的时间,所以决定给大家贴出源码,不做详细的分析说明,如果有不懂的,可以给我留言,我们共同讨 ...

  9. JQuery 的一个轻量级 Guid 字符串拓展插件.

    (function ($) { function guid(g) { var arr = new Array(); //存放32位数值的数组 if (typeof (g) == "strin ...

  10. Swagger中显示注释

    Webapi中Swagger中不显示注解的解决方法 1.找见生成项目时候生成的xml文件.查看存放路劲方法: 右键项目-->点击属性-->在属性中选择“生成”就能看见xml文件存放路径: ...