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. 脚本内容 (内容冗余,未做优化)

 

  1. #!/bin/bash
  2. #Author:Jixson
  3. #Date: 2020-07-07
  4. cmd="/usr/local/bin/redis-server /usr/local/etc/redis/redis.conf"
  5. sentinel_cmd="/usr/local/bin/redis-sentinel /usr/local/etc/redis/sentinel.conf"
  6. image="redis:latest"
  7. redis_conf="/usr/local/etc/redis/redis.conf"
  8. sentinel_conf="/usr/local/etc/redis/sentinel.conf"
  9. redis_quota="-c2 -m 4g"
  10. sentinel_quota="-c2 -m 1g"
  11. base_dir="/opt/redis"
  12. base_conf_dir="${base_dir}/conf"
  13. record_dir="${base_dir}/record"
  14. log_dir="${base_dir}/logs"
  15. bak_dir="${base_dir}/backup"
  16. ipmark="${base_dir}/ipmark"
  17. ipmark_assigned="${base_dir}/ipmark_assigned"
  18. op_cmd=$1
  19. envv=$2
  20. cluster_name=$3
  21. cluster_port=$4
  22.  
  23. Color_Text()
  24. {
  25. echo -e " \e[0;$2m$1\e[0m"
  26. }
  27. Echo_Yellow()
  28. {
  29. echo "$(Color_Text "$1" "33")"
  30. }
  31. Echo_Red()
  32. {
  33. echo "$(Color_Text "$1" "31")"
  34. }
  35. Echo_Green()
  36. {
  37. echo "$(Color_Text "$1" "32")"
  38. }
  39. write_log()
  40. {
  41. mkdir -p ${log_dir}
  42. local log_type=$1
  43. local log_msg=$2
  44. local log_name="${log_dir}/redis-shell.log"
  45. echo "`date +"%Y-%m-%d %H:%M:%S"` $log_type $log_msg " >> $log_name
  46. }
  47. init_cluster()
  48. {
  49. if [ -d ${base_dir} ];then
  50. mv ${base_dir} ${base_dir}.bak
  51. write_log info "已备份 原${base_dir} 为 ${base_dir}.bak "
  52. Echo_Yellow " 已备份 原${base_dir} 为 ${base_dir}.bak ."
  53. fi
  54. mkdir -p ${base_conf_dir}
  55. write_log info "${base_conf_dir} 已创建 ."
  56. Echo_Yellow " ${base_conf_dir} 已创建 ."
  57. mkdir -p ${record_dir}
  58. write_log info "${record_dir} 已创建 ."
  59. Echo_Yellow " ${record_dir} 已创建 ."
  60. mkdir -p ${log_dir}
  61. write_log info "${log_dir} 已创建 ."
  62. Echo_Yellow " ${log_dir} 已创建 ."
  63. mkdir -p ${bak_dir}
  64. write_log info "${bak_dir} 已创建 ."
  65. Echo_Yellow " ${bak_dir} 已创建 ."
  66. cat << EOF > ${base_conf_dir}/sentinel.conf
  67. port \$cluster_port
  68. daemonize no
  69. logfile "/data/sentinel.log"
  70. protected-mode no
  71. sentinel monitor \$cluster_name redis-master.xxx.com 6379 2
  72. sentinel down-after-milliseconds \$cluster_name 15000
  73. EOF
  74. write_log info "Sentinel 配置文件已经初始化 ."
  75. Echo_Yellow " Sentinel 配置文件已经初始化 ."
  76. cat << EOF > ${base_conf_dir}/redis-master.conf
  77. bind 0.0.0.0
  78. port 6379
  79. pidfile "/data/redis_6379.pid"
  80. logfile "/data/redis_6379.log"
  81. dir "/data"
  82. dbfilename "redis_6379.rdb"
  83. maxmemory 1gb
  84. appendfilename "redis_6379.aof"
  85. protected-mode yes
  86. tcp-backlog 511
  87. timeout 0
  88. tcp-keepalive 300
  89. daemonize no
  90. supervised no
  91. loglevel notice
  92. databases 16
  93. stop-writes-on-bgsave-error yes
  94. rdbcompression yes
  95. rdbchecksum yes
  96. slave-serve-stale-data yes
  97. slave-read-only yes
  98. repl-diskless-sync yes
  99. repl-diskless-sync-delay 5
  100. repl-ping-slave-period 10
  101. repl-timeout 60
  102. repl-disable-tcp-nodelay no
  103. repl-backlog-size 150mb
  104. repl-backlog-ttl 3600
  105. slave-priority 100
  106. maxclients 10000
  107. maxmemory-policy allkeys-lru
  108. appendonly no
  109. slowlog-log-slower-than 10000
  110. slowlog-max-len 128
  111. latency-monitor-threshold 0
  112. notify-keyspace-events ""
  113. hash-max-ziplist-entries 512
  114. hash-max-ziplist-value 64
  115. list-max-ziplist-size -2
  116. list-compress-depth 0
  117. set-max-intset-entries 512
  118. zset-max-ziplist-entries 128
  119. zset-max-ziplist-value 64
  120. hll-sparse-max-bytes 3000
  121. activerehashing yes
  122. client-output-buffer-limit normal 0 0 0
  123. client-output-buffer-limit slave 256mb 64mb 60
  124. client-output-buffer-limit pubsub 32mb 8mb 60
  125. hz 10
  126. aof-rewrite-incremental-fsync yes
  127. EOF
  128. write_log info "Redis-master 配置文件已经初始化 ."
  129. Echo_Yellow " Redis-master 配置文件已经初始化"
  130. \cp ${base_conf_dir}/redis-master.conf ${base_conf_dir}/redis-slave.conf
  131. echo "slaveof redis-master.xxx.com 6379" >> ${base_conf_dir}/redis-slave.conf
  132. write_log info "Redis-slave 配置文件已经初始化 ."
  133. Echo_Yellow " Redis-slave 配置文件已经初始化"
  134. }
  135. init_network()
  136. {
  137. 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
  138. for i in $(seq 64 95)
  139. do
  140. echo "10.6.88.$i" >> $ipmark
  141. done
  142. }
  143. envv_true_check()
  144. {
  145. local envv_dir="${record_dir}/${envv}"
  146. if [ -d ${envv_dir} ];then
  147. Echo_Red " 哨兵集群 ${envv} 已存在 ."
  148. exit 1
  149. fi
  150. }
  151. envv_false_check()
  152. {
  153. local envv_dir="${record_dir}/${envv}"
  154. if [ -d ${envv_dir} ];then
  155. echo '' > /dev/null
  156. else
  157. Echo_Red " 哨兵集群 ${envv} 不存在 ."
  158. exit 1
  159. fi
  160. }
  161. create_rbd()
  162. {
  163. base_data_dir="${base_dir}/cluster-data/${envv}"
  164. mkdir -p ${base_data_dir}/data_sen01
  165. sen01=${base_data_dir}/data_sen01
  166. write_log info "ceph data directory ${sen01} 已创建 ."
  167. Echo_Yellow " ceph data directory ${sen01} 已创建 ."
  168. mkdir -p ${base_data_dir}/data_sen02
  169. sen02=${base_data_dir}/data_sen02
  170. write_log info "ceph data directory ${sen02} 已创建 ."
  171. Echo_Yellow " ceph data directory ${sen02} 已创建 ."
  172. mkdir -p ${base_data_dir}/data_sen03
  173. sen03=${base_data_dir}/data_sen03
  174. write_log info "ceph data directory ${sen03} 已创建 ."
  175. Echo_Yellow " ceph data directory ${sen03} 已创建 ."
  176. mkdir -p ${base_data_dir}/data_master
  177. master=${base_data_dir}/data_master
  178. write_log info "ceph data directory ${master} 已创建 ."
  179. Echo_Yellow " ceph data directory ${master} 已创建 ."
  180. mkdir -p ${base_data_dir}/data_slave
  181. slave=${base_data_dir}/data_slave
  182. write_log info "ceph data directory ${slave} 已创建 ."
  183. Echo_Yellow " ceph data directory ${slave} 已创建 ."
  184.  
  185. rbd create ${envv}-sentinel01 --size 1G --image-feature layering -p rbd
  186. write_log info "ceph image ${envv}-sentinel01 已创建 ."
  187. Echo_Yellow " ceph image ${envv}-sentinel01 已创建 ."
  188. rbd create ${envv}-sentinel02 --size 1G --image-feature layering -p rbd
  189. write_log info "ceph image ${envv}-sentinel02 已创建 ."
  190. Echo_Yellow " ceph image ${envv}-sentinel02 已创建 ."
  191. rbd create ${envv}-sentinel03 --size 1G --image-feature layering -p rbd
  192. write_log info "ceph image ${envv}-sentinel03 已创建 ."
  193. Echo_Yellow " ceph image ${envv}-sentinel03 已创建 ."
  194. rbd create ${envv}-redismaster --size 50G --image-feature layering -p rbd
  195. write_log info "ceph image ${envv}-redismaster 已创建 ."
  196. Echo_Yellow " ceph image ${envv}-redismaster 已创建 ."
  197. rbd create ${envv}-redisslave --size 50G --image-feature layering -p rbd
  198. write_log info "ceph image ${envv}-redisslave 已创建 ."
  199. Echo_Yellow " ceph image ${envv}-redisslave 已创建 ."
  200.  
  201. data_sen01=$(rbd map ${envv}-sentinel01 --name client.admin -m 10.6.88.14,10.6.88.15,10.6.88.16)
  202. write_log info "ceph image map ${envv}-sentinel01 ."
  203. Echo_Yellow " ceph image map ${envv}-sentinel01 ."
  204. data_sen02=$(rbd map ${envv}-sentinel02 --name client.admin -m 10.6.88.14,10.6.88.15,10.6.88.16)
  205. write_log info "ceph image map ${envv}-sentinel02 ."
  206. Echo_Yellow " ceph image map ${envv}-sentinel02 ."
  207. data_sen03=$(rbd map ${envv}-sentinel03 --name client.admin -m 10.6.88.14,10.6.88.15,10.6.88.16)
  208. write_log info "ceph image map ${envv}-sentinel03 ."
  209. Echo_Yellow " ceph image map ${envv}-sentinel03 ."
  210. data_master=$(rbd map ${envv}-redismaster --name client.admin -m 10.6.88.14,10.6.88.15,10.6.88.16)
  211. write_log info "ceph image map ${envv}-redismaster ."
  212. Echo_Yellow " ceph image map ${envv}-redismaster ."
  213. data_slave=$(rbd map ${envv}-redisslave --name client.admin -m 10.6.88.14,10.6.88.15,10.6.88.16)
  214. write_log info "ceph image map ${envv}-redisslave ."
  215. Echo_Yellow " ceph image map ${envv}-redisslave ."
  216.  
  217. mkfs.xfs $data_sen01
  218. write_log info "ceph rbd ${data_sen01} 已格式化 xfs."
  219. Echo_Yellow " ceph rbd ${data_sen01} 已格式化 xfs."
  220. mkfs.xfs $data_sen02
  221. write_log info "ceph rbd ${data_sen02} 已格式化 xfs."
  222. Echo_Yellow " ceph rbd ${data_sen02} 已格式化 xfs."
  223. mkfs.xfs $data_sen03
  224. write_log info "ceph rbd ${data_sen03} 已格式化 xfs."
  225. Echo_Yellow " ceph rbd ${data_sen03} 已格式化 xfs."
  226. mkfs.xfs $data_master
  227. write_log info "ceph rbd ${data_master} 已格式化 xfs."
  228. Echo_Yellow " ceph rbd ${data_master} 已格式化 xfs."
  229. mkfs.xfs $data_slave
  230. write_log info "ceph rbd ${data_slave} 已格式化 xfs."
  231. Echo_Yellow " ceph rbd ${data_slave} 已格式化 xfs."
  232.  
  233. mount -o discard $data_sen01 ${sen01}
  234. write_log info "ceph rbd ${data_sen01} 已挂载 ."
  235. Echo_Yellow " ceph rbd ${data_sen01} 已挂载 ."
  236. mount -o discard $data_sen02 ${sen02}
  237. write_log info "ceph rbd ${data_sen02} 已挂载 ."
  238. Echo_Yellow " ceph rbd ${data_sen02} 已挂载 ."
  239. mount -o discard $data_sen03 ${sen03}
  240. write_log info "ceph rbd ${data_sen03} 已挂载 ."
  241. Echo_Yellow " ceph rbd ${data_sen03} 已挂载 ."
  242. mount -o discard $data_master ${master}
  243. write_log info "ceph rbd ${data_master} 已挂载 ."
  244. Echo_Yellow " ceph rbd ${data_master} 已挂载 ."
  245. mount -o discard $data_slave ${slave}
  246. write_log info "ceph rbd ${data_slave} 已挂载 ."
  247. Echo_Yellow " ceph rbd ${data_slave} 已挂载 ."
  248. }
  249. delete_rbd()
  250. {
  251. base_data_dir="${base_dir}/cluster-data/${envv}"
  252. sen01="${base_data_dir}/data_sen01"
  253. sen02="${base_data_dir}/data_sen02"
  254. sen03="${base_data_dir}/data_sen03"
  255. master="${base_data_dir}/data_master"
  256. slave="${base_data_dir}/data_slave"
  257.  
  258. rbd_id01=$(mount | grep "${sen01}" | awk '{print $1}')
  259. rbd_id02=$(mount | grep "${sen02}" | awk '{print $1}')
  260. rbd_id03=$(mount | grep "${sen03}" | awk '{print $1}')
  261. rbd_id04=$(mount | grep "${master}" | awk '{print $1}')
  262. rbd_id05=$(mount | grep "${slave}" | awk '{print $1}')
  263.  
  264. umount $sen01 $sen02 $sen03 $master $slave
  265. write_log warn "ceph data directory $sen01 $sen02 $sen03 $master $slave 已卸载 ."
  266. Echo_Yellow " ceph data directory $sen01 $sen02 $sen03 $master $slave 已卸载 ."
  267.  
  268. if [ -d ${base_data_dir} ];then
  269. rm -rf ${base_data_dir}
  270. fi
  271. write_log warn "ceph data directory ${base_data_dir} 已删除 ."
  272. Echo_Yellow " ceph data directory ${base_data_dir} 已删除 ."
  273.  
  274. rbd unmap $rbd_id01
  275. write_log warn "ceph rbd unmap ${rbd_id01} ."
  276. Echo_Yellow " ceph rbd unmap ${rbd_id01} ."
  277. rbd rm ${envv}-sentinel01
  278. write_log warn "ceph rbd image delete ${envv}-sentinel01 ."
  279. Echo_Yellow " ceph rbd image delete ${envv}-sentinel01 ."
  280.  
  281. rbd unmap $rbd_id02
  282. write_log warn "ceph rbd unmap ${rbd_id02} ."
  283. Echo_Yellow " ceph rbd unmap ${rbd_id02} ."
  284. rbd rm ${envv}-sentinel02
  285. write_log warn "ceph rbd image delete ${envv}-sentinel02 ."
  286. Echo_Yellow " ceph rbd image delete ${envv}-sentinel02 ."
  287.  
  288. rbd unmap $rbd_id03
  289. write_log warn "ceph rbd unmap ${rbd_id03} ."
  290. Echo_Yellow " ceph rbd unmap ${rbd_id03} ."
  291. rbd rm ${envv}-sentinel03
  292. write_log warn "ceph rbd image delete ${envv}-sentinel03 ."
  293. Echo_Yellow " ceph rbd image delete ${envv}-sentinel03 ."
  294.  
  295. rbd unmap $rbd_id04
  296. write_log warn "ceph rbd unmap ${rbd_id04} ."
  297. Echo_Yellow " ceph rbd unmap ${rbd_id04} ."
  298. rbd rm ${envv}-redismaster
  299. write_log warn "ceph rbd image delete ${envv}-redismaster ."
  300. Echo_Yellow " ceph rbd image delete ${envv}-redismaster ."
  301.  
  302. rbd unmap $rbd_id05
  303. write_log warn "ceph rbd unmap ${rbd_id05} ."
  304. Echo_Yellow " ceph rbd unmap ${rbd_id05} ."
  305. rbd rm ${envv}-redisslave
  306. write_log warn "ceph rbd image delete ${envv}-redisslave ."
  307. Echo_Yellow " ceph rbd image delete ${envv}-redisslave ."
  308.  
  309. }
  310. create_usage()
  311. {
  312. Echo_Yellow " Usage : "
  313. Echo_Red " 集群创建"
  314. Echo_Yellow " $0 create [environment] [cluster_name] [cluster_port]"
  315. Echo_Yellow " [environment] 集群所属环境标识"
  316. Echo_Yellow " [cluster_name] 哨兵集群 monitor name"
  317. Echo_Yellow " [cluster_port] 哨兵集群对外端口"
  318. Echo_Yellow " E.g.: $0 create leo bytest 27001"
  319. }
  320. delete_usage()
  321. {
  322. Echo_Yellow " Usage : "
  323. Echo_Red " 集群删除"
  324. Echo_Yellow " $0 delete [environment]"
  325. Echo_Yellow " E.g.: $0 delete leo"
  326. }
  327. stop_usage()
  328. {
  329. Echo_Yellow " Usage : "
  330. Echo_Red " 停止集群"
  331. Echo_Yellow " $0 stop [environment]"
  332. Echo_Yellow " E.g.: $0 stop leo"
  333. }
  334. start_usage()
  335. {
  336. Echo_Yellow " Usage : "
  337. Echo_Red " 启动集群"
  338. Echo_Yellow " $0 start [environment]"
  339. Echo_Yellow " E.g.: $0 start leo"
  340. }
  341. restart_usage()
  342. {
  343. Echo_Yellow " Usage : "
  344. Echo_Red " 重启集群"
  345. Echo_Yellow " $0 restart [environment]"
  346. Echo_Yellow " E.g.: $0 restart leo"
  347. }
  348. backup_usage()
  349. {
  350. Echo_Yellow " Usage : "
  351. Echo_Red " 备份集群"
  352. Echo_Yellow " $0 backup [environment]"
  353. Echo_Yellow " E.g.: $0 backup leo"
  354. }
  355. show_usage()
  356. {
  357. Echo_Yellow " Usage : "
  358. Echo_Red " 显示集群运行信息"
  359. Echo_Yellow " $0 show [environment]"
  360. Echo_Yellow " E.g.: $0 show leo"
  361. }
  362. ls_usage()
  363. {
  364. Echo_Yellow " Usage : "
  365. Echo_Red " 显示已创建集群"
  366. Echo_Yellow " $0 ls"
  367. Echo_Yellow " E.g.: $0 ls"
  368. }
  369. install_usage()
  370. {
  371. Echo_Yellow " Usage : "
  372. Echo_Red " 脚本初始化"
  373. Echo_Yellow " $0 \"install --yes --yes\""
  374. Echo_Yellow " E.g.: $0 \"install --yes --yes\""
  375. }
  376. create_cluster()
  377. {
  378. envv_true_check
  379. mkdir -p $record_dir/${envv}
  380. #Get IP address
  381. master_ip=$(cat $ipmark | head -1)
  382. sed -i "/^${master_ip}/d" $ipmark
  383. echo "${master_ip} assigned $envv redis-master" >> $ipmark_assigned
  384. write_log info "已分配 哨兵集群 ${envv} Redis-master IP: ${master_ip}"
  385. Echo_Yellow " 已分配 哨兵集群 ${envv} Redis-master IP: ${master_ip}"
  386.  
  387. slave_ip=$(cat $ipmark | head -1)
  388. sed -i "/^${slave_ip}/d" $ipmark
  389. echo "${slave_ip} assigned $envv redis-slave" >> $ipmark_assigned
  390. write_log info "已分配 哨兵集群 ${envv} redis-slave IP: ${slave_ip}"
  391. Echo_Yellow " 已分配 哨兵集群 ${envv} redis-slave IP: ${slave_ip}"
  392.  
  393. sentinel_ip01=$(cat $ipmark | head -1)
  394. sed -i "/^${sentinel_ip01}/d" $ipmark
  395. echo "${sentinel_ip01} assigned $envv sentinel01" >> $ipmark_assigned
  396. write_log info "已分配 哨兵集群 ${envv} Sentinel01 IP: ${sentinel_ip01}"
  397. Echo_Yellow " 已分配 哨兵集群 ${envv} Sentinel01 IP: ${sentinel_ip01}"
  398.  
  399. sentinel_ip02=$(cat $ipmark | head -1)
  400. sed -i "/^${sentinel_ip02}/d" $ipmark
  401. echo "${sentinel_ip02} assigned $envv sentinel02" >> $ipmark_assigned
  402. write_log info "已分配 哨兵集群 ${envv} Sentinel02 IP: ${sentinel_ip02}"
  403. Echo_Yellow " 已分配 哨兵集群 ${envv} Sentinel02 IP: ${sentinel_ip02}"
  404.  
  405. sentinel_ip03=$(cat $ipmark | head -1)
  406. sed -i "/^${sentinel_ip03}/d" $ipmark
  407. echo "${sentinel_ip03} assigned $envv sentinel03" >> $ipmark_assigned
  408. write_log info "已分配 哨兵集群 ${envv} Sentinel03 IP: ${sentinel_ip03}"
  409. Echo_Yellow " 已分配 哨兵集群 ${envv} Sentinel03 IP: ${sentinel_ip03}"
  410. #ceph create rbd
  411. create_rbd
  412. mountsen01="-v ${sen01}:/data"
  413. mountsen02="-v ${sen02}:/data"
  414. mountsen03="-v ${sen03}:/data"
  415. mountmaster="-v ${master}:/data"
  416. mountslave="-v ${slave}:/data"
  417. #声明主机
  418. hn1="--add-host=redis-master.xxx.com:${master_ip}"
  419. hn2="--add-host=redis-slave.xxx.com:${slave_ip}"
  420. hn3="--add-host=sentinel01.xxx.com:${sentinel_ip01}"
  421. hn4="--add-host=sentinel02.xxx.com:${sentinel_ip02}"
  422. hn5="--add-host=sentinel03.xxx.com:${sentinel_ip03}"
  423. hosts="$hn1 $hn2 $hn3 $hn4 $hn5"
  424.  
  425. #master conf
  426. \cp -f "${base_conf_dir}/redis-master.conf" "${record_dir}/${envv}/redis-master.conf"
  427. master_conf="${record_dir}/${envv}/redis-master.conf"
  428. write_log info "已创建 哨兵集群 ${envv} Redis-master 配置文件 ${master_conf}"
  429. Echo_Yellow " 已创建 哨兵集群 ${envv} Redis-master 配置文件 ${master_conf}"
  430. masterconf="-v ${master_conf}:${redis_conf}"
  431.  
  432. #slave conf
  433. \cp -f "${base_conf_dir}/redis-slave.conf" "${record_dir}/${envv}/redis-slave.conf"
  434. slave_conf="${record_dir}/${envv}/redis-slave.conf"
  435. write_log info "已创建 哨兵集群 ${envv} Redis-slave 配置文件 ${slave_conf}"
  436. Echo_Yellow " 已创建 哨兵集群 ${envv} Redis-slave 配置文件 ${slave_conf}"
  437. slaveconf="-v ${slave_conf}:${redis_conf}"
  438.  
  439. #sentinel conf
  440. \cp -f "${base_conf_dir}/sentinel.conf" "${record_dir}/${envv}/sentinel01.conf"
  441. sentinel01_conf="${record_dir}/${envv}/sentinel01.conf"
  442. sed -i 's/\$cluster_name/'${cluster_name}'/g' ${sentinel01_conf}
  443. sed -i 's/\$cluster_port/'${cluster_port}'/g' ${sentinel01_conf}
  444. write_log info "已创建 哨兵集群 ${envv} Sentinel01 配置文件 ${sentinel01_conf}"
  445. Echo_Yellow " 已创建 哨兵集群 ${envv} Sentinel01 配置文件 ${sentinel01_conf}"
  446. sentinel01conf="-v ${sentinel01_conf}:${sentinel_conf}"
  447.  
  448. \cp -f "${base_conf_dir}/sentinel.conf" "${record_dir}/${envv}/sentinel02.conf"
  449. sentinel02_conf="${record_dir}/${envv}/sentinel02.conf"
  450. sed -i 's/\$cluster_name/'${cluster_name}'/g' ${sentinel02_conf}
  451. sed -i 's/\$cluster_port/'${cluster_port}'/g' ${sentinel02_conf}
  452. write_log info "已创建 哨兵集群 ${envv} Sentinel02 配置文件 ${sentinel02_conf}"
  453. Echo_Yellow " 已创建 哨兵集群 ${envv} Sentinel02 配置文件 ${sentinel02_conf}"
  454. sentinel02conf="-v ${sentinel02_conf}:${sentinel_conf}"
  455.  
  456. \cp -f "${base_conf_dir}/sentinel.conf" "${record_dir}/${envv}/sentinel03.conf"
  457. sentinel03_conf="${record_dir}/${envv}/sentinel03.conf"
  458. sed -i 's/\$cluster_name/'${cluster_name}'/g' ${sentinel03_conf}
  459. sed -i 's/\$cluster_port/'${cluster_port}'/g' ${sentinel03_conf}
  460. write_log info "已创建 哨兵集群 ${envv} Sentinel03 配置文件 ${sentinel03_conf}"
  461. Echo_Yellow " 已创建 哨兵集群 ${envv} Sentinel03 配置文件 ${sentinel03_conf}"
  462. sentinel03conf="-v ${sentinel03_conf}:${sentinel_conf}"
  463.  
  464. #run redis
  465. docker run -d --network sentinel-net --ip=$master_ip $redis_quota $hosts $mountmaster --name ${envv}-redis-master ${masterconf} ${image} ${cmd}
  466. write_log info "已创建 哨兵集群 ${envv} Redis-master 节点"
  467. Echo_Yellow " 已创建 哨兵集群 ${envv} Redis-master 节点"
  468. write_log info "创建命令: docker run -d --network sentinel-net --ip=$master_ip $redis_quota $hosts $mountmaster --name ${envv}-redis-master ${masterconf} ${image} ${cmd}"
  469. docker run -d --network sentinel-net --ip=$slave_ip $redis_quota $hosts $mountslave --name ${envv}-redis-slave ${slaveconf} ${image} ${cmd}
  470. write_log info "已创建 哨兵集群 ${envv} Redis-slave 节点"
  471. Echo_Yellow " 已创建 哨兵集群 ${envv} Redis-slave 节点"
  472. write_log info "创建命令: docker run -d --network sentinel-net --ip=$slave_ip $redis_quota $hosts $mountslave --name ${envv}-redis-slave ${slaveconf} ${image} ${cmd}"
  473. #run sentinel
  474. docker run -d --network sentinel-net --ip=$sentinel_ip01 $sentinel_quota $hosts $mountsen01 --name ${envv}-sentinel01 ${sentinel01conf} ${image} ${sentinel_cmd}
  475. write_log info "已创建 哨兵集群 ${envv} Sentinel01 节点"
  476. Echo_Yellow " 已创建 哨兵集群 ${envv} Sentinel01 节点"
  477. write_log info "创建命令: docker run -d --network sentinel-net --ip=$sentinel_ip01 $sentinel_quota $hosts $mountsen01 --name ${envv}-sentinel01 ${sentinel01conf} ${image} ${sentinel_cmd}"
  478.  
  479. docker run -d --network sentinel-net --ip=$sentinel_ip02 $sentinel_quota $hosts $mountsen02 --name ${envv}-sentinel02 ${sentinel02conf} ${image} ${sentinel_cmd}
  480. write_log info "已创建 哨兵集群 ${envv} Sentinel02 节点"
  481. Echo_Yellow " 已创建 哨兵集群 ${envv} Sentinel02 节点"
  482. write_log info "创建命令: docker run -d --network sentinel-net --ip=$sentinel_ip02 $sentinel_quota $hosts $mountsen02 --name ${envv}-sentinel02 ${sentinel02conf} ${image} ${sentinel_cmd}"
  483.  
  484. docker run -d --network sentinel-net --ip=$sentinel_ip03 $sentinel_quota $hosts $mountsen03 --name ${envv}-sentinel03 ${sentinel03conf} ${image} ${sentinel_cmd}
  485. write_log info "已创建 哨兵集群 ${envv} Sentinel03 节点"
  486. Echo_Yellow " 已创建 哨兵集群 ${envv} Sentinel03 节点"
  487. write_log info "创建命令: docker run -d --network sentinel-net --ip=$sentinel_ip03 $sentinel_quota $hosts $mountsen03 --name ${envv}-sentinel03 ${sentinel03conf} ${image} ${sentinel_cmd}"
  488.  
  489. write_log info "哨兵集群 ${envv} 已创建 ."
  490. Echo_Yellow " 哨兵集群 ${envv} 已创建 ."
  491. }
  492. stop_cluster()
  493. {
  494. envv_false_check
  495. docker stop ${envv}-sentinel01
  496. write_log warn "哨兵集群 ${envv} sentinel01 已停止 ."
  497. Echo_Yellow " 哨兵集群 ${envv} sentinel01 已停止 ."
  498. docker stop ${envv}-sentinel02
  499. write_log warn "哨兵集群 ${envv} sentinel02 已停止 ."
  500. Echo_Yellow " 哨兵集群 ${envv} sentinel02 已停止 ."
  501. docker stop ${envv}-sentinel03
  502. write_log warn "哨兵集群 ${envv} sentinel03 已停止 ."
  503. Echo_Yellow " 哨兵集群 ${envv} sentinel03 已停止 ."
  504. docker stop ${envv}-redis-master
  505. write_log warn "哨兵集群 ${envv} redis-master 已停止 ."
  506. Echo_Yellow " 哨兵集群 ${envv} redis-master 已停止 ."
  507. docker stop ${envv}-redis-slave
  508. write_log warn "哨兵集群 ${envv} redis-slave 已停止 ."
  509. Echo_Yellow " 哨兵集群 ${envv} redis-slave 已停止 ."
  510. write_log warn "哨兵集群 ${envv} 已停止 ."
  511. Echo_Yellow " 哨兵集群 ${envv} 已停止 ."
  512. }
  513. delete_ip()
  514. {
  515. cat $ipmark_assigned | grep " ${envv} " | awk '{print $1}' | while read line
  516. do
  517. sed -i "/^${line}/d" $ipmark_assigned
  518. echo "${line}" >> $ipmark
  519. done
  520. write_log warn "哨兵集群 ${envv} IP 资源已回收 ."
  521. Echo_Yellow " 哨兵集群 ${envv} IP 资源已回收 ."
  522. }
  523. delete_cluster()
  524. {
  525. envv_false_check
  526. delete_ip
  527. rm -rf ${record_dir}/${envv}/
  528. write_log warn "哨兵集群 ${envv} 配置文件已删除 ."
  529. Echo_Yellow " 哨兵集群 ${envv} 配置文件已删除 ."
  530. docker stop ${envv}-sentinel01
  531. write_log warn "哨兵集群 ${envv} sentinel01 已停止 ."
  532. Echo_Yellow " 哨兵集群 ${envv} sentinel01 已停止 ."
  533. docker stop ${envv}-sentinel02
  534. write_log warn "哨兵集群 ${envv} sentinel02 已停止 ."
  535. Echo_Yellow " 哨兵集群 ${envv} sentinel02 已停止 ."
  536. docker stop ${envv}-sentinel03
  537. write_log warn "哨兵集群 ${envv} sentinel03 已停止 ."
  538. Echo_Yellow " 哨兵集群 ${envv} sentinel03 已停止 ."
  539. docker stop ${envv}-redis-master
  540. write_log warn "哨兵集群 ${envv} redis-master 已停止 ."
  541. Echo_Yellow " 哨兵集群 ${envv} redis-master 已停止 ."
  542. docker stop ${envv}-redis-slave
  543. write_log warn "哨兵集群 ${envv} redis-slave 已停止 ."
  544. Echo_Yellow " 哨兵集群 ${envv} redis-slave 已停止 ."
  545. write_log warn "哨兵集群 ${envv} 已停止 ."
  546. Echo_Yellow " 哨兵集群 ${envv} 已停止 ."
  547. docker rm ${envv}-sentinel01
  548. write_log warn "哨兵集群 ${envv} sentinel01 已删除 ."
  549. Echo_Yellow " 哨兵集群 ${envv} sentinel01 已删除 ."
  550. docker rm ${envv}-sentinel02
  551. write_log warn "哨兵集群 ${envv} sentinel02 已删除 ."
  552. Echo_Yellow " 哨兵集群 ${envv} sentinel02 已删除 ."
  553. docker rm ${envv}-sentinel03
  554. write_log warn "哨兵集群 ${envv} sentinel03 已删除 ."
  555. Echo_Yellow " 哨兵集群 ${envv} sentinel03 已删除 ."
  556. docker rm ${envv}-redis-master
  557. write_log warn "哨兵集群 ${envv} redis-master 已删除 ."
  558. Echo_Yellow " 哨兵集群 ${envv} redis-master 已删除 ."
  559. docker rm ${envv}-redis-slave
  560. write_log warn "哨兵集群 ${envv} redis-slave 已删除 ."
  561. Echo_Yellow " 哨兵集群 ${envv} redis-slave 已删除 ."
  562. #ceph rbd delete
  563. delete_rbd
  564. write_log warn "哨兵集群 ${envv} 已删除 ."
  565. Echo_Yellow " 哨兵集群 ${envv} 已删除 ."
  566. }
  567. restart_cluster()
  568. {
  569. envv_false_check
  570. docker restart ${envv}-redis-master
  571. write_log warn "哨兵集群 ${envv} redis-master 已重启 ."
  572. Echo_Yellow " 哨兵集群 ${envv} redis-master 已重启 ."
  573. docker restart ${envv}-redis-slave
  574. write_log warn "哨兵集群 ${envv} redis-slave 已重启 ."
  575. Echo_Yellow " 哨兵集群 ${envv} redis-slave 已重启 ."
  576. docker restart ${envv}-sentinel01
  577. write_log warn "哨兵集群 ${envv} sentinel01 已重启 ."
  578. Echo_Yellow " 哨兵集群 ${envv} sentinel01 已重启 ."
  579. docker restart ${envv}-sentinel02
  580. write_log warn "哨兵集群 ${envv} sentinel02 已重启 ."
  581. Echo_Yellow " 哨兵集群 ${envv} sentinel02 已重启 ."
  582. docker restart ${envv}-sentinel03
  583. write_log warn "哨兵集群 ${envv} sentinel03 已重启 ."
  584. Echo_Yellow " 哨兵集群 ${envv} sentinel03 已重启 ."
  585. write_log warn "哨兵集群 ${envv} 已重启 ."
  586. Echo_Yellow " 哨兵集群 ${envv} 已重启 ."
  587. }
  588. start_cluster()
  589. {
  590. envv_false_check
  591. docker start ${envv}-redis-master
  592. write_log info "哨兵集群 ${envv} redis-master 已启动 ."
  593. Echo_Yellow " 哨兵集群 ${envv} redis-master 已启动 ."
  594. docker start ${envv}-redis-slave
  595. write_log info "哨兵集群 ${envv} redis-slave 已启动 ."
  596. Echo_Yellow " 哨兵集群 ${envv} redis-slave 已启动 ."
  597. docker start ${envv}-sentinel01
  598. write_log info "哨兵集群 ${envv} sentinel01 已启动 ."
  599. Echo_Yellow " 哨兵集群 ${envv} sentinel01 已启动 ."
  600. docker start ${envv}-sentinel02
  601. write_log info "哨兵集群 ${envv} sentinel02 已启动 ."
  602. Echo_Yellow " 哨兵集群 ${envv} sentinel02 已启动 ."
  603. docker start ${envv}-sentinel03
  604. write_log info "哨兵集群 ${envv} sentinel03 已启动 ."
  605. Echo_Yellow " 哨兵集群 ${envv} sentinel03 已启动 ."
  606. write_log info "哨兵集群 ${envv} 已启动 ."
  607. Echo_Yellow " 哨兵集群 ${envv} 已启动 ."
  608. }
  609. ls_cluster()
  610. {
  611. local var=$(ls ${record_dir})
  612. if [[ -z ${var} ]];then
  613. Echo_Red " 目前还未创建任何哨兵集群 , 请先创建."
  614. create_usage
  615. exit 1
  616. else
  617. Echo_Yellow " 已创建的哨兵集群:"
  618. ls ${record_dir} | xargs -n1 | while read line
  619. do
  620. Echo_Green " $line"
  621. done
  622. docker ps | grep "redis:latest" | awk '{print $NF}' | grep -v NAMES | awk -F '-' '{print $1}' | uniq | while read line
  623. do
  624. Echo_Yellow " 正在运行哨兵集群: $line"
  625. docker ps | awk '{print $NF}' | grep -v NAMES | grep "$line-" > /tmp/conlist
  626. cat /tmp/conlist |xargs -n1 | while read line
  627. do
  628. Echo_Green " $line"
  629. done
  630. rm -rf /tmp/conlist
  631. done
  632. fi
  633. }
  634. show_cluster()
  635. {
  636. envv_false_check
  637. docker ps | awk '{print $NF}' | grep -v NAMES | grep "${envv}-" > /tmp/conlist
  638. Echo_Yellow " 哨兵集群 ${envv} 节点如下:"
  639. cat /tmp/conlist |xargs -n1 | while read line
  640. do
  641. Echo_Green " $line"
  642. done
  643. rm -rf /tmp/conlist
  644. }
  645. bak_cluster()
  646. {
  647. envv_false_check
  648. now_time=$(date +%Y%m%d%H%M)
  649. backupdir="${bak_dir}/${envv}.${now_time}"
  650. mkdir -p ${backupdir}
  651. write_log info "已创建 哨兵集群 ${envv} 备份目录: ${backupdir}"
  652. Echo_Yellow " 已创建 哨兵集群 ${envv} 备份目录: ${backupdir}"
  653. \cp -rf ${record_dir}/${envv}/*.conf ${backupdir}/
  654. write_log info "已备份 哨兵集群 ${envv} 配置文件 ."
  655. Echo_Yellow " 已备份 哨兵集群 ${envv} 配置文件 ."
  656. docker cp ${envv}-sentinel01:/data ${backupdir}/sentinel01_data
  657. write_log info "已备份 哨兵集群 ${envv} sentinel01_data ."
  658. Echo_Yellow " 已备份 哨兵集群 ${envv} sentinel01_data ."
  659. docker cp ${envv}-sentinel02:/data ${backupdir}/sentinel02_data
  660. write_log info "已备份 哨兵集群 ${envv} sentinel02_data ."
  661. Echo_Yellow " 已备份 哨兵集群 ${envv} sentinel02_data ."
  662. docker cp ${envv}-sentinel03:/data ${backupdir}/sentinel03_data
  663. write_log info "已备份 哨兵集群 ${envv} sentinel03_data ."
  664. Echo_Yellow " 已备份 哨兵集群 ${envv} sentinel03_data ."
  665. docker cp ${envv}-redis-master:/data ${backupdir}/redis-master_data
  666. write_log info "已备份 哨兵集群 ${envv} master_data ."
  667. Echo_Yellow " 已备份 哨兵集群 ${envv} master_data ."
  668. docker cp ${envv}-redis-slave:/data ${backupdir}/redis-slave_data
  669. write_log info "已备份 哨兵集群 ${envv} slave_data ."
  670. Echo_Yellow " 已备份 哨兵集群 ${envv} slave_data ."
  671. Echo_Yellow " 哨兵集群 ${envv} 配置文件和数据目录已备份"
  672. }
  673.  
  674.  
  675. case $op_cmd in
  676. create)
  677. if [[ -z ${envv} ]] || [[ -z ${cluster_port} ]] || [[ -z ${cluster_name} ]] ;then
  678. create_usage
  679. else
  680. create_cluster
  681. fi
  682. ;;
  683. delete)
  684. if [ -z ${envv} ];then
  685. delete_usage
  686. else
  687. delete_cluster
  688. fi
  689. ;;
  690. restart)
  691. if [ -z ${envv} ];then
  692. restart_usage
  693. else
  694. restart_cluster
  695. fi
  696. ;;
  697. stop)
  698. if [ -z ${envv} ];then
  699. stop_usage
  700. else
  701. stop_cluster
  702. fi
  703. ;;
  704. start)
  705. if [ -z ${envv} ];then
  706. start_usage
  707. else
  708. start_cluster
  709. fi
  710. ;;
  711. ls)
  712. ls_cluster
  713. ;;
  714. show)
  715. if [ -z ${envv} ];then
  716. show_usage
  717. else
  718. show_cluster
  719. fi
  720. ;;
  721. "install --yes --yes")
  722. init_cluster
  723. init_network
  724. ;;
  725. backup)
  726. if [ -z ${envv} ];then
  727. backup_usage
  728. else
  729. bak_cluster
  730. fi
  731. ;;
  732. --help)
  733. create_usage
  734. delete_usage
  735. restart_usage
  736. stop_usage
  737. start_usage
  738. backup_usage
  739. show_usage
  740. ls_usage
  741. install_usage
  742. ;;
  743. *)
  744. $0 --help
  745. ;;
  746. esac

 

 

 

 

版权声明:本文为jixson原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/jixson/p/13261613.html