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