Docker部署Redis哨兵集群脚本V1

基础环境

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

         Docker 版本  19.03.11, build 42e35e61f3

         Redis  版本  3.2.3-alpine


网络配置使用docker macvlan ,创建命令如下:

docker network create -d macvlan --subnet=10.10.10.0/24 --gateway=10.10.10.1 -o parent=eth0 macnet



脚本内容如下:

参数解释:

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配置文件目录

envv                    环境配置,为区分多套集群配置,暂时写死


#!/bin/bash

#Author: Jixson

#Date: 2020-07-02

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:3.2.3-alpine"

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="/jixson/redis"

base_conf_dir="${base_dir}/conf"

envv="gemini"

mkdir -p ${envv}

#Get IP address

#创建macvlan网络后,把可用IP写入ipmark文件,把已使用的IP写入ipmark_assigned

#由于macvlan自动分配的IP可能与局域网内的IP冲突,故实际使用时,可以使用--iprange参数,限制使用范围

master_ip=$(cat ipmark | head -1)

sed -i "/^${master_ip}/d" ipmark

echo "${master_ip} assigned" >> ipmark_assigned

slave_ip=$(cat ipmark | head -1)

sed -i "/^${slave_ip}/d" ipmark

echo "${slave_ip} assigned" >> ipmark_assigned

sentinel_ip01=$(cat ipmark | head -1)

sed -i "/^${sentinel_ip01}/d" ipmark

echo "${sentinel_ip01} assigned" >> ipmark_assigned

sentinel_ip02=$(cat ipmark | head -1)

sed -i "/^${sentinel_ip02}/d" ipmark

echo "${sentinel_ip02} assigned" >> ipmark_assigned

sentinel_ip03=$(cat ipmark | head -1)

sed -i "/^${sentinel_ip03}/d" ipmark

echo "${sentinel_ip03} assigned" >> ipmark_assigned

#声明主机,写入容器内的hosts

hn1="--add-host=redisdata01.xxx.com:${master_ip}"

hn2="--add-host=redisdata02.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" "${base_dir}/${envv}/redis-master.conf"

master_conf="${base_dir}/${envv}/redis-master.conf"

masterconf="-v ${master_conf}:${redis_conf}"

#生成slave conf

\cp -f "${base_conf_dir}/redis-slave.conf" "${base_dir}/${envv}/redis-slave.conf"

slave_conf="${base_dir}/${envv}/redis-slave.conf"

slaveconf="-v ${slave_conf}:${redis_conf}"

#生成sentinel conf

\cp -f "${base_conf_dir}/sentinel.conf" "${base_dir}/${envv}/sentinel01.conf"

sentinel01_conf="${base_dir}/${envv}/sentinel01.conf"

sentinel01conf="-v ${sentinel01_conf}:${sentinel_conf}"

\cp -f "${base_conf_dir}/sentinel.conf" "${base_dir}/${envv}/sentinel02.conf"

sentinel02_conf="${base_dir}/${envv}/sentinel02.conf"

sentinel02conf="-v ${sentinel02_conf}:${sentinel_conf}"

\cp -f "${base_conf_dir}/sentinel.conf" "${base_dir}/${envv}/sentinel03.conf"

sentinel03_conf="${base_dir}/${envv}/sentinel03.conf"

sentinel03conf="-v ${sentinel03_conf}:${sentinel_conf}"

#run redis

docker run -d --network macnet --ip=$master_ip $redis_quota $hosts --name redis-master ${masterconf} ${image} ${cmd}

docker run -d --network macnet --ip=$slave_ip  $redis_quota $hosts --name redis-slave  ${slaveconf}  ${image} ${cmd}

#run sentinel

docker run -d --network macnet --ip=$sentinel_ip01 $sentinel_quota $hosts --name sentinel01 ${sentinel01conf} ${image} ${sentinel_cmd}

docker run -d --network macnet --ip=$sentinel_ip02 $sentinel_quota $hosts --name sentinel02 ${sentinel02conf} ${image} ${sentinel_cmd}

docker run -d --network macnet --ip=$sentinel_ip03 $sentinel_quota $hosts --name sentinel03 ${sentinel03conf} ${image} ${sentinel_cmd}


创建后的效果

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。