【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分散式鎖...且聽下回分解