redis主从搭建和分片集群搭建
文章目錄
- redis主從搭建
- 搭建一主一從:
- 下載安裝redis:兩臺機(jī)器都需要操作
- 權(quán)限認(rèn)證
- 理解主從復(fù)制原理、同步數(shù)據(jù)集
- 全量同步三個(gè)階段:
- 增量同步:
- 心跳檢測
- redis哨兵模式
- 部署方案
- 搭建配置
- 哨兵模式原理
- 建立連接
- 獲取主服務(wù)器信息
- 獲取從服務(wù)器信息
- redis分配集群搭建
redis主從搭建
搭建一主一從:
下載安裝redis:兩臺機(jī)器都需要操作
修改master redis.conf:
#開啟守護(hù)線程,后臺啟動 daemonize yes # 開啟遠(yuǎn)程訪問 bind 0.0.0.0 # 關(guān)閉保護(hù)模式 protected-mode no修改slave redis.conf
#開啟守護(hù)線程,后臺啟動 daemonize yes # 開啟遠(yuǎn)程訪問 bind 0.0.0.0 # 關(guān)閉保護(hù)模式 protected-mode no # 配置主redis ip port replicaof 39.96.204.209 6379兩天機(jī)器分別啟動redis
cd bin ./redis-server ../redis.conf進(jìn)入master客戶端:
./redis-cli 127.0.0.1:6379> set weijie 666進(jìn)入slave客戶端
127.0.0.1:6379> get weijie "666"127.0.0.1:6379> set weijie 222 (error) READONLY You can't write against a read only replica.#Slaver向Master發(fā)送ping命令,Master的響應(yīng)pong命令 127.0.0.1:6379> ping PONG如果出現(xiàn)該值,則說明主從搭建成功!!!
權(quán)限認(rèn)證
修改master redis.conf:
配置主redis密碼
修改slaver redis.conf,配置從redis的master密碼
masterauth 123456重啟master slaver機(jī)器的redis,寫入和讀取測試
master中:
127.0.0.1:6379> info replication 127.0.0.1:6379> set jie (error) ERR wrong number of arguments for 'set' command 127.0.0.1:6379> set jie 666 (error) NOAUTH Authentication required. 127.0.0.1:6379> auth 123456 OK 127.0.0.1:6379> set jie 666 OKslaver中:
127.0.0.1:6379> info replication 127.0.0.1:6379> get jie "666"配置成功!!!
理解主從復(fù)制原理、同步數(shù)據(jù)集
redis 2.8以前:只能支持全量同步+命令傳播,slave發(fā)送sync命令給master --> master生成rdb文件以及緩沖區(qū)所有寫命令給slave --> salve清空數(shù)據(jù)解釋rdb文件,保存數(shù)據(jù)一致。
緩沖區(qū)是對redis的一種保護(hù)機(jī)制,redis會將寫命令保存在緩沖區(qū),然后再取出執(zhí)行,有AOF緩沖區(qū)、AOF重寫緩沖區(qū)(解決重寫期間數(shù)據(jù)不一致問題)、輸出緩沖區(qū)
等
AOF 緩沖區(qū)的作用:目的是維持主線程 AOF 文件的正常寫入,保證在重寫階段,AOF 文件寫入的邏輯不變。
AOF 重寫緩存區(qū)作用:目的是記錄 AOF 重寫開始之后的鍵增刪改的命令。
解釋:https://www.v2ex.com/t/193687
redis 2.8以后:全量同步+增量同步,從第一次連上master --> 全量同步 --> 斷線重連觸發(fā)全量同步、增量同步(master 判斷runid是否一致),除此之外都是增量同步。
全量同步三個(gè)階段:
增量同步:
心跳檢測
在命令傳播階段,從服務(wù)器默認(rèn)會以每秒一次的頻率向主服務(wù)器發(fā)送命令。
主要作用有三個(gè):
秒時(shí),主服務(wù)器將拒絕執(zhí)行寫命令。
redis哨兵模式
哨兵是Redis高可用解決方案:
由于一個(gè)或多個(gè)sentinel實(shí)例組成sentinel集群可以監(jiān)視一個(gè)或多個(gè)主服務(wù)器和多個(gè)從服務(wù)器。
當(dāng)主服務(wù)器進(jìn)入下線狀態(tài)時(shí),sentinel可以將該主服務(wù)器下的某一從服務(wù)器升級為主服務(wù)器繼續(xù)提供服務(wù),從而保證redis的高可用。
redis的sentinel系統(tǒng)用于管理多個(gè)redis服務(wù)器,該系統(tǒng)主要執(zhí)行三個(gè)任務(wù):監(jiān)控、提醒、自動故障轉(zhuǎn)移。
1、監(jiān)控(Monitoring): Redis Sentinel實(shí)時(shí)監(jiān)控主服務(wù)器和從服務(wù)器運(yùn)行狀態(tài),并且實(shí)現(xiàn)自動切換。
2、提醒(Notification):當(dāng)被監(jiān)控的某個(gè) Redis 服務(wù)器出現(xiàn)問題時(shí), Redis Sentinel 可以向系統(tǒng)管理員發(fā)送通知, 也可以通過 API 向其他程序發(fā)送通知。
3、自動故障轉(zhuǎn)移(Automatic failover): 當(dāng)一個(gè)主服務(wù)器不能正常工作時(shí),Redis Sentinel 可以將一個(gè)從服務(wù)器升級為主服務(wù)器, 并對其他從服務(wù)器進(jìn)行配置,讓它們使用新的主服務(wù)器。當(dāng)應(yīng)用程序連接Redis 服務(wù)器時(shí), Redis Sentinel會告之新的主服務(wù)器地址和端口。
部署方案
搭建配置
slaves是自動發(fā)現(xiàn),所以你沒必要明確指定slaves
預(yù)留:后期補(bǔ)充
哨兵模式原理
建立連接
sentinel是一個(gè)特殊的redis服務(wù)器,不會進(jìn)行持久化,sentinel實(shí)例啟動后,每個(gè)sentinel會創(chuàng)建2個(gè)連向主服務(wù)器的網(wǎng)絡(luò)連接。
命令連接:用于向主服務(wù)器發(fā)送命令,并接收響應(yīng)
訂閱連接:用于訂閱主服務(wù)器的 sentinel:hello頻道
!在這里插入圖片描述
獲取主服務(wù)器信息
Sentinel默認(rèn)每10s一次,向被監(jiān)控的主服務(wù)器發(fā)送info命令,獲取主服務(wù)器和其下屬從服務(wù)器的信息
127.0.0.1:6379> info # Server redis_version:5.0.5 os:Linux 3.10.0-229.el7.x86_64 x86_64 run_id:a4e06ab61b4116660aa37b85079ed482b0b695b1 # Replication role:master connected_slaves:2 slave0:ip=127.0.0.1,port=6380,state=online,offset=1571684,lag=1 slave1:ip=127.0.0.1,port=6381,state=online,offset=1571551,lag=1 master_replid:366322125dd7dc9bc95ed3467cfec841c112e207 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:1571684 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset獲取從服務(wù)器信息
當(dāng)sentinel發(fā)現(xiàn)主服務(wù)器有新的從服務(wù)器出現(xiàn)時(shí),sentinel會向從服務(wù)器建立命令連接和訂閱連接了,在命令連接建立之后,sentinel還是默認(rèn)10s一次,向從服務(wù)器發(fā)送info命令,并記錄從服務(wù)器信息
向主服務(wù)器和從服務(wù)器發(fā)送消息(以訂閱的方式)
哨兵模式后期搭建成功后再記錄!
redis分配集群搭建
redis 3.0之后,Redis官方提供了完整的集群解決方案。
方案去中心化的方式,包括:sharding(分片)、replication(分區(qū))、failover(故障轉(zhuǎn)移)。稱為redisCluster。
redis 5.0前采用redis-trib進(jìn)行集群的創(chuàng)建和管理,需要ruby支持
redis 5.0可以直接使用redis-cli進(jìn)行集群的創(chuàng)建和管理。
下面開始集群的搭建:redis 版本:5.0.5
搭建效果:
1.編譯安裝
tar -zxvf redis-5.0.5.tar.gz mkdir redis-cluster cd redis-cluster mkdir 7001 cd .. cd redis-5.0.5/src make install PREFIX=/home/weijie/redis-cluster/7001查看7001目錄下出現(xiàn)bin目錄,則按照成功
2.集群配置
配置準(zhǔn)備
cd redis-cluster cd 7001 #引用配置文件 cp /home/weijie/redis-5.0.5/redis.conf ./修改配置
#修改配置文件 vim redis.conf #修改端口 port=7001 #關(guān)閉保護(hù)模式 protected-mode no #后臺啟動 daemonize yes #禁用bind ip 端口 #bind 127.0.0.1 ::1 #開啟集群模式 cluster-enabled yes集群配置準(zhǔn)備
cd redis-clustercp -r 7001 7002cp -r 7001 7003cp -r 7001 7004cp -r 7001 7005cp -r 7001 7006拷貝完后,修改其他redis.conf對應(yīng)的端口號,其他參數(shù)不用動配置啟動腳本
cd redis-cluster vim start.shstart.sh內(nèi)容如下
cd /home/weijie/redis-clustercd 7001 ./bin/redis-server redis.confcd .. cd 7002 ./bin/redis-server redis.confcd .. cd 7003 ./bin/redis-server redis.confcd .. cd 7004 ./bin/redis-server redis.confcd .. cd 7005 ./bin/redis-server redis.confcd .. cd 7006 ./bin/redis-server redis.confstop.sh內(nèi)容如下
kill -9 `ps -ef|grep redis-server | awk '{print $2}'賦腳本寫和執(zhí)行的權(quán)限
chmod u+x start.sh
chmod u+x stop.sh
啟動腳本:sh start.sh
啟動成功!
創(chuàng)建redis集群:
./redis-cli --cluster create 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006 --cluster-replicas 1進(jìn)入客戶端:
cd 7001/bin # -c 表示集群模式客戶端 ./redis-cli -h 127.0.0.1 -p 7001 -c # 查看集群信息 cluster nodes寫入測試:
發(fā)現(xiàn)數(shù)據(jù)分片到7003,然后自動調(diào)整到7003
集群搭建完成!!!
總結(jié)
以上是生活随笔為你收集整理的redis主从搭建和分片集群搭建的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Mybatis整合spring
- 下一篇: 搜索研发工程师需要掌握的一些技能