搭建redis高可用实践

个人笔记

搭建redis环境

下载redis,去redis官网获得下载链接:

wget http://download.redis.io/releases/redis-4.0.9.tar.gz

并解压包到此工作路径:

tar -zxvf redis-4.0.9.tar.gz

编译产生redis-server、redis-cli、redis-sentinel

cd redis-4.0.9
make

等待编译完成,把redis-server、redis-cli、redis-sentinel,copy到上一级目录,即redis-4.0.9

cp redis-server、redis-cli、redis-sentinel ../

此次测试在同一台机器上执行,若要多台机器做主从,则修改参数即可。规定端口配置:
- server 6400 sentinel 6401
- server 6410 sentinel 6411
- server 6420 sentinel 6421

开始修改redis.conf:

port 6400
daemonize yes
pidfile   /var/run/redis-6400.pid
logfile   /var/log/redis/redis-6400.log

若是从属服务器,则要多增加:

slaveof  127.0.0.1  6400

配置完成以后,进入配置好的server目录,依次启动server(若没有进入server目录则会把存储的rdb写到当时启动的工作目录下,所以推荐还是在server目录下启动):

./redis-server redis.conf

并用./redis-cli -p 6400 info replication,查看主从信息,如果发现没有如预期,即一个master两个slave,则要检测端口是否开放,因为不同的server之间要进行通信若端口没有开放则无法同步状态。
附上预期状态:

# Replication
role:master // master服务器
connected_slaves:2 // 链接slave数量
slave0:ip=127.0.0.1,port=6410,state=online,offset=98,lag=1
slave1:ip=127.0.0.1,port=6420,state=online,offset=98,lag=1
master_replid:e83ffe69287eba72afcd1832201d7b6aebaeeb4e
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:98
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:98

如果是slave查看info replication,则会有如下额外信息:

role:slave
master_host:127.0.0.1
master_port:6400

此时就配置好了redis的主从关系环境,接下来配置sentinel(哨兵)来同步状态。

sentinel配置

在server目录下,有sentinel.conf这样一个文件,编辑他就可以改变sentinel的行为,我们修改如下参数:

daemonize yes
port  6401
sentinel monitor mymaster 127.0.0.1 6400 2
sentinel down-after-milliseconds mymaster 5000  
sentinel failover-timeout  mymaster 15000

这里三个server的配置都是一致的,唯有启动sentinel的端口不一致,在同一台机器上需修改为不同的端口,即port参数。配置好一个以后就拷贝覆盖剩余两个的sentinel.conf,并修改端口:

cp sentinel.conf ../slave1 // 私人取名为slave1、slave2、master

修改完毕以后,启动sentinel:

./redis-sentinel sentinel.conf

并使用redis-cli连接任意sentinel,查看相关信息:

./redis-cli -p 6400 info sentinel

预计输出如下:

# 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=127.0.0.1:6400,slaves=2,sentinels=3

可以尝试一下连接其他sentinel,发现结果都是一致的。

测试

环境搭建好了,我们试着把master给down掉:

./redis-cli -p 6400 shutdown

使用ps aux | grep "redis"来参看redis有关进程,发现只存在两个server、三个sentinel,再使用redis-cli来查看sentinelserver的信息:

// 6410的server
# Replication
role:master
connected_slaves:1
slave0:ip=127.0.0.1,port=6420,state=online,offset=107604,lag=1
master_replid:12f9446451badd5d7fba4bd23511d95aa8a9c5e1
master_replid2:2f86ced4d259f17a4e06876624f570d90f758ee5
master_repl_offset:107868
second_repl_offset:77672
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:107868

// 6421的sentinel
# 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=127.0.0.1:6410,slaves=2,sentinels=3

可以看到,皆指向了端口为6410的server,而在设定下6410端口的server为slave,现在被提升成了master(Replication中的参数 role:master)。
若是重新启动设定中的master(端口号为6400),不会再是master,而是充当slave。使用redis-cli -p 6400 info replication查看,输入如下:

# Replication
role:slave
master_host:127.0.0.1
master_port:6410
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_repl_offset:173971
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:12f9446451badd5d7fba4bd23511d95aa8a9c5e1
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:173971
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:171163
repl_backlog_histlen:2809

可以看到即使原设定的server为master角色,但重启以后为slave。
如果把所有server、sentinel关闭,再开启,发现设定的6400端口并没有还原成master。
切入原master的server的redis.conf,查找slaveof字段,发现只有slave才有的字段现在存在原master中,说明不仅在内存中修改了配置,还写入了配置文件。

此后增加漂移vip的单机实践。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值