1. 程式人生 > >【Redis】redis介紹,安裝,以及叢集搭建

【Redis】redis介紹,安裝,以及叢集搭建

 

1.Redis介紹

百科定義:Redis是一個開源的使用ANSI C語言編寫、支援網路、可基於記憶體亦可持久化的日誌型、Key-Value 資料庫,並提供多種語言的API。

個人理解:高效能的快取資料庫,資料存放在記憶體中,存取效能極高,有很多種應用場景,比如可以做資料庫,單點登入,分散式鎖,快取等...在高效能企業應用中幾乎是必不可少的元件.


2.安裝

本文以CentOS7.3,Redis3.x為例進行演示

首先需要在redis官網下載Linux環境下的redis安裝包:https://redis.io/download  xx.tar.gz

1.檢視linux是否已經安裝redis rpm -qa | grep -i redis 若沒安裝,跳至步驟3,若已安裝,則執行步驟2.

2.解除安裝已經安裝的原生redis rpm -e --nodeps redis... 

#當然如果你的Redis是通過yum或者tar安裝的,你用rpm是查不到資訊的,請嘗試用相應命令去進行1,2兩步操作.

#最簡單的方式是 whereis redis 如果沒有返回值,說明你的系統沒有安裝redis

3.解壓已經上傳好的redis安裝包 tar -zxvf redis3.xx..tar.gz ,解壓到當前目錄下即可.

4.cd redis...進入解壓後的資料夾 ,執行 make 命令 完成後進入步驟5.

5.make PREFIX(必須大寫) = /usr/local/redis install 將redis安裝到指定目錄下

6. cp redis.conf至安裝目錄下

啟動redis分為前端啟動和後端啟動,前端啟動雖然簡單但無法進行後續的redis叢集配置,所以新手體驗下就好

7.前端啟動: 進入redis安裝目錄,輸入 ./bin/redis-server 啟動服務,然後./bin/redis-cli啟動客戶端

8.後端啟動:修改redis.conf中的daemonize為Yes,啟動時指定該配置檔案:

./bin/redis-server ./redis.conf

在做redis叢集時可以在配置檔案中修改埠號

9.關閉時可以通過kill -9殺死程序(不推薦,會丟失資料)

./bin/redis-cli shutdown 可以正常關閉

 


下面是Redis叢集搭建

在叢集搭建實施前,有必要先弄清楚原理和為什麼要做redis叢集.

redis叢集和其它叢集其實沒什麼大差異,主要就是為了解決單臺redis負載問題,當效能遇到瓶頸時,一臺伺服器是不夠的,而且單臺伺服器的redis並不是一個高可用的系統,一旦該節點宕機了,整個系統就無法正常提供服務了,但引入redis集群后,即使有一部分節點宕機了,redis仍能夠通過彼此間的通訊,對外正常提供服務,保證了系統的高可用性.

 

#特點:
所有的redis節點彼此互聯(PING-PONG機制),內部使用二進位制協議優化傳輸速度和頻寬。

節點的fail是通過叢集中超過半數的節點檢測失效時才生效。

客戶端與redis節點直連,不需要中間proxy層.客戶端不需要連線叢集所有節點,連線叢集中任何一個可用節點即可。

redis-cluster把所有的物理節點對映到[0-16383]slot上,cluster 負責維護node<->slot<->value

Redis叢集中內建了 16384 個雜湊槽,當需要在 Redis 叢集中放置一個 key-value 時,redis 先對key 使用 crc16 演算法算出一個結果,
然後把結果對 16384 求餘數,這樣每個 key 都會對應一個編號在 0-16383 之間的雜湊槽,redis 會根據節點數量大致均等的將雜湊槽對映到不同的節點.

Redis-cluster投票 容錯

投票過程是叢集中所有master參與,如果半數以上master節點與master節點通訊超時(cluster-node-timeout),認為當前master節點掛掉.

什麼時候整個叢集不可用(cluster_state:fail)?

1.如果叢集任意master掛掉,且當前master沒有slave.叢集進入fail狀態,也可以理解成叢集的slot對映[0-16383]不完整時進入fail狀態. 
2.redis-3.0.0.rc1加入cluster-require-full-coverage引數,預設關閉,開啟叢集相容部分失敗.
3.如果叢集超過半數以上master掛掉,無論是否有slave,叢集進入fail狀態.

理論部分囉嗦完了,這裡為了方便我搭個單機的偽叢集就行了,正式環境下換點ip和埠號就OK了,方法不變.

