分散式緩存技術redis學習(四)——redis高級應用(集群搭建、集群分區原理、集群操作)

来源:http://www.cnblogs.com/hjwublog/archive/2016/07/18/5681700.html
-Advertisement-
Play Games

本文是redis學習系列的第四篇,前面我們學習了redis的數據結構和一些高級特性,點擊下麵鏈接可回看 《詳細講解redis數據結構(記憶體模型)以及常用命令》 《redis高級應用(主從、事務與鎖、持久化)》 本文我們繼續學習redis的高級特性——集群。本文主要內容包括集群搭建、集群分區原理和集群 ...


 

本文是redis學習系列的第四篇,前面我們學習了redis的數據結構和一些高級特性,點擊下麵鏈接可回看

《詳細講解redis數據結構(記憶體模型)以及常用命令》

《redis高級應用(主從、事務與鎖、持久化)》

本文我們繼續學習redis的高級特性——集群。本文主要內容包括集群搭建、集群分區原理和集群操作的學習。

 

Redis集群簡介

Redis 集群是3.0之後才引入的,在3.0之前,使用哨兵(sentinel)機制(本文將不做介紹,大家可另行查閱)來監控各個節點之間的狀態。Redis 集群可謂是讓很多人久等了。

Redis 集群是一組能進行數據共用的Redis 實例(服務或者節點)的設施,集群可以使用的功能是普通單機 Redis 所能使用的功能的一個子集;Redis 集群通常具有高可用、可擴展性、分散式、容錯等特性。瞭解redis的集群後,這些晦澀的概念可結合redis的主從、集群分區和集群運維等角度理解體會。

Redis集群搭建

創建集群文件夾

在/usr/local/下新建redis-cluster目錄併在redis-cluster下新建7031~7036共6個文件夾,這6個文件夾代表創建redis集群的6個節點。如下

[root@localhost local]# mkdir -p /usr/local/redis-cluster

[root@localhost redis-cluster]# mkdir 7031 7032 7033 7034 7035 7036

拷貝修改配置文件

將已有的/usr/local/redis/etc/下的redis.conf拷貝到新創建的7031目錄中

[root@localhost etc]# cp redis.conf /usr/local/redis-cluster/7031

[root@localhost 7031]# vi redis.conf

修改項如下:

(1)綁定埠,port 7031

(2)綁定IP,bind 192.168.2.128

(3)指定數據存放路徑,dir /usr/local/redis-cluster/7031

(4)啟動集群模式,cluster-enabled yes

(5)指定集群節點配置文件,cluster-config-file nodes-7031.conf

(6)後臺啟動,daemonize yes

(7)指定集群節點超時時間,cluster-node-timeout 5000

(8)指定持久化方式,appendonly yes

上面紅色項目最好全部設置,不然會出意想不到的錯誤,703x最好與節點文件夾保持一致

將7031的redis.conf改完後再拷貝到剩下的5個目錄中,然後只要全局替換redis.conf中的7031為相應的節點即可。

安裝ruby

由於Redis 集群客戶端實現很少,redis集群的啟動需要用到ruby實現的redis-trib.rb,所以我們需要先安裝ruby。

[root@localhost redis-cluster]# yum install ruby

[root@localhost redis-cluster]# yum install rubygems

[root@localhost redis-cluster]# gem install redis

啟動redis實例

[root@localhost redis-cluster]# 

/usr/local/redis/bin/redis-server /usr/local/redis-cluster/7031/redis.conf

 

分別啟動6個redis實例。也可以用腳本迴圈啟動,這樣更方便省時

 

[root@localhost redis-cluster]#

for((i=1;i<=6;i++)); do /usr/local/redis/bin/redis-server /usr/local/redis-cluster/703$i/redis.conf; done

 

查看redis實例是否啟動成功

 

[root@localhost redis-cluster]# netstat -tunpl | grep redis-server

#或者

[root@localhost redis-cluster]# ps -ef | grep redis-server

 

創建並啟動集群

進入redis安裝目錄的bin目錄下

[root@localhost ~]# cd /usr/local/redis/bin/

[root@localhost bin]#./redis-trib.rb create --replicas 1 192.168.2.128:7031 192.168.2.128:7032 192.168.2.128:7033 192.168.2.128:7034 192.168.2.128:7035 192.168.2.128:7036 

 

命令的意義如下:

給定 redis-trib.rb 程式的命令是 create,表示創建一個新的集群。選項 --replicas 1 表示為集群中的每個主節點創建一個從節點。之後跟著的其他參數則是實例的地址列表, 指定使用這些地址所指示的實例來創建新集群。

 

>>> Creating cluster

>>> Performing hash slots allocation on 6 nodes...

Using 3 masters:

192.168.2.128:7031

192.168.2.128:7032

192.168.2.128:7033

