Redis4.0 Cluster — Centos7

来源:http://www.cnblogs.com/tdws/archive/2017/10/22/7710545.html
-Advertisement-
Play Games

Redis4.0 Cluster — Centos7, Ruby redis-trib.rb , gem redis ...


本文版權歸博客園和作者吳雙本人共同所有 轉載和爬蟲請註明原文地址 www.cnblogs.com/tdws

一.基礎安裝

wget http://download.redis.io/releases/redis-4.0.0.tar.gz

tar xzf redis-4.0.0.tar.gz

cd redis-4.0.0

cd src

make

make test

./redis-server ../redis.conf

ps -ef |grep redis  查看redis進程
netstat -lntp | grep 6380  查詢指定埠監聽

kill -9 進程id  強制殺死redis進程

二. 4.0版本初步瞭解

Redis4.0中增加了UNLINK 命令(替換del命令),這個命令在刪除體積較大的鍵時,命令在後臺線程裡面執行,還有非同步的flushdb和flushall命令分別是

flushdb async

flushall async

儘可能的避免了伺服器阻塞。

增加了交換資料庫命令,比如SWAPDB 0 1 ,交換0庫和1庫

增加了memory命令,可以視察記憶體使用情況,通過help命令可以看到

127.0.0.1:6379> memory help

1) "MEMORY USAGE <key> [SAMPLES <count>] - Estimate memory usage of key"

2) "MEMORY STATS - Show memory usage details"

3) "MEMORY PURGE - Ask the allocator to release memory"

4) "MEMORY MALLOC-STATS - Show allocator internal stats"

MEMORY USAGE <key> 預估指定key所需記憶體

MEMORY STATS 視察記憶體使用詳情

MEMORY PURGE 向分配器索要釋放更多記憶體

MEMORY MALLOC-STATS 視察分配器內部狀態

另外還有一系列優化比如 LRU和PSYNC,還有模塊系統。

三.Cluster

 雖然一主一從加哨兵可以解決普通場景下服務可用的問題,但是兩個節點分別存儲所有的緩存數據,這不僅導致容量受限,更是讓我們受限於機器配置最差的那一臺,這就是木桶效應。硬體垂直擴容並不能解決日益龐大的緩存數據量和提供能搞得可用性。

在古老的Redis版本中,水平擴容的能力來自於發送命令的客戶端,由客戶端路由不同的key給到不同的節點,下次讀取的時候,也按照相同方式路由key到指定節點拿到數據。如果接下來還希望增加擴容節點的話,就要對歷史緩存數據做遷移,遷移過程中為保證數據一致性也要付出一定代價。為瞭解決節點的不斷擴容,設計初期可以預先設置很多節點,以備日後使用,所有設計的節點都參與到分片當中,鑒於初期數據較少,可單台伺服器多個節點,在日後數據增多的情況下,只需要遷移節點到新的伺服器。而不需要對數據進行重新分配等操作。但是這種做法依然讓我們覺得難維護,難遷移,難應對故障,遷移過程中也很難保證數據一致性,比如50個節點,任意一個節點想要停止並遷移伺服器,都會引發數據不一致或者出現故障,只能停止集群,等待遷移完成後,集群上線。

Redis3.0提供了Cluster集群。這個集群的概念和前面提到的集群有所不同。前面的集群僅代表,多個節點間沒有相互的關係,只是根據客戶端路由分配key到不同的節點,所有節點共同分配所有數據。3.0的Cluster功能,擁有和單機實例相同的性能,幾乎支持所有命令,對於涉及多個鍵的命令,比如MGET,如果每一個鍵都在同一個節點則可以正常返回數據,否則提示錯誤。另外集群中限制了0號資料庫,如果切換資料庫則會提示錯誤。

哨兵和集群是兩個獨立的功能,但從特性來看哨兵可以視為集群的子集。當不需要數據分片或者已經利用客戶端分片的場景下哨兵已經足夠使用,如果需要水平擴容,Cluster是非常好的選擇。

每個集群至少三台主節點。

到redis-4.0.0目錄下 修改redis.conf

修改所有redis.conf文件 在GENERAL一般設置中找到daemonize 將其設置為yes 我們將後臺運行redis

protect mode為no

bind ip為0.0.0.0

集群搭建成功前不要設置連接密碼。

設置maxmemory 100m

cluster-enabled設置為yes

註意cluster-config-file配置不同的名稱。我剛開始給每個節點都配置nodes.conf , 結果弄了幾個小時都不行,一直在waiting claster join. WTF??? 工作目錄明明都是自己的文件夾呀,後來在stackoverflow上 看到有人相同情況,我就改下配置文件名試了一下,還真可以了....

把redis-4.0.0文件夾複製6份

我準備了兩台伺服器,當然一臺伺服器也是可以玩轉的。

六個節點分別啟動,此時集群是不能正常工作的,因為他們還是六個獨立的節點。下麵我們要使用src目錄下的redis-trib.rb來將他們加入到同一個集群當中。但是.rb由Ruby編寫,我們需要安裝環境,還需要gem redis包。yum install ruby下載的是2.0版本,並且得不到升級, 我們需要ruby2.2+,所以我們不使用。ruby安裝指南http://blog.csdn.net/lixwjava/article/details/49231899

