1. 程式人生 > 資訊 >2199 元起,Redmi K40/Pro 今天上午 10 點再開售:驍龍 870/888 雙箭齊發

2199 元起,Redmi K40/Pro 今天上午 10 點再開售:驍龍 870/888 雙箭齊發

Redis叢集

步驟

1、叢集搭建需要的環境,設定叢集配置檔案

2.1 Redis叢集至少需要3個節點,因為投票容錯機制要求超過半數節點認為某個節點掛了該節點才是掛了,所以2個節點無法構成叢集。
.
2.2 要保證叢集的高可用,需要每個節點都有從節點,也就是備份節點,所以Redis叢集至少需要6臺伺服器。
.
個人練習沒有那麼多伺服器,也啟動不了那麼多虛擬機器,所在這裡搭建的是偽分散式叢集,即一臺伺服器虛擬執行6個redis例項,修改埠號為(6379-6381 6389-6391),當然實際生產環境的Redis叢集搭建和這裡是一樣的。

建立6個redis例項:
分別為 (放在 /myRedis 目錄下 需要自己建立)

redis6379.conf . redis6389.conf . redis6380.conf . redis6390.conf . redis6381.conf . redis6391.conf
在這裡插入圖片描述

配置檔案程式碼(直接複製即可):
例 redis6379.conf :

include /myRedis/redis.conf
pidfile /var/run/redis_6379.pid
port 6379   //每個例項的埠號不一樣 
dbfilename dump6379.rdb
cluster-enabled yes  //開啟叢集模式
cluster-config-file nodes-6379.
conf //設定節點配置檔名稱 cluster-node-timeout 15000 //

2、Redis叢集的管理工具使用的是ruby指令碼語言,安裝 ruby 環境

安裝:

yum remove ruby  //解除安裝預設的低版本 ruby

yum install ruby  //安裝新的ruby
yum install rubygems

注意:

  • centos7預設的ruby版本太低(2.0),要解除安裝重灌
  • Redis需要Ruby版本不能小於2.3版本
  • 可以使用 命令 " ruby -v " 檢視系統預設當前 ruby 版本
  • redis3.0版本之前只支援單例模式,在3.0版本及以後才支援叢集;
  • RubyGems 是 Ruby 的一個包管理器,它提供一個分發 Ruby 程式和庫的標準格式,還提供一個管理程式包安裝的工具。

3、執行命令 : gem install redis

安裝的時候報錯:

[root@arslinux-01 ~]# gem install redis
Fetching: redis-4.1.2.gem (100%)
ERROR:  Error installing redis:
redis requires Ruby version >= 2.3.0.

解決辦法:

4、修改redis配置檔案

  • 開啟redis配置檔案 命令 : vim redis.conf
  • 直接把 bind 註釋
  • 再把 protected-mode yes 改為 no

注意:

不改的話後面有可能報錯 [ERR] Sorry, can‘t connect to node 192.168.10.3:6379

[ERR] Sorry, can‘t connect to node 192.168.10.3:6379 解決辦法

5、啟動redis例項

[root@localhost myRedis]# redis-server redis6379.conf
[root@localhost myRedis]# redis-server redis6380.conf
[root@localhost myRedis]# redis-server redis6381.conf
[root@localhost myRedis]# redis-server redis6390.conf
[root@localhost myRedis]# redis-server redis6389.conf
[root@localhost myRedis]# redis-server redis6391.conf

6、合併6個節點(6個redis例項)

注意
合併6個節點之前,要確保redis例項啟動後,nodes-xxxx.conf檔案正常生成

執行命令:

./redis-trib.rb create --replicas 1 192.168.10.3:6379 192.168.10.3:6380 192.168.10.3:6381 192.168.10.3:6389 192.168.10.3:6390 192.168.10.3:6391

注意
此處不要用 127.0.0.1 ,使用真實的 ip 地址

