Redis 3.0.0 集羣部署

簡述:

1.0.1:redis cluster的現狀

目前redis支持的cluster特性node

1):節點自動發現redis

2):slave->master 選舉,集羣容錯centos

3):Hot resharding:在線分片ruby

4):進羣管理:cluster xxxbash

5):基於配置(nodes-port.conf)的集羣管理服務器

6):ASK 轉向/MOVED 轉向機制.架構

1.1.0redis cluster 架構

1.1.1redis-cluster架構圖

1.1.2架構細節:

(1)全部的redis節點彼此互聯(PING-PONG機制),內部使用二進制協議優化傳輸速度和帶寬.app

(2)節點的fail是經過集羣中超過半數的節點檢測失效時才生效.工具

(3)客戶端與redis節點直連,不須要中間proxy層.客戶端不須要鏈接集羣全部節點,鏈接集羣中任何一個可用節點便可優化

(4)redis-cluster把全部的物理節點映射到[0-16383]slot上,cluster 負責維護node<->slot<->value

 

redis-cluster選舉:容錯、

(1)領着選舉過程是集羣中全部master參與,若是半數以上master節點與master節點通訊超過(cluster-node-timeout),認爲當前master節點掛掉.

(2):何時整個集羣不可用(cluster_state:fail),當集羣不可用時,全部對集羣的操做作都不可用,收到((error) CLUSTERDOWN The cluster is down)錯誤

    a:若是集羣任意master掛掉,且當前master沒有slave.集羣進入fail狀態,也能夠理解成進羣的slot映射[0-16383]不完成時進入fail狀態.

    b:若是進羣超過半數以上master掛掉,不管是否有slave集羣進入fail狀態.

 

軟件版本

Linux系統版本:

 centos 6.5 2.6.32-431.el6.x86_64

Redis-3.0.7

ruby

2.0.0redis集羣搭建

2.0.1機器列表

Centos01:192.168.161.233     從

Centos02:192.168.161.234     從

Centos03:192.168.161.235     從

Centos04:192.168.161.236     主

Centos05:192.168.161.237     主

Centos06:192.168.161.238     主

2.0.2Redis安裝

6臺機器分別安裝 redis-3.0.7
#yum –y install  gcc make tcl                               
安裝軟件依賴包
#cp redis-3.0.7.tar.gz /opt
將安裝包拷貝至opt目錄
#cd /opt
進入opt目錄
#tar –xvf redis-3.0.7.tar.gz
解壓
#cd redis-3.0.7
#make 
編譯 安裝redis
#make test

  

2.0.3修改redis.conf配置文件:

daemonize yes 		//後臺運行開啓
pidfile /bestpayserver/redis-3.0-data/redis.pid		//pid文件
port 6380			//reids提供服務端口
logfile "/bestpayserver/redis-3.0-log/redis.log"			//日誌文件配置
dir /bestpayserver/redis-3.0-data/			//數據存放路徑
cluster-enabled yes			//打開redis集羣
cluster-config-file nodes-6380.conf		//cluster集羣配置文件(啓動自動生成)
cluster-node-timeout 15000	//節點互鏈超時閥值
appendonly yes	

  

2.0.4部署腳本

也能夠寫成腳本用salt跑 
-------------------------------------------------------------------------華麗的分割線---------------------------------------------------------------------------
#!/usr/bin/bash
yum -y install gcc make tcl;
cp redis-3.0.7.tar.gz /opt;
cd /opt;
tar -xvf redis-3.0.7.tar.gz;
cd redis-3.0.7;
make
make test;
sed -i 's/daemonize no/daemonize yes/' /opt/redis-3.0.7/redis.conf;
sed -i 's/pidfile \/var\/run\/redis.pid/pidfile \/bestpayserver\/redis-3.0-data\/redis.pid/' /opt/redis-3.0.7/redis.conf;
sed -i 's/port 6379/port 6380/' /opt/redis-3.0.7/redis.conf;
sed -i 's/logfile ""/logfile "\/bestpayserver\/redis-3.0-log\/redis.log"/' /opt/redis-3.0.7/redis.conf;
sed -i 's/dir .\//dir \/bestpayserver\/redis-3.0-data\//' /opt/redis-3.0.7/redis.conf;
sed -i 's/# cluster-enabled yes/cluster-enabled yes/' /opt/redis-3.0.7/redis.conf;
sed -i 's/# cluster-node-timeout 15000/cluster-node-timeout 15000/' /opt/redis-3.0.7/redis.conf;
sed -i 's/appendonly no/appendonly yes/' /opt/redis-3.0.7/redis.conf;
mkdir -p /bestpayserver/redis-3.0-log/;
mkdir -p /bestpayserver/redis-3.0-data/;
/opt/redis-3.0.7/src/redis-server /opt/redis-3.0.7/redis.conf &;
-------------------------------------------------------------------------更華麗的分割線---------------------------------------------------------------------------

