运维实战 Redis负载均衡+去中心化+持久化存储

Posted 洛冰音

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了运维实战 Redis负载均衡+去中心化+持久化存储相关的知识,希望对你有一定的参考价值。

运维实战 Redis负载均衡+去中心化+持久化存储

持久化存储

Redis 提供了不同级别的持久化方式

  • RDB持久化方式能够在指定的时间间隔能对你的数据进行快照存储.
  • AOF持久化方式记录每次对服务器写的操作, 当服务器重启的时候会重新执行这些命令来恢复原始的数据, AOF命令以redis协议追加保存每次写的操作到文件末尾. Redis还能对AOF文件进行后台重写,使得AOF文件的体积不至于过大.
  • RDB主要用于主从复制
  • AOF保存的数据更为完整, 但同时其大小也更大
  • 默认采用RDB的方式进行持久化存储
##主配置文件中的持久化相关设置
save 900 1                  当有一条Keys数据被改变时, 900秒刷新到Disk一次
save 300 10                 当有10条Keys数据被改变时, 300秒刷新到Disk一次
save 60 10000 				当有10000条Keys数据被改变时, 60秒刷新到Disk一次

appendonly yes       		启用AOF持久化方式
appendfsync everysec		每秒钟强制写入磁盘一次

三条不同的save规则分别对应不同的数据频率.

Redis负载均衡

一般情况下, 没有部署负载均衡时, 用户在使用redis过程中会导致某个master节点负载过高,并且其它节点资源也不能被充分利用,因此我们的目标是利用twemproxy实现对redis master的负载均衡

image-20210504200710140

部署流程

  • 将三台主机的Redis都设置为MASTER
vim /etc/redis/redis.conf 

#replicaof 192.168.0.13 6379

systemctl restart redis_server.service
  • 开启新的主机Server4并在上面部署twemproxy
[root@Server4 ~]# yum install -y unzip
[root@Server4 ~]# unzip twemproxy-master.zip
[root@Server4 ~]# cd twemproxy-master/
[root@Server4 twemproxy-master]# yum install -y automake libtool
[root@Server4 twemproxy-master]# autoreconf -fvi
[root@Server4 twemproxy-master]# ls
aclocal.m4      ChangeLog  config       configure     contrib  m4           Makefile.in  notes   README.md  src    travis.sh
autom4te.cache  conf       config.h.in  configure.ac  LICENSE  Makefile.am  man          NOTICE  scripts    tests
[root@Server4 twemproxy-master]# ./configure
[root@Server4 twemproxy-master]# make
[root@Server4 twemproxy-master]# make install 
[root@Server4 twemproxy-master]# which nutcracker
/usr/local/sbin/nutcracker
  • 对其进行配置
[root@Server4 twemproxy-master]# cd conf/
[root@Server4 conf]# ls
nutcracker.leaf.yml  nutcracker.root.yml  nutcracker.yml
[root@Server4 conf]# mkdir /etc/twemproxy
[root@Server4 conf]# cp nutcracker.yml /etc/twemproxy
[root@Server4 conf]# cd /etc/twemproxy
[root@Server4 twemproxy]# vim nutcracker.yml

alpha:
  listen: 0.0.0.0:22121
  hash: fnv1a_64
  distribution: ketama
  auto_eject_hosts: true
  redis: true
  server_retry_timeout: 2000
  server_failure_limit: 1
  servers:
   - 172.25.5.1:6379:1 app1
   - 172.25.5.2:6379:1 app2
   - 172.25.5.3:6379:1 app3
   

[root@Server4 twemproxy]# nutcracker -d -c /etc/twemproxy/nutcracker.yml 
[root@Server4 twemproxy]# netstat -antlp

Server4上通过redis-cli -p 22121连接Redis数据库时, 写入的数据会均衡调度到三个MASTER节点上进行存储.

如果其中某个节点Down掉了,Server4的使用情况也不会受到影响.

同理, 每个Master也可以做主从, 实现高可用和负载均衡一体.

Redis-Cluster实现去中心化

image-20210504201917015

安装部署

[root@Server1 create-cluster]# pwd
/root/redis-6.2.1/utils/create-cluster
[root@Server1 create-cluster]# ls
create-cluster  README

##集群启动脚本
[root@Server1 create-cluster]# ./create-cluster start 
Starting 30001
Starting 30002
Starting 30003
Starting 30004
Starting 30005
Starting 30006
##创建集群
[root@Server1 create-cluster]# ./create-cluster create
##查看集群状态
[root@Server1 create-cluster]# redis-cli --cluster check 127.0.0.1:30001

当访问集群时,会自动被重定向.

由于集群中每个节点均可读写, 因此从任何一个节点接入集群都可以进行读写操作, 也就是俗称的去中心化.

同时其内部自带高可用设置.

如刚才的设置中开启了6个进程, 三主三从.

假设Server2为主, Server4为其从机.那么当Server2down掉了之后, Server4接管其位置继续维持服务.

但由于Cluster是通过哈希槽的方式进行数据分配的,将16384个哈希槽分配给各主节点进行存储.任意一个哈希槽丢失, 整个集群都无法正常运作.

因此一旦任意一对主从完全down掉之后,整个集群都会瘫痪.

以上是关于运维实战 Redis负载均衡+去中心化+持久化存储的主要内容,如果未能解决你的问题,请参考以下文章

redis持久化方案

Redis总结

运维必学:全局负载均衡与CDN内容分发

(服务运维)负载均衡LVS实战:轮询算法和tunnel模式

(服务运维)负载均衡LVS实战:轮询算法和DR模式

基于LVS负载均衡集群的小米电商网站架构-运维实战手记