redis主從複製與sentinel高可用

現在有三臺redis的機器

node1爲主172.18.25.51
node2爲從172.18.25.52
node3爲從172.18.25.53

有兩種方法
第一種是從配置文件中進行配置
第二種是從命令行進行修改
主服務器

bind 127.0.0.1 172.18.25.51
requirepass "123"
repl-timeout 60
repl-diskless-sync-delay 5
repl-diskless-sync no

從服務器上修改

[ root@node2 ~ ]# vim /etc/redis.conf 

bind 0.0.0.0
slaveof 172.18.25.51 6379
masterauth 123
requirepass "123"

然後在主上面查看

id=4 addr=172.18.25.52:40275 fd=7 name= age=174 idle=0 flags=S db=0 sub=0 
psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=replconf
id=6 addr=172.18.25.51:37208 fd=6 name= age=4 idle=0 flags=N db=0 sub=0 psub=0 
multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=0 omem=0 events=r cmd=client

如果出現cmd=replconf的則說明已經配置好了
也可以用info replication查看

172.18.25.52:6379> info replication
# Replication
role:slave
master_host:172.18.25.51
master_port:6379
master_link_status:up
master_last_io_seconds_ago:6
master_sync_in_progress:0
slave_repl_offset:7351
slave_priority:100
slave_read_only:1
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0

node3
修改配置文件以下兩樣後

bind 0.0.0.0
requirepass "123"

在命令行裏進行配置

[ root@node3 ~ ]# redis-cli -h 172.18.25.53

172.18.25.53:6379> config get slaveof
1) "slaveof"
2) "172.18.25.51 6379"
172.18.25.53:6379> slaveof 172.18.25.51 6379
OK 
172.18.25.53:6379> config get masterauth
1) "masterauth"
2) ""
172.18.25.53:6379> config set masterauth 123
1) "masterauth"
2) "123"

172.18.25.53:6379> info replication
# Replication
role:slave
master_host:172.18.25.51
master_port:6379
master_link_status:up
master_last_io_seconds_ago:3
master_sync_in_progress:0
slave_repl_offset:7309
slave_priority:100
slave_read_only:1
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0

這裏主從其實已經配置好了
但是從服務器是隻讀的
我們要查看一下

172.18.25.52:6379> config get slave-read-only
1) "slave-read-only"
2) "yes"

如果是這個的,那麼我們要保存在配置文件中

172.18.25.53:6379> config rewrite
OK

然後就成功保存在配置文件中了,在配置文件的最後面追加上去的。

測驗
在主上面修改,在從上面查詢

172.18.25.51:6379> select 0  #換一個索引
OK
172.18.25.51:6379> set testkey "hi redis"
OK


172.18.25.52:6379> select 0
OK
172.18.25.52:6379> get testkey
"hi redis"


172.18.25.53:6379> config rewrite
OK
172.18.25.53:6379> get testkey
"hi redis"

sentinel:
主要完成三個功能:監控、通知、自動故障轉移

選舉:流言協議、投票協議

配置項:

port 26379
sentinel monitor <master-name> <ip> <redis-port> <quorum>
sentinel auth-pass <master-name> <password>
    #修改/etc/redis-sentinel.conf以下地方並拷貝到其他服務器上

    port 26379
    bind 0.0.0.0
    sentinel monitor mymaster 172.18.25.53 6379 2
    sentinel down-after-milliseconds mymaster 5000
    sentinel auth-pass mymaster 123

如果要認證還要取消註釋修改

#sentinel auth-pass mymaster MySUPER--secret-0123passw0rd
<quorum>表示sentinel集羣的quorum機制,即至少有quorum個sentinel節點同時判定主節點
故障時,才認爲其真的故障;
    s_down: subjectively down
    o_down: objectively down
sentinel down-after-milliseconds <master-name> <milliseconds>

監控到指定的集羣的主節點異常狀態持續多久方纔將標記爲“故障”;

sentinel parallel-syncs <master-name> <numslaves>


sentinel failover-timeout <master-name> <milliseconds> 

sentinel必須在此指定的時長內完成故障轉移操作,否則,將視爲故障轉移操作失敗;

sentinel notification-script <master-name> <script-path>

通知腳本,此腳本被自動傳遞多個參數;#可以自己編寫通知腳本

redis-cli -h SENTINEL_HOST -p SENTINEL_PORT 
    redis-cli> 
        SENTINEL masters                    #顯示master 的信息
        SENTINEL slaves <MASTER_NAME>       #顯示slaves的信息
        SENTINEL failover <MASTER_NAME>     #手動轉移主,注意這裏主的轉移並不受我們
        的控制,轉移是隨機的
        SENTINEL get-master-addr-by-name <MASTER_NAME>
#還有這裏如果主redis壞了,是ip數大的優先成爲主     
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章