基于CentOS7搭建Redis集群

一. 簡(jiǎn)單描述Redis集群原理:

  • Redis集群通過(guò)一致性哈希算法將16384個(gè)slot(槽)均勻分布在每個(gè)節(jié)點(diǎn)上,每個(gè)主節(jié)點(diǎn)又至少有一個(gè)從節(jié)點(diǎn)保證了該主節(jié)點(diǎn)的高可用。當(dāng)將值存入redis時(shí)會(huì)將該數(shù)據(jù)進(jìn)行哈希后分配到對(duì)應(yīng)slot的節(jié)點(diǎn)上保存,

  • redis cluster是去中心化的,每個(gè)節(jié)點(diǎn)都保存各自的數(shù)據(jù)和整個(gè)集群的狀態(tài)。每個(gè)節(jié)點(diǎn)都和其他所有節(jié)點(diǎn)連接,而且這些連接保持活躍。
    入下圖,有三個(gè)主節(jié)點(diǎn)Master,每個(gè)節(jié)點(diǎn)又對(duì)應(yīng)的Slot段(三個(gè)節(jié)點(diǎn)slot共16384),每個(gè)Master節(jié)點(diǎn)又對(duì)應(yīng)一個(gè)子節(jié)點(diǎn)


    image.png
  • 集群會(huì)為每一個(gè)分片的主節(jié)點(diǎn),對(duì)應(yīng)一個(gè)從節(jié)點(diǎn)。 每個(gè)節(jié)點(diǎn)默認(rèn)會(huì)隨機(jī)向5個(gè)節(jié)點(diǎn)發(fā)送ping消息,默認(rèn)每秒10次,收到ping消息后返回pong消息做回復(fù),最后通過(guò)這種隨機(jī)的消息交換,最終每個(gè)節(jié)點(diǎn)將獲得所有信息實(shí)現(xiàn)slaveof功能,同時(shí)當(dāng)主節(jié)點(diǎn)down,實(shí)現(xiàn)sentinel哨兵的自動(dòng)failover切換功能,當(dāng)某個(gè)主節(jié)點(diǎn)掛掉,從節(jié)點(diǎn)會(huì)接管主節(jié)點(diǎn)的工作,并告知其他節(jié)點(diǎn)自己變?yōu)橹鞴?jié)點(diǎn),

二. 搭建redis對(duì)于ruby的依賴:

如果選擇搭建的Redis版本是5以下(本文redis為4.0.0)是需要安裝ruby作為依賴的,因?yàn)閞edis5以下版本的集群管理器redis-trib.rb 是根據(jù)ruby語(yǔ)言編寫,但在redis5以后集群管理改用了C語(yǔ)言。注:不同版本redis對(duì)于ruby版本也有限制,入本文使用redis4.0.0要求ruby版本在2.3.0以上!

三. 開始搭建redis集群:

1.linux環(huán)境下載并安裝redis

安裝wget :wget用于linux地址下載redis安裝包
yum -y install wget

安裝gcc編輯器
yum -y install gcc automake autoconf libtool make

選擇路徑下載redis,下載地址可能自行找,本文使用redis4.0.0
cd /usr/local/software
wget http://download.redis.io/releases/redis-4.0.0.tar.gz
下載后在當(dāng)前路徑下會(huì)生成下圖壓縮包

image.png

下載完成后解壓后生成對(duì)應(yīng)文件
tar -zxvf redis-4.0.0.tar.gz

image.png

切換至程序目錄
cd redis-4.0.0

make編譯redis
make MALLOC=libc

編譯后,會(huì)在src目錄下生成下圖中綠色可執(zhí)行文件


image.png

最后安裝Redis:
make install

2.redis環(huán)境有了,開始準(zhǔn)備各個(gè)集群文件夾

將要模擬搭建redis集群6節(jié)點(diǎn)(端口7001-7006),3個(gè)主節(jié)點(diǎn),3個(gè)從節(jié)點(diǎn),因?yàn)槲以趦蓚€(gè)虛擬機(jī)上搭建redis,每個(gè)虛擬機(jī)上分布3個(gè)幾點(diǎn),所以兩臺(tái)虛擬機(jī)都需要安裝redis,也就是上述操作,保證虛擬機(jī)中可以正常運(yùn)行redis
eg:虛擬機(jī)一地址為:192.168.1.128 虛擬機(jī)二地址為:192.168.1.129 兩臺(tái)虛擬機(jī)需用能夠相互訪問(wèn),需要可以ping通哈


下操作在虛擬機(jī)一中執(zhí)行,二與相同請(qǐng)自行模仿
在redis安裝目錄下,新建redis-cluster文件夾
mkdir redis-cluster

image.png

進(jìn)入該文件夾
cd redis-cluster
建立個(gè)個(gè)幾點(diǎn)的文件夾(我將把7001,7002,7005節(jié)點(diǎn)建立在虛擬機(jī)一上),所以建立三個(gè)文件夾7001,7002,7005文件夾
mkdir 700{1..2} 7005
image.png

再在每個(gè)節(jié)點(diǎn)文件中創(chuàng)建data 和log 文件夾,用于保存數(shù)據(jù)和日志使用,例如7001節(jié)點(diǎn)如圖,每個(gè)節(jié)點(diǎn)都要?jiǎng)?chuàng)建
cd 7001
mkdir data log
image.png

返回redis-4.0.0安裝目錄,將該目錄下redis.conf文件復(fù)制到7001節(jié)點(diǎn)中文件夾中

image.png

cp redis.conf /usr/local/software/redis_cluster/7001

復(fù)制后的每節(jié)點(diǎn)中結(jié)構(gòu)應(yīng)該如下圖,eg:7001文件夾


image.png
3.修改7001節(jié)點(diǎn)中redis.conf配置文件值

vi redis.conf 進(jìn)入修改模式后,如何修改自行百度吧
修改內(nèi)容如下:

#端口號(hào)
port 7001 
#默認(rèn)ip為127.0.0.1 需要改為其他節(jié)點(diǎn)機(jī)器可訪問(wèn)的ip(本機(jī)ip) 否則創(chuàng)建集群時(shí)無(wú)法訪問(wèn)對(duì)應(yīng)的端口,無(wú)法創(chuàng)建集群 
#eg:本機(jī)虛擬機(jī)一ip為192.168.1.128,所以需綁定該值
bind 192.168.1.128
#數(shù)據(jù)文件存放位置
dir /usr/local/software/redis-cluster/7001/data/
#日志文件存放位置
logfile /usr/local/software/redis-cluster/7001/log/redis.log
#redis后臺(tái)運(yùn)行 
daemonize yes
#為保證集群管理器redis-trib.rb工具的正常運(yùn)行,需要設(shè)置為no,完成后可以改回yes,但每次使用redis-trib.rb都需要改回為no
protected-mode no
#pidfile文件 
pidfile /var/run/redis_7001.pid 
#開啟集群 
cluster-enabled yes 
#集群的配置 配置文件首次啟動(dòng)自動(dòng)生成
cluster-config-file nodes_7001.conf 
#請(qǐng)求超時(shí) 默認(rèn)15秒,可自行設(shè)置 
cluster-node-timeout 15000 
#rdb文件名
dbfilename dump-7001.rdb
#aof日志開啟 有需要就開啟,它會(huì)每次寫操作都記錄一條日志,比較耗性能
appendonly yes 
#aof文件名 
appendfilename "appendonly-7001.aof"
#設(shè)置密碼 如果設(shè)置密碼,所有節(jié)點(diǎn)密碼必須相同
masterauth 123456
requirepass 123456

將修改后的redis.conf文件復(fù)制到其他各個(gè)節(jié)點(diǎn)中
cp redis.conf /usr/local/software/redis-cluster/7002
cp redis.conf /usr/local/software/redis-cluster/7005
修改復(fù)制后的配置文件,使用替換命令,將配置文件中7001替換700X即可
sed -i 's#7001#7002#g' /usr/local/software/redis-cluster/7002/redis.conf
sed -i 's#7001#7005#g' /usr/local/software/redis-cluster/7005/redis.conf
修改后使用cat命令,查看是否修改成功
vi /usr/local/software/redis-cluster/7002/redis.conf
虛擬機(jī)二環(huán)境同上配置,參考上文

3.啟動(dòng)redis所有節(jié)點(diǎn),包括虛擬機(jī)一二

虛擬機(jī)一
/usr/local/software/redis-4.0.0/src/redis-server /usr/local/software/redis-cluster/7001/redis.conf
/usr/local/software/redis-4.0.0/src/redis-server /usr/local/software/redis-cluster/7002/redis.conf
/usr/local/software/redis-4.0.0/src/redis-server /usr/local/software/redis-cluster/7005/redis.conf
虛擬機(jī)二
/usr/local/software/redis-4.0.0/src/redis-server /usr/local/software/redis-cluster/7003/redis.conf
/usr/local/software/redis-4.0.0/src/redis-server /usr/local/software/redis-cluster/7004/redis.conf
/usr/local/software/redis-4.0.0/src/redis-server /usr/local/software/redis-cluster/7006/redis.conf
通過(guò)查看幾點(diǎn)是否啟動(dòng)正常
ps -ef|grep redis

