一、簡介
單個redis的讀寫能力是有限的,并且存在不穩(wěn)定性。當(dāng)唯一的Redis服務(wù)宕機了,就沒有可用的Redis服務(wù)了,另外當(dāng)硬件出現(xiàn)問題,單機的數(shù)據(jù)便無法恢復(fù)。Redis集群的出現(xiàn)解決了單節(jié)點故障的問題,同時強化了Redis的讀寫能力(負(fù)載均衡)。
主從復(fù)制:指一臺Redis服務(wù)器的數(shù)據(jù)復(fù)制到其他的Redis服務(wù)器,前者為主節(jié)點(master),后者為從節(jié)點(slave)。數(shù)據(jù)的復(fù)制是單向的,只能由主節(jié)點到從節(jié)點。默認(rèn)情況下,每臺Redis服務(wù)器都是主節(jié)點,一個主節(jié)點可以有0或者多個從節(jié)點,但從節(jié)點只能有一個主節(jié)點。
主節(jié)點提供讀寫服務(wù),從節(jié)點提供讀服務(wù),多個從節(jié)點分擔(dān)讀負(fù)載,提高了redis的并發(fā)量。
二、搭集群建步驟
特別說明:window下6.2的安裝包在文章最后有獲取方式,大家如果需要,可以自行獲取,linux的直接去官網(wǎng)下載即可。(官網(wǎng)訪問地址:https://redis.io/download/#redis-downloads)
2.1、環(huán)境準(zhǔn)備
IP | 端口 | 角色 |
127.0.0.1 | 7001 | Master |
127.0.0.1 | 7002 | slave |
127.0.0.1 | 7007 | slave |
2.2、創(chuàng)建目錄
進(jìn)入/tmp目錄
cd /tmp
# 創(chuàng)建目錄
mkdir 7001 7002 7003
如圖:
2.3、配置文件修改
拷貝文件:
方式一:逐個拷貝
cp redis-6.2.4/redis.conf 7001
cp redis-6.2.4/redis.conf 7002
cp redis-6.2.4/redis.conf 7003
# 方式二:管道組合命令,一鍵拷貝
echo 7001 7002 7003 | xargs -t -n 1 cp redis-6.2.4/redis.conf
修改參數(shù):
#修改每個文件夾內(nèi)的配置文件,
#將端口分別修改為7001、7002、7003,將rdb文件保存位置都修改為
# 自己所在目錄(在/tmp目錄執(zhí)行下列命令
sed -i -e 's/6379/7001/g' -e 's/dir .//dir /tmp/7001//g' 7001/redis.conf
sed -i -e 's/6379/7002/g' -e 's/dir .//dir /tmp/7002//g' 7002/redis.conf
sed -i -e 's/6379/7003/g' -e 's/dir .//dir /tmp/7003//g' 7003/redis.conf
# 修改每個實例的聲明IP
# redis實例的聲明 IPreplica-announce-ip 127.0.0.1
# 1、逐個修改
sed -i '1a replica-announce-ip 127.0.0.1' 7001/redis.conf
sed -i ' 1a replica-announce-ip 127.0.0.1' 7002/redis.conf
sed -i '1a replica-announce-ip 127.0.0.1' 7003/redis.conf#
# 2、或者一鍵修改
printf '%sn' 7001 7002 7003 | xargs -I{} -t sed -i '1a replica-announce-ip 127.0.0.1' {}/redis.conf
# 開啟主從關(guān)系
# 可以使用replicaof(5.0版本之后的)或者slaveof(5.0版本之前的)命令
# slaveof/replicaof <masterip> <masterport>
# 若選擇7001為主機,其他為從機,則分別在7002和7003上配置
replicaof 127.0.0.1 7001
啟動:
第1個
redis-server 7001/redis.conf
# 第2個
redis-server 7002/redis.conf
# 第3個
redis-server 7003/redis.conf
查看集群狀態(tài):info replication
三、數(shù)據(jù)同步原理
3.1、全量同步
當(dāng)從節(jié)點(slave)啟動成功并連接到主節(jié)點(master)后,會向主節(jié)點發(fā)送sync命令,請求數(shù)據(jù)同步。主節(jié)點接收到命令后會啟動一個子進(jìn)程,將數(shù)據(jù)寫入數(shù)據(jù)文件中(RDB操作),待數(shù)據(jù)寫入完畢后,會將數(shù)據(jù)文件傳送給從節(jié)點,從節(jié)點接收到文件后保存到磁盤上,并將數(shù)據(jù)加載到內(nèi)存中,完成一次全量復(fù)制。
3.2、增量同步
在完成一次全量復(fù)制后,如果主節(jié)點收到寫操作的命令時,會以異步方式將命令復(fù)制給從節(jié)點(在全量復(fù)制期間,如果主節(jié)點接收到了新的寫操作命令,會先存入緩存,待從節(jié)點完成數(shù)據(jù)同步后,將新的寫操作命令復(fù)制給從節(jié)點)。
四、總結(jié)
全量同步和增量同步的區(qū)別:
優(yōu)缺點:
優(yōu)點:
1、實現(xiàn)了讀寫分離,緩解了主節(jié)點讀操作的壓力,提高了可用性,解決了單機故障問題;
2、主從復(fù)制期間主節(jié)點與從節(jié)點都是非阻塞的方式,仍然可用。
缺點:
1、如果主節(jié)點發(fā)生宕機,需要手動切換主節(jié)點;
2、如果RDB文件過大,同步過程比較耗時。
五、Redis的window版本獲取方式
更多優(yōu)秀文章,請關(guān)注個人微信公眾號或搜索“程序猿小楊”查閱。然后回復(fù):工具,可以獲取最新的window版本的Redis6.2的安裝包。