Linux 安裝Redis並搭建集羣

一、下載、安裝過程略

1,創建下載目錄,下載安裝

mkdir -p /usr/local/redis

cd /usr/local/redis

wget http://download.redis.io/releases/redis-stable.tar.gz  #下載redis

tar xvzf redis-stable.tar.gz

cd redis-stable

make

make install

1.安裝Redis
(1).安裝redist需要安裝支持包,yum install gcc-c++

(2).redis安裝包採取的是在線wget下載.若wget命令不存在,執行 yum -y install wget安裝   

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

(3).解壓在當前目錄(我的是家目錄)

            [root@admin ~]# tar -zxvf redis-5.0.7.tar.gz 

(4).編譯並安裝  (redis安裝程序是c語言編寫,需要編譯轉換後才能安裝)

            [root@admin redis-5.0.7]# make && make PREFIX=/usr/local/redis install

            --->1).&&連接兩個命令,前面命令的返回值決定是否執行後面的命令

            --->2).PREFIX(注意:大寫)指定安裝目錄,若目錄不存在,則自動創建

(5).複製配置文件並修改

        複製安裝包下 redis.conf 到 目錄/usr/local/redis下

        vim redis.conf

            修改:   bind 127.0.0.1 ---->bind 自己ip

                      daemonize no   no---->yes

                      protected-mode yes   yes---->no
 

 

二、Redis Cluster(Redis集羣)簡介

redis是一個開源的key value存儲系統,受到了廣大互聯網公司的青睞。redis3.0版本之前只支持單例模式,在3.0版本及以後才支持集羣,我這裏用的是redis5.0.7版本 ;
redis集羣採用P2P模式,是完全去中心化的,不存在中心節點或者代理節點;
redis集羣是沒有統一的入口的,客戶端(client)連接集羣的時候連接集羣中的任意節點(node)即可,集羣內部的節點是相互通信的(PING-PONG機制),每個節點都是一個redis實例;
爲了實現集羣的高可用,即判斷節點是否健康(能否正常使用),redis-cluster有這麼一個投票容錯機制:如果集羣中超過半數的節點投票認爲某個節點掛了,那麼這個節點就掛了(fail)。這是判斷節點是否掛了的方法;
那麼如何判斷集羣是否掛了呢? -> 如果集羣中任意一個節點掛了,而且該節點沒有從節點(備份節點),那麼這個集羣就掛了。這是判斷集羣是否掛了的方法;
那麼爲什麼任意一個節點掛了(沒有從節點)這個集羣就掛了呢? -> 因爲集羣內置了16384個slot(哈希槽),並且把所有的物理節點映射到了這16384[0-16383]個slot上,或者說把這些slot均等的分配給了各個節點。當需要在Redis集羣存放一個數據(key-value)時,redis會先對這個key進行crc16算法,然後得到一個結果。再把這個結果對16384進行求餘,這個餘數會對應[0-16383]其中一個槽,進而決定key-value存儲到哪個節點中。所以一旦某個節點掛了,該節點對應的slot就無法使用,那麼就會導致集羣無法正常工作。
綜上所述,每個Redis集羣理論上最多可以有16384個節點。
二、集羣搭建需要的環境

master:負責讀寫
slave:master正常運行則不能讀取到數據,master掛了之後,角色更改爲master
2.1 Redis集羣至少需要3個節點,因爲投票容錯機制要求超過半數節點認爲某個節點掛了該節點纔是掛了,所以2個節點無法構成集羣。
2.2 要保證集羣的高可用,需要每個節點都有從節點,也就是備份節點,所以Redis集羣至少需要6臺服務器。因爲我沒有那麼多服務器,也啓動不了那麼多虛擬機,所在這裏搭建的是僞分佈式集羣,即一臺服務器虛擬運行6個redis實例,修改端口號爲(7001-7006),當然實際生產環境的Redis集羣搭建和這裏是一樣的。
2.3 安裝ruby(集羣的腳本需要用到,高版本redis 採用redis-cli 配置集羣  不需要ruby 的腳本方式)

三、集羣搭建具體步驟如下(注意要關閉防火牆)
3.1 在usr/local目錄下新建redis-cluster目錄,用於存放集羣節點

