您好,登錄后才能下訂單哦!
一、原理
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)行操作和更改.
免責(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)容。