Redis部署方式(三)哨兵模式(2)linux搭建

上一篇写了windows环境下搭建redis集群,常用的集群还是搭建在linux服务器上。这里准备了三台可以互相ping通的机器:

IP地址端口号角色
xxx.xx.xxx.1516379主机(master)
xxx.xx.xxx.326380从机(slave)
xxx.xx.xxx.1266381从机(slave)

一、redis安装部署:首先需要在三台机器上分别安装redis,步骤同前面的单机版安装。

1、下载:到redis官网Download | Redis下载后上传到机器上或者使用命令下载:

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

  

2、安装:

(1)解压安装包:

tar xzf redis-5.0.7.tar.gz

(2)进入解压文件目录使用make命令对解压的 redis 文件进行编译:

cd redis-5.0.7
make

编译完成之后,可以看到解压文件 redis-5.0.7 中会有对应的 src、conf 等文件

  

(3)编译成功后,进入 src 文件夹,执行 make install 进行 Redis 安装:

cd src/
make install

3、部署:由于 src 下文件非常多,可以将几个常用的命令和 conf 配置文件复制出来进行统一管理:

(1)新建 bin 和 etc 文件夹

cd /root/redis-5.0.7/
mkdir etc
mkdir bin

(2)回到安装目录,将redis.conf复制到 ect 文件夹下:

cp redis.conf /root/redis-5.0.7/etc

(3)进入 src 文件夹下,将mkreleasehdr.shredis-benchmarkredis-check-aofredis-check-rdbredis-cliredis-serverredis-sentinel文件复制到 bin 文件夹:

cd src/
cp mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-server redis-sentinel /root/redis-5.0.7/bin/

查看复制后的文件,如下

4、启动redis:

切换到 bin 目录,使用./redis-server即可启动 redis 服务,但是这种方式没有指明配置文件,redis 将采用默认配置,所以需要让 redis 按照刚才的配置文件来启动:

cd /root/redis-5.0.7/bin
./redis-server /root/redis-5.0.7/etc/redis.conf

如我启动151机器: 

验证:查看进程  ps axu|grep redis

注意这里ip地址是127.0.0.1而不是0.0.0.0,只是本机能使用,打开redis.conf文件将bind 127.0.0.1改成bind 0.0.0,并重启redis,外部才可以连接上。

通过RedisDesktopManager连接:

                          

5、redis关闭命令:redis-cli -p 6379 shutdown

二、主从配置:主要是修改redis.conf配置文件(/root/redis-5.0.7/etc/redis.conf)

1、主机配置:主机(151机器)需要改动的配置如下:

bind:0.0.0.0
port:6379
protected-mode:no
daemonize:yes
logfile:./redis.log
requirepass:wtyy
masterauth:wtyy
  • bind:0.0.0.0
    Redis 默认只允许本机访问,把 bind 修改为 0.0.0.0 表示允许所有远程访问。如果想指定限制访问,可设置对应的 ip。
  • port:6379
    监听端口默认为6379,想改其他也行。
  • protected-mode:no
    关闭保护模式,可以外部访问。
  • daemonize:yes
    设置为后台启动。
  • logfile:./redis.log
    redis 日志文件,生成后在 bin 目录下可找到。
  • requirepass:wtyy
    设置 redis 连接密码。
  • masterauth:wtyy
    slave 服务连接 master 的密码。

   修改配置文件后需要重启redis:

   

2、从机配置:从机的配置和主机相似,不同的地方是需要使用replicaof指定主机(master)的IP地址和端口,需要注意的是老版本使用的是 slaveof,目前我使用的5.0.7版本要使用 replicaof :

bind:0.0.0.0
port:从机自定义的端口号
protected-mode:no
daemonize:yes
logfile:./redis.log
requirepass:wtyy
masterauth:wtyy
replicaof xxx.xx.xxx.151 6379 

同样的需要重启下:

redis-cli -p 从机端口号 shutdown
ps axu|grep redis
cd /root/redis-5.0.7/bin
./redis-server /root/redis-5.0.7/etc/redis.conf
ps axu|grep redis

3、数据同步:

上面主从节点的配置文件配置好后,重启 redis 服务,进入 bin 目录即可查看配置文件中指定的redis.log日志文件。如果机器开启了防火墙,还需求设置一下防火墙,否则主从机之间无法同步数据,命令如下:

firewall-cmd --add-port=6379/tcp --permanent --zone=public
#重启防火墙(修改配置后要重启防火墙)
firewall-cmd --reload

至此主从结构搭建完毕。验证下:

(1)主151机器:可以看到当前角色为主机(master),并且连接了另外两台从机(slave)

cd /root/redis-5.0.7/bin/
./redis-cli
auth wtyy
info replication

  

(2)从32机器:可以看到当前角色为从机(slave),并指明了主机地址ip和端口6379

cd /root/redis-5.0.7/bin/
./redis-cli -p 6380
auth wtyy
info replication

  

(3)从126机器:可以看到当前角色为从机(slave),并指明了主机地址ip和端口6379

cd /root/redis-5.0.7/bin/
./redis-cli -p 6381
auth wtyy
info replication

  

4、主从复制验证:

现在从项目中往主机写入数据:

server.port=9999
server.context-path=/redisgroup

