#!/bin/bash
#Author: 臆想的一只猫
#Created: 2022-04-06 17:42:33
#Description: 搭建redis集群function menu() {clearecho -e "\t\033[1;3;34m----------搭建redis集群----------\033[0m\n"echo -e "\t\t\033[32m0、Exit menu\033[0m"echo -e "\t\t\033[32m1、搭建6主6从服务器\033[0m"echo -e "\t\t\033[32m2、主从扩容案例\033[0m"echo -e "\t\t\033[32m3、主从缩容案例\033[0m"echo -en "\033[46;37mEnter option:\033[0m\t"read -n 1 option
}menu# 启动redis集群
VERSION='redis:6.0.8'
function start_redis() {# --net host:使用宿主机的IP和端口,默认# --cluster-enabled:开启redis集群# --appendonly:开启持久化 for((i=1;i<=6;i++))dodocker run -d --name redis-node-${i} --net host --privileged=true -v /data/volume/redis-cluster/redis-node-${i}:/data ${VERSION} --cluster-enabled yes --appendonly yes --port 638${i}done
}HOST_IP=`ifconfig ens33 | awk 'NR==2{print $2}'`
function print_msg() {echo '进入:docker exec -it redis-node-1 /bin/bash'echo "执行:redis-cli --cluster create ${HOST_IP}:6381 ${HOST_IP}:6382 ${HOST_IP}:6383 ${HOST_IP}:6384 ${HOST_IP}:6385 ${HOST_IP}:6386 --cluster-replicas 1"echo '进入redis:redis-cli -p 6381 -c'echo '查看集群信息:cluster info'echo '查看集群结点:cluster nodes'echo "检查集群状态:redis-cli --cluster check ${HOST_IP}:6381"echo '当Master挂掉之后,Slave将会变成Master继续工作;当Master重新启动之后,将会变成Slave工作'
} IS_REDIS=`docker images | grep redis | grep 6.0.8`
function create_redis_cluster() {if [[ ${IS_REDIS} ]];thenecho '----------开始创建redis集群----------'start_redisecho '----------redis集群创建完成----------'docker psprint_msgelsedocker pull ${VERSION}echo '----------开始创建redis集群----------'start_redisecho '----------redis集群创建完成----------'docker ps print_msgfi
}# redis集群扩容
function add_redis_cluster() {for((i=7;i<=8;i++))dodocker run -d --name redis-node-${i} --net host --privileged=true -v /data/volume/redis-cluster/redis-node-${i}:/data ${VERSION} --cluster-enabled yes --appendonly yes --port 638${i}donedocker psecho '进入6387内部-----> docker exec -it redis-node-7 /bin/bash'echo "将新增的6387作为master节点加入集群 ----- redis-cli --cluster add-node ${HOST_IP}:6387 ${HOST_IP}:6381"echo "检查集群状态 ----- redis-cli --cluster check ${HOST_IP}:6381"echo "重新分派槽号 ----- redis-cli --cluster reshard ${HOST_IP}:6381"echo -e "\t\tHow many slots do you want to move(from 1 to 16384)? ----- 16384 / Master数量 = 4096"echo -e "\t\tWhat is the receiving node ID? ----- 新增Master主机的nodeId ------ eg:35291fb3a26...."echo -e "\t\tSource node #1:----- all"echo "检查集群状态 ----- redis-cli --cluster check ${HOST_IP}:6381"echo '添加新的集群的时候,hash槽不是重新分配,而是之前的匀出来一些给新增加的机器'echo '为Master:6387分配Slave:6388'echo "redis-cli --cluster add-node ${HOST_IP}:6388 ${HOST_IP}:6387 --cluster-slave --cluster-master-id 35291fb3a26....[这个是6387的编号,根据check出来的填写]"echo "检查集群状态 ----- redis-cli --cluster check ${HOST_IP}:6381"docker exec -it redis-node-7 /bin/bash
}# redis集群缩容
function abatement_redis_cluster() {echo "检查集群状态 ----- redis-cli --cluster check ${HOST_IP}:6381"echo "删除Slave:6388 ----- redis-cli --cluster del-node ${HOST_IP}:6388 xxxxxxx[6388的编号,根据check出来的填写]"echo '将6387的槽号清空,本例中全部分配给6381'echo "重新分派槽号 ----- redis-cli --cluster reshard ${HOST_IP}:6381"echo -e "\t\tHow many slots do you want to move(from 1 to 16384)? ----- 16384 / Master数量 = 4096"echo -e "\t\tWhat is the receiving node ID? ----- Master:6381的nodeId ------ eg:35291fb3a26....[接收者]"echo -e "\t\tSource node #1:----- Master:6387的nodeId ------ eg:35291fb3a26....[贡献者]"echo -e "\t\tSource node #2:----- done"echo "检查集群状态 ----- redis-cli --cluster check ${HOST_IP}:6381"echo "删除Master:6387 ----- redis-cli --cluster del-node ${HOST_IP}:6387 xxxxx[6387的编号]"echo "检查集群状态 ----- redis-cli --cluster check ${HOST_IP}:6381"docker exec -it redis-node-1 /bin/bash
}case $option in
0)echo -e "\n\n\n\n\033[3;1;35m已退出!!!\033[0m\n\n"exit;;
1)echo ''create_redis_cluster;;
2)echo ''add_redis_cluster;;
3)echo ''abatement_redis_cluster;;
*)clearecho -e "\n\n\033[3;1;35m键入参数有误,GoodBey!!!\033[0m\n\n";;
esac

部署