salt安裝

Salt傳輸文件到各服務器
salt 'centos*' cp.get_file salt://redis-3.0.7.tar.gz /home/redis-3.0.7.tar.gz
salt 'centos*' cp.get_file salt://sed.sh /home/redis3install.sh
salt 'centos*' cmd.run 'sh /home/redis3insatl.sh
查看進程
salt '*' cmd.run 'ps -ef |grep redis'

3.0.5安裝ruby

Reids.trib.rb  是redis集羣命令行工具,是一個ruby程序因此咱們須要ruby環境才能啓動它

隨意挑選兩臺機器安裝ruby

# yum -y install ruby ruby-devel rubygems rpm-build
# gem install redis

 

2.0.6建立集羣

# /opt/redis-3.0.7/src/redis-trib.rb create --replicas 1 192.168.161.233:6380 192.168.161.234:6380 192.168.161.235:6380 192.168.161.236:6380 192.168.161.237:6380 192.168.161.238:6380

[OK] All 16384 slots covered 則集羣建立成功。

3.0.7查看集羣狀態

# /opt/redis-3.0.7/src/redis-cli -c -p 6380                    //進入redis客戶端
127.0.0.1:6380> cluster info			//查看集羣信息

 

127.0.0.1:6380> cluster nodes			//查詢集羣節點

4.0.0集羣操做:

CLUSTER INFO 打印集羣的信息  
CLUSTER NODES 列出集羣當前已知的全部節點(node),以及這些節點的相關信息。  
節點  
CLUSTER MEET <ip> <port> 將 ip 和 port 所指定的節點添加到集羣當中,讓它成爲集羣的一份子。  
CLUSTER FORGET <node_id> 從集羣中移除 node_id 指定的節點。  
CLUSTER REPLICATE <node_id> 將當前節點設置爲 node_id 指定的節點的從節點。  
CLUSTER SAVECONFIG 將節點的配置文件保存到硬盤裏面。  
槽(slot)  
CLUSTER ADDSLOTS <slot> [slot ...] 將一個或多個槽(slot)指派(assign)給當前節點。  
CLUSTER DELSLOTS <slot> [slot ...] 移除一個或多個槽對當前節點的指派。  
CLUSTER FLUSHSLOTS 移除指派給當前節點的全部槽,讓當前節點變成一個沒有指派任何槽的節點。  
CLUSTER SETSLOT <slot> NODE <node_id> 將槽 slot 指派給 node_id 指定的節點,若是槽已經指派給另外一個節點,那麼先讓另外一個節點刪除該槽>,而後再進行指派。  
CLUSTER SETSLOT <slot> MIGRATING <node_id> 將本節點的槽 slot 遷移到 node_id 指定的節點中。  
CLUSTER SETSLOT <slot> IMPORTING <node_id> 從 node_id 指定的節點中導入槽 slot 到本節點。  
CLUSTER SETSLOT <slot> STABLE 取消對槽 slot 的導入(import)或者遷移(migrate)。  
鍵  
CLUSTER KEYSLOT <key> 計算鍵 key 應該被放置在哪一個槽上。  
CLUSTER COUNTKEYSINSLOT <slot> 返回槽 slot 目前包含的鍵值對數量。  
CLUSTER GETKEYSINSLOT <slot> <count> 返回 count 個 slot 槽中的鍵。 
相關文章
相關標籤/搜索