欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

Linux運維-搭建高可用Redis緩存-創(chuàng)新互聯(lián)

前言

Redis是一個高性能的key-value數(shù)據(jù)庫,現(xiàn)時越來越多企業(yè)與應(yīng)用使用Redis作為緩存服務(wù)器。樓主是一枚JAVA后端程序員,也算是半個運維工程師了。在Linux服務(wù)器上搭建Redis,怎么可以不會呢?下面樓主就帶著大家從0開始,依次搭建:Redis單機服務(wù)器 -> Redis主從復(fù)制 -> Redis-Sentinel高可用。逐步搭建出高可用的Redis緩存服務(wù)器。

創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比平魯網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式平魯網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋平魯?shù)貐^(qū)。費用合理售后完善,十年實體公司更值得信賴。

搭建Redis

1. 下載并解壓
首先從Redis官網(wǎng)下載Redis并解壓,樓主使用的版本是4.0.2。依次執(zhí)行如下命令:

cd /usr/local/
wget http://download.redis.io/releases/redis-4.0.2.tar.gz
tar -zxvf redis-4.0.2.tar.gz

如果沒有安裝gcc依賴包,則安裝對應(yīng)依賴包

yum install -y gcc-c++ tcl

2. 編譯并安裝
下載并解壓完畢后,則對源碼包進行編譯安裝,樓主的Redis安裝路徑為/usr/local/redis,同學(xué)們可以自行修改語句:make install PREFIX=你想要安裝的路徑

cd /usr/local/redis-4.0.2/
make install PREFIX=/usr/local/redis

復(fù)制Redis相關(guān)命令到/usr/sbin目錄下,這樣就可以直接執(zhí)行這些命令,不用寫全路徑

cd /usr/local/redis/bin/
sudo cp redis-cli  redis-server  redis-sentinel   /usr/sbin/

3. 建立Redis配置文件

安裝完成之后將 Redis 配置文件拷貝到系統(tǒng)配置目錄/etc/下,redis.conf 是 Redis 的配置文件,redis.conf 在 Redis 源碼目錄,port默認 6379。

cp /usr/local/redis-4.0.2/redis.conf  /etc/

Redis配置文件主要參數(shù)解析參考

daemonize  no               #redis進程是否以守護進程的方式運行,yes為是,no為否(不以守護進程的方式運行會占用一個終端)
pidfile /var/run/redis.pid  #指定redis進程的PID文件存放位置
port 6379                   #redis進程的端口號
bind 127.0.0.1              #綁定的主機地址
timeout  300                #客戶端閑置多長時間后關(guān)閉連接,默認此參數(shù)為0即關(guān)閉此功能
loglevel verbose            #redis日志級別,可用的級別有debug.verbose.notice.warning
logfile stdout              #log文件輸出位置,如果進程以守護進程的方式運行,此處又將輸出文件設(shè)置為stdout的話,就會將日志信息輸出到/dev/null里面去了
databases 16                #設(shè)置數(shù)據(jù)庫的數(shù)量,默認為0可以使用select <dbid>命令在連接上指定數(shù)據(jù)庫id
save <seconds> <changes>    #指定在多少時間內(nèi)刷新次數(shù)達到多少的時候會將數(shù)據(jù)同步到數(shù)據(jù)文件;
rdbcompression yes          #指定存儲至本地數(shù)據(jù)庫時是否壓縮文件,默認為yes即啟用存儲;
dbfilename dump.db          #指定本地數(shù)據(jù)庫文件名
dir ./                      #指定本地數(shù)據(jù)問就按存放位置;
slaveof <masterip> <masterport>     #指定當(dāng)本機為slave服務(wù)時,設(shè)置master服務(wù)的IP地址及端口,在redis啟動的時候他會自動跟master進行數(shù)據(jù)同步
masterauth <master-password>        #當(dāng)master設(shè)置了密碼保護時,slave服務(wù)連接master的密碼;
requirepass footbared       #設(shè)置redis連接密碼,如果配置了連接密碼,客戶端在連接redis是需要通過AUTH<password>命令提供密碼,默認關(guān)閉
maxclients 128              #設(shè)置同一時間大客戶連接數(shù),默認無限制;redis可以同時連接的客戶端數(shù)為redis程序可以打開的大文件描述符,如果設(shè)置 maxclients 0,表示不作限制。當(dāng)客戶端連接數(shù)到達限制時,Redis會關(guān)閉新的連接并向客戶端返回max number of clients reached錯誤信息
maxmemory<bytes>            #指定Redis大內(nèi)存限制,Redis在啟動時會把數(shù)據(jù)加載到內(nèi)存中,達到大內(nèi)存后,Redis會先嘗試清除已到期或即將到期的Key,當(dāng)此方法處理 后,仍然到達大內(nèi)存設(shè)置,將無法再進行寫入操作,但仍然可以進行讀取操作。Redis新的vm機制,會把Key存放內(nèi)存,Value會存放在swap區(qū)
appendonly no               #指定是否在每次更新操作后進行日志記錄,Redis在默認情況下是異步的把數(shù)據(jù)寫入磁盤,如果不開啟,可能會在斷電時導(dǎo)致一段時間內(nèi)的數(shù)據(jù)丟失。因為 redis本身同步數(shù)據(jù)文件是按上面save條件來同步的,所以有的數(shù)據(jù)會在一段時間內(nèi)只存在于內(nèi)存中。默認為no
appendfilename appendonly.aof       #指定跟新日志文件名默認為appendonly.aof
appendfsync everysec         #指定更新日志的條件,有三個可選參數(shù)no:表示等操作系統(tǒng)進行數(shù)據(jù)緩存同步到磁盤(快),always:表示每次更新操作后手動調(diào)用fsync()將數(shù)據(jù)寫到磁盤(慢,安全), everysec:表示每秒同步一次(折衷,默認值);

