linux安裝redis-6.0.1單機和集群


redis作為一個直接操作內存的key-value存儲系統,也是一個支持數據持久化的Nosql數據庫,具有非常快速的讀寫速度,可用於數據緩存、消息隊列等。

一、單機版安裝

1.下載redis

  進入redis官網下載安裝包,這里使用的是目前最新版6.0.4

  http://download.redis.io/releases/redis-6.0.4.tar.gz

2.上傳到服務器並解壓

  上傳到服務器/usr/local目錄並解壓

  tar -zxvf redis-6.0.4.tar.gz

3.編譯和安裝

  3.1 編譯,進入redis根目錄,執行命令

  make

  若編譯報錯,可能是缺少編譯環境gcc和tcl

  1)安裝gcc,先清理掉上一步編譯產生的文件,執行命令

  make distclean

  安裝gcc,執行命令

  yum install gcc -y

  這里遇到一個問題:在安裝6.0.1版本make時會遇到這樣一個錯誤,server.c:xxxx:xx: error: ‘xxxxxxxx’ has no member named ‘xxxxx

    原因:gcc編譯工具版本的問題,centos7默認安裝的版本是4.8.5,但是要求對應版本要在5.3以上,查看gcc版本命令

    gcc -v

    解決方法:升級到5.3以上版本,依次執行命令

    yum -y install centos-release-scl

    yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils

    scl enable devtoolset-9 bash

    echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile  --使永久生效

  2)安裝tcl,執行命令

  yum install tcl -y

  重新編譯make

  3.2 安裝,進入src目錄,執行命令

  make install PREFIX=/usr/local

  這時就會在/usr/local目錄下生成一個redis目錄,后面操作redis均使用此目錄下文件,解壓編譯的目錄作為源目錄。

4.配置

  復制源目錄根目錄下的redis.conf文件到生成的/usr/local/redis目錄下,執行命令

  cp redis.conf /usr/local/redis

  使用vi編輯配置redis.conf

  bind 0.0.0.0  設置綁定的主機ip,0.0.0.0表示監聽所有地址

  protected-mode no  關閉安全模式,允許外網訪問

  daemonize yes  后台啟動

5.添加開放端口號到防火牆

  添加端口並重啟防火牆

  firewall-cmd  --zone=public --add-port=6379/tcp --permanent && firewall-cmd --reload

  列出已經開放的端口號

  firewall-cmd --zone=public --permanent --list-ports

6.啟動

  啟動redis,進入redis根目錄,執行命令

  ./bin/redis-server redis.conf

  使用redis工具或API遠程訪問。

OK,單機版搭建成功!

二、集群版安裝

所謂知其然知其所以然,為什么要用redis集群?

  1)首先,redis是一個內存數據庫,也就是說存儲數據的容量不能超過主機內存大小(一般幾十G),有時我們要在redis中存儲大量的數據,比如上百個G,如果只是單個的redis實例,這樣很難動態水平擴展,這時候就要考慮集群。

  2)其次,redis單實例具有流量壓力上限問題,所以需要構建數據分區,多個master實例同時提供讀寫服務。

  redis 3.0版本以上開始支持cluster,采用的是hash slot(hash槽,redis共有16384個hash槽),它可以把多個redis實例整合在一起,將hash槽均分給每個master,形成redis集群也就是將數據分散在集群中的多個redis實例上,當我們創建數據時一個key只被分配到一個實例上。redis cluster是一個無中心的結構,每個節點保存着自己的數據和其它節點的信息,知道其它節點負責的槽,並且會與其它節點定時發送心跳信息,能夠及時感知集群中異常的節點。

  那么,當我們新建一個key時,redis集群是怎樣將數據分配到節點上的呢?

  當需要在redis集群中放置一個key-value時,redis先對key使用crc16算法計算出一個結果,然后將這個數值與16384求余,這樣就確定了hash槽的位置,再根據hash槽的值確定將數據分配給之前均分hash槽的節點上。

  當我們取出一個key時,又是怎樣進行定位的呢?

  當當前redis節點接收到獲取數據的命令時,會計算出要處理的數據庫鍵屬於哪個槽與存儲時使用同樣的算法,並檢查這個槽是否指派給了自己,若正好指派給了當前節點,則直接在這個節點上執行命令獲取數據。否則節點會向客戶端返回一個moved指令,指引客戶端轉向(redirect)至正確的節點,並在此發送之前執行的命令獲取數據。

  redis使用集群,就要包保證集群的高可用性,使用主從復制(repliaction)和自動故障轉移--哨兵機制(sentinel),可以解決單點故障。通過數據分區與主從復制提高redis集群的性能和高可用性。

  redis集群是怎樣保證集群高可用的呢?

  redis cluster采用投票容錯機制,集群角色有master和slave。master之間分配slots,slave向它指定的master同步數據,實現備份。master用於寫數據,slave用於讀數據,向slave寫數據會發生錯誤。當其中一個master無法提供服務時,該master的slave提升為master,代替master提供服務。保證集群中slot的完整性,即集群數據的完整性。一旦集群中其中一個master和它的所有slave全部失效,導致slot不完整,那么集群將會不可用,這是就需要人工去處理了。

  投票過程是集群中所有master參與,如果半數以上的節點與節點之間的通訊時間超過cluster-node-timeout,則認為當前節點掛掉。所以一般master節點數量均為奇數個,且不少於3個。

  什么情況下整個集群不可用?

  a.如果集群中任一master節點掛掉且沒有slave節點頂替,集群進入不可用狀態;

  當集群不可用時,對集群中的任何操作都不可用。