[root@localhost src]# ./redis-trib.rb create --replicas 1 192.168.10.3:6379 192.168.10.3:6380 192.168.10.3:6381 192.168.10.3:6389 192.168.10.3:6390 192.168.10.3:6391
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
192.168.10.3:6379
192.168.10.3:6380
192.168.10.3:6381
Adding replica 192.168.10.3:6389 to 192.168.10.3:6379
Adding replica 192.168.10.3:6390 to 192.168.10.3:6380
Adding replica 192.168.10.3:6391 to 192.168.10.3:6381
M: f7fe7b654d3164a37aef01c67ad0ef9851bccbe2 192.168.10.3:6379
   slots:0-5460 (5461 slots) master
M: 28fb88f6c55aa4468671d1144e70a8506e73ac02 192.168.10.3:6380
   slots:5461-10922 (5462 slots) master
M: 0d9f5a5f77b2acfa3e97dc84d23d8923898f66c6 192.168.10.3:6381
   slots:10923-16383 (5461 slots) master
S: 3eb715da3de214e99de389ab0471e1a174bd765c 192.168.10.3:6389
   replicates f7fe7b654d3164a37aef01c67ad0ef9851bccbe2
S: d1a96f0524827152a5f3bf5436666da0cbefed87 192.168.10.3:6390
   replicates 28fb88f6c55aa4468671d1144e70a8506e73ac02
S: 4083d04d2a7ace16c6638659799fc8702c0770a7 192.168.10.3:6391
   replicates 0d9f5a5f77b2acfa3e97dc84d23d8923898f66c6
Can I set the above configuration? (type 'yes' to accept): yes

7、以叢集的方式進入客戶端

[root@localhost myRedis]# redis-cli -c -p 6379
127.0.0.1:6379> set a 100
-> Redirected to slot [15495] located 
at 192.168.10.3:6381
OK
192.168.10.3:6381> set c 200
-> Redirected to slot [7365] located at 192.168.10.3:6380
OK
192.168.10.3:6380> get a
-> Redirected to slot [15495] located at 192.168.10.3:6381
"100"
192.168.10.3:6381>

使用命令cluster nodes 檢視叢集資訊

192.168.10.3:6381> cluster nodes
d1a96f0524827152a5f3bf5436666da0cbefed87 192.168.10.3:6390 slave 28fb88f6c55aa4468671d1144e70a8506e73ac02 0 1614755297002 2 connected
f7fe7b654d3164a37aef01c67ad0ef9851bccbe2 192.168.10.3:6379 master - 0 1614755294984 1 connected 0-5460
0d9f5a5f77b2acfa3e97dc84d23d8923898f66c6 192.168.10.3:6381 myself,master - 0 0 3 connected 10923-16383
3eb715da3de214e99de389ab0471e1a174bd765c 192.168.10.3:6389 slave f7fe7b654d3164a37aef01c67ad0ef9851bccbe2 0 1614755300029 4 connected
28fb88f6c55aa4468671d1144e70a8506e73ac02 192.168.10.3:6380 master - 0 1614755298013 2 connected 5461-10922
4083d04d2a7ace16c6638659799fc8702c0770a7 192.168.10.3:6391 slave 0d9f5a5f77b2acfa3e97dc84d23d8923898f66c6 0 1614755299019 6 connected

8、redis cluster 如何分配這六個節點?

  • 一個叢集至少要有3個主節點
  • 選項 --replicas 1 表示我們希望為叢集的每個主節點建立一個從節點
  • 分配原則儘量保證每個主資料庫執行在不同的ip地址,每個從庫和主庫不在一個 ip地址上

9、叢集的工作方式

在 Redis
的每一個節點上,都有這麼兩個東西,一個是插槽(slot),它的的取值範圍是:0-16383。還有一個就是cluster,可以理解為是一個叢集管理的外掛。當我們的存取的 Key到達的時候,Redis 會根據 crc16的演算法得出一個結果,然後把結果對 16384 求餘數,這樣每個 key 都會對應一個編號在 0-16383 之間的雜湊槽,通過這個值,去找到對應的插槽所對應的節點,然後直接自動跳轉到這個對應的節點上進行存取操作。
.

為了保證高可用,redis-cluster叢集引入了主從模式,一個主節點對應一個或者多個從節點,當主節點宕機的時候,就會啟用從節點。當其它主節點ping一個主節點A時,如果半數以上的主節點與A通訊超時,那麼認為主節點A宕機了。如果主節點A和它的從節點A1都宕機了,那麼該叢集就無法再提供服務了。