3.1 設(shè)置后端啟動:
由于Redis默認是前端啟動,必須保持在當(dāng)前的窗口中,如果使用ctrl + c退出,那么Redis也就退出,不建議使用。

vi /etc/redis.conf
修改Redis配置文件把舊值daemonize no 改為 新值daemonize yes

3.2 設(shè)置訪問:
Redis默認只允許本機訪問,可是有時候我們也需要 Redis 被遠程訪問。

vi /etc/redis.conf

找到 bind 那行配置,默認是: # bind 127.0.0.1

去掉#注釋并改為: bind 0.0.0.0 此設(shè)置會變成允許所有遠程訪問。如果想指定限制訪問,可設(shè)置對應(yīng)的IP。

3.3 配置Redis日志記錄:
找到logfile那行配置,默認是:logfile "",改為logfile /var/log/redis_6379.log

3.4 設(shè)置 Redis 請求密碼:
vi /etc/redis.conf

找到默認是被注釋的這一行:# requirepass foobared

去掉注釋,把 foobared 改為你想要設(shè)置的密碼,比如我打算設(shè)置為:123456,所以我改為:requirepass "123456"

修改之后重啟下服務(wù)

有了密碼之后,進入客戶端,就得這樣訪問:redis-cli -h 127.0.0.1 -p 6379 -a 123456

4. Redis常用操作

4.1 啟動

/usr/local/redis/bin/redis-server /etc/redis.conf

4.2 關(guān)閉

/usr/local/redis/bin/redis-cli -h 127.0.0.1 -p 6379 shutdown

4.3 查看是否啟動

ps -ef | grep redis

4.4 進入客戶端

redis-cli

4.5 關(guān)閉客戶端

redis-cli shutdown

4.6 設(shè)置開機自動啟動配置

echo "/usr/local/redis/bin/redis-server /etc/redis.conf" >> /etc/rc.local

4.7 開放防火墻端口
添加規(guī)則:iptables -I INPUT -p tcp -m tcp --dport 6379 -j ACCEPT
保存規(guī)則:service iptables save
重啟 iptables:service iptables restart

5. 將Redis注冊為系統(tǒng)服務(wù)

在/etc/init.d目錄下添加Redis服務(wù)的啟動,暫停和重啟腳本:

vi /etc/init.d/redis

腳本內(nèi)容如下:

