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数大的优先成为主     
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章