您现在的位置是:首页 > 数据库 > RedisRedis

redis高级(图文)

第十三双眼睛2020-12-20【Redis】人已围观

简介redis高级部分包括数据的备份及恢复,安全,主从集群等。

redis数据备份与恢复
redis命令用于创建当前数据库的备份,基本用法如下:

该命令将在redis安装目录种创建redis.rdb文件。
恢复数据
如果需要恢复数据,只需要将该文件放置在redis安装目录种,并启动redis服务即可。
创建数据库的备份文件也可以使用bgsave命令。
redis性能测试
redis性能测试是同时执行多个命令来实现的,
redis性能测试的基本命令如下:
redis-benchmark [option] [option value]
注意:该命令是在redis的安装目录下执行的,而不是redis的客户端中
以下实例中,同时执行10000个请求来检测性能

redis 性能测试可选参数如下:
-h 指定服务器主机名
-p 指定服务器端口
-s 指定服务器socket
-c 指定并发连接数
-n 指定请求数
-d 以字节的形式指定get/set 参数的大小
-k 1=keepalive 0=reconnect
-r get set incr 使用随机key sadd使用随机值
-p 通过管道传输<numreq>请求
-q 强制退出redis,仅显示query/sec值
--csv 以csv格式输出
-l 生成循环,永久执行测试
-t 仅运行以逗号分隔的测试命令
-i  idle 模式,仅打开n个idle链接并等待

以上实例中主机为本机,测试的命令 为 set lpush 请求数为10000,参数让结果只显示每秒执行的请求数
客户端链接
最大连接数,maxclients的默认值是10000,也可以在配置文件中对这个值进行修改。
客户端命令:
client list :返回客户端连接列表

client setname 设置当前连接的名称

client getname 获取当前连接的名称

client pause 挂起客户端连接,指定挂起的时间以毫秒计

client kill 关闭当前客户端连接

redis主从复制
当redis出现问题时,如果只有一个节点,则数据会发生丢失,这时候就需要增加redis备份节点,来保证数据的安全性。下面进行redis主从复制的配置,仅仅实现数据的备份,不实现故障自动转移
在主节点的配置文件中修改如下配置,保证redis服务器可以从外部连接,同时保证防火墙关闭
bind 0.0.0.0
在从节点的配置文件中找到如下配置项:
replicaof <masterip> <masterport> ,这个配置项目在有的版本的redis中是slaveof <masterip> <masterport>
改成 主节点的ip 和端口 如 replicaof 192.168.184.129 6379
然后启动主节点和从节点,在主节点中写入一些数据如:set name aaa,在从节点中查看,get name 
可以看到,从节点中也取到了对应的数据,如下图

而且,从节点只能作为主节点的数据备份,不能直接进行数据的写操作。我们不妨来执行一下 set name bbb,报错了。如下图

redis的故障切换
上面介绍的主从复制,只能解决数据的备份问题,不能解决redis服务器的故障切换问题,下面介绍如何实现redis的主从切换
要实现redis的故障切换,需要在之前的基础上,启动一个叫做redis sentinel的服务,翻译为redis哨兵。
先修改配置文件sentinel.conf
bind 0.0.0.0(这里是实现环境,就这么改,到了真实环境,需要需要改成机器ip)
sentinel monitor mymaster 192.168.184.128 6379 1 (这句话是最关键的)
mymaster是哨兵组名称,自定义即可。
192.168.184.128 6379 为要监控的主节点ip 
1 代表有多少个哨兵通过投票后,可以将从节点切换为主节点,这个一般要设置为奇数,因为,如果为偶数的话,会有票数相等的可能。
将redis主从节点都运行起来以后,输入./redis-sentinel ../sentinel.conf 启动sentinel服务

显示出如上图以后,就说明sentinel已经启动成功了。
现在我们在主节点上执行一下info replication 命令

从上图可以看出,有两个从节点。
现在我们将主节点关闭,看看会有什么反应
在主节点执行以下./redis-cli shutdown 命令

可以看到,主节点已经变了,由原来的128变成了133.
当我们再次启动之前的主节点。可以看到它已经是从节点了。

到此,redis的故障转移就实现了。

redis集群
上面已经可以实现主节点在故障的时候,自动的切换到从节点,但是没有解决高并发访问的问题。下面来配置redis集群,可以解决redis的高并发访问的问题
由于redis集群至少需要3个主节点,而且,每个主节点还需要至少一个从节点,因此最少需要6个redis实例。但是没有那么多的虚拟机,因此,这里通过在一台机器上不同的端口启动一个服务来模拟多个机器,效果是一样的。
我们在/usr/redis-cluster 目录下创建7001-7006 一共7个文件夹,用来存放每个服务的配置文件,将redis.conf配置文件复制到每个文件夹一份,并将如下内容进行修改,
bind 0.0.0.0  这里修改为任意机器都可以连接,具体生产环境中另作配置
port 7001 (和对应的文件夹名称一致)
dbfilename dump-7001.rdb (和对应的文件夹名称一致)
appendonly yes 将数据持久化机制改为aof
appendfilename "appendonly-7001.aof" (改为和对应的文件夹名称一致)
cluster-enabled yes  开启集群配置
cluster-config-file nodes-7006.conf (改为和对应的文件夹名称一致)
cluster-node-timeout 5000 超时时间 (可以改也可以不改)
将这些配置每个文件夹放一份
然后执行./redis-server ../usr/redis-cluster/7001-7006/redis.conf 启动6个实例
在redis 5.0版本以前,还需要安装ruby,这个不是很方便,而5.0以后,就不需要了,因此,我们下载的redis是5.0以后的
执行命令./redis-cli --cluster create 192.168.184.141:7001 192.168.184.141:7002 192.168.184.141:7003 192.168.184.141:7004 192.168.184.141:7005 192.168.184.141:7006  --cluster-replicas 1
--cluster-replicas 1 表示为每个主节点创建一个从节点
执行完毕后,会打印出一份预想的配置,如果觉得没有问题,输入yes即可完成集群的创建,如下图

最后显示all 16384 slots covered

验证集群 输入命令 ./redis-cli -h 192.168.184.141:7001 -p 7001 -c 进行连接 -c表示以集群模式连接
连接成功以后,输入cluster info 查看集群信息

查看集群节点信息 输入命令 cluster nodes

存取数据

重启集群(保留原有集群)
将集群的各个节点关闭,再启动起来即可
重启集群(删除原有集群)
相当于重新配置集群,删除原有集群产生的文件,重新配置一遍即可
启动redis集群后,设置密码
访问密码如果没有再redis.conf中设置,也可以在启动redis后,动态设置,用config set 命令来设置
集群主节点的增加
再启动一个redis服务 7007

可以看到 7007的redis服务已经启动了
集群从节点的增加
执行命令:./redis-cli --cluster add-node 192.168.184.141:7007  192.168.184.141:7001 
192.168.184.141:7007  表示新节点  192.168.184.141:7001 表示集群中任意一个节点

上图显示,已经成功添加了,添加后,默认是主节点。但是此时,新添加的节点是空的,没有任何的槽
这时候需要重新分配hash槽 

询问 想要移动多少个hash 槽 我们输入1000

询问由哪个节点来接收100个槽,输入我们刚才添加的新节点

这里有两种方式可以选,选择all ,系统会自动进行平均分配
输入done 表示输入完成
分配完毕以后,查看集群信息

发现集群已经是4个master了。
这个新节点已经分配了hash 槽了
集群中从节点的添加
在启动一个redis服务 
./redis-cli --cluster add-node --slave 192.168.184.141:7008 192.168.184.7001
执行上面的命令,会给集群中添加一个从节点,但是没有指定具体的主节点,会默认分配从节点最少的,如果所有主节点的从节点个数都一样,则随机
添加完节点后,默认是主节点,登陆节点,执行命令cluster replicate cd850fb39e055370e2e1a302daa6c611bf7d0a83 
cd850fb39e055370e2e1a302daa6c611bf7d0a83 表示主节点id
这样,此节点就成为了指定主节点的从节点

集群从节点的删除
执行命令 ./redis-cli --cluster del-node 192.168.184.141:7001 要删除的节点id

可以看到节点已经被删除了
集群主节点的删除
主节点要想删除,得先将上面得槽全部移除,再执行上面得删除命令
可以看到,现在得集群数量已经由原来得4变为了3,192.168.184.141:7007 上得槽也已经是0
执行删除命令 ./redis-cli --cluster del-node 192.168.184.141:7001 cd850fb39e055370e2e1a302daa6c611bf7d0a83

可以看到,主节点已经被删除了

​​​​​​​查询进程,也显示是6个了。

Tags:redis

很赞哦! ()

文章评论

    共有条评论来说两句吧...

    用户名:

    验证码:

本站推荐

站点信息

  • 网站名称:JavaStudy
  • 建站时间:2019-1-14
  • 网站程序:帝国CMS7.5
  • 文章统计242篇文章
  • 标签管理标签云
  • 统计数据百度统计
  • 微信公众号:扫描二维码,关注我们