redis cluster集羣架構詳解(十四)- redis cluster 安裝

5.7 redis集羣安裝

5.7.1. redis集羣配置

首先要安裝好redis單機版,這裏就不多說了。接下來我們先了解redis cluster的重要配置。

要想開啓Redis Cluster模式,有幾項配置是必須的。此外爲了方便使用和後續的測試,我還額外做了一些配置:
配置項 配置 說明
監聽端口 port 7001
綁定地址 bind 192.168.XXX.XXX 不能綁定到127.0.0.1或localhost,否則指導客戶端重定向時會報”Connection refused”的錯誤。
開啓Cluster cluster-enabled yes 如果想在特定的Redis實例中啓用Redis集羣支持就設置爲yes。 否則,實例通常作爲獨立實例啓動。
集羣超時時間 cluster-node-timeout 15000 1、節點超時多久則認爲它宕機了。
2、如果主節點master超過指定的時間不可達,它將由其從屬slave進行故障切換。
3、 此參數控制Redis集羣中的其他重要事項。
4、每個無法在指定時間內到達大多數主節點的節點將停止接受查詢。
槽是否全覆蓋 cluster-require-full-coverage no 默認是yes,只要有結點宕機導致16384個槽沒全被覆蓋,整個集羣就全部停止服務,所以一定要改爲no。 如果將其設置爲yes,則默認情況下,如果key的空間的某個百分比未被任何節點覆蓋,則集羣停止接受寫入。 如果該選項設置爲no,則即使只處理關於keys子集的請求,羣集仍將提供查詢。
後臺運行 daemonize yes
pidfile e/var/run/redis_7001.pid 設置redis的pid文件位置
dir ./data 設置持久化文件的存儲位置(先創建data文件夾)
集羣配置文件 cluster-config-file nodes-7001.conf 1、這個配置文件不是要我們去配的,而是Redis運行時保存配置的文件,所以我們也不可以修改這個文件。
2、Redis集羣節點每次發生更改時自動保留集羣配置(基本上爲狀態)的文件,以便能夠 在啓動時重新讀取它。
3、該文件列出了集羣中其他節點,它們的狀態,持久變量等等信息。 由於某些消息的接收,通常會將此文件重寫並刷新到磁盤上。
4、生成的文件在dir指定路徑下
輸出日誌 logfile “./redis-7001.log”
啓動故障切換的時間係數 cluster-replica-validity-factor 1、如果設置爲0,無論主節點和從節點之間的鏈路斷開連接的時間長短,從節點都將嘗試故障切換爲主節點。
2、 如果該值爲正值,則計算最大斷開時間作爲節點超時值乘以此選項提供的係數,如果該節點是從節點,則在主鏈路斷開連接的時間超過指定的超時值時,它不會嘗試啓動故障切換。 例如,如果節點超時設置爲5秒,並且有效因子設置爲10,則與主節點斷開連接超過50秒的從節點將不會嘗試對其主節點進行故障切換。
3、請注意,如果沒有從服務器節點能夠對其進行故障轉移,則任何非零值都可能導致Redis集羣在主服務器出現故障後不可用。 在這種情況下,只有原始主節點重新加入集羣時,集羣纔會返回可用。
cluster-migration-barrier 主節點將保持連接的最小從節點數量,以便另一個從節點遷移到不受任何從節點覆蓋的主節點。有關更多信息,請參閱本教程中有關副本遷移的相應部分。
配置好後,根據我們的集羣規模,拷貝出來幾份同樣的配置文件,唯一不同的就是監聽端口。

可以依次改爲7001、7002… 因爲Redis Cluster如果數據冗餘是1的話,至少要3個Master和3個Slave,所以我們拷貝出6個實例的配置文件。

爲了避免相互影響,爲6個實例的配置文件建立獨立的文件夾。
[root@cache01 redis]# mkdir -p redis-cluster-{7001..7006}  #創建獨立的文件夾
[root@cache01 redis]# mkdir redis-cluster-{7001..7006}/data  #創建持久化文件的存儲位置

5.7.2. redis-trib管理器

**注:redis 5.0以後,redis-trib工具的功能已經移入到redis-cli命令中,如果你使用的是redis5.0,就不需要安裝ruby的環境。本小節內容可跳過**

Redis作者應該是個Ruby愛好者,Ruby客戶端就是他開發的。這次集羣的管理功能沒有嵌入到Redis代碼中,於是作者又順手寫了個叫做redis-trib的管理腳本。

redis-trib依賴Ruby和RubyGems,以及redis擴展。可以先用which命令查看是否已安裝ruby和rubygems,用gem list –local查看本地是否已安裝redis擴展。

最簡便的方法就是用apt或yum包管理器安裝RubyGems後執行gem install redis。如果網絡或環境受限的話,可以手動安裝RubyGems和redis擴展。



**安裝ruby環境**

