1. 基础环境

操作系统版本  CentOS Linux release 7.6.1810 (Core)

Docker 版本  19.03.11, build 42e35e61f3

Redis  版本  3.2.3-alpine

2. 效果展示

  

3. 脚本参数解释

cmd                     定义redis容器启动命令
sentinel_cmd            定义sentinel容器启动命令
image                  容器启动镜像
redis_conf             redis容器配置文件路径
sentinel_conf           sentinel容器配置文件路径
redis_quota             redis容器cpu、内存配额
sentinel_quota        sentinel容器cpu、内存配额
base_dir                  脚本运行的家目录
base_conf_dir         redis配置文件目录
record_dir               集群配置记录目录
log_dir                    脚本日志目录
bak_dir                   备份目录
ipmark                     可用IP记录文件
ipmark_assigned     已用IP记录文件
op_cmd                   脚本命令参数
envv                        脚本环境参数
cluster_name          脚本集群名参数
cluster_port            脚本集群端口参数

 4. 脚本运行说明

  a. 脚本中,包含了ceph rdb 的创建、删除功能,如不需要,可以注释

   b. docker网络,使用macvlan,在执行脚本的初始化时,需要针对本地的实际情况,进行修改

  c. redis 配置文件,可以在 init_cluster 中修改

   d. 创建集群前,先执行初始化命令

   e. 目录结构如下图:

      

5. 脚本内容 (内容冗余,未做优化)

