1. 程式人生 > 實用技巧 >(轉)linux下安裝、配置redis叢集

(轉)linux下安裝、配置redis叢集

ruby引用:https://blog.csdn.net/xiaozhu0301/article/details/78959651?utm_medium=distribute.pc_relevant_download.none-task-blog-baidujs-1.nonecase&depth_1-utm_source=distribute.pc_relevant_download.none-task-blog-baidujs-1.nonecase

redis引用:https://www.cnblogs.com/ivy-zheng/p/10924774.html

1、安裝的工具包依賴的環境

yum install -y gcc-c++ patch readline readline-devel zlib zlib-devel libyaml-devel libffi-devel openssl-devel make bzip2 autoconf automake libtool bison sqlite-devel iconv-devel 

2.安裝rvm(ruby管理工具)

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

如果遇到以下錯誤:

Warning, RVM 1.26.0 introduces signed releases and automated check of signatures when GPG software found.  
    Assuming you trust Michal Papis import the mpapis public key (downloading the signatures).  
      
    GPG signature verification failed for '/usr/local/rvm/archives/rvm-1.26.11.tgz' - 'https://github.com/rvm/rvm/releases/download/1.26.11/1.26.11.tar.gz.asc'!  
    try downloading the signatures:  
      
        gpg2 --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3  
      
    or if it fails:  
      
        command curl -sSL https://rvm.io/mpapis.asc | gpg2 --import -  
      
    the key can be compared with:  
      
        https://rvm.io/mpapis.asc  
        https://keybase.io/mpapis  

那麼複製

gpg2 --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3

在控制檯執行一次,然後再次執行

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

安裝成功後 會提示

# Administrator,
#
# Thank you for using RVM!
# We sincerely hope that RVM helps to make your life easier and more enjoyable!!!
#
# ~Wayne, Michal & team.

3.執行以下命令

echo "source /etc/profile.d/rvm.sh" >> ~/.bashrc && source /etc/profile.d/rvm.sh

那麼接下來可以使用rvm來安裝ruby了

4.安裝ruby

rvm list known

列出rvm知道的ruby版本,那麼在這裡就可以看到有什麼版本可以安裝了。原則自己需要的版本2.3.4

rvm install ruby-2.3.4

rvm可以幫助我們將ruby所依賴的包也一起安裝進來。

使用以下命令安裝ruby的redis的介面

gem install redis

redis和ruby環境配置完成,可以在安裝好redis後,執行redis配置叢集命令

redis-trib.rb create --replicas 1 ip:埠 ip:埠 ip:埠--------
(多個例項以空格隔開)

二、安裝redis

介紹安裝環境與版本

用兩臺虛擬機器模擬6個節點,一臺機器3個節點,創建出3 master、3 salve 環境。

redis 採用 redis-3.2.4 版本。

兩臺虛擬機器都是 CentOS ,一臺 CentOS6.5 (IP:192.168.31.245),一臺 CentOS7(IP:192.168.31.210) 。

安裝過程

1. 下載並解壓

cd /root/software
wget http://download.redis.io/releases/redis-3.2.4.tar.gz
tar -zxvf redis-3.2.4.tar.gz 

2. 編譯安裝

cd redis-3.2.4
make && make install

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

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

4. 建立 Redis 節點

首先在192.168.31.245 機器上 /root/software/redis-3.2.4 目錄下建立redis_cluster 目錄;

mkdir redis_cluster

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

mkdir 7000 7001 7002<br>cp redis.conf redis_cluster/7000
cp redis.conf redis_cluster/7001
cp redis.conf redis_cluster/7002 

分別修改這三個配置檔案,修改如下內容

port  7000                                        //埠7000,7002,7003        
bind 本機ip                                       //預設ip為127.0.0.1 需要改為其他節點機器可訪問的ip 否則建立叢集時無法訪問對應的埠,無法建立叢集
daemonize    yes                               //redis後臺執行
pidfile  /var/run/redis_7000.pid          //pidfile檔案對應7000,7001,7002
cluster-enabled  yes                           //開啟叢集  把註釋#去掉
cluster-config-file  nodes_7000.conf   //叢集的配置  配置檔案首次啟動自動生成 7000,7001,7002
cluster-node-timeout  15000                //請求超時  預設15秒,可自行設定
appendonly  yes                           //aof日誌開啟  有需要就開啟,它會每次寫操作都記錄一條日誌

