redis-cluster配置

1、redis使用中遇到的瓶頸

  咱們平常在對於redis的使用中,常常會遇到一些問題node

  一、高可用問題,如何保證redis的持續高可用性。redis

  二、容量問題,單實例redis內存沒法無限擴充,達到32G後就進入了64位世界,性能降低。數據庫

  三、併發性能問題,redis號稱單實例10萬併發,但也是有盡頭的。vim

2、redis-cluster的優點  

  一、官方推薦,毋庸置疑。ruby

  二、去中心化,集羣最大可增長1000個節點,性能隨節點增長而線性擴展。架構

  三、管理方便,後續可自行增長或摘除節點,移動分槽等等。併發

  四、簡單,易上手。負載均衡

3、redis-cluster名詞介紹

  一、master  主節點、分佈式

  二、slave   從節點函數

  三、slot    槽,一共有16384數據分槽,分佈在集羣的全部主節點中。

4、redis-cluster簡介

 

redis-cluster

 

 

圖中描述的是六個redis實例構成的集羣

6379端口爲客戶端通信端口

16379端口爲集羣總線端口

集羣內部劃分爲16384(0-16383)個數據分槽,分佈在三個主redis中。

從redis中沒有分槽,不會參與集羣投票,也不會幫忙加快讀取數據,僅僅做爲主機的備份。

三個主節點中平均分佈着16384數據分槽的三分之一,每一個節點中不會存有有重複數據,僅僅有本身的從機幫忙冗餘。

問題:在什麼狀況下考慮使用Redis Cluster

答:Redis ClusterRedis的分佈式解決方案,在Redis 3.0版本正式推出的,有效解決了Redis分佈式方面的需求。當遇到單機內存、併發、流量等瓶頸時,能夠採用Cluster架構達到負載均衡的目的。

5、Redis數據分區

Redis Cluster採用虛擬槽分區,全部的鍵根據哈希函數映射到0 ~ 16383,計算公式:slot = CRC16(key)&16383。每個節點負責維護一部分槽以及槽所映射的鍵值數據。

下圖展示一個五個節點構成的集羣,每一個節點平均大約負責3276個槽,以及經過計算公式映射到對應節點的對應槽的過程。

 

 

Redis虛擬槽分區的特性:

解耦數據和節點之間的關係,簡化了節點擴容和收縮難度。
節點自身維護槽的映射關係,不須要客戶端或者代理服務維護槽分區元數據。
支持節點、槽、鍵之間的映射查詢,用於數據路由、在線伸縮等場景。

6、搭建Redis Cluster

(一)準備6個redis數據庫實例,準備6個配置文件redis-{7000....7005}配置文件

-rw-r--r-- 1 root root 151 Jan  2 19:26 redis-7000.conf -rw-r--r-- 1 root root 151 Jan  2 19:27 redis-7001.conf -rw-r--r-- 1 root root 151 Jan  2 19:27 redis-7002.conf -rw-r--r-- 1 root root 151 Jan  2 19:27 redis-7003.conf -rw-r--r-- 1 root root 151 Jan  2 19:27 redis-7004.conf -rw-r--r-- 1 root root 151 Jan  2 19:27 redis-7005.conf

redis-7000.conf配置以下

port 7000 daemonize yes dir "/opt/redis/data" logfile "7000.log" dbfilename "dump-7000.rdb" cluster-enabled yes   #開啓集羣模式
cluster-config-file nodes-7000.conf  #集羣內部的配置文件
cluster-require-full-coverage no  #redis cluster須要16384個slot都正常的時候才能對外提供服務,換句話說,只要任何一個slot異常那麼整個cluster不對外提供服務。 所以生產環境通常爲no

redis支持多實例的功能,咱們在單機演示集羣搭建,須要6個實例,三個是主節點,三個是從節點,數量爲6個節點才能保證高可用的集羣。

每一個節點僅僅是端口運行的不一樣!

[root@yugo /opt/redis/config 17:12:30]#ls
redis-7000.conf  redis-7002.conf  redis-7004.conf
redis-7001.conf  redis-7003.conf  redis-7005.conf

#確保每一個配置文件中的端口修改!!

(二)啓動6個數據庫實例

[root@localhost s15rediscluster]# redis-server redis-7000.conf 
[root@localhost s15rediscluster]# redis-server redis-7001.conf 
[root@localhost s15rediscluster]# redis-server redis-7002.conf 
[root@localhost s15rediscluster]# redis-server redis-7003.conf 
[root@localhost s15rediscluster]# redis-server redis-7004.conf 
[root@localhost s15rediscluster]# redis-server redis-7005.conf 

檢查日誌文件

cat 7000.log

檢查redis服務的端口、進程

netstat -tunlp|grep redis


ps -ef|grep redis

此時集羣還不可用,能夠經過登陸redis查看

redis-cli -p 7000
set hello world

(error)CLUSTERDOWN The cluster is down

(三)配置ruby語言環境,腳本一鍵啓動redis-cluster 

一、下載ruby語言的源碼包,編譯安裝

wget https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.1.tar.gz

二、解壓縮

tar -xvf ruby-2.3.1.tar.gz cd ruby-2.3.1 ./configure --prefix=/opt/ruby/ make && make install

三、配置ruby的環境變量

echo $PATH vim /etc/profile #寫入最底行
PATH=$PATH:/opt/ruby/bin/
#讀取文件
source /etc/profile

四、下載安裝ruby操做redis的模塊包

wget http://rubygems.org/downloads/redis-3.3.0.gem gem install -l redis-3.3.0.gem #查看gem有哪些包
gem list -- check redis gem

五、安裝redis-trib.rb命令

cp /opt/redis/src/redis-trib.rb /usr/local/bin/

六、一鍵開啓redis-cluster集羣

redis-trib.rb create --replicas 1 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

#集羣自動分配主從關係 7000、700一、7002爲 700三、700四、7005 主動關係

七、查看集羣狀態

redis-cli -p 7000 cluster info redis-cli -p 7000 cluster nodes  #等同於查看nodes-7000.conf文件節點信息
 集羣主節點狀態 redis-cli -p 7000 cluster nodes | grep master 集羣從節點狀態 redis-cli -p 7000 cluster nodes | grep slave

安裝完畢後,檢查集羣狀態

[root@yugo /opt/redis/src 18:42:14]#redis-cli -p 7000 cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_ping_sent:10468
cluster_stats_messages_pong_sent:10558
cluster_stats_messages_sent:21026
cluster_stats_messages_ping_received:10553
cluster_stats_messages_pong_received:10468
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:21026

八、測試寫入集羣數據,登陸集羣必須使用redis-cli -c -p 7000必須加上-c參數

127.0.0.1:7000> set name chao     
-> Redirected to slot [5798] located at 127.0.0.1:7001       
OK
127.0.0.1:7001> exit
[root@yugo /opt/redis/src 18:46:07]#redis-cli -c -p 7000
127.0.0.1:7000> ping
PONG
127.0.0.1:7000> keys *
(empty list or set)
127.0.0.1:7000> get name
-> Redirected to slot [5798] located at 127.0.0.1:7001
"chao"

集羣ok

相關文章
相關標籤/搜索