三、单redis升级redis集群+哨兵

针对假如已经是安装了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升级完成。

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

posted @ 2022-05-12 17:48  铁铁的收集箱  阅读(213)  评论(0编辑  收藏  举报