Redis哨兵集群工作原理及架構部署(八)

      網友投稿 697 2022-05-30

      Redis哨兵集群工作原理及架構部署

      文章目錄

      Redis哨兵集群工作原理及架構部署

      1.redis哨兵模式原理

      2.搭建redis哨兵集群

      2.1.環(huán)境準備

      2.2.在所有機器上部署redis

      2.3.三臺redis部署完成

      2.4.配置redis主從

      2.5.部署哨兵進程sentinel

      2.6.啟動哨兵觀察配置文件的變化

      2.7.模擬主庫故障驗證應用是否可用

      2.8.主庫掛掉其他節(jié)點配置文件的變化

      1.redis哨兵模式原理

      redis主從復制的不足: 當主庫宕機后,slave無法自己變成主庫,進行數(shù)據(jù)的寫入,每次都需要人為配置將從庫變?yōu)橹鲙觳拍苓M行數(shù)據(jù)寫入,當主庫修復后還需要人為配置導入從庫主機在配置主從復制

      redis哨兵模式的優(yōu)勢: redis哨兵建立在主從之上,有一個監(jiān)控功能,監(jiān)控主庫是否異常,當主庫異常之后會自動將某一個slave變?yōu)橹鲙欤〉袅巳藶榕渲?/p>

      redis哨兵模式原理: 哨兵模式建立在主從復制基礎之上,會在每一個redis節(jié)點上打開一個sentinel監(jiān)控,每個sentinel進程都有自己的端口號和IP,所有sentinel共享集群信息,集群中所有的sentinel都是可以通信的,當主庫宕機后,主庫上的sentinel就會向集群中的其他節(jié)點的sentinel發(fā)送信息說主庫宕機了,需要在從庫上選舉master,這時每個節(jié)點上的sentinel會比較自己redis配置的ID號,比如slave1的ID號大,slave1就會選舉為master作為主庫,當故障的主庫重新加入集群后,主庫上的sentinel會向其他節(jié)點的sentinel詢問誰是主庫,這時slave1上的sentinel就會告訴主庫上的sentinel說slave1是主庫,重新加入集群的主庫就會找slave1同步數(shù)據(jù),如果重新加入的主庫想再次成為主庫,只需要執(zhí)行提權命令就可以重新成為主庫。

      主從復制的時候程序配置redis地址的時候都是寫死主庫的地址,每次主庫宕機都需要手動修改應用

      有了哨兵模式后,在程序代碼中配置不是redis地址,而是配置的所有哨兵的地址,形成一個地址池,即使集群中一個哨兵壞掉了,還有其他兩個哨兵,每次需要找redis寫入數(shù)據(jù)時,程序首先會找哨兵進程,哨兵之間信息共享,會立馬告訴程序誰是主庫,這時程序拿到哨兵告訴它的redis主庫地址,就會去找主庫存數(shù)據(jù),因此即使主庫壞了,也不需要修改程序代碼

      哨兵的配置文件在啟動哨兵服務后,盡量不要去修改,因為哨兵會自動增加配置

      哨兵集群個數(shù)建議是奇數(shù),比如3/5/7

      配置了哨兵后,當主庫掛掉,哨兵選舉了新庫,會自動把配置文件修改為最新主庫的地址

      哨兵的選舉規(guī)則: 首選判斷slave-priority權重優(yōu)先級,誰的高誰當選為master主庫,如果都一致,那么久比較各個節(jié)點的id,誰的大誰當選

      哨兵模式架構和主從復制架構對比

      2.搭建redis哨兵集群

      2.1.環(huán)境準備

      配置哨兵集群步驟:

      1.在所有節(jié)點搭建redis

      2.配置主從復制,一主兩從

      3.在所有節(jié)點配置sentinel,啟動sentinel后,配置文件會自動增加

      2.2.在所有機器上部署redis

      192.168.81.210配置

      1.創(chuàng)建redis部署路徑 [root@redis-1 ~]# mkdir -p /data/redis_cluster/redis_6379/{conf,pid,logs,data} 2.下載redis [root@redis-1 ~]# mkdir /data/soft [root@redis-1 ~]# cd /data/soft [root@redis-1 /data/soft]# wget https://repo.huaweicloud.com/redis/redis-3.2.9.tar.gz 3.便于安裝redis [root@redis-1 /data/soft]# tar xf redis-3.2.9.tar.gz -C /data/redis_cluster/ [root@redis-1 /data/soft]# cd /data/redis_cluster/ [root@redis-1 /data/redis_cluster]# ln -s redis-3.2.9/ redis [root@redis-1 /data/redis_cluster]# cd redis/src [root@redis-1 /data/redis_cluster/redis]# make && make install 4.準備配置文件 [root@redis-1 ~]# vim /data/redis_cluster/redis_6379/conf/redis_6379.conf daemonize yes bind 192.168.81.210 127.0.0.1 port 6379 pidfile /data/redis_cluster/redis_6379/pid/redis_6379.pid logfile /data/redis_cluster/redis_6379/logs/redis_6379.log databases 16 dbfilename redis_6379.rdb dir /data/redis_cluster/redis_6379/data/ save 900 1 save 300 100 save 60 10000 5.啟動redis [root@redis-1 ~]# redis-server /data/redis_cluster/redis_6379/conf/redis_6379.conf

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      25

      26

      27

      Redis哨兵集群工作原理及架構部署(八)

      28

      29

      30

      31

      192.168.81.220配置

      由于redis-1已經部署好了一套redis,我們可以直接復制過來使用

      1.使用rsync將redis-1的redis目錄拷貝過來你 [root@redis-1 ~]# rsync -avz /data root@192.168.81.220:/ 2.查看拷貝過來的目錄文件 [root@redis-2 ~]# ls /data/redis_cluster/ redis redis-3.2.9 redis_6379 [root@redis-2 ~]# ls /data/redis_cluster/redis_6379/ conf data logs pid 3.編譯安裝redis,使系統(tǒng)能使用redis命令 直接執(zhí)行make install即可,因為編譯步驟在redis-1已經做了 [root@redis-2 ~]# cd /data/redis_cluster/redis-3.2.9/ [root@redis-2 /data/redis_cluster/redis-3.2.9]# make install 4.修改redis配置文件 [root@redis-2 ~]# vim /data/redis_cluster/redis_6379/conf/redis_6379.conf bind 192.168.81.220 127.0.0.1 5.啟動redis [root@redis-2 ~]# redis-server /data/redis_cluster/redis_6379/conf/redis_6379.conf

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      192.168.81.230配置

      由于redis-1已經部署好了一套redis,我們可以直接復制過來使用

      1.使用rsync將redis-1的redis目錄拷貝過來你 [root@redis-1 ~]# rsync -avz /data root@192.168.81.230:/ 2.查看拷貝過來的目錄文件 [root@redis-3 ~]# ls /data/redis_cluster/ redis redis-3.2.9 redis_6379 [root@redis-3 ~]# ls /data/redis_cluster/redis_6379/ conf data logs pid 3.編譯安裝redis,使系統(tǒng)能使用redis命令 直接執(zhí)行make install即可,因為編譯步驟在redis-1已經做了 [root@redis-3 ~]# cd /data/redis_cluster/redis-3.2.9/ [root@redis-3 /data/redis_cluster/redis-3.2.9]# make install 4.修改redis配置文件 [root@redis-3 ~]# vim /data/redis_cluster/redis_6379/conf/redis_6379.conf bind 192.168.81.230 127.0.0.1 5.啟動redis [root@redis-3 ~]# redis-server /data/redis_cluster/redis_6379/conf/redis_6379.conf

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      2.3.三臺redis部署完成

      [root@redis-1 ~]# ps aux | grep redis root 21860 0.1 0.5 139020 9740 ? Ssl 09:36 0:16 redis-server 192.168.81.210:6379 root 25296 0.0 0.0 112724 984 pts/0 S+ 13:15 0:00 grep --color=auto redis [root@redis-1 ~]# ssh 192.168.81.220 "ps aux | grep redis" root 47658 0.1 0.5 141068 10780 ? Ssl 1月28 1:24 redis-server 192.168.81.220:6379 root 63254 0.0 0.0 113176 1588 ? Ss 13:15 0:00 bash -c ps aux | grep redis root 63271 0.0 0.0 112724 968 ? S 13:15 0:00 grep redis [root@redis-1 ~]# ssh 192.168.81.230 "ps aux | grep redis" root 56584 0.1 0.7 136972 7548 ? Ssl 13:13 0:00 redis-server 192.168.81.230:6379 root 56644 0.0 0.1 113176 1588 ? Ss 13:15 0:00 bash -c ps aux | grep redis root 56661 0.0 0.0 112724 968 ? S 13:15 0:00 grep redis

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      2.4.配置redis主從

      要在兩臺slave上同步主庫配置

      1.配置主從復制 [root@redis-2 ~]# redis-cli 127.0.0.1:6379> SLAVEOF 192.168.81.210 6379 OK [root@redis-3 ~]# redis-cli 127.0.0.1:6379> SLAVEOF 192.168.81.220 6379 OK 2.主庫新建一個key 127.0.0.1:6379> set name jiangxl OK 3.從庫查看是否復制 [root@redis-2 ~]# redis-cli 127.0.0.1:6379> get name "jiangxl" [root@redis-3 ~]# redis-cli 127.0.0.1:6379> get name "jiangxl"

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      2.5.部署哨兵進程sentinel

      配置文件解釋

      sentinel monitor mymaster 192.168.81.210 6379 2 //設置主節(jié)點信息,mymaster是主節(jié)點別名,就是隨便起一個名字,然后填寫主節(jié)點的ip地址,2表示當主節(jié)點掛掉后,有2個sentinel同意后才會選舉新的master,一組哨兵集群,要把名稱都寫成一樣的 sentinel down-after-milliseconds mymaster 3000 //主庫宕機多少秒,從庫在進行切換,因為有時因為網絡波動,如果只要主庫一宕機就切換主從,那么redis可能一直處于正在切換狀態(tài) sentinel parallel-syncs mymaster 1 //允許幾個節(jié)點同時向主庫同步數(shù)據(jù) sentinel failover-timeout mymaster 18000 //故障轉移超時時間,當從庫同步主庫的rdb文件,多長時間沒有同步完就認為超時

      1

      2

      3

      4

      5

      三臺redis服務器都要按如下配置,已經將配置文件中的bind寫成了系統(tǒng)變量,在配合cat寫入到文件,因此直接執(zhí)行如下命令即可

      1.創(chuàng)建哨兵服務配置路徑 mkdir -p /data/redis_cluster/redis_26379/{conf,data,pid,logs} 2.寫入哨兵配置文件 cat > /data/redis_cluster/redis_26379/conf/redis_26379.conf <

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      配置完記得查看下配置文件bind一列是否是各自主機的ip地址

      2.6.啟動哨兵觀察配置文件的變化

      三臺機器都這么操作啟動哨兵

      redis-sentinel /data/redis_cluster/redis_26379/conf/redis_26379.conf

      1

      觀察哨兵啟動前后配置文件的變化

      啟動前

      啟動后

      每臺哨兵主機都自動增加了一個myid的配置,這個就是當主庫掛掉后,哨兵選舉的依據(jù),判斷誰的myid大誰就當選為主庫

      每臺哨兵主機還自動增加了sentinel known-sentinel這個配置,這個配置每個哨兵會記錄集群中其他節(jié)點的id號,這樣就能夠實現(xiàn)信息共享,即使應用在詢問哨兵進程誰是主庫,這時由于每個哨兵進程都有其他節(jié)點的信息,因此就能里面告訴應用誰是主庫

      2.7.模擬主庫故障驗證應用是否可用

      配置完哨兵后,每個節(jié)點上都有集群的信息共享,當主庫掛掉后,哨兵進程確認主庫下線了,哨兵根據(jù)各自的id大小選舉新的主庫,接替主庫的工作,保證應用程序不受影響,當主庫修復好后,在通過提權的方式先同步目前主庫的數(shù)據(jù),在讓自身成為主庫

      1.關閉主庫的redis服務,reids正常關閉,sentinel直接kill [root@redis-1 ~]# redis-cli shutdown [root@redis-1 ~]# pkill redis 4.查看配置文件看看誰的myid大 redis-2的myid比較大 [root@redis-1 ~]# grep 'known-sentinel' /data/redis_cluster/redis_26379/conf/redis_26379.conf sentinel known-sentinel mymaster 192.168.81.220 26379 df44bb3e9fdf8c635628b1ae724b2db7d3ef144c sentinel known-sentinel mymaster 192.168.81.230 26379 de282d14bb0a79df90603eb92243cd1f362dd46d 2.測試redis-2是否可用寫入數(shù)據(jù) 可以寫入數(shù)據(jù),redis-2被選為主庫 [root@redis-1 ~]# redis-cli -h 192.168.81.220 set gzzy_test guzhangzhuanyi OK [root@redis-1 ~]# redis-cli -h 192.168.81.220 config get slaveof 1) "slaveof" 2) "" 4.測試redis-3是否可用寫入數(shù)據(jù) 寫入數(shù)據(jù)失敗,并且同步的是redis-2的數(shù)據(jù),因此redis-2為主庫 [root@redis-1 ~]# redis-cli -h 192.168.81.230 set kkkk111 vvv (error) READONLY You can't write against a read only slave. [root@redis-1 ~]# redis-cli -h 192.168.81.230 config get slaveof 1) "slaveof" 2) "192.168.81.220 6379"

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      25

      26

      2.8.主庫掛掉其他節(jié)點配置文件的變化

      主庫掛掉后,其他兩個節(jié)點選舉出master后,配置文件也會填寫為新master的地址

      Redis 任務調度

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:iptables企業(yè)面試題集錦
      下一篇:《企業(yè)級大數(shù)據(jù)平臺構建:架構與實現(xiàn)》——2.5.6 集群模式
      相關文章
      亚洲图片一区二区| 亚洲日本一区二区三区| 亚洲乱码一二三四区国产| 亚洲日本一区二区三区| 久久国产亚洲电影天堂| 国产亚洲A∨片在线观看| 亚洲日韩乱码中文无码蜜桃臀网站| 亚洲美女高清一区二区三区| 亚洲av无码成人精品区在线播放| 亚洲AV成人无码网天堂| 亚洲高清一区二区三区电影| 亚洲国产精品18久久久久久| 亚洲精品无码久久久久A片苍井空 亚洲精品无码久久久久YW | 亚洲国产精华液2020| 亚洲色大网站WWW永久网站| 亚洲午夜一区二区三区| 国产亚洲精aa在线看| 亚洲日韩看片无码电影| 亚洲成a∨人片在无码2023| 亚洲国产精品自在自线观看| 朝桐光亚洲专区在线中文字幕| 国产亚洲精品欧洲在线观看| 亚洲国产精品狼友中文久久久| 国产偷国产偷亚洲高清日韩| 在线观看亚洲av每日更新| 久久精品国产精品亚洲色婷婷| 91久久亚洲国产成人精品性色| 亚洲成aⅴ人片在线观| 久久精品国产亚洲αv忘忧草| 亚洲熟女综合一区二区三区| 久久精品国产亚洲av天美18| 亚洲人成色77777在线观看大| 亚洲中文字幕无码不卡电影| 亚洲AV无码一区二区乱子伦| 噜噜噜亚洲色成人网站∨| 色偷偷女男人的天堂亚洲网| 蜜芽亚洲av无码一区二区三区| 亚洲国产精品无码久久青草| 国产亚洲综合成人91精品| 亚洲欧洲日本精品| 亚洲国产精品无码久久|