網(wǎng)站的模板演示怎么做內(nèi)容營銷是什么意思
目錄
一、redis的高可用
1)redis高可用的概念
2)Redis的高可用技術(shù)
二、redis主從復(fù)制
1)主從復(fù)制的作用
2)主從復(fù)制流程
三、redis一主二從的部署
實驗組件
實驗步驟
環(huán)境準備
修改內(nèi)核參數(shù)
安裝 Redis
創(chuàng)建redis工作目錄
環(huán)境變量
定義systemd服務(wù)管理腳本
修改 Redis 配置文件(Master節(jié)點操作)
修改 Redis 配置文件(Slave節(jié)點操作)
驗證主從效果
在Master節(jié)點上看日志:
在Master節(jié)點上驗證從節(jié)點:
三、Redis哨兵模式
1)哨兵模式的作用
2)哨兵結(jié)構(gòu)
3)故障轉(zhuǎn)移機制
4)主節(jié)點的選舉
5)搭建Redis 哨兵模式
修改 Redis 哨兵模式的配置文件(所有節(jié)點操作)
啟動哨兵模式
查看哨兵信息
故障模擬
查看redis-server進程號:
殺死 Master 節(jié)點上redis-server的進程號
驗證結(jié)果
四、Redis 群集模式
1)集群的作用
(1)數(shù)據(jù)分區(qū)
(2)高可用
2)Redis集群的數(shù)據(jù)分片
3)搭建Redis 群集模式
開啟群集功能
啟動redis節(jié)點
啟動集群
測試群集
一、redis的高可用
1)redis高可用的概念
在web服務(wù)器中,高可用是指服務(wù)器可以正常訪問的時間,衡量的標準是在多長時間內(nèi)可以提供正常服務(wù)
高可用的計算公式是1-(宕機時間)/(宕機時間+運行時間)
?
2個9:99%,一年內(nèi)宕機時長:1%×365天=3.6524天=87.6h
?
4個9:99.99%,一年內(nèi)宕機時長:0.01%×365天=52.56min
?
5個9:99.999%,一年內(nèi)宕機時長:0.001%*365天=5.265min
?
11個9:幾乎一年宕機時間只有幾秒鐘
2)Redis的高可用技術(shù)
在Redis中,實現(xiàn)高可用的技術(shù)主要包括持久化、主從復(fù)制、哨兵和cluster集群
-
持久化: 持久化是最簡單的高可用方法(有時甚至不被歸為高可用的手段),主要作用是數(shù)據(jù)備份,即將數(shù)據(jù)存儲在硬盤,保證數(shù)據(jù)不會因進程退出而丟失
-
主從復(fù)制: 主從復(fù)制是高可用Redis的基礎(chǔ),哨兵和集群都是在主從復(fù)制基礎(chǔ)上實現(xiàn)高可用的。主從復(fù)制主要實現(xiàn)了數(shù)據(jù)的多機備份(和同步),以及對于讀操作的負載均衡和簡單的故障恢復(fù)
缺陷:故障恢復(fù)無法自動化;寫操作無法負載均衡;存儲能力受到單機的限制
-
哨兵: 在主從復(fù)制的基礎(chǔ)上,哨兵實現(xiàn)了自動化的故障恢復(fù)。(主掛了,找一個從成為新的主,哨兵節(jié)點進行監(jiān)控)
缺陷:寫操作無法負載均衡;存儲能力受到單機的限制
-
Cluster集群: 通過集群,Redis解決了寫操作無法負載均衡,以及存儲能力受到單機限制的問題,實現(xiàn)了較為完善的高可用方案。(6臺起步,成雙成對,3主3從)
二、redis主從復(fù)制
主從復(fù)制,是指將一臺Redis服務(wù)器的數(shù)據(jù),復(fù)制到其他的Redis服務(wù)器。前者稱為主節(jié)點(Master),后者稱為從節(jié)點(slave);數(shù)據(jù)的復(fù)制是單向的,只能由主節(jié)點到從節(jié)點。
默認情況下,每臺Redis服務(wù)器都是主節(jié)點;且一個主節(jié)點可以有多個從節(jié)點(或沒有從節(jié)點),但一個從節(jié)點只能有一個主節(jié)點。
1)主從復(fù)制的作用
-
數(shù)據(jù)冗余: 主從復(fù)制實現(xiàn)了數(shù)據(jù)的熱備份,是持久化之外的一種數(shù)據(jù)冗余方式
-
故障恢復(fù): 當主節(jié)點出現(xiàn)問題時,可以由從節(jié)點提供服務(wù),實現(xiàn)快速的故障恢復(fù);實際上是一種服務(wù)的冗余
-
負載均衡: 在主從復(fù)制的基礎(chǔ)上,配合讀寫分離,可以由主節(jié)點提供寫服務(wù),由從節(jié)點提供讀服務(wù)(即寫Redis數(shù)據(jù)時應(yīng)用連接主節(jié)點,讀Redis數(shù)據(jù)時應(yīng)用連接從節(jié)點),分擔(dān)服務(wù)器負載;尤其是在寫少讀多的場景下,通過多個從節(jié)點分擔(dān)讀負載,可以大大提高Redis服務(wù)器的并發(fā)量
-
高可用基石: 除了上述作用以外,主從復(fù)制還是哨兵和集群能夠?qū)嵤┑幕A(chǔ),因此說主從復(fù)制是Redis高可用的基礎(chǔ)
2)主從復(fù)制流程
-
若啟動一個slave機器進程,則它會向Master機器發(fā)送一個sync command命令,請求同步連接
-
無論是第一次連接還是重新連接,Master機器都會啟動一個后臺進程,將數(shù)據(jù)快照保存到數(shù)據(jù)文件中(執(zhí)行rdb操作),同時Master還會記錄修改數(shù)據(jù)的所有命令并緩存在數(shù)據(jù)文件中
-
后臺進程完成緩存操作之后,Master機器就會向slave機器發(fā)送數(shù)據(jù)文件,slave端機器將數(shù)據(jù)文件保存到硬盤上,然后將其加載到內(nèi)存中,接著Master機器就會將修改數(shù)據(jù)的所有操作一并發(fā)送給slave端機器。若slave出現(xiàn)故障導(dǎo)致宕機,則恢復(fù)正常后會自動重新連接
-
Master機器收到slave端機器的連接后,將其完整的數(shù)據(jù)文件發(fā)送給slave端機器,如果Mater同時收到多個slave發(fā)來的同步請求,則Master會在后臺啟動一個進程以保存數(shù)據(jù)文件,然后將其發(fā)送給所有的slave端機器,確保所有的slave端機器都正常
三、redis一主二從的部署
實驗組件
主從 | IP地址 |
---|---|
master | 192.168.80.10 |
slave1 | 192.168.80.11 |
slave2 | 192.168.80.12 |
實驗步驟
環(huán)境準備
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/enforcing/disabled/' /etc/selinux/config
修改內(nèi)核參數(shù)
vim /etc/sysctl.conf
vm.overcommit_memory = 1
net.core.somaxconn = 2048
sysctl -p
安裝 Redis
yum install -y gcc gcc-c++ make
tar zxvf /opt/redis-7.0.9.tar.gz -C /opt/
cd /opt/redis-7.0.9
make
make PREFIX=/usr/local/redis install
?
#由于Redis源碼包中直接提供了 Makefile 文件,所以在解壓完軟件包后,不用先執(zhí)行 ./configure 進行配置,可直接執(zhí)行 make 與 make install 命令進行安裝
創(chuàng)建redis工作目錄
mkdir /usr/local/redis/{conf,log,data}
cp /opt/redis-7.0.9/redis.conf /usr/local/redis/conf/
useradd -M -s /sbin/nologin redis
chown -R redis.redis /usr/local/redis/
環(huán)境變量
vim /etc/profile
PATH=$PATH:/usr/local/redis/bin ? ? ? #增加一行
source /etc/profile
定義systemd服務(wù)管理腳本
vim /usr/lib/systemd/system/redis-server.service
?
[Unit]
Description=Redis Server
After=network.target[Service]
User=redis
Group=redis
Type=forking
TimeoutSec=0
PIDFile=/usr/local/redis/log/redis_6379.pid
ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true[Install]
WantedBy=multi-user.target
修改 Redis 配置文件(Master節(jié)點操作)
vim /usr/local/redis/conf/redis.conf
bind 0.0.0.0 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #87行,修改監(jiān)聽地址為0.0.0.0
protected-mode no ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #111行,將本機訪問保護模式設(shè)置no
port 6379 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #138行,Redis默認的監(jiān)聽6379端口
daemonize yes ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #309行,設(shè)置為守護進程,后臺啟動
pidfile /usr/local/redis/log/redis_6379.pid ? ? #341行,指定 PID 文件
logfile "/usr/local/redis/log/redis_6379.log" ? #354行,指定日志文件
dir /usr/local/redis/data ? ? ? ? ? ? ? ? ? ? ? #504行,指定持久化文件所在目錄
#requirepass abc123 ? ? ? ? ? ? ? ? ? ? ? ? ? ? #1037行,可選,設(shè)置redis密碼
appendonly yes ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #1380行,開啟AOF
systemctl restart redis-server.service
修改 Redis 配置文件(Slave節(jié)點操作)
vim /usr/local/redis/conf/redis.conf
bind 0.0.0.0 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #87行,修改監(jiān)聽地址為0.0.0.0
protected-mode no ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #111行,將本機訪問保護模式設(shè)置no
port 6379 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #138行,Redis默認的監(jiān)聽6379端口
daemonize yes ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #309行,設(shè)置為守護進程,后臺啟動
pidfile /usr/local/redis/log/redis_6379.pid ? ? #341行,指定 PID 文件
logfile "/usr/local/redis/log/redis_6379.log" ? #354行,指定日志文件
dir /usr/local/redis/data ? ? ? ? ? ? ? ? ? ? ? #504行,指定持久化文件所在目錄
#requirepass abc123 ? ? ? ? ? ? ? ? ? ? ? ? ? ? #1037行,可選,設(shè)置redis密碼
appendonly yes ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #1380行,開啟AOF
replicaof 192.168.80.10 6379 ? ? ? ? ? ? ? ? ? ? #528行,指定要同步的Master節(jié)點IP和端口
#masterauth abc123 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #535行,可選,指定Master節(jié)點的密碼,僅在Master節(jié)點設(shè)置了requirepass
systemctl restart redis-server.service
驗證主從效果
在Master節(jié)點上看日志:
tail -f /usr/local/redis/log/redis_6379.log
?
?
Replica 192.168.80.11:6379 asks for synchronization
Replica 192.168.80.12:6379 asks for synchronization
Synchronization with replica 192.168.80.11:6379 succeeded
Synchronization with replica 192.168.80.12:6379 succeeded
在Master節(jié)點上驗證從節(jié)點:
redis-cli info replication
?
?
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.80.11,port=6379,state=online,offset=1246,lag=0
slave1:ip=192.168.80.12,port=6379,state=online,offset=1246,lag=1
三、Redis哨兵模式
-
主從切換技術(shù)的方法是:當服務(wù)器宕機后,需要手動一臺從機切換為主機,這需要人工干預(yù),不僅費時費力而且還會造成一段時間內(nèi)服務(wù)不可用。為了解決主從復(fù)制的缺點,就有了哨兵機制
-
哨兵的核心功能:在主從復(fù)制的基礎(chǔ)上,哨兵引入了主節(jié)點的自動故障轉(zhuǎn)移
1)哨兵模式的作用
-
監(jiān)控:哨兵會不斷地檢查主節(jié)點和從節(jié)點是否運作正常
-
自動故障轉(zhuǎn)移:當主節(jié)點不能正常工作時,哨兵會開始自動故障轉(zhuǎn)移操作,它會將失效主節(jié)點的其中一個從節(jié)點升級為新的主節(jié)點,并讓其它從節(jié)點改為復(fù)制新的主節(jié)點
-
通知(提醒):哨兵可以將故障轉(zhuǎn)移的結(jié)果發(fā)送給客戶端
2)哨兵結(jié)構(gòu)
由兩部分組成,哨兵節(jié)點和數(shù)據(jù)節(jié)點:
-
哨兵節(jié)點:哨兵系統(tǒng)由一個或多個哨兵節(jié)點組成,哨兵節(jié)點是特殊的redis節(jié)點,不存儲數(shù)據(jù)
-
數(shù)據(jù)節(jié)點:主節(jié)點和從節(jié)點都是數(shù)據(jù)節(jié)點
3)故障轉(zhuǎn)移機制
1.由哨兵節(jié)點定期監(jiān)控發(fā)現(xiàn)主節(jié)點是否出現(xiàn)了故障 每個哨兵節(jié)點每隔1秒會向主節(jié)點、從節(jié)點及其它哨兵節(jié)點發(fā)送一次ping命令做一次心跳檢測。如果主節(jié)點在一定時間范圍內(nèi)不回復(fù)或者是回復(fù)一個錯誤消息,那么這個哨兵就會認為這個主節(jié)點主觀下線了(單方面的)。當超過半數(shù)哨兵節(jié)點認為該主節(jié)點主觀下線了,這樣就客觀下線了
2.當主節(jié)點出現(xiàn)故障,此時哨兵節(jié)點會通過Raft算法(選舉算法)實現(xiàn)選舉機制共同選舉出一個哨兵節(jié)點為leader,來負責(zé)處理主節(jié)點的故障轉(zhuǎn)移和通知。所以整個運行哨兵的集群的數(shù)量不得少于3個節(jié)點
3.由leader哨兵節(jié)點執(zhí)行故障轉(zhuǎn)移,過程如下:
-
將某一個從節(jié)點升級為新的主節(jié)點,讓其它從節(jié)點指向新的主節(jié)點
-
若原主節(jié)點恢復(fù)也變成從節(jié)點,并指向新的主節(jié)點
-
通知客戶端主節(jié)點已經(jīng)更換
需要特別注意的是,客觀下線是主節(jié)點才有的概念;如果從節(jié)點和哨兵節(jié)點發(fā)生故障,被哨兵主觀下線后,不會再有后續(xù)的客觀下線和故障轉(zhuǎn)移操作
4)主節(jié)點的選舉
-
過濾掉不健康的(已下線的),沒有回復(fù)哨兵 ping 響應(yīng)的從節(jié)點
-
選擇配置文件中從節(jié)點優(yōu)先級配置最高的。(replica-priority,默認值為100)
-
選擇復(fù)制偏移量最大,也就是復(fù)制最完整的從節(jié)點
哨兵的啟動依賴于主從模式,所以須把主從模式安裝好的情況下再去做哨兵模式
5)搭建Redis 哨兵模式
Master節(jié)點:192.168.80.10
Slave1節(jié)點:192.168.80.11
Slave2節(jié)點:192.168.80.12
systemctl stop firewalld
setenforce 0
修改 Redis 哨兵模式的配置文件(所有節(jié)點操作)
cp /opt/redis-7.0.9/sentinel.conf /usr/local/redis/conf/
chown redis.redis /usr/local/redis/conf/sentinel.conf
vim /usr/local/redis/conf/sentinel.conf
protected-mode no ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #6行,關(guān)閉保護模式
port 26379 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #10行,Redis哨兵默認的監(jiān)聽端口
daemonize yes ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #15行,指定sentinel為后臺啟動
pidfile /usr/local/redis/log/redis-sentinel.pid ? ? ? #20行,指定 PID 文件
logfile "/usr/local/redis/log/sentinel.log" ? ? ? ? ? #25行,指定日志存放路徑
dir /usr/local/redis/data ? ? ? ? ? ? ? ? ? ? ? ? ? ? #54行,指定數(shù)據(jù)庫存放路徑
sentinel monitor mymaster 192.168.80.10 6379 2 ? ? ? #73行,修改 指定該哨兵節(jié)點監(jiān)控192.168.80.10:6379這個主節(jié)點,該主節(jié)點的名稱是mymaster,最后的2的含義與主節(jié)點的故障判定有關(guān):至少需要2個哨兵節(jié)點同意,才能判定主節(jié)點故障并進行故障轉(zhuǎn)移
#sentinel auth-pass mymaster abc123 ? ? ? ? ? ? ? ? ? #76行,可選,指定Master節(jié)點的密碼,僅在Master節(jié)點設(shè)置了requirepass
sentinel down-after-milliseconds mymaster 3000 ? ? ? #114行,判定服務(wù)器down掉的時間周期,默認30000毫秒(30秒)
sentinel failover-timeout mymaster 180000 ? ? ? ? ? ? #214行,同一個sentinel對同一個master兩次failover之間的間隔時間(180秒)
啟動哨兵模式
先啟master,再啟slave
cd /usr/local/redis/conf/
redis-sentinel sentinel.conf &
查看哨兵信息
?redis-cli -p 26379 info Sentinel
?
?
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=192.168.80.10:6379,slaves=2,sentinels=3
故障模擬
查看redis-server進程號:
ps -ef | grep redis
?
?
root ? ? 57031 ? ? 1 0 15:20 ? ? ? ? 00:00:07 /usr/local/bin/redis-server 0.0.0.0:6379
root ? ? 57742 ? ? 1 1 16:05 ? ? ? ? 00:00:07 redis-sentinel *:26379 [sentinel]
root ? ? 57883 57462 0 16:17 pts/1 ? 00:00:00 grep --color=auto redis
殺死 Master 節(jié)點上redis-server的進程號
kill -9 57031 ? ? ? ? ? #Master節(jié)點上redis-server的進程號
驗證結(jié)果
tail -f /usr/local/redis/log/sentinel.log
?
?
6709:X 13 Mar 2023 12:27:29.517 # +sdown master mymaster 192.168.80.10 6379
6709:X 13 Mar 2023 12:27:29.594 * Sentinel new configuration saved on disk
6709:X 13 Mar 2023 12:27:29.594 # +new-epoch 1
6709:X 13 Mar 2023 12:27:29.595 * Sentinel new configuration saved on disk
6709:X 13 Mar 2023 12:27:29.595 # +vote-for-leader c64fac46fcd98350006900c330998364d6af635d 1
6709:X 13 Mar 2023 12:27:29.620 # +odown master mymaster 192.168.80.10 6379 #quorum 2/2
6709:X 13 Mar 2023 12:27:29.621 # Next failover delay: I will not start a failover before Mon Mar 13 12:33:30 2023
6709:X 13 Mar 2023 12:27:30.378 # +config-update-from sentinel c64fac46fcd98350006900c330998364d6af635d 192.168.80.11 26379 @ mymaster 192.168.80.10 6379
6709:X 13 Mar 2023 12:27:30.378 # +switch-master mymaster 192.168.80.10 6379 192.168.80.11 6379
6709:X 13 Mar 2023 12:27:30.378 * +slave slave 192.168.80.13:6379 192.168.80.13 6379 @ mymaster 192.168.80.11 6379
6709:X 13 Mar 2023 12:27:30.378 * +slave slave 192.168.80.10:6379 192.168.80.10 6379 @ mymaster 192.168.80.11 6379
6709:X 13 Mar 2023 12:27:30.381 * Sentinel new configuration saved on disk
6709:X 13 Mar 2023 12:27:33.379 # +sdown slave 192.168.80.10:6379 192.168.80.10 6379 @ mymaster 192.168.80.11 6379
redis-cli -p 26379 INFO Sentinel
?
?
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_tilt_since_seconds:-1
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=192.168.80.11:6379,slaves=2,sentinels=3
四、Redis 群集模式
-
集群,即Redis Cluster,是Redis 3.0開始引入的分布式存儲方案
-
集群由多組節(jié)點(Node)組成,Redis的數(shù)據(jù)分布在這些節(jié)點中。集群中的節(jié)點分為主節(jié)點和從節(jié)點:只有主節(jié)點負責(zé)讀寫請求和集群信息的維護;從節(jié)點只進行主節(jié)點數(shù)據(jù)和狀態(tài)信息的復(fù)制
1)集群的作用
(1)數(shù)據(jù)分區(qū)
-
數(shù)據(jù)分區(qū)(或稱數(shù)據(jù)分片)是集群最核心的功能
-
集群將數(shù)據(jù)分散到多個節(jié)點,一方面突破了Redis單機內(nèi)存大小的限制,存儲容量大大增加;另一方面每個主節(jié)點都可以對外提供讀服務(wù)和寫服務(wù),大大提高了集群的響應(yīng)能力
-
Redis單機內(nèi)存大小受限問題,在介紹持久化和主從復(fù)制時都有提及;例如,如果單機內(nèi)存太大,bgsave和bgrewriteaof的fork操作可能導(dǎo)致主進程阻塞,主從環(huán)境下主機切換時可能導(dǎo)致從節(jié)點長時間無法提供服務(wù),全量復(fù)制階段主節(jié)點的復(fù)制緩沖區(qū)可能溢出
(2)高可用
-
集群支持主從復(fù)制和主節(jié)點的自動故障轉(zhuǎn)移(與哨兵類似);當任一節(jié)點發(fā)生故障時,集群仍然可以對外提供服務(wù)
2)Redis集群的數(shù)據(jù)分片
-
Redis集群引入了哈希槽的概念
-
Redis集群有16384個哈希槽(編號0-16383)
-
集群的每組節(jié)點負責(zé)一部分哈希槽
-
每個Key通過CRC16校驗后對16384取余來決定放置哪個哈希槽,通過這個值,去找到對應(yīng)的插槽所對應(yīng)的節(jié)點,然后直接自動跳轉(zhuǎn)到這個對應(yīng)的節(jié)點上進行存取操作
#以3個節(jié)點組成的集群為例:
節(jié)點A包含0到5460號哈希槽
節(jié)點B包含5461到10922號哈希槽
節(jié)點C包含10923到16383號哈希槽
#Redis集群的主從復(fù)制模型
集群中具有A、B、C三個節(jié)點,如果節(jié)點B失敗了,整個集群就會因缺少5461-10922這個范圍的槽而不可以用。
為每個節(jié)點添加一個從節(jié)點A1、B1、C1整個集群便有三個Master節(jié)點和三個slave節(jié)點組成,在節(jié)點B失敗后,集群選舉B1位為的主節(jié)點繼續(xù)服務(wù)。當B和B1都失敗后,集群將不可用。
3)搭建Redis 群集模式
redis的集群一般需要6個節(jié)點,3主3從。方便起見,這里所有節(jié)點在同一臺服務(wù)器上模擬: 以端口號進行區(qū)分:
-
3個主節(jié)點端口號:6001/6002/6003
-
對應(yīng)的從節(jié)點端口號:6004/6005/6006
cd /usr/local/redis/
mkdir -p redis-cluster/redis600{1..6}
for i in {1..6}
do
cp /opt/redis-7.0.9/redis.conf /usr/local/redis/redis-cluster/redis600$i
cp /opt/redis-7.0.9/src/redis-cli /opt/redis-7.0.9/src/redis-server /usr/local/redis/redis-cluster/redis600$i
done
開啟群集功能
#其他5個文件夾的配置文件以此類推修改,注意6個端口都要不一樣。
cd /usr/local/redis/redis-cluster/redis6001
vim redis.conf
#bind 127.0.0.1 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #87行,注釋掉bind項,默認監(jiān)聽所有網(wǎng)卡
protected-mode no ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #111行,關(guān)閉保護模式
port 6001 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #138行,修改redis監(jiān)聽端口
daemonize yes ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #309行,設(shè)置為守護進程,后臺啟動
pidfile /usr/local/redis/log/redis_6001.pid ? ? ? #341行,指定 PID 文件
logfile "/usr/local/redis/log/redis_6001.log" ? ? #354行,指定日志文件
dir ./ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #504行,指定持久化文件所在目錄
appendonly yes ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #1379行,開啟AOF
cluster-enabled yes ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #1576行,取消注釋,開啟群集功能
cluster-config-file nodes-6001.conf ? ? ? ? ? ? ? #1584行,取消注釋,群集名稱文件設(shè)置
cluster-node-timeout 15000 ? ? ? ? ? ? ? ? ? ? ? ? #1590行,取消注釋群集超時時間設(shè)置
啟動redis節(jié)點
分別進入那六個文件夾,執(zhí)行命令:redis-server redis.conf ,來啟動redis節(jié)點
cd /usr/local/redis/redis-cluster/redis6001
redis-server redis.conf
for d in {1..6}
do
cd /usr/local/redis/redis-cluster/redis600$d
./redis-server redis.conf
done
ps -ef | grep redis
啟動集群
?redis-cli --cluster create 127.0.0.1:6001 127.0.0.1:6002 127.0.0.1:6003 127.0.0.1:6004 127.0.0.1:6005 127.0.0.1:6006 --cluster-replicas 1
#六個實例分為三組,每組一主一從,前面的做主節(jié)點,后面的做從節(jié)點。下面交互的時候 需要輸入 yes 才可以創(chuàng)建。
--replicas 1 表示每個主節(jié)點有1個從節(jié)點
測試群集
redis-cli -p 6001 -c ? ? ? ? ? ? ? ? ? #加-c參數(shù),節(jié)點之間就可以互相跳轉(zhuǎn)
127.0.0.1:6001> cluster slots ? ? ? ? ? #查看節(jié)點的哈希槽編號范圍
?
?
1) 1) (integer) 54612) (integer) 10922 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #哈希槽編號范圍3) 1) "127.0.0.1"2) (integer) 6003 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #主節(jié)點IP和端口號3) "fdca661922216dd69a63a7c9d3c4540cd6baef44"4) 1) "127.0.0.1"2) (integer) 6004 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #從節(jié)點IP和端口號3) "a2c0c32aff0f38980accd2b63d6d952812e44740"
2) 1) (integer) 02) (integer) 54603) 1) "127.0.0.1"2) (integer) 60013) "0e5873747a2e26bdc935bc76c2bafb19d0a54b11"4) 1) "127.0.0.1"2) (integer) 60063) "8842ef5584a85005e135fd0ee59e5a0d67b0cf8e"
3) 1) (integer) 109232) (integer) 163833) 1) "127.0.0.1"2) (integer) 60023) "816ddaa3d1469540b2ffbcaaf9aa867646846b30"4) 1) "127.0.0.1"2) (integer) 60053) "f847077bfe6722466e96178ae8cbb09dc8b4d5eb"
?
127.0.0.1:6001> set name zhangsan
-> Redirected to slot [5798] located at 127.0.0.1:6003
OK
127.0.0.1:6001> cluster keyslot name ? ? ? ? ? ? ? ? ? #查看name鍵的槽編號
redis-cli -p 6004 -c
redis-cli -p 6001 -c cluster novv