lamp架构--redis数据库(redis twemproxy代理、redis cluster,redis持久化)

1. redis twemproxy代理

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

1.1 3个节点都设置为master
##server11 12 13 都注释
[root@server11 redis]# vim /etc/redis/redis.conf 
#min-replicas-to-write 1  
#user default on nopass ~* &* +@all
#replicaof 192.168.0.13 6379
[root@server11 redis]# systemctl restart redis_server.service 
[root@server11 redis]# systemctl status redis_server.service 

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.2 部署
[root@server14 ~]# yum install -y unzip
[root@server14 ~]# unzip twemproxy-master.zip
[root@server14 ~]# cd twemproxy-master/
[root@server14 twemproxy-master]# vim README.md 
[root@server14 twemproxy-master]# yum install -y automake libtool
[root@server14 twemproxy-master]# autoreconf -fvi
[root@server14 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@server14 twemproxy-master]# ./configure
[root@server14 twemproxy-master]# make
[root@server14 twemproxy-master]# make install 
[root@server14 twemproxy-master]# which nutcracker
/usr/local/sbin/nutcracker

在这里插入图片描述

[root@server14 twemproxy-master]# cd conf/
[root@server14 conf]# ls
nutcracker.leaf.yml  nutcracker.root.yml  nutcracker.yml
[root@server14 conf]# pwd
/root/twemproxy-master/conf
[root@server14 conf]# mkdir /etc/twemproxy
[root@server14 conf]# cp nutcracker.yml /etc/twemproxy ##复制配置文件到指定目录下,便于后续启动
[root@server14 conf]# cd /etc/twemproxy
[root@server14 twemproxy]# vim nutcracker.yml ##编辑配置文件,指定redis master
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:
   - 192.168.0.11:6379:1 app1
   - 192.168.0.12:6379:1 app2
   - 192.168.0.13:6379:1 app3
[root@server14 twemproxy]# nutcracker -d -c /etc/twemproxy/nutcracker.yml 
[root@server14 twemproxy]# netstat -antlp

在这里插入图片描述
启动后端口开启
在这里插入图片描述

1.3 测试
[root@server14 twemproxy]# redis-cli -p 22121
127.0.0.1:22121> info
Error: Server closed the connection
127.0.0.1:22121> get name
"westos"
127.0.0.1:22121> get name
(nil)
127.0.0.1:22121> set name westos
OK
127.0.0.1:22121> get name
"westos"
127.0.0.1:22121> set demo test
OK
127.0.0.1:22121> get demo
"test"

server11 13 与server14完全同步
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
server4上通过redis-cli -p 22121连接redis,并且写入数据时会均衡调度到三个master节点上,并且当某个节点shutdown之后在server4端同样也能检测到

[root@server11 bin]# redis-cli
127.0.0.1:6379> SHUTDOWN


[root@server14 twemproxy]# redis-cli -p 22121
127.0.0.1:22121> get name
(error) ERR Connection refused
127.0.0.1:22121> set name westos
(error) ERR Connection refused
127.0.0.1:22121> set name westos
OK
127.0.0.1:22121> get name
"westos"

[root@server12 ~]# redis-cli
127.0.0.1:6379> get name
"westos"

2. redis-cluster

集群模型图:
在这里插入图片描述
参考链接 :http://www.redis.cn/topics/cluster-tutorial.html

2.1 部署

搭建集群的第一件事情我们需要一些运行在 集群模式的Redis实例. 这意味这集群并不是由一些普通的Redis实例组成的,集群模式需要通过配置启用,开启集群模式后的Redis实例便可以使用集群特有的命令和特性了。我们选择在一个redis节点上创建多个redis实例来快速构建redis集群

[root@server11 create-cluster]# pwd
/root/redis-6.2.1/utils/create-cluster
[root@server11 create-cluster]# ls
create-cluster  README
[root@server11 create-cluster]# ./create-cluster start ##redis自带的集群启动脚本
Starting 30001
Starting 30002
Starting 30003
Starting 30004
Starting 30005
Starting 30006
[root@server11 create-cluster]# ./create-cluster create ##创建集群
[root@server11 create-cluster]# redis-cli --cluster check 127.0.0.1:30001

在这里插入图片描述
开启的六个实例
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.2 集群无中心化

访问时集群自动重定向,集群中每个节点均可读写, 从任意一个节点接入到集群,就可以访问和操作这个集群内的数据,无中心化。

[root@server11 create-cluster]# redis-cli -c -p 30001
[root@server11 create-cluster]# redis-cli -c -p 30006
[root@server11 create-cluster]# redis-cli -c -p 30005
127.0.0.1:30005> get name
-> Redirected to slot [5798] located at 127.0.0.1:30002
"westos"

在这里插入图片描述

2.3 自带高可用

内部自带高可用,server2 down掉后,server4 接管server2的master,不影响访问集群资源。

server4 down掉后集群彻底挂掉,因为16384个哈希槽已经不完整了,哈希槽只要丢失一个,集群将会出现故障,此时若要恢复集群,重新执行启动脚本即可。

127.0.0.1:30002> SHUTDOWN
not connected> 
[root@server11 create-cluster]# redis-cli -c -p 30002
Could not connect to Redis at 127.0.0.1:30002: Connection refused
not connected> 
[root@server11 create-cluster]# redis-cli -c -p 30001
127.0.0.1:30001> 
[root@server11 create-cluster]# redis-cli --cluster check 127.0.0.1:30001
[root@server11 create-cluster]# redis-cli -c -p 30001
127.0.0.1:30001> get name
-> Redirected to slot [5798] located at 127.0.0.1:30004
"westos"
127.0.0.1:30004> SHUTDOWN
not connected> 
[root@server11 create-cluster]# redis-cli -c -p 30001
127.0.0.1:30001> get name
(error) CLUSTERDOWN The cluster is down
127.0.0.1:30001>

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

[root@server11 create-cluster]# redis-cli --cluster check 127.0.0.1:30001
[root@server11 create-cluster]# ./create-cluster start
[root@server11 create-cluster]# redis-cli --cluster check 127.0.0.1:30001
[root@server11 create-cluster]# redis-cli -c -p 30001
127.0.0.1:30001> get name
-> Redirected to slot [5798] located at 127.0.0.1:30004
"westos"
127.0.0.1:30004> 

在这里插入图片描述

2.4 增加节点

如果想要增加节点,只需要更改脚本中定义的节点数量并重新执行即可

[root@server11 create-cluster]# vim create-cluster 
  8 NODES=8
[root@server11 create-cluster]# ./create-cluster start

在这里插入图片描述
命令添加节点

[root@server11 create-cluster]# redis-cli --cluster add-node 127.0.0.1:30007 127.0.0.1:30001  ##添加节点并指定集群
[root@server11 create-cluster]# redis-cli --cluster check 127.0.0.1:30001
[root@server11 create-cluster]# redis-cli --cluster add-node 127.0.0.1:30008 127.0.0.1:30001 --cluster-slave --cluster-master-id   ce3f7a27be9c1fc64704970f4a91d11c8589a992  ##添加slave节点并指定master
[root@server11 create-cluster]# redis-cli --cluster check 127.0.0.1:30001

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.5 分配哈希槽

此时上述添加的master并没有分配哈希槽,因此无法存储数据,我们需要为其分配哈希槽,交互式迁移:

[root@server11 create-cluster]# redis-cli --cluster reshard 127.0.0.1:30001 
[root@server11 create-cluster]# redis-cli --cluster check 127.0.0.1:30001

all是指哈希槽会从不同的区间内分配。
在使用上述的redis集群时注意两点
1、要始终保证哈希槽的完整性
2、不要一次性down掉集群中过半的master
在这里插入图片描述
在这里插入图片描述

3. redis持久化

Redis 提供了不同级别的持久化方式:
RDB持久化方式能够在指定的时间间隔能对你的数据进行快照存储.
AOF持久化方式记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据,AOF命令以redis协议追加保存每次写的操作到文件末尾.Redis还能对AOF文件进行后台重写,使得AOF文件的体积不至于过大.
如果你只希望你的数据在服务器运行的时候存在,你也可以不使用任何持久化方式.
你也可以同时开启两种持久化方式, 在这种情况下, 当redis重启的时候会优先载入AOF文件来恢复原始的数据,因为在通常情况下`AOF文件保存的数据集要比RDB文件保存的数据集要完整.rdb方式一般在主从复制中用的比较多
参考链接http://www.redis.cn/topics/persistence.html.

redis默认的持久化方式是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		%每秒钟强制写入磁盘一次
[root@server11 ~]# systemctl start redis_server.service 
[root@server11 ~]# redis-cli
127.0.0.1:6379> INCR key
(integer) 1
127.0.0.1:6379> INCR key
(integer) 2
127.0.0.1:6379> INCR key
(integer) 3

[root@server11 ~]# cd /var/lib/redis/
[root@server11 redis]# ls
dump.rdb
[root@server11 redis]# vim /etc/redis/redis.conf 
1229 appendonly yes
[root@server11 redis]# systemctl restart redis_server.service 
[root@server11 redis]# ls
appendonly.aof  dump.rdb
[root@server11 redis]# redis-cli  ##登陆redis,计数器,使用计数器命令测试
127.0.0.1:6379> INCR key
(integer) 1
127.0.0.1:6379> INCR key
(integer) 2
[root@server11 redis]# cat appendonly.aof  #记录redis中每次操作的信息
*2
$6
SELECT

启用aof,默认生成apf文件
在这里插入图片描述
重启服务,配置生效后产生appendonly.aof 文件
登陆redis,计数器,使用计数器命令测试
在这里插入图片描述
aof文件记录redis中每次操作的信息
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值