生活随笔
收集整理的這篇文章主要介紹了
Redis集群架构搭建详解
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
一、簡介
這其實是一種分布式數(shù)據(jù)庫,就是通過分片的機制儲存數(shù)據(jù),cluster中的每個節(jié)點僅僅儲存數(shù)據(jù)哭的一部分數(shù)據(jù),本質(zhì)上就是實現(xiàn)數(shù)據(jù)庫分片。
這種集群是一種去中心化的集群,也就是說,集群中的每個節(jié)點都可以是接入節(jié)點。
這里我簡單說一下這種去中心化的實現(xiàn)方式,比如有4個節(jié)點,要儲存1000個key,那么就可能將這1000個key平均分配在這4個節(jié)點上,另外每個節(jié)點上除了儲存key還儲存了一個列表,這個列表詳細記錄了每個key具體在哪個節(jié)點上,這樣用戶訪問任意一個節(jié)點都會知道數(shù)據(jù)在哪,也就知道接下來去訪 問哪個節(jié)點了。
大多數(shù)去中心化的結(jié)構(gòu),都是這樣的原理,也就是每個節(jié)點上都有一個完整的元數(shù)據(jù),但只有一部分數(shù)據(jù)。
為什么要使用Redis集群呢?比如現(xiàn)在需要在redis中存100G數(shù)據(jù),我們知道redis工作的時候所有的數(shù)據(jù)都是儲存在內(nèi)存中的,因此這100G數(shù)據(jù)都需要存在內(nèi)存中,一個很明顯的問題就是儲存空間不足,而進行數(shù)據(jù)分片,也就是將數(shù)據(jù)存放在不同的節(jié)點上就能很好的解決這個問題。
比如有詩歌節(jié)點,這樣就可以將這100G的數(shù)據(jù)存放在這10個節(jié)點上,這樣一來每個節(jié)點只需要存放10G的數(shù)據(jù),雖然解決了儲存問題,但是會帶來另外一個問題,也就是安全問題,因為儲存數(shù)據(jù)的節(jié)點越多,發(fā)送故障的概率也就越高,只要一個節(jié)點出現(xiàn)故障那么全部數(shù)據(jù)就丟失了,所以為了安全可以給每個節(jié)點做一個主從,這樣就解決了數(shù)據(jù)安全問題。這就是集群的作用。
這里簡單介紹一下redis集群實現(xiàn)數(shù)據(jù)共享的方法 Redis集群是通過數(shù)據(jù)分片的方式,一個redis集群包含16384個哈希槽,在這個redis集群中每個鍵都會儲存在一個哈希槽中,假如redis集群中有三個節(jié)點,那么這第三個節(jié)點的哈希槽分布如下
節(jié)點A負責處理0號至5500號哈希槽 節(jié)點B負責處理5501至11000號哈希槽 節(jié)點C負責處理11001號至16384號哈希槽
當需要在redis集群中儲存數(shù)據(jù)的時候,會先進行一次計算,找出一個哈希槽編號,然后將這個數(shù)據(jù)存過去。
二、實現(xiàn)redis集群(基于redis4.0)
redis從3.0版本開始支持集群。 集群一般由多個節(jié)點組成,節(jié)點數(shù)量至少6個才能保證組成完整高可用集群。 規(guī)劃: 我這里使用三臺主機,每個主機上開啟兩個示例,兩個示例做成主從,這樣就有了六個節(jié)點。
節(jié)點名稱實例1端口實例2端口 節(jié)點1(171) 16379 16380 節(jié)點2(172) 26379 26380 節(jié)點3(173) 36379 36380
第一步:在三個節(jié)點上安裝Redis4.0
下載地址:https://redis.io/download
安裝依賴
# 在三個節(jié)點都執(zhí)行
# yum install gcc gcc-c++ zlib zlib-devel -y
安裝redis4.0.11
# tar xvf redis-4.0.11.tar.gz
# cd redis-4.0.11
# make && make install
說明:安裝過程主要是在src目錄下生成二進制程序
配置redis(演示配置171的實例1)
[root@171 ~]# mkdir -pv /redis/{16379,16380}
[root@171 ~]# cd /root/redis-4.0.11
[root@171 redis-4.0.11]# cp redis.conf /redis/16379/redis-16379.conf
# 修改配置文件
[root@171 redis-4.0.11]# vim /redis/16379/redis-16379.conf
bind 10.220.5.171
port 16379
daemonize yes
pidfile /var/run/redis_16379.pid
dir /redis/16379/
cluster-enabled yes
cluster-config-file nodes-16379.conf
cluster-node-timeout 15000
# 修改/redis目錄的屬主屬組
[root@171 redis-4.0.11]# useradd -r redis
[root@171 redis-4.0.11]# chown redis.redis /redis/ -R
171的實例2配置只需將實例1配置中的16379全部改為16380即可,不再演示。其他節(jié)點配置同理也不再演示。
三個節(jié)點都啟動redis cluster 服務(wù)
# 節(jié)點1(171)
# cd /root/redis-4.0.11
# src/redis-server /redis/16379/redis-16379.conf
# src/redis-server /redis/16380/redis-16380.conf
其他節(jié)點類似不再詳細演示。
第二步:redis-trib.rb環(huán)境準備
該文件存在于/redis/src目錄中,只需要在一臺主機上執(zhí)行此步驟,redis-trib.rb是采用Ruby實現(xiàn)Redis集群管理工具,可以幫助我們簡化集群創(chuàng)建,檢查,槽遷移和均衡等常見操作,使用之前需要安裝Ruby依賴環(huán)境。
配置ruby環(huán)境 下載地址: http://www.ruby-lang.org/en/downloads/
[root@173 ~]# tar xvf ruby-2.3.5.tar.gz
[root@173 ruby-2.3.5]# cd ruby-2.3.5
[root@173 ruby-2.3.5]# ./configure --prefix=/usr/local/ruby
[root@173 ruby-2.3.5]# make && make install
[root@173 ruby-2.3.5]# ln -sv /usr/local/ruby/bin/ruby /bin/
‘/bin/ruby’ -> ‘/usr/local/ruby/bin/ruby’
[root@173 ruby-2.3.5]# ln -sv /usr/local/ruby/bin/gem /bin/
‘/bin/gem’ -> ‘/usr/local/ruby/bin/gem’
[root@173 ruby-2.3.5]# ruby -v
ruby 2.3.5p376 (2017-09-14 revision 59905) [x86_64-linux]
安裝redis cluster的依賴包
[root@173 ~]# gem install -l redis-3.3.0.gem
Successfully installed redis-3.3.0
Parsing documentation for redis-3.3.0
Installing ri documentation for redis-3.3.0
Done installing documentation for redis after 0 seconds
1 gem installed
創(chuàng)建集群
[root@173 ~]# redis-4.0.11/src/redis-trib.rb create --replicas 1 \
> 10.220.5.171:16379 10.220.5.172:26379 10.220.5.173:36379 \
> 10.220.5.171:16380 10.220.5.172:26380 10.220.5.173:36380
說明:選項 --replicas 1 表示為集群中的所有主節(jié)點創(chuàng)建一個從節(jié)點# 最后的輸出報告說明:16384個槽全部被分配完,集群創(chuàng)建成功。
這里需要注意的是給redis-trib.rb的節(jié)點地址必須是不包含任何槽/數(shù)據(jù)的節(jié)點,否則會拒絕創(chuàng)建集群。
檢查集群的完整性 集群完整性是指所有的槽都被分配到存貨的主節(jié)點上,只要16384個槽中有任意一個沒有被分配給節(jié)點就表示集群是并不完整的。 可以用redis-trib.rb check 命令chance之前創(chuàng)建的集群是否成功,check命令只需要給出集合中的任何一個節(jié)點地址就可以
[root@173 ~]# redis-4.0.11/src/redis-trib.rb check 10.220.5.172:26379
登錄集群,并在節(jié)點上寫入數(shù)據(jù) 登錄集群的時候必須使用選項 -c
[root@173 ~]# redis-cli -c -h 10.220.5.171 -p 16379
10.220.5.171:16379> set name cx
-> Redirected to slot [5798] located at 10.220.5.172:26379
OK
10.220.5.172:26379> set age 20
-> Redirected to slot [741] located at 10.220.5.171:16379
OK
10.220.5.171:16379> set addr tianjin
-> Redirected to slot [12790] located at 10.220.5.173:36379
OK
細心地你肯定注意到了上面寫入數(shù)據(jù)時節(jié)點是在變化的,第一個key保存在了5798槽中這個槽在172節(jié)點上,寫入第二個key的時候存到了741號槽中這個槽在171節(jié)點上,同時前面的提示符也在變化,而在其他節(jié)點上登錄會發(fā)現(xiàn)也可以獲取到這些數(shù)據(jù),到這里redis集群就搭建完成了。
------做運維之前很矯情的小年輕-----
總結(jié)
以上是生活随笔 為你收集整理的Redis集群架构搭建详解 的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔 推薦給好友。