Centos 6.5 redis cluster叢集搭建
參考文章:Redis 學習筆記(十四)Redis Cluster介紹與搭建 前言
對於redis叢集的建立,總體來說可以分為兩種方式:
1.
使用redis replication功能對redis進行複製,同時對於主從進行讀寫分離。使用redis sentinel保證redis叢集的高可用性。
這種方式有以下優點: 可支援橫向擴容,當輸送量峰值更高時,可以通過擴容slave節點,能支撐更高的讀QPS
但是也有以下缺點: 通常情況下是一個master節點,即便做了讀寫分離,最多隻能支撐幾萬的寫QPS(簡單的資料結構情況下,更複雜的資料可能更低) 做讀寫分離的時候,redis用戶端(比如jedis)對於這方面的讀寫分離支援不足。可能需要拓展和封裝,或者修改源碼 做橫向擴容的時候,需要注意不能採取星狀機構,需要採取樹狀結構(星狀結構會導致master節點掛載很多slave節點,做資料複製的時候對master節點壓力大) 需要維護一套sentinel叢集來達到高可用目的
2.
redis 3.0版本推出了redis cluster。有效解決了redis分布式方面的需求。redis cluster集合了replication,sentinel功能,同時支援多master的橫向擴容。可以很好的解決流量瓶頸方面的問題。使用redis cluster可以突破流量瓶頸。
相對來說,redis cluster是一個分布式解決方案。但是也有以下的功能限制: key大量操作支援有限。目前只支援具有相同slot值的key執行大量操作 key事務操作支援有限,支援在同一個節點上的事務操作,不支援多個節點的事務。
本篇文章對於redis cluster的一些基礎知識進行介紹以及如何搭建一個redis cluster叢集。 資料分布理論
分散式資料庫首要解決把資料按照某種規則映射到多個節點的問題,每個節點負責整個資料的一個子集。常見的分區有雜湊分割和順序分區。redis cluster採取雜湊分割規則。常見的雜湊分割有以下幾種: 節點取餘分區 一致性雜湊分割 虛擬槽分區
redis cluster採用了虛擬槽分區,所有的鍵根據雜湊函數映射到0-16383個slot中,計算公式為:slot = CRC16(key)&16383.每個節點負責維護一部分slot以及slot所映射的索引值資料。 搭建redis cluster 環境 CentOs 6.5 Redis 4.0.9 (2018/4/10最新版本) 節點
redis cluster叢集一般由多個節點群組成,節點數量為6個以上才能保證高可用的叢集。
這裡列出一個節點的配置
複製redis目錄下的utils/redis_init_script為redis_7000:
修改以下內容:
REDISPORT=7000
然後把該檔案拷貝到/etc/init.d/目錄下。
拷貝redis目錄下的redis.conf到/etc/redis/7000.conf,修改以下內容:
port 7000cluster-enabled yescluster-config-file nodes.confcluster-node-timeout 15000daemonize yespidfile /var/run/redis_7000.piddir /var/reids/7000logfile /var/log/redis/7000.logbind 192.168.1.103 //本機IP地址appendonly yes
然後建立以下檔案夾: /var/redis/7000 /var/log/redis/
然後去到/etc/init.d/目錄下面執行./redis_7000 start命令啟動一個redis執行個體。通過查看/var/log/redis/7000.log查看是否啟動成功。
按照上面的方法部署6個執行個體。如果6個執行個體都在不通的機器上的話,直接複製設定檔過去即可。如果一台機器跑2個或以上的執行個體,則需要注意修改連接埠號碼。
加入你用於測試,所有的節點都跑在同一台機器上面,設定檔可以改成下面這樣:
port 7000cluster-enabled yescluster-config-file nodes.confcluster-node-timeout 15000cluster-announce-ip 39.10X.XX.XX //自己伺服器IPcluster-announce-port 7000cluster-announce-bus-port 17000daemonize yespidfile /var/run/redis_7000.piddir /var/reids/7000logfile /var/log/redis/7000.logappendonly yes
將6個redis執行個體跑起來之後就可以了。目前redis的叢集已經跑起來,但是還無法工作。 建立叢集
建立叢集使用ruby相關的工具,則需要執行以下命令安裝ruby:
yum install -y rubyyum install -y rubygemsgem install redis
在執行gem install redis是時候如果爆出如下錯誤:
gem install redisERROR: Error installing redis: redis requires Ruby version >= 2.2.2.
這是由於系統為centos 6.5預設安裝的Ruby版本為1.8.7所以需要升級到2.2.2以上。
執行以下命令:
gpg2 --keyserver hkp://keys.gnupg.net --recv-keys D39DC0E3curl -L get.rvm.io | bash -s stablesource /usr/local/rvm/scripts/rvm# 查看可用的ruby版本rvm list known# 安裝2.3.4版本rvm install 2.3.4# 設定預設版本rvm use 2.3.4gem install redis
這樣就可以成功安裝了。安裝完了之後,複製redis目錄下的src/redis-trib.rb檔案到/usr/local/bin中。
然後使用如下方式建立叢集:
redis-trib.rb create --replicas 1 192.168.1.103:7000 \192.168.1.103:7001 192.168.1.104:7002 192.168.1.104:7003 \192.168.1.105:7004 192.168.1.105:7005
執行過程中會詢問你是否可以分配slot,輸入yes.
其中參數--replicas表示每個master有一個slave,如果沒有什麼意外的話,redis叢集以及搭建完畢。可以通過以下命令檢查叢集的狀態:
redis-trib.rb check 192.168.1.103:7001