为什么需要哨兵模式?
主从切换技术做法是,当主服务器宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工干预,费时费力,还会造成一段时间的服务不可用,所以需要引入哨兵模式。一方面监控各服务器的运行状态,一方面当主服务器宕机时,能实现主从切换
配置文件
#主服务器配置
bind ip
port 7000
requirepass "123456"
daemonize yes
dir "/usr/local/redis/master/"
save 900 1
save 300 10
save 60 100
maxmemory 3gb
masterauth "123456"
#从服务配置
bind ip
port 7001
slaveof masterIP 7000
requirepass "123456"
daemonize yes
dir "/usr/local/redis/slave/"
save 900 1
save 300 10
save 60 100
maxmemory 3gb
masterauth "123456"
#哨兵配置
bind ip
port 7002
dir "/usr/local/redis/sentinel/"
daemonize yes
sentinel deny-scripts-reconfig yes
sentinel monitor mymaster masterIP 7000 2
sentinel down-after-milliseconds mymaster 5000
sentinel auth-pass mymaster 123456
配置说明
配置 | 说明 |
---|---|
bind | 绑定主机IP,用于区分服务器多网卡 |
port | 指定Redis监听的端口,服务器部署多台redis时要区分不同端口 |
requirepass | 设置Redis连接密码 |
timeout | 配置客户端连接超时时间 |
daemonize | 是否以守护进程方式运行,默认no |
logfile | 指定日志输出文件,默认为stdout即输出到命令行终端 |
maxclients | 最大连接数 |
maxmemory-policy | 内存到达最大值时Redis删除策略 |
pidfile | 指定pid输出文件,多个服务需要配置不同路径 |
dir | 指定rdb/aof文件目录位置 |
save | rdb备份方式 |
appendonly | aof 备份方式 |
maxmemory | 指定Redis最大内存限制 3gb 64mb |
slaveof | 当本机为从服务器时,设置master服务器的IP地址和端口 |
sentinel monitor mymaster | Sentinel监听的主服务器mymaster的地址 端口 ,并设置有多少个sentinel认为master |
sentinel auth-pass | 设置sentinel连接master和slave时的密码 |
sentinel down-after-milliseconds mymaster | 主节点在指定时间没有ping回复,便认为该节点主观下线 |
sentinel parallel-syncs | 在故障转移期间,多少个副本节点进行数据同步 |
sentinel failover-timeout | 故障转移超时时间 |
slave-serve-stable-data | 表示master与slave失去通讯时,slave是否继续为客户提供服务,yes表示继续,no表示停止 |
启动顺序
主服务器->从服务器->从服务器 ->(slaveof masterip masterport 从服务器配置了slaveof 可以不执行这个指令 )->哨兵服务器
./redis-server …/master.conf
# Replication
role:master
connected_slaves:1
slave0:ip=salveip,port=7001,state=online,offset=42216726,lag=0
master_replid:0251915ed1cacc539fc5ca9d5e5679a45b2973e6
master_replid2:c752926e335652d69c431b3c8b78e50d204147eb
master_repl_offset:42216869
second_repl_offset:3232448
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:41168294
repl_backlog_histlen:1048576
./redis-server …/slave.conf
# Replication
role:slave
master_host:masterip
master_port:7000
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_repl_offset:43399638
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:0251915ed1cacc539fc5ca9d5e5679a45b2973e6
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:43399638
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:42351063
repl_backlog_histlen:1048576
./redis-sentinel …/sentinel.conf
# 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=masterip:masterhost,slaves=1,sentinels=3
一些命令
服务启动完毕后,可以查看各节点的运行状态
./redis-cli -h ip - p port
如何设置了密码输入
auth 密码
再输入info/info replication 即可查看节点额状态息
info replication
备注
- 从服务启动的时候,主服务器会生成快照文件,并传输到从服务器中,同时新命令会先缓存起来,等从服务器同步完快照文件后,再同步缓存起来的数据。
- 从服务只提供读的功能,接收到的写命令会转发到主服务器,主服务器执行完毕后再异步同步到所有从服务器。
- 由于主服务器异步同步到从服务过程中存在时间差,可能会导致数据在某一刻的不一致。