#!/bin/bash
#Author:Jixson
#Date: 2020-07-07
cmd="/usr/local/bin/redis-server /usr/local/etc/redis/redis.conf"
sentinel_cmd="/usr/local/bin/redis-sentinel /usr/local/etc/redis/sentinel.conf"
image="redis:latest"
redis_conf="/usr/local/etc/redis/redis.conf"
sentinel_conf="/usr/local/etc/redis/sentinel.conf"
redis_quota="-c2 -m 4g"
sentinel_quota="-c2 -m 1g"
base_dir="/opt/redis"
base_conf_dir="${base_dir}/conf"
record_dir="${base_dir}/record"
log_dir="${base_dir}/logs"
bak_dir="${base_dir}/backup"
ipmark="${base_dir}/ipmark"
ipmark_assigned="${base_dir}/ipmark_assigned"
op_cmd=$1
envv=$2
cluster_name=$3
cluster_port=$4 Color_Text()
{
echo -e " \e[0;$2m$1\e[0m"
}
Echo_Yellow()
{
echo "$(Color_Text "$1" "33")"
}
Echo_Red()
{
echo "$(Color_Text "$1" "31")"
}
Echo_Green()
{
echo "$(Color_Text "$1" "32")"
}
write_log()
{
mkdir -p ${log_dir}
local log_type=$1
local log_msg=$2
local log_name="${log_dir}/redis-shell.log"
echo "`date +"%Y-%m-%d %H:%M:%S"` $log_type $log_msg " >> $log_name
}
init_cluster()
{
if [ -d ${base_dir} ];then
mv ${base_dir} ${base_dir}.bak
write_log info "已备份 原${base_dir} 为 ${base_dir}.bak "
Echo_Yellow " 已备份 原${base_dir} 为 ${base_dir}.bak ."
fi
mkdir -p ${base_conf_dir}
write_log info "${base_conf_dir} 已创建 ."
Echo_Yellow " ${base_conf_dir} 已创建 ."
mkdir -p ${record_dir}
write_log info "${record_dir} 已创建 ."
Echo_Yellow " ${record_dir} 已创建 ."
mkdir -p ${log_dir}
write_log info "${log_dir} 已创建 ."
Echo_Yellow " ${log_dir} 已创建 ."
mkdir -p ${bak_dir}
write_log info "${bak_dir} 已创建 ."
Echo_Yellow " ${bak_dir} 已创建 ."
cat << EOF > ${base_conf_dir}/sentinel.conf
port \$cluster_port
daemonize no
logfile "/data/sentinel.log"
protected-mode no
sentinel monitor \$cluster_name redis-master.xxx.com 6379 2
sentinel down-after-milliseconds \$cluster_name 15000
EOF
write_log info "Sentinel 配置文件已经初始化 ."
Echo_Yellow " Sentinel 配置文件已经初始化 ."
cat << EOF > ${base_conf_dir}/redis-master.conf
bind 0.0.0.0
port 6379
pidfile "/data/redis_6379.pid"
logfile "/data/redis_6379.log"
dir "/data"
dbfilename "redis_6379.rdb"
maxmemory 1gb
appendfilename "redis_6379.aof"
protected-mode yes
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize no
supervised no
loglevel notice
databases 16
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync yes
repl-diskless-sync-delay 5
repl-ping-slave-period 10
repl-timeout 60
repl-disable-tcp-nodelay no
repl-backlog-size 150mb
repl-backlog-ttl 3600
slave-priority 100
maxclients 10000
maxmemory-policy allkeys-lru
appendonly no
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes
EOF
write_log info "Redis-master 配置文件已经初始化 ."
Echo_Yellow " Redis-master 配置文件已经初始化"
\cp ${base_conf_dir}/redis-master.conf ${base_conf_dir}/redis-slave.conf
echo "slaveof redis-master.xxx.com 6379" >> ${base_conf_dir}/redis-slave.conf
write_log info "Redis-slave 配置文件已经初始化 ."
Echo_Yellow " Redis-slave 配置文件已经初始化"
}
init_network()
{
docker network create -d macvlan --subnet=10.6.88.0/24 --gateway=10.6.88.1 --ip-range=10.6.88.64/27 -o parent=eth0 sentinel-net
for i in $(seq 64 95)
do
echo "10.6.88.$i" >> $ipmark
done
}
envv_true_check()
{
local envv_dir="${record_dir}/${envv}"
if [ -d ${envv_dir} ];then
Echo_Red " 哨兵集群 ${envv} 已存在 ."
exit 1
fi
}
envv_false_check()
{
local envv_dir="${record_dir}/${envv}"
if [ -d ${envv_dir} ];then
echo '' > /dev/null
else
Echo_Red " 哨兵集群 ${envv} 不存在 ."
exit 1
fi
}
create_rbd()
{
base_data_dir="${base_dir}/cluster-data/${envv}"
mkdir -p ${base_data_dir}/data_sen01
sen01=${base_data_dir}/data_sen01
write_log info "ceph data directory ${sen01} 已创建 ."
Echo_Yellow " ceph data directory ${sen01} 已创建 ."
mkdir -p ${base_data_dir}/data_sen02
sen02=${base_data_dir}/data_sen02
write_log info "ceph data directory ${sen02} 已创建 ."
Echo_Yellow " ceph data directory ${sen02} 已创建 ."
mkdir -p ${base_data_dir}/data_sen03
sen03=${base_data_dir}/data_sen03
write_log info "ceph data directory ${sen03} 已创建 ."
Echo_Yellow " ceph data directory ${sen03} 已创建 ."
mkdir -p ${base_data_dir}/data_master
master=${base_data_dir}/data_master
write_log info "ceph data directory ${master} 已创建 ."
Echo_Yellow " ceph data directory ${master} 已创建 ."
mkdir -p ${base_data_dir}/data_slave
slave=${base_data_dir}/data_slave
write_log info "ceph data directory ${slave} 已创建 ."
Echo_Yellow " ceph data directory ${slave} 已创建 ." rbd create ${envv}-sentinel01 --size 1G --image-feature layering -p rbd
write_log info "ceph image ${envv}-sentinel01 已创建 ."
Echo_Yellow " ceph image ${envv}-sentinel01 已创建 ."
rbd create ${envv}-sentinel02 --size 1G --image-feature layering -p rbd
write_log info "ceph image ${envv}-sentinel02 已创建 ."
Echo_Yellow " ceph image ${envv}-sentinel02 已创建 ."
rbd create ${envv}-sentinel03 --size 1G --image-feature layering -p rbd
write_log info "ceph image ${envv}-sentinel03 已创建 ."
Echo_Yellow " ceph image ${envv}-sentinel03 已创建 ."
rbd create ${envv}-redismaster --size 50G --image-feature layering -p rbd
write_log info "ceph image ${envv}-redismaster 已创建 ."
Echo_Yellow " ceph image ${envv}-redismaster 已创建 ."
rbd create ${envv}-redisslave --size 50G --image-feature layering -p rbd
write_log info "ceph image ${envv}-redisslave 已创建 ."
Echo_Yellow " ceph image ${envv}-redisslave 已创建 ." data_sen01=$(rbd map ${envv}-sentinel01 --name client.admin -m 10.6.88.14,10.6.88.15,10.6.88.16)
write_log info "ceph image map ${envv}-sentinel01 ."
Echo_Yellow " ceph image map ${envv}-sentinel01 ."
data_sen02=$(rbd map ${envv}-sentinel02 --name client.admin -m 10.6.88.14,10.6.88.15,10.6.88.16)
write_log info "ceph image map ${envv}-sentinel02 ."
Echo_Yellow " ceph image map ${envv}-sentinel02 ."
data_sen03=$(rbd map ${envv}-sentinel03 --name client.admin -m 10.6.88.14,10.6.88.15,10.6.88.16)
write_log info "ceph image map ${envv}-sentinel03 ."
Echo_Yellow " ceph image map ${envv}-sentinel03 ."
data_master=$(rbd map ${envv}-redismaster --name client.admin -m 10.6.88.14,10.6.88.15,10.6.88.16)
write_log info "ceph image map ${envv}-redismaster ."
Echo_Yellow " ceph image map ${envv}-redismaster ."
data_slave=$(rbd map ${envv}-redisslave --name client.admin -m 10.6.88.14,10.6.88.15,10.6.88.16)
write_log info "ceph image map ${envv}-redisslave ."
Echo_Yellow " ceph image map ${envv}-redisslave ." mkfs.xfs $data_sen01
write_log info "ceph rbd ${data_sen01} 已格式化 xfs."
Echo_Yellow " ceph rbd ${data_sen01} 已格式化 xfs."
mkfs.xfs $data_sen02
write_log info "ceph rbd ${data_sen02} 已格式化 xfs."
Echo_Yellow " ceph rbd ${data_sen02} 已格式化 xfs."
mkfs.xfs $data_sen03
write_log info "ceph rbd ${data_sen03} 已格式化 xfs."
Echo_Yellow " ceph rbd ${data_sen03} 已格式化 xfs."
mkfs.xfs $data_master
write_log info "ceph rbd ${data_master} 已格式化 xfs."
Echo_Yellow " ceph rbd ${data_master} 已格式化 xfs."
mkfs.xfs $data_slave
write_log info "ceph rbd ${data_slave} 已格式化 xfs."
Echo_Yellow " ceph rbd ${data_slave} 已格式化 xfs." mount -o discard $data_sen01 ${sen01}
write_log info "ceph rbd ${data_sen01} 已挂载 ."
Echo_Yellow " ceph rbd ${data_sen01} 已挂载 ."
mount -o discard $data_sen02 ${sen02}
write_log info "ceph rbd ${data_sen02} 已挂载 ."
Echo_Yellow " ceph rbd ${data_sen02} 已挂载 ."
mount -o discard $data_sen03 ${sen03}
write_log info "ceph rbd ${data_sen03} 已挂载 ."
Echo_Yellow " ceph rbd ${data_sen03} 已挂载 ."
mount -o discard $data_master ${master}
write_log info "ceph rbd ${data_master} 已挂载 ."
Echo_Yellow " ceph rbd ${data_master} 已挂载 ."
mount -o discard $data_slave ${slave}
write_log info "ceph rbd ${data_slave} 已挂载 ."
Echo_Yellow " ceph rbd ${data_slave} 已挂载 ."
}
delete_rbd()
{
base_data_dir="${base_dir}/cluster-data/${envv}"
sen01="${base_data_dir}/data_sen01"
sen02="${base_data_dir}/data_sen02"
sen03="${base_data_dir}/data_sen03"
master="${base_data_dir}/data_master"
slave="${base_data_dir}/data_slave" rbd_id01=$(mount | grep "${sen01}" | awk '{print $1}')
rbd_id02=$(mount | grep "${sen02}" | awk '{print $1}')
rbd_id03=$(mount | grep "${sen03}" | awk '{print $1}')
rbd_id04=$(mount | grep "${master}" | awk '{print $1}')
rbd_id05=$(mount | grep "${slave}" | awk '{print $1}') umount $sen01 $sen02 $sen03 $master $slave
write_log warn "ceph data directory $sen01 $sen02 $sen03 $master $slave 已卸载 ."
Echo_Yellow " ceph data directory $sen01 $sen02 $sen03 $master $slave 已卸载 ." if [ -d ${base_data_dir} ];then
rm -rf ${base_data_dir}
fi
write_log warn "ceph data directory ${base_data_dir} 已删除 ."
Echo_Yellow " ceph data directory ${base_data_dir} 已删除 ." rbd unmap $rbd_id01
write_log warn "ceph rbd unmap ${rbd_id01} ."
Echo_Yellow " ceph rbd unmap ${rbd_id01} ."
rbd rm ${envv}-sentinel01
write_log warn "ceph rbd image delete ${envv}-sentinel01 ."
Echo_Yellow " ceph rbd image delete ${envv}-sentinel01 ." rbd unmap $rbd_id02
write_log warn "ceph rbd unmap ${rbd_id02} ."
Echo_Yellow " ceph rbd unmap ${rbd_id02} ."
rbd rm ${envv}-sentinel02
write_log warn "ceph rbd image delete ${envv}-sentinel02 ."
Echo_Yellow " ceph rbd image delete ${envv}-sentinel02 ." rbd unmap $rbd_id03
write_log warn "ceph rbd unmap ${rbd_id03} ."
Echo_Yellow " ceph rbd unmap ${rbd_id03} ."
rbd rm ${envv}-sentinel03
write_log warn "ceph rbd image delete ${envv}-sentinel03 ."
Echo_Yellow " ceph rbd image delete ${envv}-sentinel03 ." rbd unmap $rbd_id04
write_log warn "ceph rbd unmap ${rbd_id04} ."
Echo_Yellow " ceph rbd unmap ${rbd_id04} ."
rbd rm ${envv}-redismaster
write_log warn "ceph rbd image delete ${envv}-redismaster ."
Echo_Yellow " ceph rbd image delete ${envv}-redismaster ." rbd unmap $rbd_id05
write_log warn "ceph rbd unmap ${rbd_id05} ."
Echo_Yellow " ceph rbd unmap ${rbd_id05} ."
rbd rm ${envv}-redisslave
write_log warn "ceph rbd image delete ${envv}-redisslave ."
Echo_Yellow " ceph rbd image delete ${envv}-redisslave ." }
create_usage()
{
Echo_Yellow " Usage : "
Echo_Red " 集群创建"
Echo_Yellow " $0 create [environment] [cluster_name] [cluster_port]"
Echo_Yellow " [environment] 集群所属环境标识"
Echo_Yellow " [cluster_name] 哨兵集群 monitor name"
Echo_Yellow " [cluster_port] 哨兵集群对外端口"
Echo_Yellow " E.g.: $0 create leo bytest 27001"
}
delete_usage()
{
Echo_Yellow " Usage : "
Echo_Red " 集群删除"
Echo_Yellow " $0 delete [environment]"
Echo_Yellow " E.g.: $0 delete leo"
}
stop_usage()
{
Echo_Yellow " Usage : "
Echo_Red " 停止集群"
Echo_Yellow " $0 stop [environment]"
Echo_Yellow " E.g.: $0 stop leo"
}
start_usage()
{
Echo_Yellow " Usage : "
Echo_Red " 启动集群"
Echo_Yellow " $0 start [environment]"
Echo_Yellow " E.g.: $0 start leo"
}
restart_usage()
{
Echo_Yellow " Usage : "
Echo_Red " 重启集群"
Echo_Yellow " $0 restart [environment]"
Echo_Yellow " E.g.: $0 restart leo"
}
backup_usage()
{
Echo_Yellow " Usage : "
Echo_Red " 备份集群"
Echo_Yellow " $0 backup [environment]"
Echo_Yellow " E.g.: $0 backup leo"
}
show_usage()
{
Echo_Yellow " Usage : "
Echo_Red " 显示集群运行信息"
Echo_Yellow " $0 show [environment]"
Echo_Yellow " E.g.: $0 show leo"
}
ls_usage()
{
Echo_Yellow " Usage : "
Echo_Red " 显示已创建集群"
Echo_Yellow " $0 ls"
Echo_Yellow " E.g.: $0 ls"
}
install_usage()
{
Echo_Yellow " Usage : "
Echo_Red " 脚本初始化"
Echo_Yellow " $0 \"install --yes --yes\""
Echo_Yellow " E.g.: $0 \"install --yes --yes\""
}
create_cluster()
{
envv_true_check
mkdir -p $record_dir/${envv}
#Get IP address
master_ip=$(cat $ipmark | head -1)
sed -i "/^${master_ip}/d" $ipmark
echo "${master_ip} assigned $envv redis-master" >> $ipmark_assigned
write_log info "已分配 哨兵集群 ${envv} Redis-master IP: ${master_ip}"
Echo_Yellow " 已分配 哨兵集群 ${envv} Redis-master IP: ${master_ip}" slave_ip=$(cat $ipmark | head -1)
sed -i "/^${slave_ip}/d" $ipmark
echo "${slave_ip} assigned $envv redis-slave" >> $ipmark_assigned
write_log info "已分配 哨兵集群 ${envv} redis-slave IP: ${slave_ip}"
Echo_Yellow " 已分配 哨兵集群 ${envv} redis-slave IP: ${slave_ip}" sentinel_ip01=$(cat $ipmark | head -1)
sed -i "/^${sentinel_ip01}/d" $ipmark
echo "${sentinel_ip01} assigned $envv sentinel01" >> $ipmark_assigned
write_log info "已分配 哨兵集群 ${envv} Sentinel01 IP: ${sentinel_ip01}"
Echo_Yellow " 已分配 哨兵集群 ${envv} Sentinel01 IP: ${sentinel_ip01}" sentinel_ip02=$(cat $ipmark | head -1)
sed -i "/^${sentinel_ip02}/d" $ipmark
echo "${sentinel_ip02} assigned $envv sentinel02" >> $ipmark_assigned
write_log info "已分配 哨兵集群 ${envv} Sentinel02 IP: ${sentinel_ip02}"
Echo_Yellow " 已分配 哨兵集群 ${envv} Sentinel02 IP: ${sentinel_ip02}" sentinel_ip03=$(cat $ipmark | head -1)
sed -i "/^${sentinel_ip03}/d" $ipmark
echo "${sentinel_ip03} assigned $envv sentinel03" >> $ipmark_assigned
write_log info "已分配 哨兵集群 ${envv} Sentinel03 IP: ${sentinel_ip03}"
Echo_Yellow " 已分配 哨兵集群 ${envv} Sentinel03 IP: ${sentinel_ip03}"
#ceph create rbd
create_rbd
mountsen01="-v ${sen01}:/data"
mountsen02="-v ${sen02}:/data"
mountsen03="-v ${sen03}:/data"
mountmaster="-v ${master}:/data"
mountslave="-v ${slave}:/data"
#声明主机
hn1="--add-host=redis-master.xxx.com:${master_ip}"
hn2="--add-host=redis-slave.xxx.com:${slave_ip}"
hn3="--add-host=sentinel01.xxx.com:${sentinel_ip01}"
hn4="--add-host=sentinel02.xxx.com:${sentinel_ip02}"
hn5="--add-host=sentinel03.xxx.com:${sentinel_ip03}"
hosts="$hn1 $hn2 $hn3 $hn4 $hn5" #master conf
\cp -f "${base_conf_dir}/redis-master.conf" "${record_dir}/${envv}/redis-master.conf"
master_conf="${record_dir}/${envv}/redis-master.conf"
write_log info "已创建 哨兵集群 ${envv} Redis-master 配置文件 ${master_conf}"
Echo_Yellow " 已创建 哨兵集群 ${envv} Redis-master 配置文件 ${master_conf}"
masterconf="-v ${master_conf}:${redis_conf}" #slave conf
\cp -f "${base_conf_dir}/redis-slave.conf" "${record_dir}/${envv}/redis-slave.conf"
slave_conf="${record_dir}/${envv}/redis-slave.conf"
write_log info "已创建 哨兵集群 ${envv} Redis-slave 配置文件 ${slave_conf}"
Echo_Yellow " 已创建 哨兵集群 ${envv} Redis-slave 配置文件 ${slave_conf}"
slaveconf="-v ${slave_conf}:${redis_conf}" #sentinel conf
\cp -f "${base_conf_dir}/sentinel.conf" "${record_dir}/${envv}/sentinel01.conf"
sentinel01_conf="${record_dir}/${envv}/sentinel01.conf"
sed -i 's/\$cluster_name/'${cluster_name}'/g' ${sentinel01_conf}
sed -i 's/\$cluster_port/'${cluster_port}'/g' ${sentinel01_conf}
write_log info "已创建 哨兵集群 ${envv} Sentinel01 配置文件 ${sentinel01_conf}"
Echo_Yellow " 已创建 哨兵集群 ${envv} Sentinel01 配置文件 ${sentinel01_conf}"
sentinel01conf="-v ${sentinel01_conf}:${sentinel_conf}" \cp -f "${base_conf_dir}/sentinel.conf" "${record_dir}/${envv}/sentinel02.conf"
sentinel02_conf="${record_dir}/${envv}/sentinel02.conf"
sed -i 's/\$cluster_name/'${cluster_name}'/g' ${sentinel02_conf}
sed -i 's/\$cluster_port/'${cluster_port}'/g' ${sentinel02_conf}
write_log info "已创建 哨兵集群 ${envv} Sentinel02 配置文件 ${sentinel02_conf}"
Echo_Yellow " 已创建 哨兵集群 ${envv} Sentinel02 配置文件 ${sentinel02_conf}"
sentinel02conf="-v ${sentinel02_conf}:${sentinel_conf}" \cp -f "${base_conf_dir}/sentinel.conf" "${record_dir}/${envv}/sentinel03.conf"
sentinel03_conf="${record_dir}/${envv}/sentinel03.conf"
sed -i 's/\$cluster_name/'${cluster_name}'/g' ${sentinel03_conf}
sed -i 's/\$cluster_port/'${cluster_port}'/g' ${sentinel03_conf}
write_log info "已创建 哨兵集群 ${envv} Sentinel03 配置文件 ${sentinel03_conf}"
Echo_Yellow " 已创建 哨兵集群 ${envv} Sentinel03 配置文件 ${sentinel03_conf}"
sentinel03conf="-v ${sentinel03_conf}:${sentinel_conf}" #run redis
docker run -d --network sentinel-net --ip=$master_ip $redis_quota $hosts $mountmaster --name ${envv}-redis-master ${masterconf} ${image} ${cmd}
write_log info "已创建 哨兵集群 ${envv} Redis-master 节点"
Echo_Yellow " 已创建 哨兵集群 ${envv} Redis-master 节点"
write_log info "创建命令: docker run -d --network sentinel-net --ip=$master_ip $redis_quota $hosts $mountmaster --name ${envv}-redis-master ${masterconf} ${image} ${cmd}" docker run -d --network sentinel-net --ip=$slave_ip $redis_quota $hosts $mountslave --name ${envv}-redis-slave ${slaveconf} ${image} ${cmd}
write_log info "已创建 哨兵集群 ${envv} Redis-slave 节点"
Echo_Yellow " 已创建 哨兵集群 ${envv} Redis-slave 节点"
write_log info "创建命令: docker run -d --network sentinel-net --ip=$slave_ip $redis_quota $hosts $mountslave --name ${envv}-redis-slave ${slaveconf} ${image} ${cmd}"
#run sentinel
docker run -d --network sentinel-net --ip=$sentinel_ip01 $sentinel_quota $hosts $mountsen01 --name ${envv}-sentinel01 ${sentinel01conf} ${image} ${sentinel_cmd}
write_log info "已创建 哨兵集群 ${envv} Sentinel01 节点"
Echo_Yellow " 已创建 哨兵集群 ${envv} Sentinel01 节点"
write_log info "创建命令: docker run -d --network sentinel-net --ip=$sentinel_ip01 $sentinel_quota $hosts $mountsen01 --name ${envv}-sentinel01 ${sentinel01conf} ${image} ${sentinel_cmd}" docker run -d --network sentinel-net --ip=$sentinel_ip02 $sentinel_quota $hosts $mountsen02 --name ${envv}-sentinel02 ${sentinel02conf} ${image} ${sentinel_cmd}
write_log info "已创建 哨兵集群 ${envv} Sentinel02 节点"
Echo_Yellow " 已创建 哨兵集群 ${envv} Sentinel02 节点"
write_log info "创建命令: docker run -d --network sentinel-net --ip=$sentinel_ip02 $sentinel_quota $hosts $mountsen02 --name ${envv}-sentinel02 ${sentinel02conf} ${image} ${sentinel_cmd}" docker run -d --network sentinel-net --ip=$sentinel_ip03 $sentinel_quota $hosts $mountsen03 --name ${envv}-sentinel03 ${sentinel03conf} ${image} ${sentinel_cmd}
write_log info "已创建 哨兵集群 ${envv} Sentinel03 节点"
Echo_Yellow " 已创建 哨兵集群 ${envv} Sentinel03 节点"
write_log info "创建命令: docker run -d --network sentinel-net --ip=$sentinel_ip03 $sentinel_quota $hosts $mountsen03 --name ${envv}-sentinel03 ${sentinel03conf} ${image} ${sentinel_cmd}" write_log info "哨兵集群 ${envv} 已创建 ."
Echo_Yellow " 哨兵集群 ${envv} 已创建 ."
}
stop_cluster()
{
envv_false_check
docker stop ${envv}-sentinel01
write_log warn "哨兵集群 ${envv} sentinel01 已停止 ."
Echo_Yellow " 哨兵集群 ${envv} sentinel01 已停止 ."
docker stop ${envv}-sentinel02
write_log warn "哨兵集群 ${envv} sentinel02 已停止 ."
Echo_Yellow " 哨兵集群 ${envv} sentinel02 已停止 ."
docker stop ${envv}-sentinel03
write_log warn "哨兵集群 ${envv} sentinel03 已停止 ."
Echo_Yellow " 哨兵集群 ${envv} sentinel03 已停止 ."
docker stop ${envv}-redis-master
write_log warn "哨兵集群 ${envv} redis-master 已停止 ."
Echo_Yellow " 哨兵集群 ${envv} redis-master 已停止 ."
docker stop ${envv}-redis-slave
write_log warn "哨兵集群 ${envv} redis-slave 已停止 ."
Echo_Yellow " 哨兵集群 ${envv} redis-slave 已停止 ."
write_log warn "哨兵集群 ${envv} 已停止 ."
Echo_Yellow " 哨兵集群 ${envv} 已停止 ."
}
delete_ip()
{
cat $ipmark_assigned | grep " ${envv} " | awk '{print $1}' | while read line
do
sed -i "/^${line}/d" $ipmark_assigned
echo "${line}" >> $ipmark
done
write_log warn "哨兵集群 ${envv} IP 资源已回收 ."
Echo_Yellow " 哨兵集群 ${envv} IP 资源已回收 ."
}
delete_cluster()
{
envv_false_check
delete_ip
rm -rf ${record_dir}/${envv}/
write_log warn "哨兵集群 ${envv} 配置文件已删除 ."
Echo_Yellow " 哨兵集群 ${envv} 配置文件已删除 ."
docker stop ${envv}-sentinel01
write_log warn "哨兵集群 ${envv} sentinel01 已停止 ."
Echo_Yellow " 哨兵集群 ${envv} sentinel01 已停止 ."
docker stop ${envv}-sentinel02
write_log warn "哨兵集群 ${envv} sentinel02 已停止 ."
Echo_Yellow " 哨兵集群 ${envv} sentinel02 已停止 ."
docker stop ${envv}-sentinel03
write_log warn "哨兵集群 ${envv} sentinel03 已停止 ."
Echo_Yellow " 哨兵集群 ${envv} sentinel03 已停止 ."
docker stop ${envv}-redis-master
write_log warn "哨兵集群 ${envv} redis-master 已停止 ."
Echo_Yellow " 哨兵集群 ${envv} redis-master 已停止 ."
docker stop ${envv}-redis-slave
write_log warn "哨兵集群 ${envv} redis-slave 已停止 ."
Echo_Yellow " 哨兵集群 ${envv} redis-slave 已停止 ."
write_log warn "哨兵集群 ${envv} 已停止 ."
Echo_Yellow " 哨兵集群 ${envv} 已停止 ."
docker rm ${envv}-sentinel01
write_log warn "哨兵集群 ${envv} sentinel01 已删除 ."
Echo_Yellow " 哨兵集群 ${envv} sentinel01 已删除 ."
docker rm ${envv}-sentinel02
write_log warn "哨兵集群 ${envv} sentinel02 已删除 ."
Echo_Yellow " 哨兵集群 ${envv} sentinel02 已删除 ."
docker rm ${envv}-sentinel03
write_log warn "哨兵集群 ${envv} sentinel03 已删除 ."
Echo_Yellow " 哨兵集群 ${envv} sentinel03 已删除 ."
docker rm ${envv}-redis-master
write_log warn "哨兵集群 ${envv} redis-master 已删除 ."
Echo_Yellow " 哨兵集群 ${envv} redis-master 已删除 ."
docker rm ${envv}-redis-slave
write_log warn "哨兵集群 ${envv} redis-slave 已删除 ."
Echo_Yellow " 哨兵集群 ${envv} redis-slave 已删除 ."
#ceph rbd delete
delete_rbd
write_log warn "哨兵集群 ${envv} 已删除 ."
Echo_Yellow " 哨兵集群 ${envv} 已删除 ."
}
restart_cluster()
{
envv_false_check
docker restart ${envv}-redis-master
write_log warn "哨兵集群 ${envv} redis-master 已重启 ."
Echo_Yellow " 哨兵集群 ${envv} redis-master 已重启 ."
docker restart ${envv}-redis-slave
write_log warn "哨兵集群 ${envv} redis-slave 已重启 ."
Echo_Yellow " 哨兵集群 ${envv} redis-slave 已重启 ."
docker restart ${envv}-sentinel01
write_log warn "哨兵集群 ${envv} sentinel01 已重启 ."
Echo_Yellow " 哨兵集群 ${envv} sentinel01 已重启 ."
docker restart ${envv}-sentinel02
write_log warn "哨兵集群 ${envv} sentinel02 已重启 ."
Echo_Yellow " 哨兵集群 ${envv} sentinel02 已重启 ."
docker restart ${envv}-sentinel03
write_log warn "哨兵集群 ${envv} sentinel03 已重启 ."
Echo_Yellow " 哨兵集群 ${envv} sentinel03 已重启 ."
write_log warn "哨兵集群 ${envv} 已重启 ."
Echo_Yellow " 哨兵集群 ${envv} 已重启 ."
}
start_cluster()
{
envv_false_check
docker start ${envv}-redis-master
write_log info "哨兵集群 ${envv} redis-master 已启动 ."
Echo_Yellow " 哨兵集群 ${envv} redis-master 已启动 ."
docker start ${envv}-redis-slave
write_log info "哨兵集群 ${envv} redis-slave 已启动 ."
Echo_Yellow " 哨兵集群 ${envv} redis-slave 已启动 ."
docker start ${envv}-sentinel01
write_log info "哨兵集群 ${envv} sentinel01 已启动 ."
Echo_Yellow " 哨兵集群 ${envv} sentinel01 已启动 ."
docker start ${envv}-sentinel02
write_log info "哨兵集群 ${envv} sentinel02 已启动 ."
Echo_Yellow " 哨兵集群 ${envv} sentinel02 已启动 ."
docker start ${envv}-sentinel03
write_log info "哨兵集群 ${envv} sentinel03 已启动 ."
Echo_Yellow " 哨兵集群 ${envv} sentinel03 已启动 ."
write_log info "哨兵集群 ${envv} 已启动 ."
Echo_Yellow " 哨兵集群 ${envv} 已启动 ."
}
ls_cluster()
{
local var=$(ls ${record_dir})
if [[ -z ${var} ]];then
Echo_Red " 目前还未创建任何哨兵集群 , 请先创建."
create_usage
exit 1
else
Echo_Yellow " 已创建的哨兵集群:"
ls ${record_dir} | xargs -n1 | while read line
do
Echo_Green " $line"
done
docker ps | grep "redis:latest" | awk '{print $NF}' | grep -v NAMES | awk -F '-' '{print $1}' | uniq | while read line
do
Echo_Yellow " 正在运行哨兵集群: $line"
docker ps | awk '{print $NF}' | grep -v NAMES | grep "$line-" > /tmp/conlist
cat /tmp/conlist |xargs -n1 | while read line
do
Echo_Green " $line"
done
rm -rf /tmp/conlist
done
fi
}
show_cluster()
{
envv_false_check
docker ps | awk '{print $NF}' | grep -v NAMES | grep "${envv}-" > /tmp/conlist
Echo_Yellow " 哨兵集群 ${envv} 节点如下:"
cat /tmp/conlist |xargs -n1 | while read line
do
Echo_Green " $line"
done
rm -rf /tmp/conlist }
bak_cluster()
{
envv_false_check
now_time=$(date +%Y%m%d%H%M)
backupdir="${bak_dir}/${envv}.${now_time}"
mkdir -p ${backupdir}
write_log info "已创建 哨兵集群 ${envv} 备份目录: ${backupdir}"
Echo_Yellow " 已创建 哨兵集群 ${envv} 备份目录: ${backupdir}"
\cp -rf ${record_dir}/${envv}/*.conf ${backupdir}/
write_log info "已备份 哨兵集群 ${envv} 配置文件 ."
Echo_Yellow " 已备份 哨兵集群 ${envv} 配置文件 ."
docker cp ${envv}-sentinel01:/data ${backupdir}/sentinel01_data
write_log info "已备份 哨兵集群 ${envv} sentinel01_data ."
Echo_Yellow " 已备份 哨兵集群 ${envv} sentinel01_data ."
docker cp ${envv}-sentinel02:/data ${backupdir}/sentinel02_data
write_log info "已备份 哨兵集群 ${envv} sentinel02_data ."
Echo_Yellow " 已备份 哨兵集群 ${envv} sentinel02_data ."
docker cp ${envv}-sentinel03:/data ${backupdir}/sentinel03_data
write_log info "已备份 哨兵集群 ${envv} sentinel03_data ."
Echo_Yellow " 已备份 哨兵集群 ${envv} sentinel03_data ."
docker cp ${envv}-redis-master:/data ${backupdir}/redis-master_data
write_log info "已备份 哨兵集群 ${envv} master_data ."
Echo_Yellow " 已备份 哨兵集群 ${envv} master_data ."
docker cp ${envv}-redis-slave:/data ${backupdir}/redis-slave_data
write_log info "已备份 哨兵集群 ${envv} slave_data ."
Echo_Yellow " 已备份 哨兵集群 ${envv} slave_data ."
Echo_Yellow " 哨兵集群 ${envv} 配置文件和数据目录已备份"
} case $op_cmd in
create)
if [[ -z ${envv} ]] || [[ -z ${cluster_port} ]] || [[ -z ${cluster_name} ]] ;then
create_usage
else
create_cluster
fi
;;
delete)
if [ -z ${envv} ];then
delete_usage
else
delete_cluster
fi
;;
restart)
if [ -z ${envv} ];then
restart_usage
else
restart_cluster
fi
;;
stop)
if [ -z ${envv} ];then
stop_usage
else
stop_cluster
fi
;;
start)
if [ -z ${envv} ];then
start_usage
else
start_cluster
fi
;;
ls)
ls_cluster
;;
show)
if [ -z ${envv} ];then
show_usage
else
show_cluster
fi
;;
"install --yes --yes")
init_cluster
init_network
;;
backup)
if [ -z ${envv} ];then
backup_usage
else
bak_cluster
fi
;;
--help)
create_usage
delete_usage
restart_usage
stop_usage
start_usage
backup_usage
show_usage
ls_usage
install_usage
;;
*)
$0 --help
;;
esac

 

最新文章

  1. maven-过滤不打入包的文件
  2. fiddler web开发调试工具的使用
  3. OpenGL学习进程(11)第八课:颜色绘制的详解
  4. js 返回上一页
  5. 利用SpringMVC参数绑定实现动态插入数据
  6. loj1370(欧拉函数+线段树)
  7. php 常量const
  8. python_计算1+……+100中偶数和
  9. Python中关于with open file as 的用法
  10. MySQL数据库性能优化思路与解决方法(二转)
  11. Pearls POJ - 1260 dp
  12. Ant使用指南
  13. HTML&amp;javaSkcript&amp;CSS&amp;jQuery&amp;ajax(六)
  14. H5与Native交互之JSBridge技术
  15. 全面理解Java内存模型(JMM)及volatile关键字(转载)
  16. oracle数据库名称已被一现有约束条件占用
  17. WINCE 下载地址(转)
  18. Stochastic Optimization Techniques
  19. storm的优化以及雪崩问题
  20. MySQL原生API、MySQLi面向过程、MySQLi面向对象、PDO操作MySQL

热门文章

  1. 几种常见的dfs模板
  2. Cookie默认不设置path时,哪些请求会携带cookie数据
  3. Cypress系列(0)- 如何学习 Cypress
  4. 免费 IP 代理池示例
  5. qt程序添加文件版本号
  6. 【经验心得】谈一谈我IT行业未来的方向
  7. 【论文阅读】Harris角点算法
  8. (七)POI-读取excel,遍历一个工作簿
  9. cookie与session区别?
  10. ca13a_c++_顺序容器的操作6删除元素