wget https://cache.ruby-lang.org/pub/ruby/2.2/ruby-2.2.7.tar.gz
tar -zxvf ruby-2.2.7.tar.gz  
cd  ruby-2.2.7
./configure  
make  
make test
make install  
如果順利的話就安裝完ruby了
如果沒有zlib 先安裝一下
yum install zlib-devel
yum install zlib
接下來進入ruby文件夾下ext/zlib中 安裝ruby自身提供的zlib包
cd ext/zlib
ruby ./extconf.rb
make
make install

另外需要安裝openssl (不裝也行) http://blog.csdn.net/yangxuan0261/article/details/52065158  如果沒裝,更換gem鏡像為非ssl的中國ruby鏡像https://ruby.taobao.org/ 

gem sources --add http://gems.ruby-china.org/ --remove https://rubygems.org/
gem sources -l
gem install redis.

在執行create cluster之前 請保證每個node的0庫不包含任何key.如果有key 就對不純潔的節點執行flushall和cluster reset 。每個Node都有一個特定的TCP埠,用來接收其他nodes的鏈接;此埠號為面向Client的埠號 + 10000,比如果客戶端埠號為6379,那麼次node的BUS埠號為16379,客戶端埠號可以在配置文件中聲明。由此可見,nodes之間的交互通訊是通過Bus埠進行,使用了特定的二進位協議,此埠通常應該只對nodes可用,可以藉助防火牆技術來屏蔽其他非法訪問。所以註意我們的所有節點埠+10000 也要保持開放

./redis-trib.rb create --replicas 1 47.92.93.157:6379 47.92.93.157:6380 47.92.93.157:6381 47.92.93.157:6382 47.92.93.157:6383 47.92.93.157:6384

啟動redis-cli 使用-c參數 連接集群,將會為我們做一些自動重定向工作。

 

 設置集群密碼:

config set masterauth abc  
config set requirepass abc  
config rewrite  

 


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

-Advertisement-
Play Games
更多相關文章
  • 1. 前言 最近學習ABP架構 搭建ASP.NET Core with Angular遇到了些問題,折騰了一個禮拜最終在今天解決了,想想這個過程的痛苦就想利用博客記錄下來。其實一直想寫博客,但因為 時間忙和惰性一直沒有寫。之前也遇到些問題,費了很大勁最後解決了,但過了好久又遇到類似問題,但想不起來之 ...
  • 一, onmouseover 和 onmouseout 事件 onmouseover 和 onmouseout 事件可用於在用戶的滑鼠移至 HTML 元素上方或移出元素時觸發函數。 一個小例:滑鼠未在上面前 移到上面後 二, onmousedown、onmouseup 以及 onclick 事件 o ...
  • 前言 之前翻博客園的時候,看到有人朋友分享阿裡巴巴的面試題,其中有一道題就是關於ES6轉ES5 原理的,當時我看到感覺到自己離去阿裡巴巴的路還很遠啊,像我們大部分做開發的時候,都只知其然不知 其所以然,本著好學的態度我也去網上搜了下關於Babel es6轉es5的原理,但是很多都是枯燥難懂,整理了一 ...
  • 首先#pragma在本質上是聲明,常用的功能就是註釋,尤其是給Code分段註釋;而且它還有另一個強大的功能是處理編譯器警告,但卻沒有上一個功能用的那麼多。 clang diagnostic 是#pragma 第一個常用命令: 常見的用法 1. 方法棄用告警 2. 不相容指針類型 3. 迴圈引用 4. ...
  • 服務是Android四大組件之一,與Activity一樣,代表可執行程式。但Service不像Activity有可操作的用戶界面,它是一直在後臺運行。用通俗易懂點的話來說: 如果某個應用要在運行時向用戶呈現可操作的信息就應該選擇Activity,如果不是就選擇Service。 Service的生命周 ...
  • 在按照第三方sdk文檔中的Emedded Binaries 中加入了他們的framework,在刪除這下麵的對應的framework後,問題就得到瞭解決 發下有個英文的頁面也是涉及這個問題的, 描述的很詳細. 鏈接: https://stackoverflow.com/questions/41786 ...
  • 一:sqlserver 執行計劃介紹 sqlserver 執行計是在sqlser manager studio 工具中打開,是檢查一條sql執行效率的工具。建議配合SET STATISTICS IO ON等語句來一起使用,執行計劃是從右向左看,耗時高的一般顯示在右邊,我們知道,sqlserver 查 ...
  • 例:MySQL5.7.19 下載 當然首先是要下載咯https://dev.mysql.com/downloads/mysql/ 官網下載地址。 選擇適合自己電腦的版本,點擊Download,跳轉,直接No thanks下載好了。 靜靜的等待下載,解壓。這是我的解壓路徑D:\MySQL 正式開始安裝 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...