1. 程式人生 > 實用技巧 >Redis哨兵叢集建立指令碼--v2

Redis哨兵叢集建立指令碼--v2

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