针对假如已经是安装了redis,只是是单部署,需要把他切换成redis集群+哨兵模式,我因为偷懒,就写了个脚本来执行,各位看官,请品~你品~你细品~

首先准备个升级包,放到任意路径,内容如下:

第一个文件不用管,第二个跟第四个,是把里面的配置改好,如何配置请参考我之前写的redis集群一,

然后是upgrade.sh脚本内容:

  1 #!/bin/bash
2
3 base_path=/home/zmoon
4 redis_package_name=redis-5.0.12
5
6 #安装文件名称(安装文件位置=安装位置+安装文件名称)
7 redis_path=/redis-5.0.12
8 redis_conf=/etc/redis.conf
9 sentinel_conf=/etc/sentinel.conf
10 monitor_redis=/home/zmoon/bin
11
12
13
14 #判断redis是否安装
15 check_redis(){
16 if [ -d "$base_path$redis_path" ]; then
17 echo "redis 已安装,无需再次安装!"
18 return 1
19 else
20 return 0
21 fi
22 }
23
24 #判断etc
25 check_redis_conf(){
26 if [ -f "$base_path$redis_path$redis_conf" ]; then
27 echo "redis.conf 已存在,无需再次安装!"
28 return 1
29 else
30 return 0
31 fi
32 }
33
34 #判断etc redis.conf,sentinel.conf是否存在
35 check_sentinel_conf(){
36 if [ -f "$base_path$redis_path$sentinel_conf" ]; then
37 echo "sentinel.conf 已存在,无需再次安装!"
38 return 1
39 else
40 return 0
41 fi
42 }
43
44
45 copy_redis_conf(){
46 mkdir -p $base_path$redis_path/etc
47 cp redis.conf $base_path$redis_path/etc/redis.conf
48 return 2
49 }
50
51 copy_sentinel_conf(){
52 mkdir -p $base_path$redis_path/etc
53 cp sentinel.conf $base_path$redis_path/etc/sentinel.conf
54 return 2
55 }
56
57 copy_monitor_sh(){
58 cp install-zm-redis.sh $monitor_redis/install-zm-redis.sh
59 return 2
60 }
61
62 install_redis(){
63 echo "安装redis"
64
65 tar -zxvf $redis_package_name.tar.gz
66
67 echo "开始编译及安装。。。"
68 cd $redis_package_name
69
70 make
71 make PREFIX=$base_path$redis_path install
72
73 #切换到redis目录 新建etc文件夹
74 mkdir -p $base_path$redis_path/etc
75
76 cd ..
77
78 #把配置好的文件复制过来
79 cp redis.conf $base_path$redis_path/etc/redis.conf
80 cp sentinel.conf $base_path$redis_path/etc/sentinel.conf
81
82 return 2
83
84 }
85
86 main(){
87 echo "base_path:$base_path"
88
89 #判断当前用户是否为root用户,不是则终止部署
90 if [ `whoami` != "root" ]; then
91 echo "部署请将用户切换到root用户,安装终止"
92 exit 1
93 fi
94
95 if [ ! -d "$base_path" ]; then
96 mkdir $base_path
97 fi
98
99 #检查是否有redis进程
100 # 停止正在运行的services-应用
101 echo "检查是否有redis进程"
102 pids=`ps -ef|grep redis-server|grep -v 'grep'|awk '{print $2}'`
103 pidsentinel=`ps -ef|grep redis-sentinel|grep -v 'grep'|awk '{print $2}'`
104 pids=${pids%/*}
105 if [ -n "$pids" ];then
106 for pid in $pids
107 do
108 kill -9 $pid
109 done
110 fi
111
112 pidsentinel=${pidsentinel%/*}
113 if [ -n "$pidsentinel" ];then
114 for pid in $pidsentinel
115 do
116 kill -9 $pid
117 done
118 fi
119
120 echo "------------------------------------------------"
121 echo "Redis service stop"
122 echo "------------------------------------------------"
123
124 #安装redis
125 check_redis
126 if [ $? -eq 0 ]; then
127 install_redis
128
129 if [ $? -eq 2 ]; then
130 echo "redis 安装成功!"
131 else
132 echo "redis 安装失败,安装终止!"
133 exit 1
134 fi
135 fi
136
137 #安装redis
138 check_redis_conf
139 if [ $? -eq 0 ]; then
140 copy_redis_conf
141
142 if [ $? -eq 2 ]; then
143 echo "redis.conf copy成功!"
144 else
145 echo "redis.conf copy失败,copy终止!"
146 exit 1
147 fi
148 fi
149
150 #安装redis
151 check_sentinel_conf
152 if [ $? -eq 0 ]; then
153 copy_sentinel_conf
154
155 if [ $? -eq 2 ]; then
156 echo "sentinel.conf copy成功!"
157 else
158 echo "sentinel.conf copy失败,copy终止!"
159 exit 1
160 fi
161 fi
162
163 copy_monitor_sh
164
165 if [ $? -eq 2 ]; then
166 echo "看门猫redis脚本 copy成功!"
167 else
168 echo "看门猫redis脚本 copy失败,copy终止!"
169 exit 1
170 fi
171
172 #提示“请输入当前节点IP(xx.xx.xx.xx):”,把输入IP保存入变量selfIp中
173 read -p "请输入当前节点IP(xx.xx.xx.xx):" selfIp
174 #提示“请输入Redis主节点IP(xx.xx.xx.xx):”,把输入IP保存入变量nodeIp中
175 read -p "请输入当前主节点IP(xx.xx.xx.xx):" nodeIp
176
177
178 if [ $selfIp = $nodeIp ]
179 then
180 sed -i 's#.*'"sentinel monitor mymaster.*#sentinel monitor mymaster ${nodeIp} 6379 2"'#' /home/zmoon/redis-5.0.12/etc/sentinel.conf
181 else
182 echo -e "replicaof ${nodeIp} 6379" >> /home/zmoon/redis-5.0.12/etc/redis.conf
183
184 sed -i 's#.*'"sentinel monitor mymaster.*#sentinel monitor mymaster ${nodeIp} 6379 2"'#' /home/zmoon/redis-5.0.12/etc/sentinel.conf
185 fi
186
187 #启动redis
188 $base_path$redis_path/bin/redis-server $base_path$redis_path/etc/redis.conf &
189 $base_path$redis_path/bin/redis-sentinel $base_path$redis_path/etc/sentinel.conf &
190 }
191 main $1
192 exit 0

里面首先判断是否有redis进程与sentinel进程,有则kill掉,

然后又判断是否有安装redis,

然后是etc下的两个配置文件是否存在,

进而是修改配置文件的内容,

最后启动redis服务与哨兵服务,redis升级完成。

请各位看官大大参与评论,指点不足~

三、单redis升级redis集群+哨兵的更多相关文章

  1. Redis高可用集群-哨兵模式(Redis-Sentinel)搭建配置教程【Windows环境】

    No cross,no crown . 不经历风雨,怎么见彩虹. Redis哨兵模式,用现在流行的话可以说就是一个"哨兵机器人",给"哨兵机器人"进行相应的配置 ...

  2. Redis高可用集群-哨兵模式(Redis-Sentinel)

     前言 Redis哨兵模式,用现在流行的话可以说就是一个“哨兵机器人”,给“哨兵机器人”进行相应的配置之后,这个"机器人"可以7*24小时工作,它能能够自动帮助你做一些事情,如监控 ...

  3. 基于Docker-compose搭建Redis高可用集群-哨兵模式(Redis-Sentinel)

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_110 我们知道,Redis的集群方案大致有三种:1)redis cluster集群方案:2)master/slave主从方案:3) ...

  4. 基于docker实现redis高可用集群

    基于docker实现redis高可用集群 yls 2019-9-20 简介 基于docker和docker-compose 使用redis集群和sentinel集群,达到redis高可用,为缓存做铺垫 ...

  5. redis主从、集群、哨兵

    redis的主从.集群.哨兵 参考: https://blog.csdn.net/robertohuang/article/details/70741575 https://blog.csdn.net ...

  6. php操作redis集群哨兵模式

    前段时间项目里正好用到了redis的集群哨兵部署,因为此前并无了解过,所以一脸懵逼啊,查阅了几篇资料,特此综合总结一下,作为记录. 写在前沿:随着项目的扩张,对redis的依赖也越来越大,为了增强re ...

  7. (六) Docker 部署 Redis 高可用集群 (sentinel 哨兵模式)

    参考并感谢 官方文档 https://hub.docker.com/_/redis GitHub https://github.com/antirez/redis happyJared https:/ ...

  8. Redis+Twemproxy+HAProxy集群(转) 干货

    原文地址:Redis+Twemproxy+HAProxy集群  干货 Redis主从模式 Redis数据库与传统数据库属于并行关系,也就是说传统的关系型数据库保存的是结构化数据,而Redis保存的是一 ...

  9. 通过 Docker 部署 Redis 6.x 集群

    要点步骤总结: # 这里演示使用同一台主机上 # 创建各节点存储路径 mkdir -p /opt/redis/{7000,7001,7002,7003,7004,7005} # 创建各节点配置文件 c ...

随机推荐

  1. SpringCloud个人笔记-01-Eureka初体验

    eureka是一个高可用的组件,它没有后端缓存,每一个实例注册之后需要向注册中心发送心跳,在默认情况下erureka server也是一个eureka client ,必须要指定一个 serve &l ...

  2. Effective Java —— 多字段下考虑使用建造者模式构建实例

    本文参考 本篇文章参考自<Effective Java>第三版第二条"Consider a builder when faced with many constructor pa ...

  3. can总线第一讲

    一  官方简介如下: 控制器局域网CAN(Controller Area Network),是由德国Bosch公司为汽车应用而开发的多主机局部网络,应用于汽车的监测和控制.德国Bosch公司开发CAN ...

  4. c语言实现两数交换的三种方法

    实现变量的值互相交换的三种不同方法 方法一:利用第三个变量来实现数值的交换 int tmp; tmp = a; a = b; b = tmp; 此方法直观,简易.不易出错,推荐使用 方法二:利用两个变 ...

  5. H5扇形

    使用H5 canvas绘制的可交互扇形 requestAnimationFrame() 现有动画实现方式的不足 setTimeout和setInterval都不十分精确.为它们传入的第二个参数,实际上 ...

  6. 基于mongodb的搜索分页

    mongodb模糊查询并分页 1.建立数据库 代码如下: var mongoose = require('mongoose'); var shortid = require('shortid'); v ...

  7. 小小标签,强大功能——深藏不露的 <input>

    <input> 虽只是一个看似简单的 HTML 表单元素,但它这么一个单一的元素,就有多达 30 多个属性(attribute),相信无论你是个小菜鸟还是像我一样写了 15 年 HTML ...

  8. js和原生应用常用的数据交互方式

    场景1 在原生app中经常会使用到H5页面,比如说电商中的活动页,一些电商中的详情页,等等...这些页面都有一个特点,那就是在未来修改的可能性,和一次性的几率特别的大.所以用H5的页面是最睿智的一种选 ...

  9. CSS - 定位属性position使用详解(static、relative、fixed、absolute)

    position 属性介绍 (1)position 属性自 CSS2 起就有了,该属性规定元素的定位类型.所有主流浏览器都支持 position 属性. (2)position 的可选值有四个:sta ...

  10. npm权限不够(安装什么都报错)

    问题 Windows下使用npm安装任何包都报错, Windows下使用npm显示权限不够 如图: 解决方法    1. 方法一    使用管理员权限打开 命令窗口,  治标不治本!!!!不推荐    ...