1. 程式人生 > >高效能高併發網站架構,教你搭建Redis5快取叢集

高效能高併發網站架構,教你搭建Redis5快取叢集

一、Redis叢集介紹

Redis真的是一個優秀的技術,它是一種key-value形式的NoSQL記憶體資料庫,由ANSI C編寫,遵守BSD協議、支援網路、可基於記憶體亦可持久化的日誌型、Key-Value資料庫,並提供多種語言的API。 Redis最大的特性是它會將所有資料都放在記憶體中,所以讀寫速度效能非常好。Redis是基於記憶體進行操作的,效能較高,可以很好的在一定程度上解決網站一瞬間的併發量,例如商品搶購秒殺等活動。

網站承受高併發訪問壓力的同時,還需要從海量資料中查詢出滿足條件的資料,需要快速響應,前端傳送請求、後端和mysql資料庫互動,進行sql查詢操作,讀寫比較慢,這時候引入Redis ,把從mysql 的資料快取到Redis 中,下次讀取時候效能就會提高;當然,它也支援將記憶體中的資料以快照和日誌的形式持久化到硬碟,這樣即使在斷電、機器故障等異常情況發生時資料也不會丟失,Redis能從硬碟中恢復快照資料到記憶體中。

Redis 釋出了穩定版本的 5.0 版本,放棄 Ruby的叢集方式,改用 C語言編寫的 redis-cli的方式,是叢集的構建方式複雜度大大降低。Redis-Cluster叢集採用無中心結構,每個節點儲存資料和整個叢集狀態,每個節點都和其他所有節點連線。

為了保證資料的高可用性,加入了主從模式,一個主節點對應一個或多個從節點,主節點提供資料存取,從節點則是從主節點拉取資料備份,當這個主節點掛掉後,就會有這個從節點選取一個來充當主節點,從而保證叢集不會掛掉。

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

叢集中至少應該有奇數個節點,所以至少有三個節點,每個節點至少有一個備份節點,所以下面使用6節點(主節點、備份節點由redis-cluster叢集確定)。6個節點分佈在一臺機器上,採用三主三從的模式。實際應用中,最好用多臺機器,比如說6個節點分佈到3臺機器上,redis在建立叢集時為自動的將主從節點進行不同機器的分配。

二、單機redis模式

下載原始碼redis5.0並解壓編譯

​wget http://download.redis.io/releases/redis-5.0.0.tar.gz
tar xzf redis-5.0.0.tar.gz
cd redis-5.0.0
make

redis前端啟動需要改成後臺啟動.

修改redis.conf檔案,將daemonize no -> daemonize yes
vim redis.conf
啟動redis
/www/server/redis/src/redis-server /www/server/redis/redis.conf
檢視redis是否在執行 
ps aux|grep redis

  

現在是單機redis模式完成。

三、redis叢集模式:

1.建立6個Redis配置檔案

cd /usr/local/
mkdir redis_cluster  //建立叢集目錄
cd redis_cluster
mkdir 7000 7001 7002 7003 7004 7005//分別代表6個節點    
其對應埠 7000 7001 7002 70037004 7005

2.複製配置檔案到各個目錄

cp /www/server/redis/redis.conf  /usr/local/redis_cluster/7000/
cp /www/server/redis/redis.conf  /usr/local/redis_cluster/7001/
cp /www/server/redis/redis.conf  /usr/local/redis_cluster/7002/
cp /www/server/redis/redis.conf  /usr/local/redis_cluster/7003/
cp /www/server/redis/redis.conf  /usr/local/redis_cluster/7004/
cp /www/server/redis/redis.conf  /usr/local/redis_cluster/7005/ 

 3.分別修改配置檔案

vim /usr/local/redis_cluster/7000/redis.conf
vim /usr/local/redis_cluster/7001/redis.conf
vim /usr/local/redis_cluster/7002/redis.conf
vim /usr/local/redis_cluster/7003/redis.conf
vim /usr/local/redis_cluster/7004/redis.conf
vim /usr/local/redis_cluster/7005/redis.conf

 如下

port 7000 #埠
cluster-enabled yes #啟用叢集模式
cluster-config-file nodes_7000.conf #叢集的配置 配置檔案首次啟動自動生成
cluster-node-timeout 5000 #超時時間 5秒
appendonly yes #aof日誌開啟 它會每次寫操作都記錄一條日誌
daemonize yes #後臺執行
protected-mode no #非保護模式
pidfile  /var/run/redis_7000.pid
//下面可以不寫
#若設定密碼,master和slave需同時配置下面兩個引數:
masterauth "jijiji" #連線master的密碼
requirepass "jijiji" #自己的密碼 

cluster-config-file,port,pidfile對應數字

4.啟動節點

cd /www/server/redis/src/
./redis-server /usr/local/redis_cluster/7000/redis.conf
./redis-server /usr/local/redis_cluster/7001/redis.conf
./redis-server /usr/local/redis_cluster/7002/redis.conf
./redis-server /usr/local/redis_cluster/7003/redis.conf
./redis-server /usr/local/redis_cluster/7004/redis.conf
./redis-server /usr/local/redis_cluster/7005/redis.conf

 檢視redis執行

ps aux|grep redis

 

5.啟動叢集

/www/server/redis/src/redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005  --cluster-replicas 1

 這裡使用的命令是create,因為我們要建立一個新的叢集。 該選項--cluster-replicas 1意味著我們希望每個建立的主伺服器都有一個從服。 

 

輸入yes

至此,Reids5 叢集搭建完成。

6.檢查Reids5叢集狀態

可以執行redis-cli --cluster check host:port檢查叢集狀態slots詳細分配。 

redis-cli --cluster info 127.0.0.1:7000

7.停止Reids5叢集

(1).因為Redis可以妥善處理SIGTERM訊號,所以直接kill -9也是可以的,可以同時kill多個,然後再依次啟動。

kill -9 PID PID PID

(2).redis5 提供了關閉叢集的工具,修改檔案: /www/server/redis/utils/create-cluster/create-cluster

埠PROT設定為6999,NODES為6,工具會生成 7000-7005 六個節點 用於操作。

修改後,執行如下命令關閉叢集:

/www/server/redis/utils/create-cluster/create-cluster stop  

重新啟動叢集:

/www/server/redis/utils/create-cluster/create-cluster start 

8.幫助資訊

執行redis-cli --cluster help,檢視更多幫助資訊

redis-cli --cluster help