my.redis.server.host=xxx.xx.xxx.151
my.redis.server.port=6379
my.redis.server.password = wtyy
my.redis.server.jedis.pool.maxTotal=500
my.redis.server.jedis.pool.maxIdle=10
my.redis.server.jedis.pool.maxWaitMillis=5000
my.redis.server.jedis.pool.min-idle=5
my.redis.server.timeout=5000 
package com.demo.controller;

import com.demo.config.RedisClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.security.Key;

@RestController
@RequestMapping("index")
public class IndexController {

    @Autowired
    private RedisClient redisClient;

    private String nameFormat = "redis:name:{name}";

    @RequestMapping("/setName")
    public void setName(String key,String value){
        redisClient.set(nameFormat,value,key);
    }

    @RequestMapping("/getName")
    public String getName(String key){
        return  redisClient.get(nameFormat,key);
    }
}

 访问:http://localhost:9999/redisgroup/index/setName?key=user&value=wtyy666,可以看到三台机器都有了同样的数据:

注意从机只能读不可以写入数据,如把配置改成:

my.redis.server.host=xxx.xx.xxx.126
my.redis.server.port=6381
my.redis.server.password = wtyy

会报错:

http://localhost:9999/redisgroup/index/getName?key=user读取接口是可以正常返回数据的。

三、哨兵配置:主要是修改sentinel.conf配置文件。这里我们每个redis各部署一个哨兵,三台机器的配置方式相同。

1、同样为了方便管理,首先将sentinel.conf复制到 etc 下

cd /data/redis-5.0.7/
cp sentinel.conf /root/redis-5.0.7/etc/

2、修改sentinel.conf文件,需要改动的配置如下:

//端口默认为26379。
port:26379
//关闭保护模式,可以外部访问。
protected-mode:no
//设置为后台启动。
daemonize:yes
//日志文件。
logfile:./sentinel.log
//指定主机IP地址和端口,并且指定当有2台哨兵认为主机挂了,则对主机进行容灾切换。
sentinel monitor mymaster xxx.xx.xxx.151 6379 2
//当在Redis实例中开启了requirepass,这里就需要提供密码。
sentinel auth-pass mymaster wtyy
//这里设置了主机多少秒无响应,则认为挂了。
sentinel down-after-milliseconds mymaster 3000
//主备切换时,最多有多少个slave同时对新的master进行同步,这里设置为默认的1。
snetinel parallel-syncs mymaster 1
//故障转移的超时时间,这里设置为三分钟。
sentinel failover-timeout mymaster 180000

同样的如果机器开启了防火墙,要把防火墙的26379端口打开:

firewall-cmd --add-port=26379/tcp --permanent --zone=public
#重启防火墙(修改配置后要重启防火墙)
firewall-cmd --reload

3、分别启动三个哨兵:

cd /root/redis-5.0.7/bin/
./redis-sentinel /root/redis-5.0.7/etc/sentinel.conf

三个哨兵都启动后,可使用如下命令查看哨兵信息

redis-cli -p 26379
info sentinel

可以看到,哨兵已经监听到当前的主机IP端口和运行状态,并且应该有2台从机,3个哨兵: 

info_sentinel.png

但是我的:哨兵显示2个,好像也不影响。

至此,哨兵搭建完成。

4、容灾切换演示:

现在模拟主机宕机,将主机151机器的 redis 服务关闭,如下

这时候重新进一下32机器:

再重新进一下126机器:

发现哨兵(Sentinel)通过选举机制选举了从机(32)作为了新的主机。需要注意的是,主从切换后配置文件已经被自动进行了更改,现在看一下新上位的主机 redis 日志,可以看到,当主机挂了的时候,一直连接主机被拒绝,当哨兵选举它为主机后,它成功执行重写的配置文件,并且连接了其他从机:

5、对比演示:在上面的基础上,把151上的redis再启起来,

现在的情况是:32主,151从,126从。

现在把三台机器上的哨兵都关闭:

再把此时的主机(32机器)上的redis服务关闭:

这时候重新查看下151、126机器上的redis,显示主机32的状态是down,但是151和126仍然都是从机,并没有新的主机产生:

     

由此可见哨兵的主从切换功能。

四、命令总结:

1、启动命令:

cd /root/redis-5.0.7/bin 
#启动redis
./redis-server /root/redis-5.0.7/etc/redis.conf
#启动哨兵
./redis-sentinel /root/redis-5.0.7/etc/sentinel.conf

2、执行其他命令:注意,启动了哨兵后,哨兵也是一个redis,只不过角色是哨兵。

 执行其他命令需要先连接redis服务:

#进入bin目录
cd /root/redis-5.0.7/bin  
#连接redis服务,如果端口号是使用默认的6379,直接使用./redis-cli即可
./redis-cli -p 端口号
#如果没有密码,可以省略这一步
auth 密码

 连接redis后就可以执行redis命令了,常用的有:

#查看主/从复制的相关信息
info replication
#查看和集群相关的信息
info cluster
#查看哨兵信息
info sentinel
#关闭redis服务
shutdown

参考:Linux下 Redis集群搭建详解(主从+哨兵)_主从架构+哨兵-CSDN博客

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

w_t_y_y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值