因爲官方提供的創建集羣的工具是用ruby寫的,需要ruby2.2.2+版本支持,ruby安裝需要指定openssl。

1、安裝openssl

cd /soft
[root@cache01 soft]# wget http://www.openssl.org/source/openssl-1.0.2j.tar.gz
[root@cache01 soft]# tar -xzf openssl-1.0.2j.tar.gz
[root@cache01 soft]# cd openssl-1.0.2j
[root@cache01 soft]# ./config --prefix=/usr/local/openssl
[root@cache01 soft]# ./config -t
[root@cache01 soft]# make

2、安裝openssl-devel

yum install -y openssl-devel 

3、安裝ruby

$ yum remove ruby
$ wget https://cache.ruby-lang.org/pub/ruby/2.7/ruby-2.7.0.tar.gz
$ tar -zxvf ruby-2.7.0.tar.gz
$ cd ruby-2.7.0
$ ./configure --with-openssl-dir=/usr/local/openssl
$ make
$ make install
$ sudo ln -s /usr/local/bin/ruby /usr/bin/ruby

4、安裝rubygems

$ wget https://rubygems.org/rubygems/rubygems-3.1.2.tgz
$ tar -zxvf rubygems-3.1.2.tgz
$ cd rubygems-3.1.2
$ ruby setup.rb

5、安裝zlib

cd /soft/ruby-2.7.0/ext/zlib
$ vi Makefile
zlib.o: $(top_srcdir)/include/ruby.h
修改爲:
zlib.o: ../../include/ruby.h
$ yum install zlib*
$ cd /soft/ruby-2.7.0/ext/zlib
$ ruby extconf.rb
$ make
$ make install

6、安裝redis庫

$ gem install redis
ERROR:  While executing gem ... (Gem::Exception)
    Unable to require openssl, install OpenSSL and rebuild ruby (preferred) or use non-HTTPS sources

這裏可能無法安裝,因爲無法連接gem服務器:

需要手工下載並安裝:

wget https://rubygems.org/downloads/redis-4.1.2.gem
gem install -l ./redis-4.1.2.gem

#安裝完成後的目錄爲:

/usr/local/redis-5.0.5/src/redis-trib.rb

5.7.3. 啓動集羣服務

首先,啓動我們配置好的6個Redis實例。我們創建相關目錄,主文件夾是redis-cluster,在此文件夾下建立6個子文件夾,名稱分別是:7001,7002,7003,7004,7005,7006 該目錄以我們將在任何給定目錄內運行的實例的端口號命名。
[root@cache01 redis]# mkdir -p redis-cluster-{7001..7006} && touch redis-cluster-{7001..7006}/redis.log
#啓動redis 
[root@cache01 redis]# redis-server ./redis-cluster-7001/7001.conf 
[root@cache01 redis]# redis-server ./redis-cluster-7002/7002.conf 
[root@cache01 redis]# redis-server ./redis-cluster-7003/7003.conf 
[root@cache01 redis]# redis-server ./redis-cluster-7004/7004.conf 
[root@cache01 redis]# redis-server ./redis-cluster-7005/7005.conf 
[root@cache01 redis]# redis-server ./redis-cluster-7006/7006.conf 

此時6個實例還沒有形成集羣,現在用redis-trb.rb管理腳本建立起集羣。

#啓動集羣
redis-cli --cluster create 192.168.75.187:7001 192.168.75.187:7002 192.168.75.187:7003 192.168.75.187:7004 192.168.75.187:7005 192.168.75.187:7006 --cluster-replicas 1

結果如下:

在這裏插入圖片描述

注意:redis5.0以後版本,推薦使用redis-cli,而 redis-trib.rb create --replicas…命令已經廢棄,如下:

/usr/local/redis-5.0.5/src/redis-trib.rb  create  --replicas  1 192.168.75.187:7001 192.168.75.187:7002 192.168.75.187:7003 192.168.75.187:7004 192.168.75.187:7005 192.168.75.187:7006 

…已經廢棄

  	1、redis-trib默認用前3個實例作爲Master,後3個作爲Slave。因爲Redis基於Master-Slave做數據備份,而非像Cassandra或Hazelcast一樣不區分結點角色;
  	
  	2、分配Slot的位置到各個結點;
  	
  	3、master與slave 自動複製並。

至此,集羣就已經建立成功了!

redis還在utils/create-cluster下提供了一個create-cluster腳本,能夠創建出一個集羣,類似我們上面建立起的3主3從的集羣。

5.7.4. 測試

我們連接到集羣中的任意一個結點,啓動redis-cli時要加-c選項,存取兩個Key-Value感受一下Redis久違的集羣功能。

在這裏插入圖片描述

仔細觀察能夠注意到,redis-cli根據指示,不斷在7001和7002結點之前重定向跳轉。如果啓動時不加-c選項的話,就能看到以錯誤形式顯示出的MOVED重定向消息。

如下:

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章