什麼是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
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)至正確的節點