redis集羣部署(redis-cluster)

什麼是redis集羣?
node

    Redis 集羣是一個分佈式(distributed)、容錯(fault-tolerant)的 Redis 實現, 集羣能夠使用的功能是普通單機 Redis 所能使用的功能的一個子集(subset)。redis

Redis 集羣中不存在中心(central)節點或者代理(proxy)節點, 集羣的其中一個主要設計目標是達到線性可擴展性(linear scalability)。ruby

Redis 集羣爲了保證一致性(consistency)而犧牲了一部分容錯性: 系統會在保證對網絡斷線(net split)和節點失效(node failure)具備有限(limited)抵抗力的前提下, 儘量地保持數據的一致性。bash

     集羣將節點失效視爲網絡斷線的其中一種特殊狀況。服務器


     集羣的容錯功能是經過使用主節點(master)和從節點(slave)兩種角色(role)的節點(node)來實現的:網絡

主節點和從節點使用徹底相同的服務器實現, 它們的功能(functionally)也徹底同樣, 但從節點一般僅用於替換失效的主節點。架構

不過, 若是不須要保證「先寫入,後讀取」操做的一致性(read-after-write consistency), 那麼能夠使用從節點來執行只讀查詢。分佈式


      redis集羣架構圖:ide


134caad7-0591-3edd-9162-6ae43d068333.jpg


Redis 提供了多種不一樣級別的持久化方式:測試

  • RDB 持久化能夠在指定的時間間隔內生成數據集的時間點快照(point-in-time snapshot)。

  • AOF 持久化記錄服務器執行的全部寫操做命令,並在服務器啓動時,經過從新執行這些命令來還原數據集。 AOF 文件中的命令所有以 Redis 協議的格式來保存,新命令會被追加到文件的末尾。 Redis 還能夠在後臺對 AOF 文件進行重寫(rewrite),使得 AOF 文件的體積不會超出保存數據集狀態所需的實際大小。

  • Redis 還能夠同時使用 AOF 持久化和 RDB 持久化。 在這種狀況下, 當 Redis 重啓時, 它會優先使用 AOF 文件來還原數據集, 由於 AOF 文件保存的數據集一般比 RDB 文件所保存的數據集更完整。

  • 你甚至能夠關閉持久化功能,讓數據只在服務器運行時存在。

瞭解 RDB 持久化和 AOF 持久化之間的異同是很是重要的, 如下幾個小節將詳細地介紹這這兩種持久化功能, 並對它們的相同和不一樣之處進行說明。


簡單來講:

redis 分爲兩種文件格式:
    1.全量數據(RDB):是把內存中的數據寫入磁盤,便於下次讀取文件進行加載。
    2.增量請求(AOF):是把內存中的數據序列化爲操做請求,用於讀取文件進行replay獲得數據。
redis 存儲分爲內存儲存、磁盤存儲和log文件三部分。


服務器配置:
數量:3臺
IP:10.200.134.6  10.200.134.8 10.200.134.34
端口:每臺服務器起3個端口:6379 6380 6381
cluster:每臺服務器建立3個目錄:cluster/6379  cluster/6380  cluster/6381

yum install  ruby rubygems -y

tar zxvf redis-3.0.5.tar.gz
mv redis-3.0.5 /usr/local/redis 
cd /usr/local/redis
make MALLOC=libc && make install

#redis-3.2.1.zip 安裝包在附件,自行下載
unzip redis-3.2.1.zip 
gem install redis-3.2.1.gem 


ln -s /usr/local/redis/src/redis-server /usr/bin/
ln -s /usr/local/redis/src/redis-cli /usr/bin/

mkdir -pv /usr/local/redis/cluster/{6379,6380,6381}

cp redis.conf cluster/6379/
cp redis.conf cluster/6380/
cp redis.conf cluster/6381/



#3臺服務器修改6379 6380 6381下的redis.conf配置文件:

daemonize yes
#其他兩個redis.conf就改下端口爲6380 和 6381就能夠了,其餘是同樣的
port 6379
cluster-enabled yes
cluster-config-file nodes-6379.conf

#3臺服務器啓動redis
redis-server /usr/local/redis/cluster/6379/redis.conf 
redis-server /usr/local/redis/cluster/6380/redis.conf 
redis-server /usr/local/redis/cluster/6381/redis.conf 

#任意1臺服務器建立集羣
redis-trib.rb create --replicas 1 10.200.134.6:6379 10.200.134.6:6380 10.200.134.6:6381 10.200.134.34:6379 10.200.134.34:6380 10.200.134.34:6381 10.200.134.8:6379 10.200.134.8:6380 10.200.134.8:6381

命令的意義以下:
給定 redis-trib.rb 程序的命令是 create , 這表示咱們但願建立一個新的集羣。
選項 --replicas 1 表示咱們但願爲集羣中的每一個主節點建立一個從節點。
以後跟着的其餘參數則是實例的地址列表, 咱們但願程序使用這些地址所指示的實例來建立新集羣。

簡單來講, 以上命令的意思就是讓 redis-trib 程序建立一個包含三個主節點和三個從節點的集羣。
接着, redis-trib 會打印出一份預想中的配置給你看, 若是你以爲沒問題的話, 就能夠輸入 yes , redis-trib 就會將這份配置應用到集羣當中:



>>> Creating cluster
Connecting to node 10.200.134.6:6379: OK
Connecting to node 10.200.134.6:6380: OK
Connecting to node 10.200.134.6:6381: OK
>>> Performing hash slots allocation on 3 nodes...
Using 3 masters:
10.200.134.6:6379
10.200.134.6:6380
10.200.134.6:6381
......more
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.


#檢查集羣節點:
/usr/local/redis/src/redis-trib.rb check 10.200.134.6:6379
#使用redis-cli命令測試redis集羣
[root@69_server ~]# redis-cli -c -p 6379
10.200.134.6:6379> set foo bar
-> Redirected to slot [12182] located at 10.200.134.6:6380
OK
10.200.134.6:6380> set hello world
-> Redirected to slot [866] located at 10.200.134.6:6379
OK
10.200.134.6:6379> get foo
-> Redirected to slot [12182] located at 10.200.134.6:6380
"bar"
10.200.134.6:6380> get hello
-> Redirected to slot [866] located at 10.200.134.6:6379
"world"

redis-cli是集羣最基本的支持,依靠 Redis 集羣節點來將它轉向(redirect)至正確的節點
相關文章
相關標籤/搜索