#!/bin/sh  
#  
# redis - this script starts and stops the redis-server daemon  
#  
# chkconfig:   - 85 15  
# description:  Redis is a persistent key-value database  
# processname: redis-server  
# config:      /usr/local/redis/bin/redis-server
# config:      /etc/redis.conf  
# Source function library.  
. /etc/rc.d/init.d/functions  
# Source networking configuration.  
. /etc/sysconfig/network  
# Check that networking is up.  
[ "$NETWORKING" = "no" ] && exit 0  
redis="/usr/local/redis/bin/redis-server" 
prog=$(basename $redis)  
REDIS_CONF_FILE="/etc/redis.conf" 
[ -f /etc/sysconfig/redis ] && . /etc/sysconfig/redis  
lockfile=/var/lock/subsys/redis  
start() {  
    [ -x $redis ] || exit 5  
    [ -f $REDIS_CONF_FILE ] || exit 6  
    echo -n $"Starting $prog: "  
    daemon $redis $REDIS_CONF_FILE  
    retval=$?  
    echo  
    [ $retval -eq 0 ] && touch $lockfile  
    return $retval  
}  
stop() {  
    echo -n $"Stopping $prog: "  
    killproc $prog -QUIT  
    retval=$?  
    echo  
    [ $retval -eq 0 ] && rm -f $lockfile  
    return $retval  
}  
restart() {  
    stop  
    start  
}  
reload() {  
    echo -n $"Reloading $prog: "  
    killproc $redis -HUP  
    RETVAL=$?  
    echo  
}  
force_reload() {  
    restart  
}  
rh_status() {  
    status $prog  
}  
rh_status_q() {  
    rh_status >/dev/null 2>&1  
}  
case "$1" in  
    start)  
        rh_status_q && exit 0  
        $1  
        ;;  
    stop)  
        rh_status_q || exit 0  
        $1  
        ;;  
    restart|configtest)  
        $1  
        ;;  
    reload)  
        rh_status_q || exit 7  
        $1  
        ;;  
    force-reload)  
        force_reload  
        ;;  
    status)  
        rh_status  
        ;;  
    condrestart|try-restart)  
        rh_status_q || exit 0  
    ;;  
    *)  
        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart| reload|orce-reload}"  
        exit 2  
esac

賦予腳本權(quán)限

chmod 755 /etc/init.d/redis

啟動、停止和重啟:

service redis start
service redis stop
service redis restart

至此,Redis單機服務(wù)器已搭建完畢,下面我們看看主從架構(gòu)如何搭建。

搭建Redis主從架構(gòu)

1. redis-server說明

172.16.2.185:6379 主

172.16.2.181:6379 從

2 . Redis主從架構(gòu)配置

  • 編輯從機的 Redis 配置文件,找到 210 行(大概),默認這一行應(yīng)該是注釋的: # slaveof <masterip> <masterport>
  • 我們需要去掉該注釋,并且填寫我們自己的主機的 IP 和 端口,比如:slaveof 172.16.2.185 6379,如果主機設(shè)置了密碼,還需要找到masterauth <master-password>這一行,去掉注釋,改為masterauth 主機密碼。
  • 配置完成后重啟從機Redis 服務(wù)
  • 重啟完之后,進入主機的 redis-cli 狀態(tài)下redis-cli -h 127.0.0.1 -p 6379 -a 123456,輸入:INFO replication 可以查詢到當(dāng)前主機的 Redis處于什么角色,有哪些從機已經(jīng)連上主機。

主機信息172.16.2.185

# Replication
role:master
connected_slaves:1
slave0:ip=172.16.2.181,port=6379,state=online,offset=28,lag=1
master_replid:625ae9f362643da5337835beaeabfdca426198c7
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:28
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:28

從機信息172.16.2.181

# Replication
role:slave
master_host:172.16.2.185
master_port:6379
master_link_status:up
master_last_io_seconds_ago:3
master_sync_in_progress:0
slave_repl_offset:210
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:625ae9f362643da5337835beaeabfdca426198c7
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:210
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:210
  • 此時已經(jīng)完成了主從配置,我們可以測試下: 我們進入主機的 redis-cli 狀態(tài),然后 set 某個值,比如:set myblog YouMeek.com
  • 我們切換進入從機的 redis-cli 的狀態(tài)下,獲取剛剛設(shè)置的值看是否存在:get myblog,此時,我們可以發(fā)現(xiàn)是可以獲取到值的。

