redis-集群创建脚本
之前建好了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-集群创建脚本的更多相关文章
- redis集群创建时报错:Sorry, can't connect to node
1.redis集群创建时报错:Sorry, can't connect to node ip,端口等都配置正确的话,还需要将redis.conf文件中的密码注释掉 # requirepass 1 ...
- Redis哨兵集群创建脚本--v2
1. 基础环境 操作系统版本 CentOS Linux release 7.6.1810 (Core) Docker 版本 19.03.11, build 42e35e61f3 Redis 版本 ...
- Redis集群创建和配置
1.检查GCC是否安装,可以看看版本号 gcc -v 安装命令:yum install gcc-c++ 2.安装Ruby和Rubygems 如果有网的话,则通过yum命令进行安装,自动将关联的依赖包全 ...
- Redis集群创建报错
Redis集群环境:och163/och164/och165 在执行如下脚本时报错: ./src/redis-trib.rb create 10.1.253.163: 10.1.253.164: 10 ...
- Redis哨兵集群创建脚本--v1
基础环境 操作系统版本 CentOS Linux release 7.6.1810 (Core) Docker 版本 19.03.11, build 42e35e61f3 Redis 版本 3 ...
- redis 集群创建常见几个问题
Redis配置集群遇到问题及解决方法 配置完所有主节点后,报" ERR Invalid node address specified" 由于Redis-trib.rb 对域名或 ...
- Redis学习总结(五)--Redis集群创建
在之前我们讲到了主从,但是对于大数据量的场景下我们就需要用到集群了,让我们来了解下集群吧. 为什么需要集群 单机内存太小 redis最高可以达到10万/s 请求,如果超过该频率呢? 数据分布方式 数据 ...
- redis集群创建
先参考文章 https://www.cnblogs.com/PatrickLiu/p/8458788.html https://blog.csdn.net/fengshizty/article/det ...
- redis集群+JedisCluster+lua脚本实现分布式锁(转)
https://blog.csdn.net/qq_20597727/article/details/85235602 在这片文章中,使用Jedis clien进行lua脚本的相关操作,同时也使用一部分 ...
- redis 集群环境搭建-redis集群管理
集群架构 (1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽. (2)节点的fail是通过集群中超过半数的节点检测失效时才生效. (3)客户端与redi ...
随机推荐
- python 实现过滤出tomcat日志中含有ERROR 或Exception 的行并保存在另一个文件
遍历多个tomcat日志文件,找出含有ERROR 和Exception 的日志,并把该行日志输出到另一个文件中:(这里为了体现python模块导入的知识,所有建立了多个文件夹和模块) 项目结构: co ...
- Winform打包安装程序覆盖安装的实现
1.修改项目程序集版本号. 2.设置Version,使当前版本号大于前一个版本号. 3.RemovePreviousVersions属性设置为true. 以上三步后,生成安装程序即可实现覆盖安装. P ...
- day 77 基于form组件的注册功能
Form 表单 py文件 from django import forms #定义一个form类注册用 class RegForm (forms.Form): username =forms.Char ...
- python stdout 重定向
import sys class Buffer(object): def __init__(self): self.buffer = [] def write(self, *args, **kwarg ...
- 如何优雅的调戏XSS
作者:i春秋作家——万年死宅 前言 这篇paper,我们将学习如何优雅的调戏XSS.我们会教大家一些不常用的,但很实用的XSS姿势.我们在正式进入主题之前,先来说一下,该篇paper将涉及的内容: 正 ...
- [rejected] master -> master (fetch first)
可以输入: git push -f 可以ok了. 确实是OK了,但是不知道原理,待后来解
- Swift 里集合类型协议的关系
  Sequence A type that provides sequential, iterated access to its elements. 是最基础的协议,可以通过迭代来获取它的元素 ...
- 大白dmeo (转的)
<!doctype html><html> <head> <meta charset="utf-8"> <title>B ...
- iOS完全自学手册——[三]Objective-C语言速成,利用Objective-C创建自己的对象
1.前言 上一篇已经介绍了App Delegate.View Controller的基本概念,除此之外,分别利用storyboard和纯代码创建了第一个Xcode的工程,并对不同方式搭建项目进行了比较 ...
- Codeforces Round #555 (Div. 3) c2 d e f
c2:Increasing Subsequence (hard version) 那边小取那边,然后相等比较后面的长度 #include<bits/stdc++.h> using name ...