Redis隨筆(四)Centos7 搭redis3.2.9集群-3主3從的6個節點服務


1、虛擬機環境

使用的Linux環境已經版本:

Centos 7   64位系統

 

主機ip

192.168.56.180

192.168.56.181

192.168.56.182

每台服務器是11從,實驗3台服務器課成為33從。

Redis安裝的項目目錄、日志、配置文件等都存放在/root/svr/目錄下。

2、下載相關的安裝包以及解壓

首先在192.168.56.180機器操作:

cd /root/svr
wget http://download.redis.io/releases/redis-3.2.9.tar.gz
tar -zxvf redis-3.2.9.tar.gz

 3、安裝

/root/svr/redis-3.2.9/目錄下執行:

make install PREFIX=/root/svr/redis-3.2.9

 4、配置信息

創建集群配置、log日志、數據所在的文件夾

cd /root/svr/redis-3.2.9/
mkdir cluster-conf

 創建集群端口文件夾:

cd cluster-conf
mkdir 7777
mkdir 8888

 復制配置文件/root/svr/redis-3.2.9/cluster-conf/7777目錄下:

cp /root/svr/redis-3.2.9/redis.conf  /root/svr/redis-3.2.9/cluster-conf/7777

修改7777目錄下redis.conf配置文件

注意:找到相應的信息修改,或者把修改的信息全部注釋掉,重新添加下面信息到頭部,有利於以后修改和查看)

#注釋掉ip或者設置0.0.0.0都是局域網訪問
#bind 127.0.0.1
#端口號
port 7777

#指定了記錄日志的文件
logfile "/root/svr/redis-3.2.9/cluster-conf/7777/redis.log"

#該目錄要事先創建好,數據目錄,數據庫的寫入會在這個目錄。rdb、aof文件也會寫在這個目錄
dir /root/svr/redis-3.2.9/cluster-conf/7777/

#是否開啟集群
cluster-enabled yes

#集群配置文件的名稱,每個節點都有一個集群相關的配置文件,持久化保存集群的信息,
#這個文件並不需要手動配置,這個配置文件有Redis生成並更新,
#每個Redis集群節點需要一個單獨的配置文件,請確保與實例運行的系統中配置文件名稱不沖突。
cluster-config-file nodes.conf

#節點互連超時的閥值。集群節點超時毫秒數
cluster-node-timeout 5000

#默認redis使用的是rdb方式持久化,這種方式在許多應用中已經足夠用了,
#但是redis如果中途宕機,會導致可能有幾分鍾的數據丟失,
#根據save來策略進行持久化,Append Only File是另一種持久化方式,可以提供更好的持久化特性,
#Redis會把每次寫入的數據在接收后都寫入 appendonly.aof 文件,
#每次啟動時Redis都會先把這個文件的數據讀入內存里,先忽略RDB文件。
appendonly yes

 復制7777目錄下redis.conf8888並修改端口及存儲路徑

cp /root/svr/redis-3.2.9/cluster-conf/7777/redis.conf /root/svr/redis-3.2.9/cluster-conf/8888 

 5、使用scp復制安裝和配置好的redis復制到其他服務器上

已經在192.168.56.180機器配置好,復制到181182機器

在兩台新機器上創建文件夾

mkdir /root/svr

 復制:

scp -r /root/svr/redis-3.2.9 root@192.168.56.181:/root/svr/
#輸入181機器密碼即可傳輸數據。
scp -r /root/svr/redis-3.2.9 root@192.168.56.182:/root/svr/
#輸入182機器密碼即可傳輸數據。

 6、啟動3台機器的redis

3台機器執行啟動方式:

/root/svr/redis-3.2.9/bin/redis-server /root/svr/redis-3.2.9/cluster-conf/7777/redis.conf &
/root/svr/redis-3.2.9/bin/redis-server /root/svr/redis-3.2.9/cluster-conf/8888/redis.conf &

 查看狀態是否:

ps -ef|grep redis

 

7、創建集群

/root/svr/redis-3.2.9/src/redis-trib.rb create --replicas 1 192.168.56.180:7777 192.168.56.180:8888 192.168.56.181:7777 192.168.56.181:8888 192.168.56.182:7777 192.168.56.182:8888

無法創建,提示錯誤信息:

提示錯誤,是沒有安裝ruby這個插件,因為redis

集群創建的程序文件redis-trib,rb是由ruby來編寫的,需要安裝:

yum install ruby

 安裝ruby完畢接着執行上面的創建集群命令

報錯。這時候需要安裝一些和rubyreids相關程序包和類庫

yum install rubygems
gem install reids

 