3. Redis主從架構(gòu)總結(jié)

  • 需要注意的是:從庫不具備寫入數(shù)據(jù)能力,不然會報錯。 從庫只有只讀能力。
  • 主從架構(gòu)的優(yōu)點:除了減少主庫連接的壓力,還有可以關(guān)掉主庫的持久化功能,把持久化的功能交給從庫進行處理。
  • 第一個從庫配置的信息是連上主庫,后面的第二個從庫配置的連接信息是連上第一個從庫, 假如還有第三個從庫的話,我們可以把第三個從庫的配置信息連上第二個從庫上,以此類推。

Redis Sentinel高可用架構(gòu)搭建

1. 自動故障轉(zhuǎn)移

  • 雖然使用主從架構(gòu)配置Redis做了備份,看上去很完美。但由于Redis目前只支持主從復(fù)制備份(不支持主主復(fù)制),當(dāng)主Redis掛了,從Redis只能提供讀服務(wù),無法提供寫服務(wù)。所以,還得想辦法,當(dāng)主Redis掛了,讓從Redis升級成為主Redis。

  • 這就需要自動故障轉(zhuǎn)移,Redis Sentinel帶有這個功能,當(dāng)一個主Redis不能提供服務(wù)時,Redis Sentinel可以將一個從Redis升級為主Redis,并對其他從Redis進行配置,讓它們使用新的主Redis進行復(fù)制備份。

注意:搭建Redis Sentinel推薦至少3臺服務(wù)器,但由于樓主偷懶,下面用例只用了2臺服務(wù)器。

Redis Sentinel的主要功能如下:

  1. 監(jiān)控:哨兵不斷的檢查master和slave是否正常的運行。
  2. 通知:當(dāng)監(jiān)控的某臺Redis實例發(fā)生問題時,可以通過API通知系統(tǒng)管理員和其他的應(yīng)用程序。
  3. 自動故障轉(zhuǎn)移:如果一個master不正常運行了,哨兵可以啟動一個故障轉(zhuǎn)移進程,將一個slave升級成為master,其他的slave被重新配置使用新的master,并且應(yīng)用程序使用Redis服務(wù)端通知的新地址。
  4. 配置提供者:哨兵作為Redis客戶端發(fā)現(xiàn)的權(quán)威來源:客戶端連接到哨兵請求當(dāng)前可靠的master的地址。如果發(fā)生故障,哨兵將報告新地址。

默認情況下,每個Sentinel節(jié)點會以每秒一次的頻率對Redis節(jié)點和其它的Sentinel節(jié)點發(fā)送PING命令,并通過節(jié)點的回復(fù)來判斷節(jié)點是否在線。
如果在down-after-millisecondes毫秒內(nèi),沒有收到有效的回復(fù),則會判定該節(jié)點為主觀下線。

如果該節(jié)點為master,則該Sentinel節(jié)點會通過sentinel is-master-down-by-addr命令向其它sentinel節(jié)點詢問對該節(jié)點的判斷,如果超過<quorum>個數(shù)的節(jié)點判定master不可達,則該sentinel節(jié)點會將master判斷為客觀下線。

這個時候,各個Sentinel會進行協(xié)商,選舉出一個領(lǐng)頭Sentinel,由該領(lǐng)頭Sentinel對master節(jié)點進行故障轉(zhuǎn)移操作。

故障轉(zhuǎn)移包含如下三個操作:

  1. 在所有的slave服務(wù)器中,挑選出一個slave,并將其轉(zhuǎn)換為master。
  2. 讓其它slave服務(wù)器,改為復(fù)制新的master。
  3. 將舊master設(shè)置為新master的slave,這樣,當(dāng)舊的master重新上線時,它會成為新master的slave。

2.搭建Redis Sentinel高可用架構(gòu)

這里使用兩臺服務(wù)器,每臺服務(wù)器上開啟一個redis-server和redis-sentinel服務(wù)。

redis-server說明

172.16.2.185:6379 主

172.16.2.181:6379 從

redis-sentinel說明

172.16.2.185:26379

172.16.2.181:26379

2.1 建立Redis配置文件

如果要做自動故障轉(zhuǎn)移,則建議所有的redis.conf都設(shè)置masterauth,因為自動故障只會重寫主從關(guān)系,即slaveof,不會自動寫入masterauth。如果Redis原本沒有設(shè)置密碼,則可以忽略。