3.2 把redis目錄下的bin目錄下的所有文件複製到/usr/local/redis-cluster/redis01目錄下,不用擔心這裏沒有redis01目錄,會自動創建的。操作命令如下(注意當前所在路徑):

cp -r redis/bin/ redis-cluster/redis01

3.3 刪除redis01目錄下的快照文件dump.rdb,並且修改該目錄下的redis.conf文件,具體修改兩處地方:一是端口號修改爲7001,二是開啓集羣創建模式,打開註釋即可。分別如下圖所示:
刪除dump.rdb文件

修改端口號爲7001,默認是6379

將cluster-enabled yes 的註釋打開,增加cluster-config-file 日誌文件輸出

 3.4 將redis-cluster/redis01文件複製5份到redis-cluster目錄下(redis02-redis06),創建6個redis實例,模擬Redis集羣的6個節點。然後將其餘5個文件下的redis.conf裏面的端口號分別修改爲7002-7006。分別如下圖所示:
創建redis02-06目錄

分別修改redis.conf文件端口號爲7002-7006

分別修改cluster-config-file nodes-7002.conf 至 nodes-7006.conf

最小修改如下:

port 7002
bind xxx.xxx.xxx.xxx
dir /var/redis/7002
cluster-enabled yes
cluster-config-file nodes-7002.conf
cluster-node-timeout 5000
appendonly yes
daemonize yes
protected-mode no
pidfile /var/run/redis_7002.pid

3.5 接着啓動所有redis節點,由於一個一個啓動太麻煩了,所以在這裏創建一個批量啓動redis節點的腳本文件,命令爲start-allRedis.sh,文件內容如下: 

3.6 創建好啓動腳本文件之後,需要修改該腳本的權限,使之能夠執行,指令如下:

chmod +x start-allRedis.sh

3.7 執行start-allRedis.sh腳本,啓動6個redis節點。

檢測redis 進程

ps -ef|grep redis

刪除redis進程

kill -9 redisPid1 redisPid2 ...

 

3.8 ok,至此6個redis節點啓動成功,接下來正式開啓搭建集羣,以上都是準備條件。大家不要覺得圖片多看起來冗長所以覺得麻煩,其實以上步驟也就一句話的事情:創建6個redis實例(6個節點)並啓動。
要搭建集羣的話,需要使用一個工具(腳本文件),這個工具在redis解壓文件的源代碼裏。因爲這個工具是一個ruby腳本文件,所以這個工具的運行需要ruby的運行環境,就相當於java語言的運行需要在jvm上。所以需要安裝ruby,指令如下:
 

 安裝ruby 過程簡略

yum install ruby

3.9 上一步中已經把ruby工具所需要的運行環境和ruby包安裝好了,接下來需要把這個ruby腳本工具複製到usr/local/redis-cluster目錄下。那麼這個ruby腳本工具在哪裏呢?之前提到過,在redis解壓文件的源代碼裏,即redis/src目錄下的redis-trib.rb文件。
 

3.10 將該ruby工具(redis-trib.rb)複製到redis-cluster目錄下,指令如下:

cp redis-trib.rb /usr/local/redis-cluster

然後使用該腳本文件搭建集羣,指令如下:

./redis-trib.rb create --replicas 1 47.106.219.251:7001 47.106.219.251:7002 47.106.219.251:7003 47.106.219.251:7004 47.106.219.251:7005 47.106.219.251:7006

注意:此處大家應該根據自己的服務器ip輸入對應的ip地址!

中途有個地方需要手動輸入yes即可.

3.10.1 使用redis-cli搭建redis5.x集羣

高版本的redis 不用redis-trib.rb方式,而是直接通過 redis-cli --cluster create ip:port --cluster-replicas 1 方式創建集羣環境

至此,Redi集羣搭建成功!大家注意最後一段文字,顯示了每個節點所分配的slots(哈希槽),這裏總共6個節點,其中3個是從節點,所以3個主節點分別映射了0-5460、5461-10922、10933-16383 solts。

 3.11 最後連接集羣節點,連接任意一個即可:

注意:一定要加上-c,不然節點之間是無法自動跳轉的!如下圖可以看到,存儲的數據(key-value)是均勻分配到不同的節點的:

最後,加上兩條redis集羣基本命令:
1.查看當前集羣信息

cluster info

 2.查看集羣裏有多少個節點

cluster nodes

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章