yum install gcc
tar -zxvf redis-3.2.9.tar.gz -C /usr/src/
cd /usr/src/redis-3.2.9/
make
cd src && make install
mkdir -p /usr/local/redis/{etc,bin}
cd /usr/src/redis-3.2.9/
mv redis.conf /usr/local/redis/etc
cd src
mv?mkreleasehdr.sh?redis-benchmark?redis-check-aof?redis-check-rdb?redis-cli?redis-server?redis-sentinel?redis-trib.rb?/usr/local/redis/bin
echo 'PATH=${PATH}:/usr/local/redis/bin/' >> /etc/profile
source /etc/profile
啟動(dòng)redis服務(wù)需要指定配置文件的,后臺(tái)啟動(dòng)的話需要修改redis.conf文件,daemonize no ---- >daemonize yes。redis服務(wù)端默認(rèn)鏈接端口是6379,最好也將IP綁定為本機(jī)IP。
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶,將通過(guò)不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名注冊(cè)、網(wǎng)絡(luò)空間、營(yíng)銷軟件、網(wǎng)站建設(shè)、靖宇網(wǎng)站維護(hù)、網(wǎng)站推廣。
redis-server /usr/local/redis/etc/redis.conf
redis-cli -h 192.168.118.137 -p 6379
192.168.118.137:6379> shutdown
或者:
[root@node1 bin]# ps -ef|grep redis
root 49245 2816 0 10:39 pts/1 00:00:00 redis-server 127.0.0.1:6379
root 49559 2816 0 10:59 pts/1 00:00:00 grep --color=auto redis
[root@node1 bin]# kill -9 49245
redis的復(fù)制可以實(shí)現(xiàn)當(dāng)一臺(tái)數(shù)據(jù)庫(kù)中的數(shù)據(jù)更新后,自動(dòng)將新數(shù)據(jù)復(fù)制到其他數(shù)據(jù)庫(kù)上;復(fù)制過(guò)程本身是異步的,也就是說(shuō),在有客戶端對(duì)master執(zhí)行寫命令時(shí),master在執(zhí)行完命令后立即將結(jié)果返回客戶端,并異步的將命令同步給slave,而不會(huì)等slave接收到命令在返回給客戶端結(jié)果;這是一種樂觀復(fù)制的策略,即容忍在一定時(shí)間內(nèi)主從的數(shù)據(jù)不一致,但兩者最終會(huì)數(shù)據(jù)同步,redis正是采用了樂觀復(fù)制(optimistic replication)。
redis分為兩類,一類是主數(shù)據(jù)庫(kù)(master),另一類是從數(shù)據(jù)庫(kù)(slave)。master可以對(duì)數(shù)據(jù)進(jìn)行讀和寫的操作,同時(shí)在有新的數(shù)據(jù)寫入時(shí),根據(jù)配置文件的設(shè)置將數(shù)據(jù)復(fù)制給slave,slave是只讀的,所以一般對(duì)于數(shù)據(jù)庫(kù)的寫操作在master上,占據(jù)大量IO的讀操作在slave上。
下面我們用一個(gè)圖來(lái)講解redis主從復(fù)制的過(guò)程。
?
?
Redis主從復(fù)制過(guò)程示意圖
?
?
從上面的示意圖可以看出,主服務(wù)器與從服務(wù)器建立連接之后,Redis主從復(fù)制過(guò)程主要有下面幾步:
(1)從服務(wù)器都將向主服務(wù)器發(fā)送一個(gè) SYNC 命令。
(2)主服務(wù)器接到 SYNC 命令后開啟一個(gè)后臺(tái)子進(jìn)程并開始執(zhí)行 BGSAVE,并在保存操作執(zhí)行期間, 將所有新執(zhí)行的寫入命令都保存到一個(gè)緩沖區(qū)里面。
(3)當(dāng) BGSAVE 執(zhí)行完畢后, 主服務(wù)器將執(zhí)行保存操作所得的 .rdb 文件發(fā)送給從服務(wù)器, 從服務(wù)器接收這個(gè) .rdb 文件, 并將文件中的數(shù)據(jù)載入到內(nèi)存中。
(4)主服務(wù)器會(huì)以 Redis 命令協(xié)議的格式, 將寫命令緩沖區(qū)中積累的所有內(nèi)容都發(fā)送給從服務(wù)器。
從上面的主從復(fù)制過(guò)程中,有兩個(gè)問題:一是當(dāng)主從斷開時(shí)BGSAVE操作是一次完整復(fù)制;二是每一次BGSAVE操作master都會(huì)將RDB文件保存在硬盤上,基于這兩點(diǎn),2.8以后的版本引入了無(wú)硬盤復(fù)制和增量復(fù)制
無(wú)硬盤復(fù)制:
redis的復(fù)制是基于RDB方式的持久化實(shí)現(xiàn)的,即master接到SYNC后保存RDB快照文件,并將rdb文件復(fù)制給slave。這種方式在復(fù)制初始化時(shí)需要在硬盤上創(chuàng)建RDB文件,當(dāng)硬盤性能變低時(shí),就會(huì)導(dǎo)致復(fù)制性能降低,所以無(wú)硬盤復(fù)制就是master不再保存RDB文件在硬盤上,而是直接將RDB文件網(wǎng)絡(luò)傳輸給slave。
增量復(fù)制:
當(dāng)主從數(shù)據(jù)庫(kù)斷開連接時(shí),slave發(fā)送SYNC時(shí),master會(huì)進(jìn)行一次完整復(fù)制操作,這時(shí)可能總從數(shù)據(jù)庫(kù)的數(shù)據(jù)基本一致,即使這樣,也要將完整的rdb文件傳給slave;這種情況下,增量復(fù)制可以讓每次主從中斷時(shí)不對(duì)數(shù)據(jù)進(jìn)行全量復(fù)制,減少了資源消耗,提高了效率;設(shè)置為增量復(fù)制時(shí),slave發(fā)送給master的是PSYNC命令。
最基礎(chǔ)的redis主從是有一臺(tái)主數(shù)據(jù)庫(kù),N臺(tái)從數(shù)據(jù)庫(kù)
不僅主服務(wù)器可以有從服務(wù)器, 從服務(wù)器也可以有自己的從服務(wù)器
圖中的master會(huì)將數(shù)據(jù)同步至slave-master1和slave1,slave-master1會(huì)將數(shù)據(jù)同步至slave2和slave3,向slave-master1寫入數(shù)據(jù)只會(huì)同步到slave2和slave3中,不會(huì)同步到master和slave1中。
重復(fù)第一步,并復(fù)制redis.conf為redis-repl.conf
redis配置一個(gè)從服務(wù)器非常簡(jiǎn)單, 只要在從服務(wù)器的配置文件redis-repl.conf中增加主服務(wù)器的IP地址和端口號(hào)就可以,如果主服務(wù)器設(shè)置了客戶端密碼,還需要在從服務(wù)器中配置主服務(wù)器的密碼,如下
slaveof 192.168.118.137 6379
#masterauth 123456
redis-server /usr/local/redis/etc/redis-repl.conf
主可寫,從可查
從不可寫
slave上查看狀態(tài)
在一個(gè)一主多從的redis系統(tǒng)中,slave在整個(gè)系統(tǒng)中起到了數(shù)據(jù)冗余備份和讀寫分離的作用,當(dāng)master遇到故障,我們需要手動(dòng)才能將slave切換為master,且需要將寫的操作移到新的master上,這段時(shí)間的寫數(shù)據(jù)都會(huì)丟失,為此,redis在2.8版本后提供了哨兵機(jī)制,顧名思義,哨兵的作用就是監(jiān)控主從數(shù)據(jù)庫(kù)以及哨兵自己,在master故障時(shí)自動(dòng)切換。
Sentinel示意圖
這是一個(gè)單哨兵監(jiān)控的示意圖,哨兵可以有多個(gè),且哨兵之間互相監(jiān)控
哨兵配置實(shí)例:
Master :192.168.118.141:6379
Slave1:192.168.118.141:6380
Slave2:192.168.118.141:6381
[root@node1 etc]# redis-server /usr/local/redis/etc/redis.conf
[root@node1 etc]# redis-server /usr/local/redis/etc/redis-6380.conf
[root@node1 etc]# redis-server /usr/local/redis/etc/redis-6381.conf
[root@node1 ~]# redis-cli -h 192.168.118.141 -p 6379
192.168.118.141:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.118.141,port=6380,state=online,offset=85,lag=1
slave1:ip=192.168.118.141,port=6381,state=online,offset=85,lag=1
master_repl_offset:85
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:84
[root@node1 etc]# cat sentinel.conf
sentinel monitor mymaster 192.168.118.141 6379 1
mymaster:監(jiān)控的主數(shù)據(jù)庫(kù)名,自定義
192.168.118.141:監(jiān)控的主數(shù)據(jù)庫(kù)IP
6379:監(jiān)控的主數(shù)據(jù)庫(kù)端口
1:表示執(zhí)行故障恢復(fù)操作前至少需要幾個(gè)哨兵節(jié)點(diǎn)同意
[root@node1 etc]# redis-sentinel sentinel.conf
60725:X 14 Mar 23:13:53.909 * Increased maximum number of open files to 10032 (it was originally set to 1024).
_._
_.-``__ ''-._
_.-`` `. `_. ''-._ Redis 3.2.9 (00000000/0) 64 bit
.-`` .-```. ```\/ _.,_ ''-._
( ' , .-` | `, ) Running in sentinel mode
|`-._`-...-` __...-.``-._|'` _.-'| Port: 26379
| `-._ `._ / _.-' | PID: 60725
`-._ `-._ `-./ _.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' | http://redis.io
`-._ `-._`-.__.-'_.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' |
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-'
60725:X 14 Mar 23:13:53.915 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to
the lower value of 128.60725:X 14 Mar 23:13:53.925 # Sentinel ID is fe3fb6bef25af9641e46f40f76a0e00fd491acbb
60725:X 14 Mar 23:13:53.925 # +monitor master mymaster 192.168.118.141 6379 quorum 1
60725:X 14 Mar 23:13:53.927 * +slave slave 192.168.118.141:6380 192.168.118.141 6380 @ mymaster 192.168.118.141 6379
60725:X 14 Mar 23:13:53.928 * +slave slave 192.168.118.141:6381 192.168.118.141 6381 @ mymaster 192.168.118.141 6379
[root@node1 ~]# redis-cli -h 192.168.118.141 -p 6379
192.168.118.141:6379> shutdown
not connected>
[root@node1 ~]# redis-cli -h 192.168.118.141 -p 6380
192.168.118.141:6380> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.118.141,port=6381,state=online,offset=0,lag=1
master_repl_offset:1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:0
參考文章:
redis官方:https://redis.io/documentation
菜鳥教程:http://www.runoob.com/redis/redis-tutorial.html
當(dāng)前標(biāo)題:redis初探之主從與哨兵部署
標(biāo)題網(wǎng)址:http://muchs.cn/article22/piocjc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作、手機(jī)網(wǎng)站建設(shè)、軟件開發(fā)、網(wǎng)站導(dǎo)航、云服務(wù)器、定制開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)