image.png

3.通過(guò)集群管理器啟動(dòng)先安裝ruby
yum install centos-release-scl-rh //會(huì)在/etc/yum.repos.d/目錄下多出一個(gè)CentOS-SCLo-scl-rh.repo源

yum install rh-ruby23 -y //直接yum安裝即可

scl enable rh-ruby23 bash //必要一步

ruby -v //查看安裝版本

image

安裝好ruby,執(zhí)行以下命令
gem install redis

image

成功后便可通過(guò)集群管理器啟動(dòng)集群
前面3個(gè)地址為主節(jié)點(diǎn),后面隨機(jī)分配從節(jié)點(diǎn)
/usr/local/software/redis-cluster/bin/redis-trib.rb create --replicas 1 192.168.1.128:7001 192.168.1.128:7002 192.168.1.128:7005 192.168.1.129:7003 192.168.1.129:7004 192.168.1.129:7006

  • 節(jié)點(diǎn)設(shè)置密碼之后如果需要使用redis-trib.rb的各種命令
    則會(huì)報(bào)錯(cuò) Sorry, can’t connect to node

  • 解決方法:找到client.rb 然后修改默認(rèn)password為上面設(shè)置的密碼
    client.rb路徑可以通過(guò)find命令查找:
    find / -name 'client.rb'
    類似/usr/local/rvm/gems/ruby-2.5.5/gems/redis-4.1.2/lib/redis/client.rb

  • 如果執(zhí)行是一直卡在,需要開啟redeis集群總線對(duì)應(yīng)節(jié)點(diǎn)
    搭建的redis集群中端口號(hào)是從 7001 ~ 7006的,需開啟端口號(hào)+10000端口,如7001需開通17001端口

    image.png

    開通端口命令:
    虛擬機(jī)一:
    firewall-cmd --zone=public --add-port=7001/tcp --permanent
    firewall-cmd --zone=public --add-port=7002/tcp --permanent
    firewall-cmd --zone=public --add-port=7005/tcp --permanent
    firewall-cmd --zone=public --add-port=17001/tcp --permanent
    firewall-cmd --zone=public --add-port=17002/tcp --permanent
    firewall-cmd --zone=public --add-port=17005/tcp --permanent
    firewall-cmd --reload
    虛擬機(jī)一:
    firewall-cmd --zone=public --add-port=7003/tcp --permanent
    firewall-cmd --zone=public --add-port=7004/tcp --permanent
    firewall-cmd --zone=public --add-port=7006/tcp --permanent
    firewall-cmd --zone=public --add-port=17003/tcp --permanent
    firewall-cmd --zone=public --add-port=17004/tcp --permanent
    firewall-cmd --zone=public --add-port=17006/tcp --permanent
    firewall-cmd --reload

配置好后,將所有節(jié)點(diǎn)關(guān)閉并刪除對(duì)應(yīng)節(jié)點(diǎn)data文件夾中所有文件后從新啟動(dòng)集群,啟動(dòng)中會(huì)讓輸入yes(必須輸入yes,y不行),啟動(dòng)成功入圖,我們可以清楚的看出集群的主節(jié)點(diǎn)和從節(jié)點(diǎn)與各個(gè)節(jié)點(diǎn)負(fù)責(zé)的slot分段


image.png

4.驗(yàn)證集群是否搭建成功

在虛擬機(jī)一上開啟7001節(jié)點(diǎn)客戶端
/usr/local/software/redis-4.0.0/src/redis-cli -c -h 192.168.1.128 -p 7001 -a 123456

image.png

可以查看集群信息
cluster info
image.png

cluster nodes

image.png

在7001節(jié)點(diǎn)設(shè)置一個(gè)key值,然后連接虛擬機(jī)二7003節(jié)點(diǎn),查看該值是否存在,如存在表示搭建集群成功
set 7001key 7001vale

image.png

連接虛擬機(jī)二7003節(jié)點(diǎn),查看7001存入值是否存在
/usr/local/software/redis-4.0.0/src/redis-cli -c -h 192.168.1.129 -p 7003 -a 123456
get 7001key
image.png

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容