Redis程序上面已經(jīng)安裝過了,我們只需增加redis-sentinel的相關(guān)配置即可,將 redis-sentinel的配置文件拷貝到系統(tǒng)配置目錄/etc/下,sentinel.conf 是 redis-sentinel的配置文件,sentinel.conf 在 Redis 源碼目錄。

cp /usr/local/redis-4.0.2/sentinel.conf  /etc/

修改sentinel.conf配置文件內(nèi)容如下:

vi /etc/sentinel.conf
protected-mode no
sentinel monitor mymaster 172.16.2.185 6379 2
# redis在搭建時設(shè)置了密碼,所以要進行密碼配置
sentinel auth-pass mymaster “123456“
#5秒內(nèi)mymaster沒有響應(yīng),就認為SDOWN
sentinel down-after-milliseconds mymaster 5000  
sentinel failover-timeout  mymaster 15000

在配置最后加上

logfile /var/log/sentinel.log
pidfile  /var/run/sentinel.pid
daemonize yes

配置文件說明:

1.port :當(dāng)前Sentinel服務(wù)運行的端口

2.dir : Sentinel服務(wù)運行時使用的臨時文件夾

3.sentinel monitor master001 192.168.110.10163792:Sentinel去監(jiān)視一個名為master001的主redis實例,這個主實例的IP地址為本機地址192.168.110.101,端口號為6379,而將這個主實例判斷為失效至少需要2個 Sentinel進程的同意,只要同意Sentinel的數(shù)量不達標,自動failover就不會執(zhí)行

4.sentinel down-after-milliseconds master001 30000:指定了Sentinel認為Redis實例已經(jīng)失效所需的毫秒數(shù)。當(dāng)實例超過該時間沒有返回PING,或者直接返回錯誤,那么Sentinel將這個實例標記為主觀下線。只有一個 Sentinel進程將實例標記為主觀下線并不一定會引起實例的自動故障遷移:只有在足夠數(shù)量的Sentinel都將一個實例標記為主觀下線之后,實例才會被標記為客觀下線,這時自動故障遷移才會執(zhí)行

5.sentinel parallel-syncs master001 1:指定了在執(zhí)行故障轉(zhuǎn)移時,最多可以有多少個從Redis實例在同步新的主實例,在從Redis實例較多的情況下這個數(shù)字越小,同步的時間越長,完成故障轉(zhuǎn)移所需的時間就越長

6.sentinel failover-timeout master001 180000:如果在該時間(ms)內(nèi)未能完成failover操作,則認為該failover失敗

7.sentinel notification-script :指定sentinel檢測到該監(jiān)控的redis實例指向的實例異常時,調(diào)用的報警腳本。該配置項可選,但是很常用

2.2 開放防火墻端口

添加規(guī)則:iptables -I INPUT -p tcp -m tcp --dport 26379 -j ACCEPT
保存規(guī)則:service iptables save
重啟 iptables:service iptables restart

2.3 啟動redis-sentinel

redis-sentinel  /etc/sentinel.conf

在任意一臺機子均可查看到相關(guān)服務(wù)信息

redis-cli -h 127.0.0.1 -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=172.16.2.185:6379,slaves=1,sentinels=2

3. 自動故障轉(zhuǎn)移測試

3.1 停止主Redis

redis-cli -h 172.16.2.185 -p 6379 -a 123456 shutdown

3.2 查看redis-sentinel的監(jiān)控狀態(tài)

# 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=172.16.2.181:6379,slaves=1,sentinels=2

發(fā)現(xiàn)從庫提升為主庫。

3.3 注意事項

  • 如果停掉master后,Sentinel顯示足夠數(shù)量的sdown后,沒有出現(xiàn)odown或try-failover,則檢查密碼等配置是否正確
  • 如果停掉master后,試圖切換的時候,發(fā)現(xiàn)日志出現(xiàn) failover-abort-not-elected,則分2種情況分別解決:

如果Redis實例沒有配置

protected-mode yes
bind 172.16.2.185

則在Sentinel 配置文件加上protected-mode no即可

如果Redis實例有配置

protected-mode yes
bind 172.16.2.185

則在Sentinel配置文件加上

protected-mode yes
bind 172.16.2.185

至此,redis的高可用方案已經(jīng)搭建完成。

VIP對外提供虛擬IP實現(xiàn)高可用