集群搭建:

  我們這里搭建一個偽分布式的集群,集群中有3個節點,每個節點有一主一備,理論需要6台虛擬機,我們采用6個redis實例來模擬創建。

注意:這里的集群環境ruby是用於后面創建集群命令的運行環境,但是在高版本例如redis-5.0.5版本及以上就不需要安裝此環境了,因為高版本創建集群已經不用redis-trib.rb這個腳本,而是使用自帶的redis-cli創建。

1.安裝集群環境ruby

  安裝ruby,執行命令

  yum install ruby rubygems  -y

  安裝redis與ruby的連接包,執行命令

    gem install redis

    如果提示ruby版本過低,需要升級ruby版本,需要安裝rvm(命令行工具,提供ruby環境管理和版本切換),安裝rvm前需要安裝curl(文件傳輸工具),執行命令

    yum install curl -y

    使用curl安裝rvm,執行命令

    curl -L get.rvm.io | bash -s stable

    安裝會報錯,並產生一串公鑰,執行命令

    gpg --keyserver hkp://keys.gnupg.net --recv-keys (這里跟上上面的公鑰)

    再次執行命令,一次不行多執行幾次

    curl -sSL https://get.rvm.io | bash -s stable

    安裝完成后會在/user/local目錄下發現rvm目錄,將命令放入shell,執行命令

    source /usr/local/rvm/scripts/rvm

    查看rvm管理的ruby版本,執行命令

    rvm list known

    安裝新版本,可以參照安裝連接包時提示的最低版本安裝,我這里安裝2.5.7版本,執行命令

    rvm install ruby-2.5.7

    等待ruby安裝完成,查看已安裝的版本,

    rvm list

    使用此版本

    rvm use ruby-2.5.7

    檢查一下當前使用的版本,ruby -v

  最后再次執行命令

    gem install redis

  環境安裝完成!!

2.創建集群目錄

  進入/usr/local目錄,執行命令

  mkdir redis_cluster

3.復制redis實例

  將redis目錄復制到redis_cluster中,執行命令

  cp -r /usr/local/redis /usr/local/redis_cluster/redis7001

  ps:這里注意一點,如果此時數據庫中有數據,那么將rdb文件一起復制時會導致后面集群創建失敗,有數據時不能創建集群。解決:刪除實例下rdb備份文件以及后面會生成的nodes.conf文件。

4.更改配置

  更改redis7001中配置redis.conf參數

  port 7001  修改端口號

  cluster-enabled yes  開啟集群支持

  將redis7001實例復制6份到當前文件夾,

  cp redis7001 redis7002

  cp redis7001 redis7003

  ......

  修改各個實例下的端口號

5.把創建集群的ruby腳本復制到集群目錄

  進入redis的src目錄,執行命令

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

6.創建集群

  啟動6個redis實例,這里為了方便編寫一個啟動腳本,在redis_cluste目錄下新建文件

  touch start-all.sh

  編輯輸入如下內容:  

    cd ./redis7001
    ./bin/redis-server redis.conf
    echo "啟動redis7001成功..."

    cd ../redis7002
    ./bin/redis-server redis.conf
    echo "啟動redis7002成功..."

    cd ../redis7003
    ./bin/redis-server redis.conf
    echo "啟動redis7003成功..."

    cd ../redis7004
    ./bin/redis-server redis.conf
    echo "啟動redis7004成功..."

    cd ../redis7005
    ./bin/redis-server redis.conf
    echo "啟動redis7005成功..."

    cd ../redis7006
    ./bin/redis-server redis.conf
    echo "啟動redis7006成功..."

  賦予執行權限

  chmod +x start-all.sh

  新建關閉redis集群腳本

    touch stop-all.sh

  編輯輸入如下內容:  

    cd ./redis7001
    bin/redis-cli -p 7001 shutwodn
    echo "關閉redis7001成功..."

    cd ../redis7002
    bin/redis-cli -p 7002 shutdown
    echo "關閉redis7002成功..."

    cd ../redis7003
    bin/redis-cli -p 7003 shutdown
    echo "關閉redis7003成功..."

    cd ../redis7004
    bin/redis-cli -p 7004 shutdown
    echo "關閉redis7004成功..."

    cd ../redis7005
    bin/redis-cli -p 7005 shutdown
    echo "關閉redis7005成功..."

    cd ../redis7006
    bin/redis-cli -p 7006 shutdown
    echo "關閉redis7006成功..."

  創建集群命令:

    進入到集群中某個實例下的bin目錄,高版本執行

    ./redis-cli --cluster create --cluster-replicas 1 192.168.2.75:7001 192.168.2.75:7002 192.168.2.75:7003 192.168.2.75:7004 192.168.2.75:7005 192.168.2.75:7006 

    低版本執行

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

    注:replicas參數表示一個master有接個slave

  然后就會按照默認的方式進行分配matser,主從關系。

7.測試

  使用命令連接上集群某個節點

  ./redis-cli -p 7001 -c

  使用命令 cluster info 和 cluster nodes可查看集群信息。

  注意:一定要加參數-c,否則無法進行各節點通信。

至此,集群版搭建完成!!

好累,歇會~~~

如有錯誤,感謝您的指正!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM