三、單redis升級redis集群+哨兵

来源:https://www.cnblogs.com/dingdingCat/archive/2022/05/12/16259015.html
-Advertisement-
Play Games

針對假如已經是安裝了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升級完成。

請各位看官大大參與評論,指點不足~


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 介紹 powerjob提供了容器功能,用來做一些靈活的任務處理。這裡容器為 JVM 級容器,而不是操作系統級容器(Docker)。(至於為什麼取“容器”這個有歧義的名字是因為作者沒想出來更合適的稱呼,哈哈) 用途 有一些任務完全獨立於業務,代碼量也不大,既不希望耦合於原業務代碼,也不值得再搞一套新建 ...
  • 一、問題描述 1、項目需求要求使用PHP8.1.*版本 2、運行程式發現驗證碼不生效報錯如下: 二、錯誤描述 1、報錯信息得出:從浮點(數字)到整數的隱式轉換將失去精度 三、解決流程 1、找到報錯文件位置 vendor\topthink\think-captcha\src\Captcha.php l ...
  • 桑基圖,它的核心是對不同點之間,通過線來連接。線的粗細代表流量的大小。很多工具都能實現桑基 圖,比如:Excel、tableau,我們今天要用 Pyecharts 來繪製。 因為沒有用戶行為路徑相關的公開數據,所以本次實現可視化是根據泰坦尼克號,其生存與遇難的人的 數據,來分析流向路徑。學會思路,你 ...
  • 一個工作3年的小伙子,去面試被問到Spring裡面的問題。 這個問題比較簡單,但是他卻沒有回答上來。 雖然他可以通過搜索引擎找到答案,但是如果沒有理解,下次面試還是不會! 這個面試題是: “Spring中的Bean,作用域有哪些?” 對於這個問題,看看普通人和高手的回答。 普通人: 嗯。。。。。。。 ...
  • 你是否有遇到過這樣的情況,在開發過程中需要比較兩列數據,但使用文本比對工具的話他是按行基準比對的,我還得對每列數據先進行排序,但排序又去哪裡排, 想到 excel 可以排序 , 折騰下來,特別麻煩, 不知道為啥這麼一個小工具都沒有人提供, 這裡 sanri-tools-maven 提供了這個小工具, ...
  • 半年前我開源了 DreamScene2 一個小而快並且功能強大的 Windows 動態桌面軟體。有很多的人喜歡,這使我有了繼續做開源的信心。這是我的第二個開源作品 ScreenshotEx 一個簡單易用的 Windows 截屏增強工具。 歡迎 Star 和 Fork https://github.c ...
  • 在項目中有一個需求是需要在區域網內跨PC遠程調用一個程式,並且要求有界面顯示,調查了一些資料,能實現遠程調用的.Net技術大概有PsExec、WMI、Schedule Task。 這三種方式都做了一個嘗試,結果發現PsExec、WMI都只能在進程列表中看到程式執行,卻無法顯示界面,無法執行程式中的管 ...
  • 本文先給出“win10找不到無線網路報錯”的通用解決方案,併在方案中介紹本次出現的“Windows無法自動將IP協議堆棧綁定到網路適配器”問題。 ...
一周排行
    -Advertisement-
    Play Games
  • 基於.NET Framework 4.8 開發的深度學習模型部署測試平臺,提供了YOLO框架的主流系列模型,包括YOLOv8~v9,以及其系列下的Det、Seg、Pose、Obb、Cls等應用場景,同時支持圖像與視頻檢測。模型部署引擎使用的是OpenVINO™、TensorRT、ONNX runti... ...
  • 十年沉澱,重啟開發之路 十年前,我沉浸在開發的海洋中,每日與代碼為伍,與演算法共舞。那時的我,滿懷激情,對技術的追求近乎狂熱。然而,隨著歲月的流逝,生活的忙碌逐漸占據了我的大部分時間,讓我無暇顧及技術的沉澱與積累。 十年間,我經歷了職業生涯的起伏和變遷。從初出茅廬的菜鳥到逐漸嶄露頭角的開發者,我見證了 ...
  • C# 是一種簡單、現代、面向對象和類型安全的編程語言。.NET 是由 Microsoft 創建的開發平臺,平臺包含了語言規範、工具、運行,支持開發各種應用,如Web、移動、桌面等。.NET框架有多個實現,如.NET Framework、.NET Core(及後續的.NET 5+版本),以及社區版本M... ...
  • 前言 本文介紹瞭如何使用三菱提供的MX Component插件實現對三菱PLC軟元件數據的讀寫,記錄了使用電腦模擬,模擬PLC,直至完成測試的詳細流程,並重點介紹了在這個過程中的易錯點,供參考。 用到的軟體: 1. PLC開發編程環境GX Works2,GX Works2下載鏈接 https:// ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • 1、jQuery介紹 jQuery是什麼 jQuery是一個快速、簡潔的JavaScript框架,是繼Prototype之後又一個優秀的JavaScript代碼庫(或JavaScript框架)。jQuery設計的宗旨是“write Less,Do More”,即倡導寫更少的代碼,做更多的事情。它封裝 ...
  • 前言 之前的文章把js引擎(aardio封裝庫) 微軟開源的js引擎(ChakraCore))寫好了,這篇文章整點js代碼來測一下bug。測試網站:https://fanyi.youdao.com/index.html#/ 逆向思路 逆向思路可以看有道翻譯js逆向(MD5加密,AES加密)附完整源碼 ...
  • 引言 現代的操作系統(Windows,Linux,Mac OS)等都可以同時打開多個軟體(任務),這些軟體在我們的感知上是同時運行的,例如我們可以一邊瀏覽網頁,一邊聽音樂。而CPU執行代碼同一時間只能執行一條,但即使我們的電腦是單核CPU也可以同時運行多個任務,如下圖所示,這是因為我們的 CPU 的 ...
  • 掌握使用Python進行文本英文統計的基本方法,並瞭解如何進一步優化和擴展這些方法,以應對更複雜的文本分析任務。 ...
  • 背景 Redis多數據源常見的場景: 分區數據處理:當數據量增長時,單個Redis實例可能無法處理所有的數據。通過使用多個Redis數據源,可以將數據分區存儲在不同的實例中,使得數據處理更加高效。 多租戶應用程式:對於多租戶應用程式,每個租戶可以擁有自己的Redis數據源,以確保數據隔離和安全性。 ...