现在有三台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数大的优先成为主