Redis主从+哨兵集群搭建
前言
先准备一台或多台Linux服务器,当然也可以只用一台来搭建一个伪集群,其实会在一台上搭建集群,多台服务器搭建是一样的
安装Redis
- 首先在服务器上建一个文件夹,我这里直接建在根目录,名字叫soft
mkdir soft
- 官网下载reids的源码文件包,我们通过wget来下载,如果没安装weget的先安装这个
#我们搭建时使用的是5.0.5版本的
cd soft
#安装wget
yum install wget
#下载源码包
wget http://download.redis.io/releases/redis-5.0.5.tar.gz
# 解压到当前文件夹
tar xf redis-5.0.5.tar.gz
# 安装gcc redis源码在编译的时候需要用到
yum install gcc
#进入解压后的目录
cd redis-5.0.5
# 编译,需要点时间 等待一会
make
redis没有执行make编译前的src目录文件
make成功的日志会提示让我们make test
我们不接受它的建议, 我们这里跳过这一步
编译完后的src目录,我们发现多了几个绿色的文件,我们可以通过这些可执行文件来启动我们的redis
./redis-server
这种我们只能进到这个目录下 然后执行这个文件 才能启动。我们还可以把它作为了个服务,安装到系统中,随便在哪都能通过
命令将它启动
将Redis作为服务安装到系统中
# 在/root/soft/redis-5.0.5目录下执行这条命令
make install PREFIX=/opt/suyu/redis5
# 将redis配置到系统环境配置文件中
vim /etc/profile
## 在文件末尾加上这两行配置
export REDIS_HOME=/opt/suyu/redis5
export PATH=$PATH:$REDIS_HOME/bin
# 加完以后退出编辑让环境生效
source /etc/profile
# 进入到utils目录下面 /root/soft/redis-5.0.5/utils
cd utils
./install_server.sh (可以执行一次或多次)
到了这一步 我们单机的reids就安装到了系统中,我们可以在任意地方执行redis-server
默认端口是6379,如果端口不是6379 我们需要使用命令redis-server --port pid
来执行对应的服务
安装多台redis服务
我们只需要多次执行utils下面的脚本install_server.sh
,然后指定不同的端口就行。由于我的6379正在被使用,我就使用了 6380 6381 6382
这三个端口来搭建主从。三个节点都安装完了以后,我们先对节点做一些配置,为了更清楚的看到日志信息,我们让redis不后台运行,把日志打印的服务端的控制台。
这是三个节点各自的配置文件,在/etc/redis目录下面
# 将后台运行关闭 默认是yes
daemonize no
#在这行配置前+`#`注释它
#logfile /var/log/redis_6379.log
然后我们一次启动这三个redis节点
设置从阶段跟随子节点
我们打开三个节点的客户端,可以设置各自的key,get也能得到对应的值
我们选择6380作为我们的主机,6381 6382都作为从机。主机不需要动,只需要让从节点跟随主节点就行。其实也只需要配置一行参数
我们先配置6381跟随主节点。
#REPLICAOF host port 因为是一台服务器 所以我使用了127.0.0.1(建议直接使用ip)然后回车
REPLICAOF 127.0.0.1 6380
我们观察6380的服务端日志,红色的日志是增加的,大体意思就是 6381请求作为从节点,6380同意了,开始异步落rdb快照到磁盘,然后把自己的rdb文件传给了6381 。这个时候6381就有了6380的数据。
6381的日志增量,最下面几行我们可以看到,异步从master节点接收到了175bytes的数据
我们以同样的方式将6382设置为6380的从节点,这里我就不截图演示了,跟6381跟随一样。到此主从就搭建完成了,但还会有问题,我把主节点关掉,看下会出现什么情况。
当master挂了以后,从节点会一直报连不上master,但是这个时候数据还是可以访问的,只是不能操作数据
,重新打开master节点,从节点又会从新连接到master上。我们可以知道master是不能挂的,为了确保redis集群的高可用,redis官方给出了一个哨兵的解决方案。
哨兵集群搭建
哨兵是不断的监控着主节点,如果master挂了的话,哨兵会在从节点中选出一个新的master,让其它的节点跟随新的master。更多信息请查看redis官网的哨兵文档 https://redis.io/topics/sentinel
哨兵我们这里也搭建三个节点,至于为啥三个,当master挂了的时候,需要投票选出一个主节点,如果是两个的话,投票的时候特殊情况下可能会平票,导致不知道是听谁的,所以最好是单节点,避免这种情况。
哨兵比主从节点配置简单一些,新建一个文件夹,放哨兵的配置文件
在创建一个sentinel目录,在这个目录下创建三个配置文件 `26380.conf、26381.conf、26382.conf`
26380配置文件内容如下:
#每个哨兵的端口
port 26380
# 哨兵监控主节点的名称(一组哨兵可以监控不同的主) 主机号 端口 决策票数
sentinel monitor mymaster 127.0.0.1 6381 2
启动哨兵
# 带上配置文件启动
redis-server ./26382.conf --sentinel
启动以后我们可以看到当前主节点,和从节点信息(这里主要运用了redis的发布和订阅的功能)
当master挂了以后,哨兵会在一定时间内,在从节点中选举一个master出来。会修改配置文件。