linux Redis 5.0集羣搭建

 

文檔結構以下:node

 

 

Redis cluster 是redis的分佈式解決方案,在3.0版本正式推出後,有效的解決了redis分佈式方面的需求;當遇到單機內存,併發,流量等瓶頸是,能夠採用cluster架構方案達到負載均衡的目的。linux

 

官方網站:redis

https://redis.io/topics/cluster-tutorialruby

Redis數據分區

Redis cluster 採用虛擬槽分區,全部的鍵根據哈希函數映射到0~16383整數槽內,計算公式:服務器

Slot=CRC16(key)&16384。每一個節點負責維護一部分槽以及槽所映射的鍵值數據。架構

 

redis羣集中的每一個節點都負責哈希槽的子集,例如,您可能擁有一個包含3個節點的羣集,其中:併發

 

節點A包含從0到5500的散列槽。負載均衡

節點B包含從5501到11000的散列槽。運維

節點C包含從11001到16383的散列槽。分佈式

 

 

因爲個人環境只有三臺服務器master 和slave爲同一臺,一臺服務器,兩張網卡。

 

Redis Cluster主從模型

爲了在主節點子集發生故障或沒法與大多數節點通訊時保持可用,Redis Cluster使用主從模型,其中每一個散列槽從1(主機自己)到N個副本(N) -1個額外的從節點)。

在具備節點A,B,C的示例羣集中,若是節點B發生故障,則羣集沒法繼續,由於咱們再也不可以在5501-11000範圍內提供服務哈希位置的方法。

然而,當建立集羣時(或稍後),咱們向每一個主節點添加一個從節點,以便最終集羣由做爲主節點的A,B,C和做爲從節點的A1,B1,C1組成。 ,若是節點B出現故障,系統就能繼續運行。

節點B1複製B,B失敗,集羣將節點B1升級爲新的主節點,並將繼續正常運行。

但請注意,若是節點B和B1同時發生故障,Redis Cluster將沒法繼續運行。

 

 

 

Redis羣集配置參數

咱們即將建立一個示例集羣部署。在繼續以前,讓咱們介紹Redis Cluster在redis.conf文件中引入的配置參數。有些人會很明顯,有些人會在你繼續閱讀時更清楚。

cluster-enabled<yes/no>:若是是,則在特定Redis實例中啓用Redis羣集支持。不然,實例像往常同樣做爲獨立實例啓動。

cluster-config-file<filename>:請注意,儘管有此選項的名稱,但這不是用戶可編輯的配置文件,而是每次發生更改時Redis羣集節點自動保持羣集配置(基本上是狀態)的文件,爲了可以在啓動時從新閱讀它。該文件列出了集羣中其餘節點,狀態,持久變量等內容。因爲某些消息接收,一般會將此文件重寫並刷新到磁盤上。

cluster-node-timeout<milliseconds>:Redis羣集節點不可用的最長時間,不會被視爲失敗。若是主節點的可訪問時間超過指定的時間,則其從屬節點將進行故障轉移。此參數控制Redis羣集中的其餘重要事項。值得注意的是,在指定時間內沒法訪問大多數主節點的每一個節點都將中止接受查詢。

cluster-slave-validity-factor<factor>:若是設置爲零,則從站將始終嘗試對主站進行故障切換,而無論主站和從站之間的鏈路是否保持斷開鏈接的時間長短。若是該值爲正,則計算最大斷開時間做爲節點超時值乘以此選項提供的因子,若是節點是從屬節點,則若是主連接斷開鏈接的時間超過指定的時間,則不會嘗試啓動故障轉移。例如,若是節點超時設置爲5秒,而且有效性因子設置爲10,則從主設備斷開超過50秒的從設備將不會嘗試故障轉移其主設備。請注意,若是沒有從站可以對其進行故障轉移,則任何不一樣於零的值均可能致使Redis羣集在主站發生故障後不可用。在這種狀況下,只有當原始主服務器從新加入羣集時,羣集纔會返回。

cluster-migration-barrier<count>:主服務器將保持鏈接的最小從服務器數,以便另外一個從服務器遷移到再也不由任何從服務器覆蓋的主服務器。有關詳細信息,請參閱本教程中有關副本遷移的相應部分。

cluster-require-full-coverage<yes/no>:若是設置爲yes,則默認狀況下,若是任何節點未覆蓋某個百分比的密鑰空間,則集羣將中止接受寫入。若是該選項設置爲no,即便只能處理有關鍵子集的請求,羣集仍將提供查詢。

 

 

a)   關閉防火牆

vi /etc/selinux/config

 

# This file controls the state of SELinux on the system.

# SELINUX= can take one of these three values:

#     enforcing - SELinux security policy is enforced.

#     permissive - SELinux prints warnings instead of enforcing.

#     disabled - No SELinux policy is loaded.

SELINUX=disabled

# SELINUXTYPE= can take one of these two values:

#     targeted - Targeted processes are protected,

#     mls - Multi Level Security protection.

SELINUXTYPE=targeted

 

setenforce 0

 

service iptables stop

chkconfig iptables off

 

 

b)   三臺服務器配置好yum

mount /dev/sr0 /mnt/

cd /etc/yum.repos.d/

mv redhat.repo redhat.repo.bak

mv rhel-source.repo rhel-source.repo.bak

 

vi /etc/yum.repos.d/rhel-debuginfo.repo

[rhel-debuginfo]

name=Red Hat Enterprise Linux $releasever - $basearch - Debug

baseurl=file:///mnt/

enabled=1 

gpgcheck=0  

 

安裝yum:

