redis集羣搭建

1、概述node

    Redis3.0版本以後支持Cluster.redis

1.一、redis cluster的現狀ruby

   目前redis支持的cluster特性:服務器

  1):節點自動發現架構

  2):slave->master 選舉,集羣容錯app

  3):Hot resharding:在線分片工具

  4):進羣管理:cluster xxx測試

  5):基於配置(nodes-port.conf)的集羣管理優化

  6):ASK 轉向/MOVED 轉向機制.spa

1.二、redis cluster 架構

  1)redis-cluster架構圖

  架構細節:

  (1)全部的redis節點彼此互聯(PING-PONG機制),內部使用二進制協議優化傳輸速度和帶寬.

  (2)節點的fail是經過集羣中超過半數的節點檢測失效時才生效.

  (3)客戶端與redis節點直連,不須要中間proxy層.客戶端不須要鏈接集羣全部節點,鏈接集羣中任何一個可用節點便可

  (4)redis-cluster把全部的物理節點映射到[0-16383]slot上,cluster 負責維護node<->slot<->value

 

   2) redis-cluster選舉:容錯

  (1)領着選舉過程是集羣中全部master參與,若是半數以上master節點與master節點通訊超過(cluster-node-timeout),認爲當前master節點掛掉.

  (2):何時整個集羣不可用(cluster_state:fail),當集羣不可用時,全部對集羣的操做作都不可用,收到((error) CLUSTERDOWN The cluster is down)錯誤

      a:若是集羣任意master掛掉,且當前master沒有slave.集羣進入fail狀態,也能夠理解成進羣的slot映射[0-16383]不完成時進入fail狀態.

      b:若是進羣超過半數以上master掛掉,不管是否有slave集羣進入fail狀態.

2、redis cluster安裝

 一、下載和解包

cd /usr/local/
wget http://download.redis.io/releases/redis-3.2.1.tar.gz
tar -zxvf ./redis-3.2.1.tar.gz

二、 編譯安裝

cd redis-3.2.1 make && make install

 三、建立redis節點

我這裏只有一臺服務器建立6個節點

cd /usr/local/ mkdir redis_cluster //建立集羣目錄
  mkdir 7000 7001 7002 7003 7004 7005 //分別表明六個節點 其對應端口 7000 7001 7002 7003 7004 7005 //拷貝到7000目錄
 cp /usr/local/redis-3.2.1/redis.conf  ./redis_cluster/7000/   
 //拷貝到7001目錄
 cp /usr/local/redis-3.2.1/redis.conf  ./redis_cluster/7001/   
 //拷貝到7002目錄
 cp /usr/local/redis-3.2.1/redis.conf  ./redis_cluster/7002/   
 //拷貝到7003目錄
 cp /usr/local/redis-3.2.1/redis.conf  ./redis_cluster/7003/   
 //拷貝到7004目錄
 cp /usr/local/redis-3.2.1/redis.conf  ./redis_cluster/7004/   
 //拷貝到7005目錄
 cp /usr/local/redis-3.2.1/redis.conf  ./redis_cluster/7005/

分別對7001,700二、700三、700四、7005文件夾中的6個文件修改對應的配置

daemonize    yes                          //redis後臺運行
pidfile  /var/run/redis_7000.pid          //pidfile文件對應7000,7002,7003
port  7000                                //端口7000,7002,7003
cluster-enabled  yes                      //開啓集羣 把註釋#去掉
cluster-config-file  nodes_7000.conf      //集羣的配置 配置文件首次啓動自動生成 7000,7001,7002
cluster-node-timeout  5000                //請求超時 設置5秒夠了
appendonly  yes                           //aof日誌開啓 有須要就開啓,它會每次寫操做都記錄一條日誌

五、將redis-server複製到下面對應的位置,方便啓動對應的redis

cp /usr/local/redis-3.2.1/src/redis-server /usr/local/redis_cluster/7000/ cp /usr/local/redis-3.2.1/src/redis-server /usr/local/redis_cluster/7001/ cp /usr/local/redis-3.2.1/src/redis-server /usr/local/redis_cluster/7002/ cp /usr/local/redis-3.2.1/src/redis-server /usr/local/redis_cluster/7003/ cp /usr/local/redis-3.2.1/src/redis-server /usr/local/redis_cluster/7004/ cp /usr/local/redis-3.2.1/src/redis-server /usr/local/redis_cluster/7005/

啓動redis

cd /usr/local/redis_cluster/7000/ redis-server ./redis.conf
cd /usr/local/redis_cluster/7001/ redis-server ./redis.conf
cd /usr/local/redis_cluster/7002/ redis-server ./redis.conf
cd /usr/local/redis_cluster/7003/ redis-server ./redis.conf
cd /usr/local/redis_cluster/7004/ redis-server ./redis.conf
cd /usr/local/redis_cluster/7005/ redis-server ./redis.conf

查看服務

ps -ef | grep redis #查看是否啓動成功 netstat -tnlp | grep redis #能夠看到redis監聽端口

3、建立集羣

  前面已經準備好了搭建集羣的redis節點,接下來咱們要把這些節點都串連起來搭建集羣。官方提供了一個工具:redis-trib.rb(/usr/local/redis-3.2.1/src/redis-trib.rb) 看後綴就知道這鳥東西不能直接執行,它是用ruby寫的一個程序,因此咱們還得安裝ruby.

一、下載ruby穩定版

cd /usr/local/src
wget https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.1.tar.gz

二、安裝ruby

tar zxf ruby-2.5.1.tar.gz cd ruby-2.5.1 ./configure --prefix=/usr/local/ruby make && make install

三、查看安裝後的版本

/usr/local/ruby/bin/ruby -v

4.設置環境變量

vi /etc/profile

最後添加

export PATH=$PATH:/usr/local/ruby/bin;

保存退出,執行

source /etc/profile

驗證

echo $PATH

5.安裝

gem install redis

 

上面的步驟完事了,接下來運行一下redis-trib.rb

/usr/local/redis-3.2.1/src/redis-trib.rb

 看到這,應該明白了吧, 就是靠上面這些操做 完成redis集羣搭建的.

 

確認全部節點都啓動,接下來使用create建立集羣

/usr/local/redis-3.2.1/src/redis-trib.rb  create  --replicas  1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005

 解釋:

--replicas  1  表示 自動爲每個master節點分配一個slave節點    上面有6個節點,程序會按照必定規則生成 3個master(主)3個slave(從)

 前面已經提醒過的 防火牆必定要開放監聽的端口,不然會建立失敗。

運行中,提示Can I set the above configuration? (type 'yes' to accept): yes    //輸入yes

接下來 提示  Waiting for the cluster to join..........  安裝的時候在這裏就一直等等等,沒反應,傻傻等半天,看這句提示上面一句,Sending Cluster Meet Message to join the Cluster.

查看一下 /usr/local/redis/src/redis-trib.rb check 192.168.1.237:7000

到這裏集羣已經初步搭建好了。

 4、測試

    get 和 set數據

    redis-cli -c -p 7000

    進入命令窗口,直接 set  hello  howareyou

    直接根據hash匹配切換到相應的slot的節點上。

    仍是要說明一下,redis集羣有16383個slot組成,經過分片分佈到多個節點上,讀寫都發生在master節點。

相關文章
相關標籤/搜索