之前建好了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. oracle中row_number() over()分析函数用法

    row_number()over(partition by col1 order by col2)表示根据col1分组,在分组内部根据col2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内 ...

  2. nodejs express hi-cms

    今天看一下hi-cm是怎么写的,理解一下流程,看一些亮点 它使用express3.x写的 1.app.set, app.get app.set('port', 3000); app.get('port ...

  3. hdu 3664 Permutation Counting(水DP)

    Permutation Counting Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth ...

  4. 软件工程 wc.exe 代码统计作业

    软件工程 wc.exe 代码统计作业分享 1. Github 项目地址 https://github.com/EdwardLiu-Aurora/WordCount 更好地阅读本文,可点击这里 基本要求 ...

  5. Redis Sentinel基本介绍(翻译以及总结)

    目录 Redis Sentinel介绍 分布式的Redis Sentinel 快速开始 获取Sentinel 启动Sentinel 部署Sentinel的基本要求 配置Sentinel 其他的Sent ...

  6. android应用搬家的实现

    android手机上的应用搬家功能,具体的介绍和原理参考: 系统目录及应用搬家的研究 应用搬家的实现 这里主要是作为一个补充,因为上面两篇文章虽然讲的挺好的,但是给出的例子不能直接运行,还是需要一些准 ...

  7. 修改jenkins启动的默认用户

    # 背景 通过yum命令安装的jenkins,通过service jenkins去启动jenkins的话,默认的用户是jenkins,但jenkins这个用户是无法通过su切换过去的 ,在某些环节可能 ...

  8. Python:Selenium Chrome无弹窗+property/attribute/text

    我们在用Selenium写自动化程序时候,并不希望程序在实际运行过程中一直弹Chrome窗口,这个时候就需要让Chrome默默打开,自动读取数据,然后默默关闭掉就好. 以下是让chrome用无界面形式 ...

  9. C# WPF 登录多线程中 “调用线程无法访问对象,因为另一个线程拥有该对象“

    造成这个错误的原因很多,以下是我遇到的 我的思路,开启一个线程A登录.因为服务器响应登录成功需要在主线程做一些操作,我这边需要用到主线程的窗口对象,我把窗口对象传到线程 A,直接用实例方法会有这个错误 ...

  10. 关于EF中使用Migrations的一些小提示

    在运行正常的情况下,EF的数据迁移功能非常强大.但是当它出现状况时,试图找到问题发生的原因时通常都很让人郁闷(没法调试,提示信息很模糊等等原因).我花了很多时间来确保在我的迁移能工作正常,然后我整理了 ...