1.現(xiàn)有情況概述
客戶端程序(如JAVA程序)連接Redis時需要ip和port,但redis-server進行故障轉(zhuǎn)移時,主Redis是變化的,所以ip地址也是變化的??蛻舳顺绦蛉绾胃兄?dāng)前主Redis的ip地址和端口呢?redis-sentinel提供了接口,請求任何一個Sentinel,發(fā)送SENTINEL get-master-addr-by-name <master name>就能得到當(dāng)前主Redis的ip和port。

客戶端每次連接Redis前,先向sentinel發(fā)送請求,獲得主Redis的ip和port,然后用返回的ip和port連接Redis。

這種方法的缺點是顯而易見的,每次操作Redis至少需要發(fā)送兩次連接請求,第一次請求Sentinel,第二次請求Redis。

更好的辦法是使用VIP,當(dāng)然這對配置的環(huán)境有一定的要求,比如Redis搭建在阿里云服務(wù)器上,可能不支持VIP。

VIP方案是,Redis系統(tǒng)對外始終是同一ip地址,當(dāng)Redis進行故障轉(zhuǎn)移時,需要做的是將VIP從之前的Redis服務(wù)器漂移到現(xiàn)在新的主Redis服務(wù)器上。

比如:當(dāng)前Redis系統(tǒng)中主Redis的ip地址是172.16.2.185,那么VIP(172.16.2.250)指向172.16.2.185,客戶端程序用VIP(172.16.2.250)地址連接Redis,實際上連接的就是當(dāng)前主Redis,這樣就避免了向Sentinel發(fā)送請求。

當(dāng)主Redis宕機,進行故障轉(zhuǎn)移時,172.16.2.181這臺服務(wù)器上的Redis提升為主,這時VIP(172.16.2.250)指向172.16.2.181,這樣客戶端程序不需要修改任何代碼,連接的是172.16.2.181這臺主Redis。

2.漂移VIP實現(xiàn)Redis故障轉(zhuǎn)移

那么現(xiàn)在的問題是,如何在進行Redis故障轉(zhuǎn)移時,將VIP漂移到新的主Redis服務(wù)器上。

這里可以使用Redis Sentinel的一個參數(shù)client-reconfig-script,這個參數(shù)配置執(zhí)行腳本,Sentinel在做failover的時候會執(zhí)行這個腳本,并且傳遞6個參數(shù)<master-name>、 <role>、 <state>、 <from-ip>、 <from-port>、 <to-ip> 、<to-port>,其中<to-ip>是新主Redis的IP地址,可以在這個腳本里做VIP漂移操作。

sentinel client-reconfig-script mymaster /opt/notify_mymaster.sh

修改兩個服務(wù)器的redis-sentinel配置文件/etc/sentinel.conf,增加上面一行。然后在/opt/目錄下創(chuàng)建notify_mymaster.sh腳本文件,這個腳本做VIP漂移操作,內(nèi)容如下:

vi /opt/notify_mymaster.sh
#!/bin/bash
echo "File Name: $0"
echo "Quoted Values: $@"
echo "Quoted Values: $*"
echo "Total Number of Parameters : $#"

MASTER_IP=${6}  #第六個參數(shù)是新主redis的ip地址
LOCAL_IP='172.16.2.185'  #當(dāng)前服務(wù)器IP,主機172.16.2.185,從機172.16.2.181
VIP='172.16.2.250'
NETMASK='24'
INTERFACE='eth2'
if [ ${MASTER_IP} = ${LOCAL_IP} ]; then
     sudo /sbin/ip addr add ${VIP}/${NETMASK} dev ${INTERFACE}  #將VIP綁定到該服務(wù)器上
     sudo /sbin/arping -q -c 3 -A ${VIP} -I ${INTERFACE}
    exit 0
else
     sudo /sbin/ip addr del ${VIP}/${NETMASK} dev ${INTERFACE}   #將VIP從該服務(wù)器上刪除
   exit 0
fi
exit 1  #如果返回1,sentinel會一直執(zhí)行這個腳本

賦予腳本權(quán)限

chmod 755 /opt/notify_mymaster.sh

現(xiàn)在當(dāng)前主Redis是172.16.2.185,需要手動綁定VIP到該服務(wù)器上。

/sbin/ip  addr add 172.16.2.250/24 dev eth2
/sbin/arping -q   -c 3 -A 172.16.2.250 -I eth2

