針對假如已經是安裝了redis,只是是單部署,需要把他切換成redis集群+哨兵模式,我因為偷懶,就寫了個腳本來執行,各位看官,請品~你品~你細品~ 首先準備個升級包,放到任意路徑,內容如下: 第一個文件不用管,第二個跟第四個,是把裡面的配置改好,如何配置請參考我之前寫的redis集群一, 然後是u ...
針對假如已經是安裝了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升級完成。
請各位看官大大參與評論,指點不足~