在Linux(CentOS7)下进行Redis主从配置

在Linux(CentOS7)下进行Redis主从配置

概述

redis的复制功能是支持多个数据库之间的数据同步。一类是主数据库(master)一类是从数据库(slave),主数据库可以进行读写操作,当发生写操作的时候自动将数据同步到从数据库,而从数据库一般是只读的,并接收主数据库同步过来的数据,一个主数据库可以有多个从数据库。

通过redis的复制功能可以很好的实现数据库的读写分离,提高服务器的负载能力。主数据库主要进行写操作,而从数据库负责读操作。

redis主从复制过程

当启动slave后,slave与master建立连接,然后发送sync命令。无论是第一次连接还是重新连接,master都会启动一个后台进程,将数据库快照保存到文件中,同时master主进程会开始收集新的写命令并缓存。后台进程完成写快照文件后,master就会发送文件和缓存给slave,slave将 文件保存到硬盘上,再加载到内存中,后续master将收到的写命令发送给slave。

如果master同时收到多个slave发来的同步连接命令,master只会启动一个进程来写数据库镜像,然后发送给所有的slave。master同步数据时是非阻塞式的,可以接收用户的读写请求。然而在slave端是阻塞模式的,slave在同步master数据时,并不能够响应客户端的查询。

可以在master禁用数据持久化,只需要注释掉master 配置文件中的所有save配置,然后只在slave上配置数据持久化

拥有主从服务器的好处(从服务器是只读的,可以一主多从)

  • 主服务器进行读写时,会转移到从读,减轻服务器压力
  • 热备份 主从都可以设置密码,也可以密码不一致

哨兵(Sentinel)机制

Sentinel(哨兵)进程是用于监控redis集群中Master主服务器工作的状态,在Master主服务器发生故障的时候,可以实现Master和Slave服务器的切换,保证系统的高可用,其已经被集成在redis2.6+的版本中,Redis的哨兵模式到了2.8版本之后就稳定了下来。一般在生产环境也建议使用Redis的2.8版本的以后版本。哨兵(Sentinel) 是一个分布式系统,你可以在一个架构中运行多个哨兵(sentinel) 进程,这些进程使用流言协议(gossipprotocols)来接收关于Master主服务器是否下线的信息,并使用投票协议(Agreement Protocols)来决定是否执行自动故障迁移,以及选择哪个Slave作为新的Master。每个哨兵(Sentinel)进程会向其它哨兵(Sentinel)、Master、Slave定时发送消息,以确认对方是否”活”着,如果发现对方在指定配置时间(可配置的)内未得到回应,则暂时认为对方已掉线,也就是所谓的”主观认为宕机” ,英文名称:Subjective Down,简称SDOWN。有主观宕机,肯定就有客观宕机。当“哨兵群”中的多数Sentinel进程在对Master主服务器做出 SDOWN 的判断,并且通过 SENTINEL is-master-down-by-addr 命令互相交流之后,得出的Master Server下线判断,这种方式就是“客观宕机”,英文名称是:Objectively Down, 简称 ODOWN。通过一定的vote算法,从剩下的slave从服务器节点中,选一台提升为Master服务器节点,然后自动修改相关配置,并开启故障转移(failover)。哨兵(sentinel) 虽然有一个单独的可执行文件 redis-sentinel ,但实际上它只是一个运行在特殊模式下的 Redis 服务器,可以以启动一个普通 Redis 服务器的方式通过给定 –sentinel 选项来启动哨兵(sentinel)。

哨兵(Sentinel)进程的作用
  1. 监控(Monitoring): 哨兵(sentinel) 会不断地检查你的Master和Slave是否运作正常。
  2. 提醒(Notification):当被监控的某个Redis节点出现问题时, 哨兵(sentinel) 可以通过 API
    向管理员或者其他应用程序发送通知。
  3. 自动故障迁移(Automatic failover):当一个Master不能正常工作时,哨兵(sentinel)
    会开始一次自动故障迁移操作,它会将失效Master的其中一个Slave升级为新的Master,
    并让失效Master的其他Slave改为复制新的Master;当客户端试图连接失效的Master时,集群也会向客户端返回新Master的地址,使得集群可以使用现在的Master替换失效Master。Master和Slave服务器切换后,Master的redis.conf、Slave的redis.conf和sentinel.conf的配置文件的内容都会发生相应的改变,即Master主服务器的redis.conf配置文件中会多一行slaveof的配置,sentinel.conf的监控目标会随之调换。
哨兵(Sentinel)进程的工作方式:
  1. 每个Sentinel(哨兵)进程以每秒钟一次的频率向整个集群中的Master主服务器,Slave从服务器以及其他Sentinel(哨兵)进程发送一个
    PING 命令。
  2. 如果一个实例(instance)距离最后一次有效回复 PING 命令的时间超过 down-after-milliseconds
    选项所指定的值, 则这个实例会被 Sentinel(哨兵)进程标记为主观下线(SDOWN)。
  3. 如果一个Master主服务器被标记为主观下线(SDOWN),则正在监视这个Master主服务器的所有Sentinel(哨兵)进程要以每秒一次的频率确认Master主服务器的确进入了主观下线状态。
  4. 当有足够数量的Sentinel(哨兵)进程(大于等于配置文件指定的值)在指定的时间范围内确认Master主服务器进入了主观下线状态(SDOWN),则Master主服务器会被标记为客观下线(ODOWN)。
  5. 在一般情况下, 每个 Sentinel(哨兵)进程会以每 10 秒一次的频率向集群中的所有Master主服务器、Slave从服务器发送INFO 命令。
  6. 当Master主服务器被 Sentinel(哨兵)进程标记为客观下线(ODOWN)时,Sentinel(哨兵)进程向下线的Master主服务器的所有 Slave从服务器发送 INFO 命令的频率会从 10 秒一次改为每秒一次。
  7. 若没有足够数量的 Sentinel(哨兵)进程同意 Master主服务器下线, Master主服务器的客观下线状态就会被移除。若
    Master主服务器重新向 Sentinel(哨兵)进程发送 PING 命令返回有效回复,Master主服务器的主观下线状态就会被移除。

准备

在Linux(CentOS7)下安装Redis

Redis是一款非关系型存储数据库。

下载软件归档压缩包

redis官网上下载软件归档压缩包

wget http://download.redis.io/releases/redis-3.2.11.tar.gz
解压缩解归档
gunzip redis-3.2.11.tar.gz
tar -xvf redis-3.2.11.tar.gz
安装

切换至redis解压目录,执行下列命令进行配置和安装

make && make install
配置redis.conf配置文件

配置redis.conf配置文件,注意备份

绑定ip

在命令模式下, 61gg 定位至61行,进行绑定ip [注意:使用内网ip,可以在末行模式下输入 :!ifconfig 查看内网ip]

配置端口

在命令模式下, 84gg 定位至84行,配置端口,默认是 6379

配置连接密码

在命令模式下输入 /requirepass 查找,按 n 查找下一个,大概在480行,修改后

保存退出

后台启动服务,并设置日志文件
redis-server 配置文件的路径/配置文件名 > 日志文件 &

需要停止后台服务,请先把redis放在前台运行 (使用jobs查看后台运行编号num,再使用fg %num就将编号是num的服务放在前台运行了),再使用 Ctrl C 停止redis服务。或者使用 kill 进程编号

同样,如果要将前台运行的服务放到后台运行,先使用Ctrl Z,再使用jobs查看状态,是处于Stopped停止状态,之后使用bg %num就可以将编号是num的服务放在后台运行了

基准测试

redis-benchmark -h ip -p 端口 -a 密码
连接redis
redis-cli -h ip [-p 端口号]		-  端口号为默认的6379可以不写
auth 密码					-  输入密码
ping						-  测试连接,回复pong成功

一个Master,两个Slave,一个哨兵(sentinel)

配置主从库

先从安装的redis目录下复制三份redis.conf,分别命名为redis-6379.conf、redis-6380.conf、redis-6381.conf。

其中 redis-6379.conf 配置成主库,redis-6380.conf、redis-6381.conf 配置成从库。

对主库配置进行如下修改:

...
bind 172.19.92.129  # 这里配置成主机的ip
...
port 6379  # 运行端口
...
...
# daemonize no  # 是否以守护进程启动,yes表示是
...
requirepass "redis"  # 认证密码
...

对从库配置进行如下修改:

# redis-6380.conf
...
bind 172.19.92.129  # 这里配置成主机的ip
...
port 6380  # 运行端口
...
# daemonize no  # 是否以守护进程启动,yes表示是
...
slaveof 172.19.92.129 6379  # 设置为 172.19.92.129 6379 的slave
masterauth redis  # 连接master的认证密码
...
requirepass "redis"  # 认证密码
...
  # redis-6381.conf
  ...
  bind 172.19.92.129  # 这里配置成主机的ip
  ...
  port 6381  # 运行端口
  ...
  # daemonize no  # 是否以守护进程启动,yes表示是
  ...
  slaveof 172.19.92.129 6379  # 设置为 172.19.92.129 6379 的slave
  masterauth redis  # 连接master的认证密码
  ...
  requirepass "redis"  # 认证密码
  ...

配置哨兵

先从redis的安装目录下复制一份sentinel.conf,命名为sentinel-26379.conf。

port 26379  # 运行端口
sentinel monitor mymaster 172.19.92.129 6379 1  # Sentinel Monitor 设置
sentinel down-after-milliseconds mymaster 3000  # 哨兵程序sentinel实例认定为失效的间隔时间
sentinel failover-timeout mymaster 10000  # failover过期时间。当failover开始后,在此时间内仍然没有触发任何failover操作,当前sentinel将会认为此次failoer失败。
sentinel auth-pass mymaster redis  # Master认证密码

启动

redis-server redis-6379.conf > redis-6379.log &  # 启动主库
redis-server redis-6380.conf > redis-6380.log &  # 启动从库
redis-server redis-6381.conf > redis-6381.log &  # 启动从库

redis-sentinel sentinel-26379.conf > sentinel-26379.log & # 启动哨兵

测试

1、查看节点信息:

进入redis客户端 redis-cli -h ip -p port
使用 info replication 查看信息

主库信息:
在这里插入图片描述
从库信息:
在这里插入图片描述
2、kill 掉主库之后,再查看哨兵日志信息(sentinel-26379.log)以及节点的信息

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值