yum -y install make gcc*  rubygems 

因爲須要安裝ruby環境,因此採用yum安裝

搭建集羣

 

Redis-trib.rb是採用ruby實現的redis集羣管理工具。內部經過cluster相關命令簡化集羣建立,檢查,槽遷移和均衡等常見運維操做,使用以前須要安裝Ruby依賴環境。

一、環境準備

下載ruby(5.0能夠不用ruby):

最新爲Ruby 2.6.0,地址:http://www.ruby-lang.org/zh_cn/downloads/

因爲yum 安裝的版本不符合要求

我單獨下載的

tar -zxvf ruby-2.6.0.tar.gz

./configure -prefix=/usr/local/ruby

make

make install

cd /usr/local/ruby/

cp bin/ruby /usr/local/bin/

cp bin/gem /usr/local/bin/

 

 

 

安裝rubygem redis 依賴:

 

最新版本爲4.1

https://rubygems.org/gems/redis/versions/4.1.0

cd /soft/

/usr/local/bin/gem install -l redis-4.1.0.gem

 

 

/usr/local/bin/gem list redis gem

 

 

 

安裝redis5.0 單機

/soft/redis-5.0.0

make

make install

cd /soft/redis-5.0.0/src/

cp redis-cli redis-server ../redis.conf /usr/local/redis-cluster/redis6379

cp redis-cli redis-server ../redis.conf /usr/local/redis-cluster/redis6380

 

cp redis-cli redis-server ../redis.conf /usr/local/redis-cluster/redis6381

cp redis-cli redis-server ../redis.conf /usr/local/redis-cluster/redis6382

 

cp redis-cli redis-server ../redis.conf /usr/local/redis-cluster/redis6383

cp redis-cli redis-server ../redis.conf /usr/local/redis-cluster/redis6384

 

 

安裝redis-trib.rb

 

cd /soft/redis-5.0.0/src

./redis-trib.rb –help

 

 

5.0 redis-cli --cluster

 

 

redis-cli --cluster help具備如下功能:

 

一、 create :建立集羣

二、 check :檢查集羣

三、 info :查看集羣信息

四、 fix :修復集羣

五、 reshard :在線遷移slot

六、 rebalance :平衡集羣節點slot數量

七、 add-node :將新節點加入集羣

八、 del-node :從集羣中刪除節點

九、 set-timeout :設置集羣節點間心跳鏈接的超時時間

十、 call :在集羣所有節點上執行命令

十一、 import :將外部redis數據導入集羣

 

 

cp /soft/redis-5.0.0/src/redis-trib.rb /usr/local/bin/

 

準備目錄:

 

mkdir –p /redis6379

mkdir –p /redis6380

mkdir -p /usr/local/redis-cluster/redis6379

mkdir -p /usr/local/redis-cluster/redis6380

cp

 

mkdir –p /redis6381

mkdir –p /redis6382

mkdir -p /usr/local/redis-cluster/redis6381

mkdir -p /usr/local/redis-cluster/redis6382

 

mkdir –p /redis6383

mkdir –p /redis6384

mkdir -p /usr/local/redis-cluster/redis6383

mkdir -p /usr/local/redis-cluster/redis6384

 

 

準備redis 集羣配置文件:

redis6379.cnf

 

save 900 1

bind 0.0.0.0    --運行全部IP

daemonize yes

port 6379

loglevel warning

timeout 60

logfile "6379.log"

dbfilename dump6379.rdb

pidfile /var/run/redis_6379.pid

maxmemory-policy volatile-ttl

auto-aof-rewrite-min-size 10GB

cluster-enabled yes

cluster-node-timeout 15000

cluster-config-file nodes-6379.conf

protected-mode no   --讓客戶端均可以鏈接redis

 

其餘節點按照6379進行相應的修改爲對應的端口。

 

redis-server /usr/local/redis-cluster/redis6379/redis6379.conf

redis-server /usr/local/redis-cluster/redis6380/redis6380.conf

 

redis-server /usr/local/redis-cluster/redis6381/redis6381.conf

redis-server /usr/local/redis-cluster/redis6382/redis6382.conf

 

 

redis-server /usr/local/redis-cluster/redis6383/redis6383.conf

redis-server /usr/local/redis-cluster/redis6384/redis6384.conf

 

 

二、集羣建立

 

例子:create建立集羣

 

 create命令可選replicas參數,replicas表示須要有幾個slave。

 

 在3.0每一個有一個slave的集羣的建立命令以下:

 

因爲redis5.0版本與3.0差別很大

 

官方以下:

 

 

 

有兩種方法:

方法一:

redis-cli --cluster create 172.16.10.21:6379 172.16.10.23:6381 172.16.10.25:6383 172.16.10.22:6380 172.16.10.24:6382 172.16.10.26:6384 --cluster-replicas 1

 

 

方法二:

 

/usr/local/bin/redis-trib.rb create --replicas 1 172.16.10.21:6379 172.16.10.23:6381 172.16.10.25:6383 172.16.10.22:6380 172.16.10.24:6382 172.16.10.26:6384

 

 

因爲個人redis-trib.rb不可用。用的第一種方法。

 

三、查看集羣信息

redis-cli -h 172.16.10.21 -p 6379 –c

cluster nodes

查看節點信息:

 

 

 

 

a1 這個槽位在10.25這臺redis上。

 

查看集羣信息

cluster info

 

 

查看集羣完整性:

redis-cli --cluster check 172.16.10.21:6379

 

能夠看出來,三個master 中的slots正好分配完16384個槽

相關文章
相關標籤/搜索