#!/bin/bashVOLUME_PATH='/data/volumes/redis-cluster'
VERSION='redis:6.0.8'for port in $(seq 2001 2006);
domkdir -p ${VOLUME_PATH}/redis-node-${port}/conftouch ${VOLUME_PATH}/redis-node-${port}/conf/redis.confcat << EOF >${VOLUME_PATH}/redis-node-${port}/conf/redis.conf
port ${port}
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 1.117.196.59
cluster-announce-port ${port}
cluster-announce-bus-port 1${port}
appendonly yes
EOFdocker run -p ${port}:${port} -p 1${port}:1${port} --name redis-${port} --privileged=true --restart=always -v ${VOLUME_PATH}/redis-node-${port}/data:/data -v ${VOLUME_PATH}/redis-node-${port}/conf/redis.conf:/etc/redis/redis.conf -d ${VERSION} redis-server /etc/redis/redis.conf;
done# 外部访问使用公网IP redis-cli --cluster create ${HOST_IP}:2001 ${HOST_IP}:2002 ${HOST_IP}:2003 ${HOST_IP}:2004 ${HOST_IP}:2005 ${HOST_IP}:2006 --cluster-replicas 1

docker搭建redis集群相关推荐

  1. 基于Docker搭建Redis集群(主从集群)

    最近陆陆续续有不少园友加我好友咨询 redis 集群搭建的问题,我觉得之前写的这篇 <基于Docker的Redis集群搭建> 文章一定是有问题了,所以我花了几分钟浏览之前的文章总结了下面几 ...

  2. 使用docker搭建redis集群

    使用docker搭建redis集群有两种,一种是单机多个docker容器,一种是多个机器的集群 基础知识 每个Redis集群中的节点都需要打开两个TCP连接.一个连接用于正常的给Client提供服务, ...

  3. mac os 开启redis_高并发大流量,总会想到它!来一起通过docker搭建redis集群

    现在一般的项目都会用到redis做缓存,也不免有老铁没用过,我就一起说下吧. redis 官网 https://redis.io/ Redis是一个开源(BSD许可)的内存数据结构存储,用作数据库.缓 ...

  4. 利用Docker搭建Redis集群

    Redis集群搭建 运行Redis镜像 分别使用以下命令启动3个Redis docker run --name redis-6379 -p 6379:6379 -d hub.c.163.com/lib ...

  5. Linux_基于Docker搭建Redis集群

    时间:2017年07月11日星期二 说明:基于Ubuntu16.04-64bit,开始本教程前,请确保您的Linux系统已安装Docker. 步骤一:Redis镜像安装 1.下载Redis镜像 镜像中 ...

  6. 在单机上通过docker搭建redis集群试验

    一 Redis集群搭建 1.1 运行redis镜像 [root@centos-linux docker]# docker run -id --name=redis-6379 -p 6379:6379 ...

  7. ubuntu中使用docker搭建redis集群

    docker的安装,redis镜像拉取 创建外部桥接网络 docker network create -d macvlan --subnet=192.168.148.0/24 --gateway=19 ...

  8. Docker 搭建 Redis 集群以及哈希槽动态扩容

    一.创建网络 docker network create --subnet=172.10.1.0/24 redis 二.创建 Redis 容器 创建6个redis实例 docker create -- ...

  9. 群辉通过Docker搭建Redis集群

    前言:打算整理一下redis使用分布式锁的方案,但是家里没有环境,刚好最近新搞了一台群辉,就用群辉来部署一个集群来做测试环境. 1,安装Docker 通过套件中心,在所有套件中找到Docker,然后点 ...

最新文章

  1. 排查IDEA 全局搜索快捷键Ctrl +Shift+F不起作用的原因和解决方法
  2. [导入]JavaScript 滑动条效果
  3. 关于MVC框架和spring
  4. 总是想得太简单?试试我的方法
  5. linux 编译指cpu内核,linux内核编译与配置
  6. 商城html源码_Java开源商城源码推荐,从菜鸡到大神,永远绕不开的商城系统
  7. 5G赋能中国智慧教育
  8. java dib文件 加位图文件头_位图(bmp)文件格式分析
  9. 解决苹果os 10.9 和 parallels desktop 8 兼容问题
  10. java 中特殊的_Java中一些特殊关键字
  11. c#调用microsoft word将word另存为pdf
  12. 修改k8s的集群域名后缀
  13. 详细的Faster R-CNN源码解析之proposal_layer和proposal_target_layer源码解析
  14. dpdk加速网络协议栈ANS用户手册
  15. CRM管理软件有哪些?这5款好用的CRM软件值得推荐!
  16. 成都拓嘉启远:拼多多推广如何自己添加关键词
  17. centos查看dns缓存_centos的dns配置总结
  18. 互联网日报 | 4月14日 星期三 | 贾跃亭被终身禁入证券市场;天猫4月19日起降低开店门槛;小米正式迈入游戏手机细分赛道...
  19. Glide 加载矩形圆角图片
  20. 斯坦福CS231n李飞飞计算机视觉之线性分类上

热门文章

  1. 左右两侧浮动广告代码
  2. Python_爬虫_中文乱码
  3. Chrome浏览器自带截长图功能,只需两个快捷键!
  4. python识别麻将牌_图像识别之麻将识别源码( 三 )
  5. php判断数组的值是否为空,PHP判断数组(多维数组)值是否为空
  6. 解决关于java的IO流进行文件拷贝时拒绝访问的问题
  7. 区块链发展第三阶段:去中心化金融
  8. string拼接时去掉最后一个逗号
  9. 微程序控制器的基本原理
  10. webgl_gpgpu_birds 样例分析