報錯,提示ruby版本需要大於2.2.2版本。CentOS7 yum庫中ruby的版本支持到 2.0.0,可gem 安裝redis需要最低是2.2.2

需要安裝個高版本的ruby

#安裝curl
yum install curl
#安裝rvm
#gpg2 --keyserver hkp://keys.gnupg.net --recv-keys D39DC0E3
#curl -L get.rvm.io | bash -s stable
#source /usr/local/rvm/scripts/rvm

 

查看rvm庫中已知的ruby版本

rvm list known

 

安裝一個ruby版本

rvm install 2.4.0

 

使用一個ruby版本

rvm use  2.4.0

 卸載一個已知版本

rvm remove 2.0.0

 查看現在版本

ruby --version

 

在重新安裝ruby相關的redis就可以了

gem install redis

 

更新ruby版本、移除舊版本、重新安裝reids完畢。接着執行上面的創建集群命令

還是出現錯誤:提示連接不上節點:

這時候需要排查一下錯誤:

第一:服務器是否關閉防火牆

systemctl status firewalld.service  #查看防火牆
systemctl stop firewlld.service    #關閉防火牆

 

(我這邊已經關閉)

第二:是否所有的節點都啟動

ps -ef|grep redis

 

我這邊都已經啟動並且正常運行

第三:服務器之間是否ping

ping 192.168.56.180

ping 192.168.56.181

ping 192.168.56.182

(我這邊都能正常ping通過)

第四:是否可以telnet ip port  連接上

yum install telnet
telbet 192.168.56.180 7777

 出現錯誤:提示redis是受保護的,需要身份驗證才可以進行:

這個問題解決可以有兩種方法解決:

(1)修改配置文件redis.conf的權限參數設置為no,就是不需要權限驗證

protected-mode no

 

(2)修改配置文件redis.conf的權限設置安全密碼(密碼自定義設置)

requirepass “111111”   #權限密碼

 

我這里是第一解決方法,不需要權限,先kill啟動的6redis進程,在修改配置文件。在啟動reidis服務。

接着執行上面的創建集群命令。

創建集群啟動成功。

 

8、測試redis集群

#登錄客戶端
./redis-cli -c -p 7777(或者8888)   #-c 參數:表示使用集群模式連接

在192.168.56.181:7777服務set值

 

在192.168.56.182:8888服務上get

 9、數據解析

完整搭建起來,管理的集群以及主從關聯都在nodes.conf文件中生成的,我這邊集群節點的生成配置文件數據顯示

主/從                   節點id                       ip     prot   slot槽范圍     槽數量     m/s   主從等比例  附近信息(如果是主節點記錄為復制功能,如果是從節點,關聯相應的主節點id)

M: 3f0d98eebfa18364a95ce7a578865ba7a3ef4493 192.168.56.180:7777 slots:0-5460 (5461 slots) master 1 additional replica(s)
S: 54a525c670ad92a45dccfa92164c0a5f220a10bc 192.168.56.180:8888 slots: (0 slots) slave replicates 078973835bb8a36aeef272c2e243a9d9d733ea96

M: 078973835bb8a36aeef272c2e243a9d9d733ea96 192.168.56.181:7777 slots:5461-10922 (5462 slots) master 1 additional replica(s)
S: 4e13f9dca80c63079e536b17eaa81cef8fcba624 192.168.56.182:8888 slots: (0 slots) slave replicates 3c0fa46c14e6d25c7e7b01079162baec86bd88e9

M: 3c0fa46c14e6d25c7e7b01079162baec86bd88e9 192.168.56.182:7777 slots:10923-16383 (5461 slots) master 1 additional replica(s)
S: d507f34a7dab6dc512a82427e3731967f5a69101 192.168.56.181:8888 slots: (0 slots) slave replicates 3f0d98eebfa18364a95ce7a578865ba7a3ef4493

 

 當節點掛了,nodes.conf會記錄新的數據

當主節點掛了,因為集群會一直在監聽集群中的主從節點的狀態。加入一個主節點掛了,集群監聽機制檢查到,會對主節點的槽(數據)進行遷移,按照投票機制將主節點關聯的從節點進行選舉出一個充當主節點,因為我這里一個主節點關聯一個從節點,所以只能是那個充當。

10、擴展知識

(1)持久層的配置和原理:rdb和aof

(2)哨兵、數據字段遷移、鍵空間遷移、在線遷移、redis-trib.rb的詳解

(3)集群節點添加,刪除

(4)Jedis客戶端對集群的數據操作:set、list、key/value、hash等

(5)將key值執行CRC16算法對18384個槽進行取模

(6)壓測.........

 


免責聲明!

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



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