溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

redis主從同步與讀寫分離

發(fā)布時(shí)間:2020-07-25 04:44:52 來(lái)源:網(wǎng)絡(luò) 閱讀:1652 作者:ssc76109360 欄目:數(shù)據(jù)庫(kù)

一、原理

Redis的主從復(fù)制功能非常強(qiáng)大,一個(gè)master可以擁有多個(gè)slave,而一個(gè)slave又可以擁有多個(gè)slave,如此下去,形成了強(qiáng)大的多級(jí)服務(wù)器集群架構(gòu)。下面是關(guān)于redis主從復(fù)制的一些特點(diǎn):

1.master可以有多個(gè)slave。

2.除了多個(gè)slave連到相同的master外,slave也可以連接其他slave形成圖狀結(jié)構(gòu)。

3.主從復(fù)制不會(huì)阻塞master。也就是說(shuō)當(dāng)一個(gè)或多個(gè)slave與master進(jìn)行初次同步數(shù)據(jù)時(shí),master可以繼續(xù)處理client發(fā)來(lái)的請(qǐng)求。相反slave在初次同步數(shù)據(jù)時(shí)則會(huì)阻塞不能處理client的請(qǐng)求。

4.主從復(fù)制可以用來(lái)提高系統(tǒng)的可伸縮性,我們可以用多個(gè)slave 專門用于client的讀請(qǐng)求,比如sort操作可以使用slave來(lái)處理。也可以用來(lái)做簡(jiǎn)單的數(shù)據(jù)冗余。

5.可以在master禁用數(shù)據(jù)持久化,只需要注釋掉master 配置文件中的所有save配置,然后只在slave上配置數(shù)據(jù)持久化。

二、主從復(fù)制過(guò)程

當(dāng)設(shè)置好slave服務(wù)器后,slave會(huì)建立和master的連接,然后發(fā)送sync命令。無(wú)論是第一次同步建立的連接還是連接斷開后的重新連 接,master都會(huì)啟動(dòng)一個(gè)后臺(tái)進(jìn)程,將數(shù)據(jù)庫(kù)快照保存到文件中,同時(shí)master主進(jìn)程會(huì)開始收集新的寫命令并緩存起來(lái)。后臺(tái)進(jìn)程完成寫文件 后,master就發(fā)送文件給slave,slave將文件保存到磁盤上,然后加載到內(nèi)存恢復(fù)數(shù)據(jù)庫(kù)快照到slave上。接著master就會(huì)把緩存的命 令轉(zhuǎn)發(fā)給slave。而且后續(xù)master收到的寫命令都會(huì)通過(guò)開始建立的連接發(fā)送給slave。從master到slave的同步數(shù)據(jù)的命令和從 client發(fā)送的命令使用相同的協(xié)議格式。當(dāng)master和slave的連接斷開時(shí)slave可以自動(dòng)重新建立連接。如果master同時(shí)收到多個(gè) slave發(fā)來(lái)的同步連接命令,只會(huì)使用啟動(dòng)一個(gè)進(jìn)程來(lái)寫數(shù)據(jù)庫(kù)鏡像,然后發(fā)送給所有slave。

三、配置與應(yīng)用

1)redis安裝

(1)下載redis

# wget http://download.redis.io/releases/redis-3.0.7.tar.gz

(2)解壓安裝

# tar zxvf redis-3.0.7.tar.gz
# cd redis-3.0.7
# make PREFIX=/data/server/redis install

(3)配置redis

①:創(chuàng)建redis配置文件目錄并拷貝配置文件至此目錄

# mkdir -p /data/server/redis/etc
# cp redis.conf  /data/server/redis/etc

②:設(shè)置redis運(yùn)行方式為后臺(tái)運(yùn)行

# sed -i 's/daemonize no/daemonize yes/g' /data/server/redis/etc/redis.conf

③:下載redis init 啟動(dòng)文件至 init.d 目錄下,并賦予權(quán)限.

# wget -c http://soft.vpser.net/lnmp/ext/init.d.redis -O /etc/init.d/redis
# chmod 755 /etc/init.d/redis

④:創(chuàng)建redis日志目錄及日志存放文件

# mkdir /data/server/redis/logs
# touch /data/server/redis/logs/redis.log

⑤:創(chuàng)建pid目錄與數(shù)據(jù)存儲(chǔ)目錄

# mkdir /data/server/redis/run
# mkdir /data/server/redis/db

⑥:修改 vim /etc/init.d/redis 啟動(dòng)文件中文件path


2)redis主從同步配置

(1)Master服務(wù)器端:

# grep -v '^#' redis.conf |grep -v '^$'                      
daemonize yes 
pidfile /data/server/redis/run/redis.pid
#定義端口
port 1234
#綁定IP
bind 10.10.10.2
timeout 300 
loglevel notice
#指定日志目錄
logfile /data/server/redis/logs/redis.log
databases 16
#配置持久化(rdb模式)
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
#定義數(shù)據(jù)文件和目錄
dbfilename master.rdb
dir /data/server/redis/db
slave-serve-stale-data yes
slave-read-only yes
slave-priority 100
appendonly no
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb60
client-output-buffer-limit pubsub 32mb 8mb 60

(2)slave服務(wù)器端

# grep -v '^#' redis.conf |grep -v '^$' 
daemonize yes 
pidfile /data/server/redis/run/redis.pid
port 1234 
bind 10.10.10.3
timeout 300 
loglevel notice
logfile /data/server/redis/logs/redis.log 
databases 16
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename slave.rdb
dir /data/server/redis/db 
slaveof 10.10.10.2 1234         #指定master的地址
slave-serve-stale-data yes
slave-read-only yes
slave-priority 100
appendonly no
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb60
client-output-buffer-limit pubsub 32mb 8mb 60

(3)啟動(dòng)redis服務(wù)

Master:

# /data/server/redis/bin/redis-server /data/server/redis/etc/redis.conf
# tail -fn100 /data/server/redis/logs/redis.log  //檢查日志是否有報(bào)錯(cuò)

Slave:

# /data/server/redis/bin/redis-server /data/server/redis/etc/redis.conf
# tail -fn100 /data/server/redis/logs/redis.log  //檢查日志是否有報(bào)錯(cuò)

(4)檢查redis主從同步

master:

redis-m > set data zhangsan
redis-m > get data

slave:

redis-s > get data

注:由于在配置文件中配置了slave-read-only yes,因此從節(jié)點(diǎn)處于只讀狀態(tài),無(wú)法對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作和更改.

附件:http://down.51cto.com/data/2368174
向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI