Redis哨兵模式+主从同步

Redis哨兵模式+主从同步

环境准备

  1. 参考教程 -主机配置有误可不配置replicaof-或重启后执行 replicaof no one
  2. 三台CentOS 7 64 位虚拟机1192.168.2.5-redis_master+sentinel1、192.168.2.6-redis_slave1+sentinel2、192.168.2.7-redis_slave2+sentinel3
  3. redis版本:redis-6.0.1.tar.gz 下载地址

Redis安装

编译安装redis

# 创建目录
mkdir /usr/local/redis-6.0.1
cd /usr/local/redis-6.0.1
# 上传文件并解压
tar -xvf redis-6.0.1.tar.gz
# 重命名
mv redis-6.0.1 redis
# 安装gcc套装:
yum -y install cpp
yum -y install binutils
yum -y install glibc
yum -y install glibc-kernheaders
yum -y install glibc-common
yum -y install glibc-devel
yum -y install gcc
yum -y install make
#升级gcc
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils 
scl enable devtoolset-9 bash
echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile
# 进入解压目录后 编译
cd /usr/local/redis-6.0.1/redis
make

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

cd src/ 
make install 

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

  1. 新建 bin 和 etc 文件夹

    cd /usr/local/redis-6.0.1/redis
    mkdir etc 
    mkdir bin 
    
  2. 回到安装目录,将redis.conf复制到 ect 文件夹下

    cp redis.conf /usr/local/redis-6.0.1/redis/etc
    
  3. 进入 src 文件夹下,将mkreleasehdr.sh、redis-benchmark、redis-check-aof、redis-check-rdb、redis-cli、redis-server、redis-sentinel文件复制到 bin 文件夹

    cd src/ 
    cp mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-server redis-sentinel /usr/local/redis-6.0.1/redis/bin
    
  4. redis配置详解

    # redis进程是否以守护进程的方式运行,yes为是,no为否(不以守护进程的方式运行会占用一个终端)。 
    daemonize yes 
    # 指定redis进程的PID文件存放位置 
    pidfile /var/run/redis.pid 
    # redis进程的端口号 
    port 6379 
    #是否开启保护模式,默认开启。要是配置里没有指定bind和密码。开启该参数后,redis只会本地进行访问,拒绝外部访问。要是开启了密码和bind,可以开启。否则最好关闭设置为no。 
    protected-mode yes 
    # 绑定的主机地址 
    bind 0.0.0.0 
    # 客户端闲置多长时间后关闭连接,默认此参数为0即关闭此功能 
    timeout 300 
    # redis日志级别,可用的级别有debug.verbose.notice.warning 
    loglevel verbose 
    # log文件输出位置,如果进程以守护进程的方式运行,此处又将输出文件设置为stdout的话,就会将日志信息输出到/dev/null里面去了 
    logfile stdout 
    # 设置数据库的数量,默认为0可以使用select <dbid>命令在连接上指定数据库id 
    databases 16 
    # 指定在多少时间内刷新次数达到多少的时候会将数据同步到数据文件 
    # save <seconds> <changes> 
    # 指定存储至本地数据库时是否压缩文件,默认为yes即启用存储 
    rdbcompression yes 
    # 指定本地数据库文件名 
    dbfilename dump.db 
    # 指定本地数据问就按存放位置 
    dir ./ 
    # 指定当本机为slave服务时,设置master服务的IP地址及端口,在redis启动的时候他会自动跟master进行数据同步 
    # replicaof <masterip> <masterport> 
    # 当master设置了密码保护时,slave服务连接master的密码 
    # masterauth <master-password> 
    # 设置redis连接密码,如果配置了连接密码,客户端在连接redis是需要通过AUTH<password>命令提供密码,默认关闭 
    requirepass root 
    # 设置同一时间最大客户连接数,默认无限制。redis可以同时连接的客户端数为redis程序可以打开的最大文件描述符,如果设置 maxclients 0,表示不作限制。当客户端连接数到达限制时,Redis会关闭新的连接并向客户端返回 max number of clients reached 错误信息 
    maxclients 128 
    # 指定Redis最大内存限制,Redis在启动时会把数据加载到内存中,达到最大内存后,Redis会先尝试清除已到期或即将到期的Key。当此方法处理后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。Redis新的vm机制,会把Key存放内存,Value会存放在swap区 
    #maxmemory<bytes> 
    # 指定是否在每次更新操作后进行日志记录,Redis在默认情况下是异步的把数据写入磁盘,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认为no。 
    appendonly no 
    # 指定跟新日志文件名默认为appendonly.aof 
    appendfilename appendonly.aof 
    # 指定更新日志的条件,有三个可选参数 - no:表示等操作系统进行数据缓存同步到磁盘(快),always:表示每次更新操作后手动调用fsync()将数据写到磁盘(慢,安全), everysec:表示每秒同步一次(折衷,默认值); 
    appendfsync everysec 
    

    需要更改的配置

    bind 0.0.0.0
    timeout 300 
    daemonize yes 
    loglevel verbose
    logfile stdout
    requirepass root
    maxclients 128
    

启动redis服务

切换到 bin 目录,使用./redis-server即可启动 redis 服务,但是这种方式没有指明配置文件,redis 将采用默认配置,所以我们需要让 redis 按照我们的配置文件来启动,如下,启动时指定刚才我们复制到 etc 文件夹下的redis.conf。

cd /usr/local/redis-6.0.1/redis/bin
./redis-server /usr/local/redis-6.0.1/redis/etc/redis.conf 

测试连接

./redis-cli -p 6379 -a root
#关闭 
./redis-cli -p 6379 -a root shutdown
# 启动
./redis-server /usr/local/redis-6.0.1/redis/etc/redis.conf 

