第一次開(kāi)票網(wǎng)站建設(shè)怎么開(kāi)公司如何建立網(wǎng)站
一、哨兵模式原理及作用
?1.原理
????????哨兵(sentinel): 是一個(gè)分布式系統(tǒng),用于對(duì)主從結(jié)構(gòu)中的每臺(tái)服務(wù)器進(jìn)行監(jiān)控,當(dāng)出現(xiàn) 故障時(shí),通過(guò)投票機(jī)制選擇新的master并將所有slave連接到新的master。所以整個(gè)運(yùn)行哨兵的集群的數(shù)量不得少于三個(gè)節(jié)點(diǎn)。(哨兵必須是奇數(shù))
2.作用
(1)監(jiān)控: 哨兵會(huì)不斷地檢測(cè)主節(jié)點(diǎn)和從節(jié)點(diǎn)是否運(yùn)行正常。
(2)自動(dòng)故障轉(zhuǎn)移: 當(dāng)主節(jié)點(diǎn)不能正常工作時(shí),哨兵會(huì)開(kāi)始自動(dòng)故障轉(zhuǎn)移操作,她會(huì)將失效主節(jié)點(diǎn)的其中一個(gè)從節(jié)點(diǎn)升級(jí)為新的主節(jié)點(diǎn),并讓其他從節(jié)點(diǎn)改為新的主節(jié)點(diǎn)。
(3)通知(提醒): 哨兵可以將故障轉(zhuǎn)移的結(jié)果發(fā)送給客戶(hù)端。
二、如何開(kāi)啟Redis數(shù)據(jù)庫(kù)主從復(fù)制
1.實(shí)驗(yàn)環(huán)境
虛擬機(jī)版本 | VMware? Workstation 16 Pro 16.2.4 build-20089737 |
鏡像版本 | CentOS-7-x86_64-DVD-1708.iso |
Redis版本 | Redis-5.0.7 |
主服務(wù)器地址 | 192.168.254.106/24 |
從服務(wù)器1地址 | 192.168.254.107/24 |
從服務(wù)器2地址 | 192.168.254.108/24 |
2.實(shí)驗(yàn)要求
在主從復(fù)制的基礎(chǔ)上通過(guò)修改配置文件完成redis哨兵和集群的配置
3.實(shí)驗(yàn)具體配置
systemctl stop firewalld
setenforce 0
vim /opt/redis-5.0.7/sentinel.conf
protected-mode no????????????????????????????????????????????????????? #17行,關(guān)閉保護(hù)模式
port 26379?????????????????????????????????????????????? ????????????? #21行,Redis哨兵默認(rèn)的監(jiān)聽(tīng)端口
daemonize yes????????????????????????????????????????????????????? #26行,指定sentinel為后臺(tái)啟動(dòng)
logfile "/var/log/sentinel.log"???????????????????????????????? #36行,指定日志存放路徑
dir "/var/lib/redis/6379"???????????????????????????????????????? #65行,指定數(shù)據(jù)庫(kù)存放路徑
sentinel monitor mymaster 192.168.254.106 6379 2? ??? #84行,修改指定該哨兵節(jié)點(diǎn)監(jiān)控192.168.254.106:6379這個(gè)主節(jié)點(diǎn),該主節(jié)點(diǎn)的名稱(chēng)是mymaster,最后的2的含義與主節(jié)點(diǎn)的故障判定有關(guān):至少需要2個(gè)哨兵節(jié)點(diǎn)同意,才能判定主節(jié)點(diǎn)故障并進(jìn)行故障轉(zhuǎn)移
sentinel down-after-milliseconds mymaster 30000 #113行,判定服務(wù)器down掉的時(shí)間周期,默認(rèn)30000毫秒(30秒)
sentinel failover-timeout mymaster 180000??????????? #146行,故障節(jié)點(diǎn)的最大超時(shí)時(shí)間為180000(180秒)
4.啟動(dòng)哨兵模式
先啟master,再啟slave
cd /opt/redis-5.0.7/
redis-sentinel sentinel.conf &
注意!先啟動(dòng)主服務(wù)器,再啟動(dòng)從服務(wù)器
5.故障模擬
查看redis-server進(jìn)程號(hào)
殺死Master節(jié)點(diǎn)上redis-server的進(jìn)程號(hào)
6.驗(yàn)證結(jié)果
tail -f /var/log/sentinel.log
redis-cli -p 26379 INFO Sentinel
2.Redis集群模式
? 1.集群的作用和數(shù)據(jù)分片
1.作用
(1)數(shù)據(jù)分區(qū):數(shù)據(jù)分區(qū)(或稱(chēng)數(shù)據(jù)分片) 是集群最核心的功能。
????????集群將數(shù)據(jù)分散到多個(gè)節(jié)點(diǎn),一方面突破了 Redis 單機(jī)內(nèi)存大小的限制,存儲(chǔ)容量大大增加;另一方面每個(gè)主節(jié)點(diǎn)都可以對(duì)外提供讀服務(wù)和寫(xiě)服務(wù),大大提高了集群的響應(yīng)能力。
????????Redis 單機(jī)內(nèi)存大小受限問(wèn)題,在介紹持久化和主從復(fù)制時(shí)都有提及;例如,如果單機(jī)內(nèi)存太大,bgsave 和 bgrewriteaof的 fork 操作可能導(dǎo)致主進(jìn)程阻塞,主從環(huán)境下主機(jī)切換時(shí)可能導(dǎo)致從節(jié)點(diǎn)長(zhǎng)時(shí)間無(wú)法提供服務(wù),全量復(fù)制階段主節(jié)點(diǎn)的復(fù)制緩沖區(qū)可能溢出。
(2)高可用:集群支持主從復(fù)制和主節(jié)點(diǎn)的自動(dòng)故障轉(zhuǎn)移(與哨兵類(lèi)似) ;當(dāng)任一節(jié)點(diǎn)發(fā)生故障時(shí),集群仍然可以對(duì)外提供服務(wù)。
數(shù)據(jù)分片
(1)Redis集群引入了哈希槽的概念
(2)Redis集群有 16384 個(gè)哈希槽( 編號(hào)0-16383)
(3)集群的每個(gè)節(jié)點(diǎn)負(fù)責(zé)一部分哈希槽
(4)每個(gè)Key 通過(guò) CRC16 校驗(yàn)后對(duì)16384取余來(lái)決定放置哪個(gè)哈希槽,通過(guò)這個(gè)值,去找到對(duì)應(yīng)的插槽所對(duì)應(yīng)的節(jié)點(diǎn),然后直接自動(dòng)跳轉(zhuǎn)到這個(gè)對(duì)應(yīng)的節(jié)點(diǎn)上進(jìn)行存取操作。
<- - -以3個(gè)節(jié)點(diǎn)組成的集群為例- - ->
節(jié)點(diǎn)A 包含0到5460號(hào)哈希槽
節(jié)點(diǎn)B 包含5461到10922號(hào)哈希槽
節(jié)點(diǎn)C 包含10923到16383號(hào)哈希槽
環(huán)境準(zhǔn)備
1.redis的集群一般需要**6個(gè)節(jié)點(diǎn),3主3從**。 方便起見(jiàn), 這里所有節(jié)點(diǎn)在3臺(tái)服務(wù)器上模擬,每臺(tái)主機(jī)上設(shè)置一主一備,以IP地址和端口進(jìn)行區(qū)分:
(1)三個(gè)主節(jié)點(diǎn)端口號(hào):6001,6002,6003
(2)對(duì)應(yīng)的從節(jié)點(diǎn)端口號(hào):7001,7002,7003
服務(wù)器類(lèi)型 | 系統(tǒng)和IP地址 | 需要安裝的組件 | 節(jié)點(diǎn)端口 |
Master1 | CentOS7.4(64位) 192.168.254.106 | redis-5.0.7.tar.gz | 6001 |
Slave 1 | CentOS7.4(64位) 192.168.254.106 | redis-5.0.7.tar.gz | 7001 |
Master2 | CentOS7.4(64位) 192.168.254.107 | redis-5.0.7.tar.gz | 6002 |
Slave 2 | CentOS7.4(64位) 192.168.254.107 | redis-5.0.7.tar.gz | 7002 |
Master3 | CentOS7.4(64位) 192.168.254.108 | redis-5.0.7.tar.gz | 6003 |
Slave 3 | CentOS7.4(64位) 192.168.254.108 | redis-5.0.7.tar.gz | 7003 |
3.創(chuàng)建目錄復(fù)制配置文件到對(duì)應(yīng)的節(jié)點(diǎn)上
(1)第一臺(tái)主機(jī):192.168.254.106
cd /etc/redis/
mkdir -p redis-cluster/redis6001
mkdir -p redis-cluster/redis7001
cp /opt/redis-5.0.7/redis.conf /etc/redis/redis-cluster/redis6001/
cp /opt/redis-5.0.7/src/redis-cli /opt/redis-5.0.7/src/redis-server /etc/redis/redis-cluster/redis6001/
cp /opt/redis-5.0.7/src/redis-cli /opt/redis-5.0.7/src/redis-server /etc/redis/redis-cluster/redis7001/
(2)第二臺(tái)主機(jī):192.168.254.107
cd /etc/redis/
mkdir -p redis-cluster/redis6002
mkdir -p redis-cluster/redis7002
cp /opt/redis-5.0.7/src/redis-cli /opt/redis-5.0.7/src/redis-server /etc/redis/redis-cluster/redis6002/
cp /opt/redis-5.0.7/src/redis-cli /opt/redis-5.0.7/src/redis-server /etc/redis/redis-cluster/redis7002/
(3)第三臺(tái)主機(jī):192.168.254.108
cd /etc/redis/
mkdir -p redis-cluster/redis6003
mkdir -p redis-cluster/redis7003
cp /opt/redis-5.0.7/src/redis-cli /opt/redis-5.0.7/src/redis-server /etc/redis/redis-cluster/redis6003/
cp /opt/redis-5.0.7/src/redis-cli /opt/redis-5.0.7/src/redis-server /etc/redis/redis-cluster/redis7003/
4. 修改主配置文件,設(shè)置開(kāi)啟集群功能
先在Master1上配置,然后將配置文件復(fù)制到其他節(jié)點(diǎn)服務(wù)器
#Master1配置如下,其他5個(gè)服務(wù)器的配置文件類(lèi)似,注意6個(gè)端口都要不一樣。
cd /etc/redis/redis-cluster/redis6001
vim redis.conf
#bind 127.0.0.1?????????????????????????????????????????????? #69行,注釋掉bind 項(xiàng),默認(rèn)監(jiān)聽(tīng)所有網(wǎng)卡
protected-mode no??????????????????????????????????????? #88行,修改,關(guān)閉保護(hù)模式
port 6001?????????????????????????????????????????????????????? #92行,修改,redis監(jiān)聽(tīng)端口
daemonize yes?????????????????????????????????????????????? #136行,以獨(dú)立進(jìn)程啟動(dòng)
cluster-enabled yes??????????????????????????????????????? #832行,取消注釋,開(kāi)啟群集功能
cluster-config-file nodes-6379.conf???????? #840行,取消注釋,取消注釋,群集名稱(chēng)文件設(shè)置
cluster-node-timeout 15000?????????????????????????? #846行,取消注釋群集超時(shí)時(shí)間設(shè)置
appendonly yes????????????????????????????????????????????? #699行,修改,開(kāi)啟AOF持久化
啟動(dòng)所有redis節(jié)點(diǎn)
?啟動(dòng)群集
#前三臺(tái)為Master,后三臺(tái)為Slave,下面交互的時(shí)候需要輸入yes 才可以創(chuàng)建。
redis-cli --cluster create 192.168.254.106:6001 192.168.254.107:6002 192.168.254.108:6003 192.168.254.106:7001 192.168.254.107:7002 192.168.254.108:7003 --cluster-replicas 1
?#-replicas 1?? 表示每個(gè)主節(jié)點(diǎn)有1個(gè)從節(jié)點(diǎn)。
測(cè)試集群
?#加-c參數(shù),節(jié)點(diǎn)之間就可以互相跳轉(zhuǎn)
redis-cli -h 192.168.156.10 -p 6001 -c
?#查看節(jié)點(diǎn)的哈希槽編號(hào)范圍
192.168.156.10:6001> cluster slots???
192.168.156.10:6001> set hobby dance
#查看鍵的槽編號(hào)???
192.168.156.110:6002> cluster keyslot hobby
總結(jié)
? ? ? ? 以上就是Redis高可用的兩種方法,這兩種方法均以Redis主從復(fù)制為基石。它們可以很好的應(yīng)對(duì)web2.0純動(dòng)態(tài)網(wǎng)站類(lèi)型的三高問(wèn)題.