Adding replica 192.168.2.128:7034 to 192.168.2.128:7031

Adding replica 192.168.2.128:7035 to 192.168.2.128:7032

Adding replica 192.168.2.128:7036 to 192.168.2.128:7033

......

[OK] All nodes agree about slots configuration.

>>> Check for open slots...

>>> Check slots coverage...

[OK] All 16384 slots covered.

 

“All 16384 slots covered.”表示集群中的 16384 個槽都有至少一個主節點在處理, 集群運作正常。從列印出來的信息也可以看出,7031,7032,7033是主節點,其它三個是從節點。

客戶端連接集群

集群啟動成功後,我們就可以用任意一個客戶端連接集群了,如下

 

[root@localhost bin]# /usr/local/redis/bin/redis-cli -c -h 192.168.2.128 -p 7031

192.168.2.128:7031> info

# Server

redis_version:3.2.0

redis_git_sha1:00000000

redis_git_dirty:0

redis_build_id:f8fcffd133fe3364

redis_mode:cluster

os:Linux 2.6.32-504.el6.x86_64 x86_64

arch_bits:64

 

可以使用 cluster info命令查看集群信息,cluster nodes命令查看集群節點信息。

集群關閉

關閉集群需要逐個關閉

[root@localhost redis-cluster]#

for((i=1;i<=6;i++)); do /usr/local/redis/bin/redis-cli -c -h 192.168.2.128 -p 703$i shutdown; done

 

如果重新啟動集群報以下錯誤

 

[ERR] Node 192.168.2.128:7031 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.

 

需要清除殺掉redis實例,然後刪除每個節點下的臨時數據文件appendonly.aof,dump.rdb,nodes-703x.conf,然後再重新啟動redis實例即可啟動集群。

 

[root@localhost redis-cluster]#for((i=1;i<=6;i++)); do cd 703$i; rm -rf appendonly.aof; rm -rf dump.rdb; rm -rf nodes-703$i.conf; cd ..; done

 

集群測試

下麵我們先來體驗一下集群的set,get簡單操作,後面我們會進一步學習集群的更多操作。

 

192.168.2.128:7031> set name "zhangsan"

-> Redirected to slot [5798] located at 192.168.2.128:7032

OK

192.168.2.128:7032> set age 20

-> Redirected to slot [741] located at 192.168.2.128:7031

OK

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

-Advertisement-
Play Games
更多相關文章
  • 我執行下邊的sql語句 得到下麵結果 誰能告訴我那一步沒有去重嗎? ...
  • 工作中的問題總結: 問題一:scala 之向下轉型 引言:假如在複雜的業務邏輯中,變數的類型不能確認,只能給個介面類型,這樣數據類型推導不會錯誤,但是後面要使用實現類的類型時,你卻發現轉不過來了? 對於這樣的一個問題,scala可以這樣解決: 首先建造一個介面,People: 這樣定義了一個介面,接 ...
  • sql語言進階 典型操作 order by - select * from play_list order by createtime; - select * from play_list order by bookedcount desc,createtime asc; order by 語句用於 ...
  • 目標與目的 學習目標: 掌握日常資料庫建表操作 瞭解表設計的規範 何為表結構設計: 表結構設計需要在正式進行開發之前完成 根據產品需求將複雜的業務模型抽象出來 項目分析 實踐課程模型: 類似電商類的網站 用戶: 核心業務 非核心業務 核心業務: 交易相關 訂單詳情,訂單 商品相關 商品類別,商品 非 ...
  • memcatch 做單純的日活數據,或者靜態數據緩存 redis 做日活數據? mongodb 不建索引,用以插入數據? mongodb 建立索引,用以緩存用於讀取的歷史不活躍數據? mysql 數據持久化存儲 應該建立一個資料庫CRUD框架,然後對外是封裝好的? 總覺得已經有搭配好的框架了。 ...
  • 原因: 之前已經寫過一篇關於列存儲索引的簡介http://www.cnblogs.com/wenBlog/p/4970493.html,很粗糙但是基本闡明瞭列存儲索引的好處。為了更好的理解列存儲索引,接下來我們一起通過列存儲索引與傳統的行存儲索引地對比2014中的列存儲索引帶來了哪些改善。由於已經很 ...
  • 在一次生成AWR報告中,發現在“Instances in this Workload Repository schema”部分,出現了多個實例記錄信息(host敏感信息被用host1,host2,host3替換)。具體信息如下截圖所示: SQL> @?/rdbms/admin/awrrpt Curr... ...
  • 一、準備工作 主機個數:n台 操作系統:CentOS 6.5 安裝所需軟體包: CM: cloudera-manager-el6-cm5.4.3_x86_64.tar.gz CDH parcel: CDH-5.4.0-1.cdh5.4.0.p0.27-el6.parcel CDH-5.4.0-1.c ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...