Redis 主从配置密码以及哨兵
Redis 主从介绍
主Redis写入数据时,从Redis会通过Redis Sync机制,同步数据,确保数据一致。并且Redis有哨兵(Sentinel)机制,Redis主挂掉会自动帮我们提升从为主,不过哨兵我发现只适用一主多从,不太适合级联模式。
主从同步类型以及哨兵介绍
级联复制
为避免主Redis同时读写压力过大,三个包括以上节点的Redis,可以配置为级联复制,如下图所示,节点4可以同步节点3数据,也可以同步节点2数据。
一主多从
需要两个以及以上节点。因为Redis是异步同步数据,数据写入主节点并返回客户端,并不代表从节点也已经写入数据,而从节点同步的结果也并不会返回给主节点,而是会直接丢弃。所以(上图)级联复制从节点3同步从节点2数据,就又多了一层丢数据的风险,具体采用哪种方式看自己情况。
哨兵机制
有了主从,那我们需要对其进行监控,Sentinel会不断地检查你的主服务器和从服务器是否运作正常。某个节点故障后,Sentinel 会开始一次自动故障迁移操作, 它会将失效主服务器的其中一个从服务器升级为新的主服务器, 并让失效主服务器的其他从服务器改为复制新的主服务器; 当客户端试图连接失效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可以使用新主服务器代替失效服务器。Redis Sentinel 是一个分布式系统, 你可以在一个架构中运行多个 Sentinel 进程(Progress), 这些进程使用流言协议(Gossip Protocols)来接收关于主服务器是否下线的信息, 并使用投票协议(Agreement Protocols)来决定是否执行自动故障迁移, 以及选择哪个从服务器作为新的主服务器。虽然 Redis Sentinel 释出为一个单独的可执行文件 redis-sentinel , 但实际上它只是一个运行在特殊模式下的 Redis 服务器。
Redis 主从配置
系统环境 Debian,一主一从配置。
主节点IP:192.168.198.131
从节点IP:192.168.198.132
端口使用默认6379
节点1 节点2 全部执行以下命令,不同的地方有标注。
cd /data/ #我习惯把Redis 放在data目录下
wget http://download.redis.io/releases/redis-3.2.9.tar.gz
tar -xf redis-3.2.9.tar.gz
mv redis-3.2.9 redis
cd redis/
make && make install
cp src/redis-server /usr/bin/redis-server
cp src/redis-cli /usr/bin/redis-cli
mv redis.conf redis.conf~
cat redis.conf~ | grep -Ev "^$|^#" > redis.conf
vim redis.conf #修改以下内容,不是必须的
bind 192.168.198.131 #两台主机分别改为自己的IP
logfile "/data/redis/logs/redis.log"
daemonize yes #启用守护模式
slave-read-only yes #slave 默认就是只读的,这里不用管。
protected-mode no #protected-mode 是3.2 之后加入的新特性,为了禁止公网访问redis cache,加强redis安全的。根据自己需要配置,它启用的条件,有两个,没有bind IP 以及没有设置访问密码。
requirepass "admin.123" #设置redis登录密码
masterauth "admin.123" #主从认证密码,否则主从不能同步
启用主从模式只有Redis Slave 添加一行,启动服务主从就配置好了。
slaveof 192.168.198.131 6379
检查主从状态
~]# redis-cli -c -h 192.168.198.131 -p 6379
192.168.198.131:6379> info
.......
# Replication #中间省略了内容,自己可以看看,主要是找到这一段,看主从状态。
role:master
connected_slaves:1
slave0:ip=192.168.198.132,port=6379,state=online,offset=5700675,lag=0
master_repl_offset:5700675
repl_backlog_active:1
repl_backlog_size:10000000
repl_backlog_first_byte_offset:1
repl_backlog_histlen:5707674
.......
Redis Sentinel 配置
vim sentinel.conf #在redis的跟目录下
port 26379
daemonize yes
protected-mode no #保护模式如果开启只接受回环地址的ipv4和ipv6地址链接,拒绝外部链接,而且正常应该配置多个哨兵,避免一个哨兵出现独裁情况,如果配置多个哨兵那如果开启也会拒绝其他sentinel的连接。导致哨兵配置无法生效。
logfile "/data/redis/logs/sentinel.log" #指明日志文件
dir "/data/redis/sentinel"
sentinel monitor mymaster 192.168.198.131 6379 1 #哨兵监控的master。
sentinel down-after-milliseconds mymaster 5000 #master或者slave多少时间(默认30秒)不能使用标记为down状态。
sentinel failover-timeout mymaster 9000 #若哨兵在配置值内未能完成故障转移操作,则任务本次故障转移失败。sentinel auth-pass mymaster redispass #如果redis配置了密码,那这里必须配置认证,否则不能自动切换
/data/redis/src/redis-sentinel /data/redis/sentinel.conf #启动服务
如果有下面报错 启动命令后面要加上 --sentinel
*** FATAL CONFIG FILE ERROR ***
Reading the configuration file, at line 6
>>> 'sentinel monitor mymaster 192.168.198.131 6379 1'
sentinel directive while not in sentinel mode
多个哨兵配置文件一样,正常情况下要配置奇数哨兵,避免切换时候票数相同,出现竞争,影响线上业务。