接著在另外一臺機器上(192.168.31.210),的操作重複以上三步,只是把目錄改為7003、7004、7005,對應的配置檔案也按照這個規則修改即可

5. 啟動各個節點

第一臺機器上執行
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

6. 檢查 redis 啟動情況

##一臺機器<br>ps -ef | grep redis
root      61020      1  0 02:14 ?        00:00:01 redis-server 127.0.0.1:7000 [cluster]    
root      61024      1  0 02:14 ?        00:00:01 redis-server 127.0.0.1:7001 [cluster]    
root      61029      1  0 02:14 ?        00:00:01 redis-server 127.0.0.1:7002 [cluster]    
 
netstat -tnlp | grep redis
tcp        0      0 127.0.0.1:17000             0.0.0.0:*                   LISTEN      61020/redis-server 
tcp        0      0 127.0.0.1:17001             0.0.0.0:*                   LISTEN      61024/redis-server 
tcp        0      0 127.0.0.1:17002             0.0.0.0:*                   LISTEN      61029/redis-server 
tcp        0      0 127.0.0.1:7000              0.0.0.0:*                   LISTEN      61020/redis-server 
tcp        0      0 127.0.0.1:7001              0.0.0.0:*                   LISTEN      61024/redis-server 
tcp        0      0 127.0.0.1:7002              0.0.0.0:*                   LISTEN      61029/redis-server
1
2
3
4
5
6
7
8
9
10
11
12
13
    
##另外一臺機器
ps -ef | grep redis
root       9957      1  0 02:32 ?        00:00:01 redis-server 127.0.0.1:7003 [cluster]
root       9964      1  0 02:32 ?        00:00:01 redis-server 127.0.0.1:7004 [cluster]
root       9971      1  0 02:32 ?        00:00:01 redis-server 127.0.0.1:7005 [cluster]
root      10065   4744  0 02:38 pts/0    00:00:00 grep --color=auto redis
netstat -tlnp | grep redis
tcp        0      0 127.0.0.1:17003         0.0.0.0:*               LISTEN      9957/redis-server 1
tcp        0      0 127.0.0.1:17004         0.0.0.0:*               LISTEN      9964/redis-server 1
tcp        0      0 127.0.0.1:17005         0.0.0.0:*               LISTEN      9971/redis-server 1
tcp        0      0 127.0.0.1:7003          0.0.0.0:*               LISTEN      9957/redis-server 1
tcp        0      0 127.0.0.1:7004          0.0.0.0:*               LISTEN      9964/redis-server 1
tcp        0      0 127.0.0.1:7005          0.0.0.0:*               LISTEN      9971/redis-server 1

7.建立叢集

redis-trib.rb  create  --replicas  1  192.168.31.245:7000 192.168.31.245:7001  192.168.31.245:7002 192.168.31.210:7003  192.168.31.210:7004  192.168.31.210:7005

輸入 yes 即可,然後出現如下內容,說明安裝成功。

8. 叢集驗證

在第一臺機器上連線叢集的7002埠的節點,在另外一臺連線7005節點,連線方式為redis-cli -h192.168.31.245 -c -p7002 ,加引數 -C 可連線到叢集,因為上面 redis.conf 將 bind 改為了ip地址,所以 -h 引數不可以省略。

在7005節點執行命令 set hello world,執行結果如下:

然後在另外一臺7002埠,檢視 key 為 hello 的內容,get hello ,執行結果如下:

簡單說一下原理

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個或以上的主節點,否則在建立叢集時會失敗,並且當存活的主節點數小於總節點數的一半時,整個叢集就無法提供服務了。

實踐過程中遇到ruby版本過低,安裝不了叢集,解決辦法如下:

  1. ruby -v

    檢視系統自帶的ruby版本為2.0.0,版本太低,執行geminstallredis這一步時會提示錯誤

  2. 安裝yum源

    yum install centos-release-scl-rh 

  3. yum install rh-ruby24 -y

    後面4是需要安裝的版本號

  4. scl enable rh-ruby24 bash
  5. 檢視ruby版本

    ruby -v