redis集羣配置

首先建立兩臺虛擬機(有服務器的能夠直接服務器上搞),每臺機器3個節點,建立出3個master、3個salve 環境。node

redis 採用 redis-3.2.10 版本(redis版本必須高於3.0版本,3.0版本如下不支持集羣)。redis

兩臺虛擬機都是 CentOS ,一臺 CentOS 7 (主IP:192.168.1.115),一臺 CentOS 6.5(從IP:192.168.1.160) 。算法

 

先關閉防火牆ruby

systemctl stop firewalld.service       //Centos 7
service iptables stop                  //Centos 6.5

 

先在主服務器安裝redis服務器

cd /usr/local/etc wget http://download.redis.io/releases/redis-3.2.10.tar.gz
tar -zxf redis-3.2.10.tar.gz cd redis-3.2.10 make

將 redis-trib.rb 複製到 /usr/local/bin 目錄下app

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

再建立 redis 各個節點工具

首先在 192.168.31.115 機器上 /usr/local/etc/redis-3.2.10 目錄下建立 redis_cluster 目錄測試

mkdir redis_cluster
cd redis_cluster

在 redis_cluster 目錄下,建立名爲7000、700一、7002的目錄,並將 redis.conf 拷貝到這三個目錄中ui

mkdir 7000 7001 7002 cp ../redis.conf 7000/ cp ../redis.conf 7001/ cp ../redis.conf 7002/

分別修改這三個配置文件,修改以下內容(每一個配置文件的端口號、pidfile、cluster-config-file 都改成對應的端口號)
spa

port  7000                                //端口號
bind 192.168.1.115                        //默認ip爲127.0.0.1 須要改成本機器ip 不然沒法建立集羣
daemonize    yes                          //redis後臺運行
pidfile  /var/run/redis_7000.pid          //pidfile文件
cluster-enabled  yes                      //開啓集羣 把註釋#去掉
cluster-config-file  nodes_7000.conf      //集羣的配置 配置文件首次啓動自動生成
cluster-node-timeout  15000               //請求超時 默認15秒,可自行設置
appendonly  yes                           //aof日誌開啓 有須要就開啓,它會每次寫操做都記錄一條日誌

接着在另一臺機器上192.168.1.160 重複以上相應的操做,只是把目錄改成700三、700四、7005,對應的配置文件也按照這個規則修改便可。

 

而後在兩臺服務器上啓動redis服務

主服務器 redis-server redis_cluster/7000/redis.conf redis-server redis_cluster/7001/redis.conf redis-server redis_cluster/7002/redis.conf 從服務器 redis-server redis_cluster/7003/redis.conf redis-server redis_cluster/7004/redis.conf redis-server redis_cluster/7005/redis.conf

啓動完後查看redis啓動狀況

第一臺服務器
ps -ef | grep redis
root 24802 1 0 Sep14 ? 00:00:57 /usr/local/etc/redis-3.2.10/src/redis-server 192.168.1.115:7000 [cluster] root 24804 1 0 Sep14 ? 00:00:56 /usr/local/etc/redis-3.2.10/src/redis-server 192.168.1.115:7001 [cluster]
root 24808 1 0 Sep14 ? 00:00:54 /usr/local/etc/redis-3.2.10/src/redis-server 192.168.1.115:7002 [cluster]
root 27623 27605 0 10:51 pts/1 00:00:00 grep --color=auto redis

第二臺服務器
ps -ef | grep redis
root 24802 1 0 Sep14 ? 00:00:57 /usr/local/etc/redis-3.2.10/src/redis-server 192.168.1.160:7003 [cluster] root 24804 1 0 Sep14 ? 00:00:56 /usr/local/etc/redis-3.2.10/src/redis-server 192.168.1.160:7004 [cluster]
root 24808 1 0 Sep14 ? 00:00:54 /usr/local/etc/redis-3.2.10/src/redis-server 192.168.1.160:7005 [cluster]
root 27623 27605 0 10:51 pts/1 00:00:00 grep --color=auto redis

最重要的一步來了,在主服務器上建立集羣,其中前三個 ip:port 爲主服務器的節點,剩下三個爲從服務器的節點。

Redis 官方提供了 redis-trib.rb 這個工具,就在解壓目錄的 src 目錄中,第三步中已將它複製到 /usr/local/bin 目錄中,能夠直接在命令行中使用了。使用下面這個命令便可完成安裝。

cd /usr/local/bin ./redis-trib.rb  create  --replicas  1  192.168.1.115:7000 192.168.1.115:7001  192.168.1.115:7002 1192.168.1.160:7003  1192.168.1.160:7004  1192.168.1.160:7005

這個工具是用 ruby 實現的,若是沒有安裝ruby,須要先安裝 ruby(只須要在主服務上安裝)。

yum -y install ruby ruby-devel rubygems rpm-build gem install redis -v 3.2.1

以後再運行 redis-trib.rb 命令,會出現以下提示,輸入 yes

出現如下內容說明已經安裝集羣成功。

 

 

開始集羣驗證。

在從服務器上鍊接集羣的7005端口的節點,鏈接方式爲 redis-cli -h 192.168.1.160 -c -p 7005  ,加參數 -c 可鏈接到集羣,由於上面 redis.conf 將 bind 改成了ip地址,因此 -h 參數不能夠省略。 

./redis-cli -h 192.168.1.160 -c -p 7005
192.168.1.160:7005> set name "hello world" OK 192.168.1.160:7005>

 

在主服務器上鍊接7002節點

./redis-cli -h 192.168.1.115 -c -p 7002
192.168.1.115:7002> keys *
1) "name"
192.168.1.115:7002> get name -> Redirected to slot [5798] located at 192.168.1.115:7002
"hello world"
192.168.1.115:7002>

 

說明集羣運做正常。

若是要設置集羣密碼,須要在每一個節點再依次設置以下:

 

config set masterauth passwd123
config set requirepass passwd123
auth passwd123
config rewrite

 

簡單說一下原理

redis cluster在設計的時候,就考慮到了去中心化,去中間件,也就是說,集羣中的每一個節點都是平等的關係,都是對等的,每一個節點都保存各自的數據和整個集羣的狀態。每一個節點都和其餘全部節點鏈接,並且這些鏈接保持活躍,這樣就保證了咱們只須要鏈接集羣中的任意一個節點,就能夠獲取到其餘節點的數據。

Redis 集羣沒有並使用傳統的一致性哈希來分配數據,而是採用另一種叫作哈希槽 (hash slot)的方式來分配的。redis cluster 默認分配了 16384 個slot,當咱們set一個key 時,會用CRC16算法來取模獲得所屬的slot,而後將這個key 分到哈希槽區間的節點上,具體算法就是:CRC16(key) % 16384。因此咱們在測試的時候看到set 和 get 的時候,直接跳轉到了7000端口的節點。

Redis 集羣會把數據存在一個 master 節點,而後在這個 master 和其對應的salve 之間進行數據同步。當讀取數據時,也根據一致性哈希算法到對應的 master 節點獲取數據。只有當一個master 掛掉以後,纔會啓動一個對應的 salve 節點,充當 master 。

須要注意的是:必需要3個或以上的主節點,不然在建立集羣時會失敗,而且當存活的主節點數小於總節點數的一半時,整個集羣就沒法提供服務了。

相關文章
相關標籤/搜索