高效能高併發網站架構,教你搭建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