欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Linux部署环境搭建(四)Redis:一主二从三哨兵

程序员文章站 2022-07-05 12:29:49
...

一.介绍

首先介绍一下单机、主从、哨兵、集群是啥。

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给文件重命名,方面区认。

Linux部署环境搭建(四)Redis:一主二从三哨兵

 三.修改主服务

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

Linux部署环境搭建(四)Redis:一主二从三哨兵

2. 查询同步状态

#连接redis
./redis-cli -h 172.17.0.10 -p 6379 -a 123456
#连接成功后输入命令
info replication

主库显示:

Linux部署环境搭建(四)Redis:一主二从三哨兵

从库显示:

 Linux部署环境搭建(四)Redis:一主二从三哨兵

 六.测试

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

再剩下两台从服务中添加键值对,有一台会成功。

相关标签: Linux SQL redis