Redis主从配置

主从机配置

# 修改配置文件内容
# 0.0.0.0 表示允许所有远程访问
bind:0.0.0.0 
# 端口 
port:6379 
# 关闭保护模式,可以外部访问
protected-mode:no 
# 设置为后台启动
daemonize:yes 
# redis 日志文件,生成后在 bin 目录下可找到
logfile:./redis.log 
# 设置 redis 连接密码
requirepass:root

# 从库额外配置内容
# slave 服务连接 master 的密码
masterauth:root 
# 指定主机(master)的IP地址和端口
replicaof 192.168.2.5 6379  

数据同步

# 重启服务并查看主从状态
#关闭 
./redis-cli -p 6379 -a root shutdown
# 启动
./redis-server /usr/local/redis-6.0.1/redis/etc/redis.conf 
# 连接
./redis-cli -p 6379 -a root

# 指定主机(master)的IP地址和端口
replicaof 192.168.2.5 6379 

# 停止复制命令-主机挂掉可用后在从库中手动指定此命令,可切换成主库
# REPLICAOF NO ONE

# 查看主从状态
info replication

主从验证

# 主机写入数据
set name test
# 从机查看
get name

Redis哨兵配置

配置详情

# 哨兵sentinel实例运行的端口,默认26379   
port 26379 
# 哨兵sentinel的工作目录 
dir ./ 
# 是否开启保护模式,默认开启。 
protected-mode:no 
# 是否设置为后台启动。 
daemonize:yes 
 
# 哨兵sentinel的日志文件 
logfile:./sentinel.log 
 
# 哨兵sentinel监控的redis主节点的  
## ip:主机ip地址 
## port:哨兵端口号 
## master-name:可以自己命名的主节点名字(只能由字母A-z、数字0-9 、这三个字符".-_"组成。) 
## quorum:当这些quorum个数sentinel哨兵认为master主节点失联 那么这时 客观上认为主节点失联了   
# sentinel monitor <master-name> <ip> <redis-port> <quorum>   
sentinel monitor mymaster 127.0.0.1 6379 2 
 
# 当在Redis实例中开启了requirepass,所有连接Redis实例的客户端都要提供密码。 
# sentinel auth-pass <master-name> <password>   
sentinel auth-pass mymaster 123456   
 
# 指定主节点应答哨兵sentinel的最大时间间隔,超过这个时间,哨兵主观上认为主节点下线,默认30秒   
# sentinel down-after-milliseconds <master-name> <milliseconds> 
sentinel down-after-milliseconds mymaster 30000   
 
# 指定了在发生failover主备切换时,最多可以有多少个slave同时对新的master进行同步。这个数字越小,完成failover所需的时间就越长;反之,但是如果这个数字越大,就意味着越多的slave因为replication而不可用。可以通过将这个值设为1,来保证每次只有一个slave,处于不能处理命令请求的状态。 
# sentinel parallel-syncs <master-name> <numslaves> 
sentinel parallel-syncs mymaster 1   
 
# 故障转移的超时时间failover-timeout,默认三分钟,可以用在以下这些方面: 
## 1. 同一个sentinel对同一个master两次failover之间的间隔时间。   
## 2. 当一个slave从一个错误的master那里同步数据时开始,直到slave被纠正为从正确的master那里同步数据时结束。   
## 3. 当想要取消一个正在进行的failover时所需要的时间。 
## 4.当进行failover时,配置所有slaves指向新的master所需的最大时间。不过,即使过了这个超时,slaves依然会被正确配置为指向master,但是就不按parallel-syncs所配置的规则来同步数据了 
# sentinel failover-timeout <master-name> <milliseconds>   
sentinel failover-timeout mymaster 180000 
 
# 当sentinel有任何警告级别的事件发生时(比如说redis实例的主观失效和客观失效等等),将会去调用这个脚本。一个脚本的最大执行时间为60s,如果超过这个时间,脚本将会被一个SIGKILL信号终止,之后重新执行。 
# 对于脚本的运行结果有以下规则:   
## 1. 若脚本执行后返回1,那么该脚本稍后将会被再次执行,重复次数目前默认为10。 
## 2. 若脚本执行后返回2,或者比2更高的一个返回值,脚本将不会重复执行。   
## 3. 如果脚本在执行过程中由于收到系统中断信号被终止了,则同返回值为1时的行为相同。 
# sentinel notification-script <master-name> <script-path>   
sentinel notification-script mymaster /var/redis/notify.sh 
 
# 这个脚本应该是通用的,能被多次调用,不是针对性的。 
# sentinel client-reconfig-script <master-name> <script-path> 
sentinel client-reconfig-script mymaster /var/redis/reconfig.sh 

搭建启动

部署三个哨兵,每台服务器一个哨兵,配置方式相同,如下

  1. 首先将sentinel.conf复制到 etc 下

    cd /usr/local/redis-6.0.1/redis 
    cp sentinel.conf /usr/local/redis-6.0.1/redis/etc/ 
    
  2. 编辑 sentinel.conf

    cd etc/ 
    vi sentinel.conf
    
  3. 配置文件修改如下

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

    cd /usr/local/redis-6.0.1/redis/bin 
    ./redis-sentinel /usr/local/redis-6.0.1/redis/etc/sentinel.conf 
    
  5. 连接查看哨兵信息

    ./redis-cli -p 26379 
    info sentinel 
    

测试

模拟主机宕机,将主机redis服务关闭

./redis-cli -p 6379 -a root shutdown

连接哨兵查看现在主机ip

./redis-cli -p 26379 
info sentinel

可以发现主机地址已经改变

在这里插入图片描述

重启主机后,主机变成从机

./redis-server /usr/local/redis-6.0.1/redis/etc/redis.conf
info replication
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值