#在剛剛安裝好redis的伺服器上新建一個資料夾
mkdir redis-cluster
#把剛剛安裝好的redis服務複製6份至redis-cluster
cp -r redis redis-cluster
cd redis-cluster
mv redis redis1
cp  -r redis1 redis2
cp  -r redis1 redis3
cp  -r redis1 redis4
cp  -r redis1 redis5
cp  -r redis1 redis6

#然後分別redis1-redis6修改配置檔案redis.conf
vi redis.conf

只需要修改以下三塊內容:

daemonize yes #守護程序 開啟

cluster-enabled yes #叢集 開啟

port 6001 #隨便指定,我這裡由於IP相同,所以用6001-6006來指定6個叢集的埠號,如果是部署在不同的伺服器上,可以都是6379

修改完成後,我們寫2個指令碼,用來啟動和關閉著6個服務,不然能累skr人...

#在redis-cluster資料夾下新建start-all.sh
vi start-all.sh
#!/bin/bash
cd redis1
./bin/redis-server ./redis.conf
cd ..

cd redis2
./bin/redis-server ./redis.conf
cd ..

cd redis3
./bin/redis-server ./redis.conf
cd ..

cd redis4
./bin/redis-server ./redis.conf
cd ..

cd redis5
./bin/redis-server ./redis.conf
cd ..

cd redis6
./bin/redis-server ./redis.conf
cd ..

#編寫stop-all.sh
vi stop-all.sh
#!/bin/bash
cd redis1
./bin/redis-cli -p 6001 shutdown
./bin/redis-cli -p 6002 shutdown
./bin/redis-cli -p 6003 shutdown
./bin/redis-cli -p 6004 shutdown
./bin/redis-cli -p 6005 shutdown
./bin/redis-cli -p 6006 shutdown
#編寫完成指令碼後儲存並退出
 :wq
#修改兩個指令碼的許可權
chmod 751 start-all.sh 
chmod 751 stop-all.sh 

然後可以啟動redis看看:

./start-all.sh

ps -ef | grep redis

可以看到6個redis都已成功啟動:

下面開始做叢集,redis的叢集有2種方式,分別對應不同版本的redis:

第一種:通過redis-cli搭建

第二種:通過redis-trib.rb搭建

官網的建議是:redis5採用redis-cli搭建,redis3和redis4採用redis-trib.rb搭建

第一種:

#進入redis的bin目錄,並執行:
redis-cli --cluster create 127.0.0.1:6001 127.0.0.1:6002 127.0.0.1:6003 127.0.0.1:6004 127.0.0.1:6005 127.0.0.1:6006 --cluster-replicas 1
#執行後會彈出提示資訊讓你確認,輸入yes 並按下回車.
yes

當你看到:

[OK] All 16384 slots covered

就說明你配置叢集成功了!

接下來我們可以連上去看看:

#-p表示埠 -h表示連線的伺服器 -c表示以叢集方式連線
./redis-cli -c -p 6001 -h 127.0.0.1
#檢視一下當前叢集的全部節點資訊
cluster nodes

#查詢叢集狀態資訊
cluster info 

ok,至此使用redis-cli方式配置的叢集已經OJBK


鑑於很多人還在使用較低版本的redis,比如redis3 redis4 下面介紹下通過redis-trib.rb 來實現叢集

redis-trib.rb是用rubby寫的指令碼,所以需要先在你的伺服器上安裝rubby

yum -y install ruby
yum -y install rubygems
#redis-trib.rb是在redis解壓縮後的src目錄下,可以先把它拷貝到redis的安裝目錄下,這裡我直接拷貝到redis-cluster資料夾下:
cp redis-trib.rb /usr/local/redis-cluster

然後進入redis-cluster目錄下,執行redis-trib.rb

./redis-trib.rb create --replicas 1  127.0.0.1:6001 127.0.0.1:6002 127.0.0.1:6003 127.0.0.1:6004 127.0.0.1:6005 127.0.0.1:6006

啟動成功後同樣可以看到:


[OK] All 16384 slots covered.

至此,redis的3主3從叢集就搭建好了,至於正式環境下,你只需要改改Ip和埠以及根據伺服器和現有架構安排叢集的數量就好了.

關於如何新增節點和刪除節點這裡就不贅述了,感興趣的直接參見官網文件:https://redis.io/

欲知 redis常用命令,操作工具類,redis分散式鎖...且聽下回分解