環(huán)境介紹: 實(shí)現(xiàn)的原理 在master和backup服務(wù)器分別安裝哨兵和keepalived,master的優(yōu)先級(jí)為100,backup的優(yōu)先級(jí)為99,在salve服務(wù)器上配置vrrp_script檢查腳本規(guī)則,檢查slave當(dāng)前的角色狀態(tài),一旦slave的redis角色狀態(tài)為master,就把slave的優(yōu)先級(jí)加2變?yōu)?01,使其獲得vip的權(quán)限; 當(dāng)master的redis服務(wù)掛掉后,哨兵會(huì)將slave提升為新的master,slave檢查角色狀態(tài)為master時(shí)將優(yōu)先級(jí)加2獲得vip,當(dāng)原來master的redis服務(wù)起來后哨兵將其作為slave加入到主從復(fù)制 當(dāng)變?yōu)閙aster的slave節(jié)點(diǎn)上redis服務(wù)掛掉后,哨兵會(huì)將redis的master設(shè)置為原來的master節(jié)點(diǎn),vrrp_script檢查自己的redis不是master時(shí),將優(yōu)先級(jí)減2變?yōu)?9,原來的master優(yōu)先級(jí)比slave優(yōu)先級(jí)高,原來的master獲得vip權(quán)限 ? 以下操作主從服務(wù)器步驟一樣,這里只安裝一次 一、安裝redis和哨兵服務(wù) 1、下載redis服務(wù)軟件包到服務(wù)器,解壓后并編譯安裝(主從步驟一樣,這里只安裝一次) [root@centos01?/]#?tar?xzvf?redis-3.2.9.tar.gz [root@centos01?/]#?cd?redis-3.2.9/ [root@centos01?redis-3.2.9]#?make?&&?make?install [root@centos01?redis-3.2.9]#?./utils/install_server.sh Welcome?to?the?redis?service?installer???##一路回車 Installation?successful! 2、修改redis配置文件,修改為后臺(tái)運(yùn)行、監(jiān)聽所有地址(其他參數(shù)按需修改),重啟redis服務(wù) [root@centos01?redis-3.2.9]#?vim?/etc/redis/6379.conf bind?0.0.0.0 daemonize?yes [root@centos01?redis-3.2.9]#?/etc/init.d/redis_6379?restart 3、復(fù)制哨兵的配置文件和啟動(dòng)文件到redis安裝目錄 [root@centos01?redis-3.2.9]#?cp?sentinel.conf?/etc/redis/ [root@centos01?redis-3.2.9]#?cp?src/redis-sentinel?/etc/redis/ 二、設(shè)置redis主從復(fù)制,并配置哨兵監(jiān)控 1、登錄slave-redis服務(wù)器,將master設(shè)置為192.168.2.225 [root@slave?/]#?redis-cli 127.0.0.1:6379>?SLAVEOF?192.168.2.225?6379??##設(shè)置master為2.225 127.0.0.1:6379>?INFO?Replication 3、修改master和slave服務(wù)器的sentinel.conf配置文件(master和slave配置一致) ##修改master的哨兵文件 [root@master?/]#?cd?/etc/redis/ [root@master?/]#?vim?/etc/redis/sentinel.conf port?26379 dir?"/tmp" sentinel?monitor?mymaster?192.168.2.225?6379?1?#(指定監(jiān)控的master地址和端口號(hào),1表示多個(gè)sentinel同意才進(jìn)行主從切換) sentinel?down-after-milliseconds?mymaster?4000?#(超過多少毫秒連接不到master認(rèn)定為master死掉) sentinel?failover-timeout?mymaster?18000?#(當(dāng)主從切換多久后認(rèn)為主從切換失?。?daemonize?yes????#(后臺(tái)運(yùn)行) logfile?"/var/log/redis_sentinel.log"??#(日志文件保存路徑) [root@master?redis]#?./redis-sentinel?sentinel.conf?#啟動(dòng)哨兵服務(wù) 三、配置keepalived實(shí)現(xiàn)高可用 1、使用yum方式安裝keepalived軟件包(master和slave都安裝) [root@master?redis]#?yum?install?-y?keepalived [root@master?redis]#?./redis-sentinel?sentinel.conf?#啟動(dòng)哨兵服務(wù) 2、修改keepalived配置文件 Master配置文件內(nèi)容 !?Configuration?File?for?keepalived global_defs?{ ???router_id?redis-225?##設(shè)備名稱 } vrrp_instance?VI_redis?{ ????state?MASTER?##當(dāng)前設(shè)備為master ????interface?eth0?##vip綁定的網(wǎng)卡 ????virtual_router_id?79?##備份組id,同一備份組要一致 ????priority?100?##優(yōu)先級(jí),優(yōu)先級(jí)高的成為master ????advert_int?3?##每多少秒進(jìn)行一次健康檢查 ????authentication?{ ????????auth_type?PASS ????????auth_pass?redis ????} ????virtual_ipaddress?{ ????????192.168.2.253?dev?eth0?label?eth0:1?##vip地址并設(shè)置一個(gè)網(wǎng)卡別名 ????} } BACKUP配置文件內(nèi)容 !?Configuration?File?for?keepalived global_defs?{ ???router_id?redis-224 } vrrp_script?chkmaster?{ ????????script?"/etc/keepalived/scripts/chkmaster.sh"?#檢查當(dāng)前redis是否為master ????????interval?3?#每3秒檢查一次 ????????weight?2?#當(dāng)本機(jī)為master檢測(cè)結(jié)果返回1,將優(yōu)先級(jí)加2 ????} vrrp_instance?VI_redis?{ ????state?BACKUP?#本機(jī)的狀態(tài)信息 ????interface?eth0?#vip綁定的網(wǎng)卡 ????virtual_router_id?79?##備份組id,同一備份組要一致 ????priority?99?##優(yōu)先級(jí),優(yōu)先級(jí)高的成為master ????advert_int?3?##每多少秒進(jìn)行一次健康檢查 ????authentication?{ ????????auth_type?PASS ????????auth_pass?redis ????} ????virtual_ipaddress?{ ????????192.168.2.253?dev?eth0?label?eth0:1 ????} ????track_script?{?##調(diào)用狀態(tài)檢查 ????????chkmaster ????} } 狀態(tài)檢查腳本內(nèi)容: #!/bin/bash STATUS=`/usr/local/bin/redis-cli?info?|?grep?role:master?|?wc?-l` echo?$STATUS if?[?"$STATUS"?-eq?0?];then ????exit?1 else ????exit?0 fi 驗(yàn)證結(jié)果: 1.?關(guān)閉master的redis服務(wù)程序,查看vip和redis主服務(wù)器切換到slave 2.?開啟master的redis服務(wù)程序,redis服務(wù)以slave身份加入到slave服務(wù)器中 3.?關(guān)閉slave服務(wù)器的redis服務(wù),查看vip和redis主服務(wù)器切換到master 4.?開啟slave的redis服務(wù)程序,redis服務(wù)以slave身份加入到master服務(wù)器中 遇到的一個(gè)主從不切換的坑 停掉master主從切換日志提示此錯(cuò)誤 解決辦法: 1)如果redis實(shí)例沒有配置 protected-mode yes bind 192.168.98.136 則在sentinel 配置文件加上 protected-mode no 即可 2)如果redis實(shí)例有配置 protected-mode yes bind 192.168.98.136 則在sentinel 配置文件加上 protected-mode yes bind 192.168.98.136 |
|