Linux部署环境搭建(四)Redis:一主二从三哨兵
一.介绍
首先介绍一下单机、主从、哨兵、集群是啥。
1.单机
顾名思义就是单台数据库,当服务挂掉时,Redis可以通过持久化保存数据,保证了数据重启也能恢复数据。但某天你的硬盘出现故障,所有的数据全部丢失,这就愁人了,于是主从模式出现了。
2.主从
如果每次操作数据时,我们自动将数据同步到另一台Redis服务上,这样是不是就避免了单台服务故障导致的数据损失呢!于是主从模式出现,主数据库可以进行读写操作,当写操作导致数据变化时会自动将数据同步给从数据库,保留了数据的火种。
这样数据同步到了从服务,主服务挂了,开发者可以选择一个从服务升为主服务,保证系统正常运行。但人又不是24小时能实时监管服务啊,于是哨兵模式出现了。
3.哨兵
哨兵是redis2.8提出的工具,用来实现自动化系统监控和故障恢复功能。哨兵的作用就是监控Redis的运行状况,出现故障时,自从从数据库中选举一个升为主服务。哨兵至少要部署3台,符合半数原则,如5台 或7台。超过一半(不包含一半)存活的时候,才能够选举出leader,才能进行主从的切换功能。
4.集群
即使使用哨兵,redis每个实例也是全量存储,每个redis存储的内容都是完整的数据,浪费内存且有木桶效应。为了最大化利用内存,可以采用集群,就是分布式存储。即每台redis存储不同的内容,将数据分开储存。集群模式至少需要3主3从,当主挂了,大家会投票将从升为主,若是没有从,redis集群就挂了。(本文主要介绍一主二从三哨兵,集群下篇文章再补上)
5.一主二从三哨兵
顾名思义就是1个主服务,2个从服务,3个哨兵服务。这样的搭配可以应对大部分小公司的需求了。
二.环境准备
1.三台服务器。(我这里就用一台做实验,所以需要修改端口号避免冲突)
服务器 | redis端口 | 哨兵端口 |
主:172.17.0.10 | 6379 | 26379 |
主:172.17.0.10 | 6389 | 26389 |
主:172.17.0.10 | 6399 | 26399 |
redis的安装这里就不做介绍了,参考:https://blog.csdn.net/qq_35378008/article/details/95063928
2.安装好3台redis,我的安装位置是/usr/local下
通过mv redis-5.0.5 redis-master给文件重命名,方面区认。
三.修改主服务
1.修改redis.conf
cd /usr/local/redis-master/
vim redis.conf
# 1. 注释掉此配置,表示所有主机都可以连接此服务。(注意:bind 的作用是绑定本机的网卡对应的IP地址,而非限制只有此ip访问,限制指定ip访问只能通过防火墙限制)
# bind 127.0.0.1
# 2. 保护模式修改为否,允许远程连接
protected-mode no
# 4. 设定密码
requirepass "123456"
# 5. 设定主库密码与当前库密码同步,保证从库能够提升为主库
masterauth "123456"
2.修改sentinel.conf
vim sentinel.conf
#指定监控的master,最后一位表示quorum(法人数量),即认定master'客观下线'成立的最低票数
sentinel monitor mymaster 172.17.0.10 6379 2
#主数据库密码
sentinel auth-pass mymaster 123456
四.修改从服务(2台从)
1.修改redis.conf
# 注释掉,允许任何服务访问
# bind 127.0.0.1
#设置端口号,一个6389,一个6399
prot 6389
# 指定主服务的地址
slaveof 172.17.0.10 6379
# 保护模式修改为否,允许远程连接
protected-mode no
# 设定从服务密码
requirepass "123456"
# 主服务密码
masterauth "123456"
2.修改sentinel.conf
#设置端口号,一台36379,一台46379
prot 36379
#指定监控的master
sentinel monitor mymaster 172.17.0.10 6379 2
#主数据库密码
sentinel auth-pass mymaster 123456
五.启动服务
1.启动服务
进入redis的src目录下
#启动redis
./redis-server ../redis.conf &
#启动哨兵
./redis-sentinel ../sentinel.conf &
查看一下进程Redis:ps -ef | grep redis
2. 查询同步状态
#连接redis
./redis-cli -h 172.17.0.10 -p 6379 -a 123456
#连接成功后输入命令
info replication
主库显示:
从库显示:
六.测试
1.主库写入测试同步
主服务添加K-V值,查看从服务,发现值同步更新到从服务
# 主服务
set b b
# 从服务1
keys *
get b
# 从服务2
keys *
get b
2.从库只读测试
从服务默认为只读模式。
# 从服务1
set c c
# result : (error) READONLY You can't write against a read only slave.
# 从服务2
set c c
# result : (error) READONLY You can't write against a read only slave.
3.测试高可用
关闭主服务,会发现从服务升为主服务。
#关闭主服务
./redis-cli -h 127.0.0.1 -p 6379 -a 123456 shutdown
再剩下两台从服务中添加键值对,有一台会成功。