Redis集羣部署

1.1.1redis簡介

Redis 是一個開源的使用 ANSI C 語言編寫、支持網絡、可基於內存亦可持久化的日誌 型、 Key-Value數據庫redis

1.1.2redis常見使用場景

1.會話緩存(Session Cache數據庫

 

最經常使用的一種使用Redis的情景是會話緩存(session cache)。用Redis緩存會話比其餘存儲(如Memcached)的優點在於:Redis提供持久化。當維護一個不是嚴格要求一致性的緩存時,若是用戶的購物車信息所有丟失,大部分人都會不高興的,如今,他們還會這樣嗎?vim

 

幸運的是,隨着 Redis 這些年的改進,很容易找到怎麼恰當的使用Redis來緩存會話的文檔。甚至廣爲人知的商業平臺Magento也提供Redis的插件。後端

 

2.全頁緩存(FPCcentos

 

除基本的會話token以外,Redis還提供很簡便的FPC平臺。回到一致性問題,即便重啓了Redis實例,由於有磁盤的持久化,用戶也不會看到頁面加載速度的降低,這是一個極大改進,相似PHP本地FPC。緩存

 

再次以Magento爲例,Magento提供一個插件來使用Redis做爲全頁緩存後端。bash

 

此外,對WordPress的用戶來講,Pantheon有一個很是好的插件  wp-redis,這個插件能幫助你以最快速度加載你曾瀏覽過的頁面。網絡

 

3.隊列session

 

Reids在內存存儲引擎領域的一大優勢是提供 list 和 set 操做,這使得Redis能做爲一個很好的消息隊列平臺來使用。Redis做爲隊列使用的操做,就相似於本地程序語言(如Python)對 list 的 push/pop 操做。工具

 

若是你快速的在Google中搜索「Redis queues」,你立刻就能找到大量的開源項目,這些項目的目的就是利用Redis建立很是好的後端工具,以知足各類隊列需求。例如,Celery有一個後臺就是使用Redis做爲broker,你能夠從這裏去查看。

 

 

 

 

 

1.1.4 redis版本

   redis版本:2.8.6

   操做系統centos6.5

2.0.0 單機模式安裝

2.1.1軟件下載

wget http://download.redis.io/releases/redis-2.8.6.tar.gz

2.1.2安裝腳本

以上每臺機器分別按照單機版安裝redis執行腳本redis_install.sh

腳本以下

 

#!/bin/bash

yum -y install gcc make tcl;

cp redis-2.8.6.tar.gz /usr/local/redis-2.8.6.tar.gz;

cd /usr/local/;

tar -xvf redis-2.8.6.tar.gz;

cd redis-2.8.6;

make;

make test;

mkdir  -p  /bestpayserver/data/redis;

mkdir  -p  /bestpayserver/log/;

sed -i 's/^daemonize no/daemonize yes/g'  redis.conf

sed -i 's/^port 6379/port 16379/g' redis.conf

sed -i 's/^logfile ""/logfile \/bestpayserver\/log\/redis.log/g' redis.conf

sed -i 's/^dir .\//dir \/bestpayserver\/data\/redis/g' redis.conf

  

 

 

2.1.3 軟件啓動

   # cd  /usr/local/redis-2.8.6/src

   # ./redis-server  /usr/local/redis-2.8.6/redis.conf

  

2.1.4 查看redis進程

# ps -aux |grep redis

Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ

root     14134  0.0  0.9 137348  9544 ?        Ssl  10:18   0:18 ./redis-server *:16379                         

root     25042  0.0  0.0 103256   828 pts/0    S+   20:35   0:00 grep redis

  

 

2.1.5 命令測試

         進入客戶端:

         # cd  /usr/local/redis-2.8.6/src

         # ./redis-cli –p 16379

         set 測試

         redis 127.0.0.1:16379> set hello world

         OK <---成功

         get 測試

         redis 127.0.0.1:16379> get hello

         "world" <---成功

  

 

2.2 集羣監控搭建

2.2.1. 機器準備

   主master:192.168.161.233

   從1slave:192.168.161.234

   從2slave:192.168.161.235

   監控機sentinel:192.168.161.236

 

2.2.2拓撲圖

2.2.3 slave 配置

# cd  /usr/local/redis-2.8.6
# echo "slaveof 192.168.161.233 16379" >> redis.conf

  

Master上查看集羣狀態

[root@centos01 src]# ./redis-cli -h 192.168.161.233 -p 16379 info Replicatio

Slave上查看集羣狀態

[root@centos03 src]# ./redis-cli -h 192.168.161.235 -p 16379 info Replication

2.2.4sentinel監控機配置

# cd  /usr/local/redis-2.8.6
# vim sentinel.conf

  

修改一下配置

sentinel monitor mymaster  192.168.161.233  16379  1

  

其中mymaster爲自定義的master名稱,後面爲master的IP,端口號,最後面的1表示有一個sentinel監控。

   Redis主從系統,除了作數據冗餘,開能夠作高可用性災備。Reids提供了Sentinel工具來監控各Master的狀態,若是Master異常,則會作主從切換,將slave做爲master,將master做爲slave。主從切換以後,master_redis.conf、slave_redis.conf和sentinel.conf的內容都會發生改變。master_redis.conf中會多了一句slaveof的配置,sentinel.conf的監控目標也隨之調換,這一點要注意。

啓動監控機:

#./redis-server /usr/local/redis-2.8.6/sentinel.conf --sentinel &

效果以下:

在master上查看監控狀態

# ./redis-cli -h 192.168.161.236 -p 26379 info Sentinel

  

效果以下:

 

在master  用redis客戶斷 上查看監控機上 slave狀態  

# ./redis-cli -h 192.168.161.236 -p 26379  sentinel slaves mymaster

3.0.0總結

3.0.1 主要功能

Redis-Sentinel是Redis官方推薦的高可用性(HA)解決方案,當用Redis作Master-slave的高可用方案時,假如master宕機了,Redis自己(包括它的不少客戶端)都沒有實現自動進行主備切換,而Redis-sentinel自己也是一個獨立運行的進程,它能監控多個master-slave集羣,發現master宕機後能進行自懂切換。

它的主要功能有如下幾點

不時地監控redis是否按照預期良好地運行;

若是發現某個redis節點運行出現情況,可以通知另一個進程(例如它的客戶端);

可以進行自動切換。當一個master節點不可用時,可以選舉出master的多個slave(若是有超過一個slave的話)中的一個來做爲新的master,其它的slave節點會將它所追隨的master的地址改成被提高爲master的slave的新地址

 

3.0.2 Sentinel支持集羣

很顯然,只使用單個sentinel進程來監控redis集羣是不可靠的,當sentinel進程宕掉後(sentinel自己也有單點問題,single-point-of-failure)整個集羣系統將沒法按照預期的方式運行。因此有必要將sentinel集羣,這樣有幾個好處:

即便有一些sentinel進程宕掉了,依然能夠進行redis集羣的主備切換;

若是隻有一個sentinel進程,若是這個進程運行出錯,或者是網絡堵塞,那麼將沒法實現redis集羣的主備切換(單點問題);

若是有多個sentinel,redis的客戶端能夠隨意地鏈接任意一個sentinel來得到關於redis集羣中的信息。

相關文章
相關標籤/搜索