由于VIP只能綁定只有一臺機子,所以建議將改為bind 0.0.0.0添加至redis.conf 中

vi /etc/redis.conf

設(shè)置bind 0.0.0.0

由于VIP只能綁定只有一臺機子,所以建議將改為bind 0.0.0.0添加至sentinel.conf中

vi /etc/sentinel.conf

設(shè)置bind 0.0.0.0

重啟Redis

service redis restart`

重啟Sentinel

redis-sentinel /etc/sentinel.conf

隨后我們在另一臺機器172.16.2.181上,通過VIP訪問主機

redis-cli -h 172.16.2.250 -p 6379 -a 123456 INFO replication

可正常通訊,信息如下:

# Replication
role:master
connected_slaves:1
slave0:ip=172.16.2.181,port=6379,state=online,offset=0,lag=0
master_replid:325b0bccab611d329d9c2cd2c35a1fe3c01ae196
master_replid2:c1f7a7d17d2c35575a34b00eb10c8abf32df2243
master_repl_offset:22246293
second_repl_offset:22241024
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:22237293
repl_backlog_histlen:9001

訪問主機的Sentinel

redis-cli -h 172.16.2.250 -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=172.16.2.185:6379,slaves=1,sentinels=3

下面關(guān)閉主機的Redis服務(wù),看看VIP是否漂移到另一臺服務(wù)器上。

redis-cli -h 172.16.2.185 -p 6379 -a 123456 shutdown

查看是否已進行切換

redis-cli -h 172.16.2.250 -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=172.16.2.181:6379,slaves=1,sentinels=3

通過查詢Sentinel發(fā)現(xiàn)從機172.16.2.181提升為主。

通過訪問VIP的方式連接Redis

redis-cli -h 172.16.2.250 -p 6379 -a 123456 INFO replication
# Replication
role:master
connected_slaves:0
master_replid:cab30a4083f35652053ffcd099d70b9aaf7a80f3
master_replid2:3da856dd33cce4bedd54926df6797b410f1ab9e8
master_repl_offset:74657
second_repl_offset:36065
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:74657

從上面信息可知,VIP已經(jīng)飄移成功??上部少R,大吉大利,晚上吃雞。

總結(jié)

至此,高可用Redis緩存服務(wù)已搭建完畢,遲點會再出一篇文章教大家如何通過JAVA連接Redis進行相關(guān)操作。至于Redis Cluster集群方案,等有空再搭建然后再和大家一同分享。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

網(wǎng)站欄目:Linux運維-搭建高可用Redis緩存-創(chuàng)新互聯(lián)
文章URL:http://aaarwkj.com/article4/coejie.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營銷品牌網(wǎng)站制作、網(wǎng)站收錄搜索引擎優(yōu)化、企業(yè)建站、云服務(wù)器

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
91麻豆精品国产久久久| 亚洲一区成人免费电影| 欧美一日韩一级片免费看| 懂色一区二区三区精品视频| 日韩av一区二区国产| 欧美十八一区二区三区| 一区二区三区四区自拍偷拍视频| 日本加勒比不卡在线视频| av天堂资源地址在线观看| 我要看黄色一级性生活片| 国产女同av一区二区三区| 国产真实内射在线观看| 亚洲欧美中文日韩二区一区| 午夜两性做爰免费视频| 亚洲午夜福利啪啪啪| 中文字幕人妻熟女在线| 91亚洲婷婷国产综合精品| 国产精品自拍国产精品| 欧美成人精品三级一二| 夫妻过性生活视频播放| 欧美精品在,欧美一区二区| 九九九热精品在线视频观看| 欧美日韩一级性生活片| 日韩一区二区三区91| 国产亚洲欧美日韩精品| 日韩精品有码在线视频免费观看| 五十路六十路美熟人妻| 中文字幕乱码日韩在线| 中文字幕色视频在线观看| 国产高清毛片区1区二区三区| 免费在线观看97视频| 男女性生活视频成年人观看| 久久亚洲精品国产精品黑人| 成人免费毛片内射视频| 亚洲欧美日韩不卡视频| 国产一区二区欧美精品| 天天日天天天干夜夜操| 日韩一区二区三区91| 亚洲激情粉嫩中文字幕| 巨乳人妻一区二区三区| 日本一区二区三级在线观看|