针对假如已经是安装了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. hitcon_2017_ssrfme

    hitcon_2017_ssrfme 进入环境给出源码 <?php if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { $http_x_headers ...

  2. Azure DevOps 中 Dapr项目自动部署流程实践

    注:本文中主要讨论 .NET6.0项目在 k8s 中运行的 Dapr 的持续集成流程, 但实际上不是Dapr的项目部署到K8s也是相同流程,只是k8s的yaml配置文件有所不同 流程选择 基于 Dap ...

  3. RESTful API/Web API

    Microsoft REST API Guidelines Are Not RESTful White House Web API Standards Microsoft REST API Guide ...

  4. Cloud Design Patterns & Architecture Styles

    Cloud Design Patterns Categories Data Management Design and Implementation Messaging Patterns Ambass ...

  5. ES6-11学习笔记--const

    新声明方式:const 1.不属于顶层对象 window 2.不允许重复声明 3.不存在变量提升 4.暂时性死区 5.块级作用域   以上特性跟let声明一样,特性可看 let 的学习笔记:链接跳转 ...

  6. 设计模式之简单工厂SimpleFactory的实现

    internal interface Chart { void Display(); } internal class LineChart : Chart { public LineChart() { ...

  7. TensorFlow使用GPU训练时CPU占用率100%而GPU占用率很低

    在训练keras时,发现不使用GPU进行计算,而是采用CPU进行计算,导致计算速度很慢. 用如下代码可检测tensorflow的能使用设备情况: from tensorflow.python.clie ...

  8. swig模板引擎和ejs模板引擎

    swig模板引擎的基本用法: 1. 变量 {{ name }}  //name名前后必须要加空格,不加就会报错 2. 属性 {{ student.name }} 3. 模板继承 swig使用exten ...

  9. 解决PHP下载大文件失败,并限制下载速度

    1.问题: PHP在使用readfile函数定义下载文件时候,文件不可以过大,否则会下载失败,文件损坏且不报错: 2.原因: 这个是因为readfile读取文件的时候会把文件放入缓存,导致内存溢出: ...

  10. 轻量化安装 TKEStack:让已有 K8s 集群拥有企业级容器云平台的能力

    关于我们 更多关于云原生的案例和知识,可关注同名[腾讯云原生]公众号~ 福利: ①公众号后台回复[手册],可获得<腾讯云原生路线图手册>&<腾讯云原生最佳实践>~ ②公 ...