linux Redis 5.0集群搭建


 

文檔結構如下:

 

 

Redis cluster 是redis的分布式解決方案,在3.0版本正式推出后,有效的解決了redis分布式方面的需求;當遇到單機內存,並發,流量等瓶頸是,可以采用cluster架構方案達到負載均衡的目的。

 

官方網站:

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

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依賴環境。

1、環境准備

下載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具有以下功能:

 

1、 create :創建集群

2、 check :檢查集群

3、 info :查看集群信息

4、 fix :修復集群

5、 reshard :在線遷移slot

6、 rebalance :平衡集群節點slot數量

7、 add-node :將新節點加入集群

8、 del-node :從集群中刪除節點

9、 set-timeout :設置集群節點間心跳連接的超時時間

10、 call :在集群全部節點上執行命令

11、 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

 

 

2、集群創建

 

例子: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不可用。用的第一種方法。

 

3、查看集群信息

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個槽

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM