一碴裙、持久化策略
上篇提到Redis和memcached對(duì)比钢悲,還具有持久化功能点额,Redis支持兩種持久化策略:
策略 | 描述 | 優(yōu)點(diǎn) | 缺點(diǎn) |
---|---|---|---|
rdb | 默認(rèn)模式,可以在指定間隔時(shí)間內(nèi)生成數(shù)據(jù)快照莺琳,默認(rèn)保存到dump.rdb文件中还棱,每次重啟會(huì)從該文件中讀取 | 數(shù)據(jù)保存在子進(jìn)程中,對(duì)主進(jìn)程影響胁训取珍手;rdb是緊湊型文件,恢復(fù)數(shù)據(jù)效率高于aof | 保存點(diǎn)之間redis崩潰辞做,可能會(huì)丟失數(shù)據(jù)琳要;子進(jìn)程fork時(shí),數(shù)據(jù)量過(guò)大導(dǎo)致的性能低下 |
aof | 執(zhí)行修改數(shù)據(jù)的操作秤茅,直接同步到數(shù)據(jù)庫(kù)文件中 | 數(shù)據(jù)安全性高 | 文件大小大于rdb稚补,效率較慢 |
開啟aof需要修改配置文件:
# 開啟aof
appendonly yes
# 保存的文件名
appendfilename "appendonly.aof"
二、主從復(fù)制
Redis支持一主多從框喳,保證節(jié)點(diǎn)的高可用课幕,節(jié)點(diǎn)有多個(gè)復(fù)制品(replica)構(gòu)成,其中一個(gè)為主(master)五垮,其余的為從(slave)
主從復(fù)制可以對(duì)主節(jié)點(diǎn)數(shù)據(jù)備份乍惊,提升容災(zāi)能力。在Redis中拼余,主節(jié)點(diǎn)一般用作寫數(shù)據(jù)污桦,從節(jié)點(diǎn)只具備讀數(shù)據(jù)功能亩歹,因而實(shí)現(xiàn)讀寫分離匙监,提高集群性能
1. 主從環(huán)境搭建
我們需要使用多個(gè)redis來(lái)模擬多臺(tái)服務(wù)器,在redis安裝目錄/usr/local/redis
新建一個(gè)replica
目錄小作,并在其中創(chuàng)建master
亭姥、slave1
、slave2
目錄
mkdir replica
cd replica
mkdir master
mkdir slave1
mkdir slave2
將redis下的bin
目錄分別復(fù)制到三個(gè)目錄中
cp -r bin ./replica/master
cp -r bin ./replica/slave1
cp -r bin ./replica/slave2
2. 修改主從配置
目前主機(jī)的端口為:6379
修改兩個(gè)從機(jī)的配置顾稀,一個(gè)設(shè)置為6380
达罗,一個(gè)設(shè)置為6381
:
# 端口
port 6380
# 主機(jī)ip和端口
replicaof 192.168.42.4 6379
3. 啟動(dòng)三個(gè)redis
編寫shell腳本:
vi start.sh
內(nèi)容為:
cd /usr/local/redis/replica/master/bin
./redis-server redis.conf
cd /usr/local/redis/replica/slave1/bin
./redis-server redis.conf
cd /usr/local/redis/replica/slave2/bin
./redis-server redis.conf
賦予權(quán)限并執(zhí)行:
chmod 777 start.sh
./start.sh
查看進(jìn)程:
三個(gè)redis都正常啟動(dòng)完成了
4. 測(cè)試主從
4.1 主機(jī)寫數(shù)據(jù)
我們通過(guò)主機(jī)寫數(shù)據(jù),進(jìn)入主機(jī)的客戶端:
cd /usr/local/redis/replica/master/bin/
./redis-cli
寫入數(shù)據(jù):
set info hello
還可以使用info
命令查看主機(jī)的狀態(tài):
可以看到兩個(gè)從機(jī)已經(jīng)確立了主從關(guān)系
4.2 從機(jī)讀數(shù)據(jù)
進(jìn)入從機(jī)的客戶端静秆,使用-p
指定6380
端口:
cd /usr/local/redis/replica/slave1/bin
./redis-cli -p 6380
讀取數(shù)據(jù):
get info
結(jié)果:
4.3 主機(jī)宕機(jī)
將主機(jī)關(guān)閉粮揉,客戶端中使用shutdown
:
shutdown
進(jìn)程查看,已經(jīng)關(guān)閉了:
此時(shí)使用從機(jī)獲取剛剛的數(shù)據(jù)依然有效:
三抚笔、哨兵
主從復(fù)制可以實(shí)現(xiàn)主機(jī)節(jié)點(diǎn)宕機(jī)后扶认,依然可以獲取從節(jié)點(diǎn)的數(shù)據(jù),可用性確實(shí)提高了殊橙,但是從節(jié)點(diǎn)只能讀不能寫辐宾,這也是一個(gè)致命的問(wèn)題狱从。哨兵就是為了解決從機(jī)不可寫而產(chǎn)生的,一旦發(fā)現(xiàn)主機(jī)宕機(jī)叠纹,那么哨兵將通過(guò)檢舉季研,提升一臺(tái)從機(jī)為主機(jī),因而使之擁有寫能力誉察,哨兵可以配置多臺(tái)
1. 配置文件
將redis解壓完的目錄下的sentinel.conf
文件復(fù)制三份到上面三個(gè)redis中
cp ./sentinel.conf /usr/local/redis/replica/master/bin/
cp ./sentinel.conf /usr/local/redis/replica/slave1/bin/
cp ./sentinel.conf /usr/local/redis/replica/slave2/bin/
修改內(nèi)容為:
# 改端口 与涡,推薦使用2+對(duì)應(yīng)redis的端口
port 26379
# 后臺(tái)進(jìn)程
daemonize yes
# 出錯(cuò)日志存放路徑
logfile “/usr/local/redis/replica/master/26379.log”
# 哨兵監(jiān)聽(tīng)的主機(jī)ip和端口 后面2是表示2臺(tái)哨兵發(fā)現(xiàn)后才觸發(fā)從機(jī)升級(jí)
sentinel monitor mymaster 192.168.93.10 6379 2
# 改端口 ,推薦使用2+對(duì)應(yīng)redis的端口
port 26380
# 后臺(tái)進(jìn)程
daemonize yes
# 出錯(cuò)日志存放路徑
logfile “/usr/local/redis/replica/slave1/26380.log”
# 哨兵監(jiān)聽(tīng)的主機(jī)ip和端口 后面2是表示2臺(tái)哨兵發(fā)現(xiàn)后才觸發(fā)從機(jī)升級(jí)
sentinel monitor mymaster 192.168.93.10 6379 2
# 改端口 持偏,推薦使用2+對(duì)應(yīng)redis的端口
port 26381
# 后臺(tái)進(jìn)程
daemonize yes
# 出錯(cuò)日志存放路徑
logfile “/usr/local/redis/replica/slave2/26381.log”
# 哨兵監(jiān)聽(tīng)的主機(jī)ip和端口 后面2是表示2臺(tái)哨兵發(fā)現(xiàn)后才觸發(fā)從機(jī)升級(jí)
sentinel monitor mymaster 192.168.93.10 6379 2
2. 啟動(dòng)哨兵
在啟動(dòng)哨兵之前递沪,記得先把redis啟動(dòng)
./redis-sentinel ./sentinel.conf
3. 測(cè)試
接著把主機(jī)關(guān)閉:
在從機(jī)中查看狀態(tài),可以看到上升為主機(jī)了:
接著測(cè)試下寫功能:
四综液、集群
哨兵解決了從節(jié)點(diǎn)不可寫的問(wèn)題款慨,但沒(méi)能解決負(fù)載均衡,集群解決了寫操作的負(fù)載均衡谬莹,并可以水平擴(kuò)展檩奠,在Redis中,超過(guò)1/2的節(jié)點(diǎn)不可用附帽,那么整個(gè)集群就不可用了埠戳,所以我們都是搭建奇數(shù)臺(tái)Redis服務(wù)器
1. 環(huán)境搭建
復(fù)制6份redis的bin
目錄到三個(gè)文件夾下:
cd /usr/local/redis
mkdir cluster
cp -r bin cluster/cluster-7001
cp -r bin cluster/cluster-7002
cp -r bin cluster/cluster-7003
cp -r bin cluster/cluster-7004
cp -r bin cluster/cluster-7005
cp -r bin cluster/cluster-7006
2. 修改配置文件
將redis.conf
配置文件修改以下內(nèi)容:
port 7001
# 取消注釋,開啟集群功能
cluster-enabled yes
cluster-config-file nodes-7001.conf
cluster-node-timeout 15000
daemonize yes
protected-mode no
pidfile /var/run/redis_7001.pid
port 7002
# 取消注釋蕉扮,開啟集群功能
cluster-enabled yes
cluster-config-file nodes-7002.conf
cluster-node-timeout 15000
daemonize yes
protected-mode no
pidfile /var/run/redis_7002.pid
port 7003
# 取消注釋整胃,開啟集群功能
cluster-enabled yes
cluster-config-file nodes-7003.conf
cluster-node-timeout 15000
daemonize yes
protected-mode no
pidfile /var/run/redis_7003.pid
剩余的4-6也進(jìn)行配置
3. 啟動(dòng)Redis
-bash-4.2# pwd
/usr/local/redis/cluster
vi start-cluster.sh
內(nèi)容為:
./cluster-7001/redis-server ./cluster-7001/redis.conf
./cluster-7002/redis-server ./cluster-7002/redis.conf
./cluster-7003/redis-server ./cluster-7003/redis.conf
./cluster-7004/redis-server ./cluster-7004/redis.conf
./cluster-7005/redis-server ./cluster-7005/redis.conf
./cluster-7006/redis-server ./cluster-7006/redis.conf
修改執(zhí)行權(quán)限:
chmod 777 ./start-cluster.sh
啟動(dòng)Redis:
./start-cluster.sh
進(jìn)程查詢:
4. 啟動(dòng)集群
上面只是啟動(dòng)了Redis,但想讓多個(gè)Redis建立集群關(guān)系喳钟,還需使用下面命令(Redis5以上):
./redis-cli --cluster create 192.168.42.4:7001 192.168.42.4:7002 192.168.42.4:7003 192.168.42.4:7004 192.168.42.4:7005 192.168.42.4:7006 --cluster-replicas 1
--cluster-replicas 1 表示1臺(tái)主機(jī)對(duì)應(yīng)1臺(tái)從機(jī)
執(zhí)行后屁使,輸入yes
:
5. 測(cè)試
進(jìn)入客戶端,注意加上-c
:
./redis-cli -p 7001 -c
結(jié)果:
以上就是Redis的基本使用和配置