Redis 绑定 IP 地址和集群分片策略的配合使用

爱站 02-22 24 0条评论
55Link友情链接交易平台
摘要: 为确保Redis集群的安全性,我们需要将Redis服务器绑定到特定的IP地址,而不是使用通配符IP地址(0.0.0.0)。这样可以限制客户端访问Redis的入口,提高集群的安全性。...

为确保 Redis 集群的安全性,我们需要将 Redis 服务器绑定到特定的 IP 地址,而不是使用通配符 IP 地址(0.0.0.0)。这样可以限制客户端访问 Redis 的入口,提高集群的安全性。在配置文件中,我们可以使用 "bind" 指令来设置 Redis 服务器的绑定 IP 地址。

在 Redis 集群中,数据会根据哈希算法自动分片到不同的节点上。选择适当的分片策略对于确保集群的高性能和可用性很重要。Redis 支持多种分片策略,如 hash slot、虚拟节点等。每种策略都有自己的优缀,需要根据具体的业务需求进行选择和配置。

将绑定 IP 地址和集群分片策略结合使用,可以有效地提高 Redis 集群的安全性和可靠性。绑定 IP 地址可以限制客户端的访问,而合理的分片策略可以确保数据在集群中的均衡分布,提高集群的性能和可用性。在实际部署 Redis 集群时,我们需要根据具体的业务需求和环境条件,综合考虑这两个因素,以确保 Redis 集群的最佳运行状态。


Redis集群操作

有 slots

无 slots 时直接删除

(5)学习redis-trib命令使用: 添加两个节点 添加

1create :创建一个集群环境host1:port1 ... hostN:portN(集群中的主从节点比例) 2call :可以执行redis命令 3add-node :将一个节点添加到集群里,第一个参数为新节点的ip:port,第二个参数为集群中任意一个已经存在的节点的ip:port 4del-node [host:port node_id] :移除一个节点 5reshard:重新分片 6 check[hosts:port]:检查集群状态

步骤一:使用add-node命令:绿色为新增节点,红色为已知存在节点

输出如下:

步骤二:查看集群状态:

注意: 当添加节点成功以后,新增的节点不会有任何数据,因为它没有分配任何的slot(hash槽)。 我们需要为新节点手工分配slot。

步骤一:使用redis-trib命令,找到集群中的任意一个主节点(红色位置表现集群中的任意一个主节点),对其进行重新分片工作。

输出如下:

1提示一:是希望你需要多少个槽移动到新的节点上,可以自己设置,比如200个槽。 2提示二:是你需要把这200个slot槽移动到那个节点上去(需要指定节点id),并且下个 提示是输入all为从所有主节点(7001 7002 7003)中分别抽取响应的槽数(一共为200个槽到指定的新节点中!,并且会打印执行分片的计划。 ) 3提示三:输入yes确认开始执行分片任务。 在最后我们再次看一下集群状态:

如上图所示,现在我们的7007已经有slot槽了,也就是说可以在7007上进行读写数据啦!到此为止我们的7007已经加入到集群中啦,并且是主节点(Master)

步骤一:还是需要执行add-node命令:

提示添加成功后我们继续看一下集群的状态:

如图所示,还是一个master节点,没有被分配任何的slot槽。

步骤二:我们需要执行replicate命令来指定当前节点(从节点)的主节点id为哪个。 首先需要登录新加的7008节点的客户端,然后使用集群命令进行操作,把当前的7008(slave)节点指定到一个主节点下(这里使用之前创建的7007主节点,红色表示节点id)

我们继续看一下当前集群的状态,如下图:我们已经成功的把7008放到7007这个主节点下面了,到此为止我们已经成功的添加完一个从节点了。

(9)我们可以对集群进行操作,来验证下是否可以进行读写(当然可以)。 (10)我们现在尝试删除一个节点(7008 slave) 步骤一:删除从节点7008,输入del-node命令,指定删除节点ip和端口,以及节点id(红色为7008节点id)

输出如下:

步骤二:再次查看一下集群状态,如下图所示,我们已经成功的移除了7008 slave节点,另外我们发现移除一个节点以后,当前节点的服务进程也会随之销毁。 可以使用ps命令查看当前的服务(ps -el | grep redis),发现少了一个运行的server,也就是刚移除的7008从节点。

(11)最后,我们尝试删除之前加入的主节点7007,这个步骤会相对比较麻烦一些,因为主节点的里面是有分配了slot槽的,所以我们这里必须先把7007里的slot槽放入到其他的可用主节点中去,然后再进行移除节点操作才行,不然会出现数据丢失问题。

步骤一:删除7007(master)节点之前,我们需要先把其全部的数据(slot槽)移动到其他节点上去(目前只能把master的数据迁移到一个节点上,暂时做不了平均分配功能)。

输出如下:

到此为止我们已经成功的把7007主节点的数据迁移到7001上去了,我们可以看一下现在的集群状态如下图,你会发现7007下面已经没有任何数据(slot)槽了,证明迁移成功!

输出如下:

最后:我们查看集群状态,一切还原为最初始状态啦!OK 结束!

利用sentinel和cluster创建Redis集群的区别

sentinel主要用于解决高可用(HA)问题,而cluster则用于解决分片(sharding)问题,两者经常一起使用以增强Redis集群的可靠性和性能。 sentinel的功能包括:(1)监控——检查Redis实例是否正常运行。 (2)通知——向应用程序发送错误信息。 (3)故障转移——当主节点失败时,选择一个从节点升级为主节点,更新其他从节点的从属关系,并更新客户端连接。 (4)配置提供者——客户端通过sentinel获取Redis地址,并在故障转移时更新地址。 配置文件中只需配置主节点地址,从节点地址和sentinel地址可以自动发现:(1)sentinel之间通过Redis pub/sub交换信息获得。 (2)从节点询问主节点获得。 故障检测通常通过ping-pong机制,sentinel引入了sdown(主观下线)和odown(客观下线)机制:(1)sdown——在is-master-down-after-milliseconds(可配置)时间内ping-pong失败。 sdown的从节点不能升级为主节点。 (2)odown——超过一定数目(可配置)的sentinel认为sdown,odown只针对主节点。 (3)故障转移——多数sentinel认为odown。 sentinel集群至少需要部署三台以上,形成一个sentinel集群:(1)作用:故障检测更客观,可用性强,防止sentinel挂掉后不工作。 (2)实现:sentinels之间的数据同步,包括Redis状态(odown,sdown),通过Redis pub/sub实现。 执行故障转移需要选举一个sentinel作为领导者去执行。 从节点选举领导者时,会参考以下数据:(1)与主节点断开连接的时间。 (2)从节点优先级。 每个Redis实例有一个配置项slave-priority,可以通过info命令读取。 从节点到主节点时选择优先级高的,优先级为0的从节点从不被选择。 (3)复制偏移量。 从节点处理的数据量。 (4)运行ID。 执行故障转移时:(1)从节点领导者升级为主节点。 (2)其他从节点修改为主节点的从节点。 (3)客户端修改连接。 (4)旧主节点如果重启成功,变为新主节点的从节点。 配置时必须使用配置文件,以备重启时恢复信息,实时更新。 sentinel客户端需要客户端的支持,目前jedis支持。 服务发现是指在客户端输入sentinel地址列表和服务名称后,自动发现Redis实例地址。 步骤包括:(1)按顺序尝试连接sentinel集群。 (2)通过get-master-addr-by-name master-name询问ip:port,查询失败,请求下一个sentinel。 (3)使用role命令检查Redis实例是否为主节点,如果不是(正在故障转移?),等待一段时间,从第一步开始。 处理重连包括以下情况:(1)超时或socket错误后重新连接。 (2)用户明确关闭或重新连接。 (3)其他客户端与Redis断开连接的情况。 sentinel修改Redis配置时,通过发送client kill命令断开此Redis与所有客户端的连接,使客户端重新通过sentinel获取配置。 连接从节点时,sentinel返回从节点列表,并通过role命令验证。 客户端端连接池在修改配置时需要断开所有客户端连接。 客户端订阅sentinel事件以提高响应性,非必要功能。

redis配置文件详解redis安装和配置详细步骤

Redis 配置文件详解单位redis 启动的时候会去读配置文件 1k => 1000 bytes1kb => 1024 bytes1m => bytes1mb => 1024*1024 bytes1g => bytes1gb => 1024*1024*1024 bytes复制代码redis 里面单位是不分大小写的,例如, 1GB 1Gb 1gB 表示的都是同一个意思INCLUDES 包含环境中使用的 可以包含其他的 ,他们会整合成一个 配置文件来提供使用NETWORK 网络bind 0.0.0.0 protected-mode yesport 6379复制代码bind绑定地址,若绑定 127.0.0.1 是本地访问,若需要远程访问,可以绑定一个真实的 ip 地址protected-mode保护模式是否开启,默认是开启port端口设置,默认端口是 6379,我们也可以修改成其他的可用端口,例如集群的时候就会修改到端口GENERAL 通用通用配置,常用的有daemonize yespidfile /var/run/redis_ noticelogfile databases 16always-show-logo noset-proc-title yes复制代码daemonize是否以守护进程的方式运行,默认是 no,我们需要的话可以修改成 yespidfile以后台方式运行 redis ,我们就需要制定一个 pid 文件loglevel日志等级291 # Specify the server verbosity level. 292 # This can be one of: 293 # debug (a lot of information, useful for development/testing) 294 # verbose (many rarely useful info, but not a mess like the debug level) 295 # notice (moderately verbose, what you want in production probably) 296 # warning (only very important / critical messages are logged)复制代码和我们项目中用到的一致:debug用于开发和测试的调试信息verbose罕见有用的信息notice提示信息,期望在生产环境中看到的warning告警信息,重要的信息会被打印到日志中logfile指定 redis 日志文件路径databasesredis 数据库, 默认是 16 个always-show-logo是否总是显示 reids logo ,就是下面这个 logo_._ _.-``__ -.__.-```.`_.-._ Redis 6.2.5 (/0) 64 bit.-`` .-```.```\/_.,_ -._ (, .-`| `,) Running in standalone mode |`-._`-...-` __...-.``-._|` _.-| Port: 6379 |`-._ `._/ _.-| PID: `-._`-._`-./_.-_.- |`-._`-._`-.__.-_.-_.-| |`-._`-.__.-_.-|`-._`-._`-.__.-_.-_.- |`-._`-._`-.__.-_.-_.-| |`-._`-.__.-_.-|`-._`-._`-.__.-_.-_.-`-._`-.__.-_.-`-.__.-`-.__.-复制代码SNAPSHOTTING 快照快照,这里也就是 redis 的持久化,在规定的时间里面,执行了多少次操作,就会持久化到文件中redis 的持久化有两种RDBAOFredis 是内存数据库,程序宕机或者断电都会导致数据丢失,因此 redis 就有这样的持久化策略# save 3600 1# save 300 100# save 60 复制代码save 3600 1如果 3600 s 内 redis 发生了 1 次操作, 那么就会做数据持久化save 300 100如果 300s 内 redis 发生了 100 次操作, 那么就会做数据持久化save 60 如果 60s 内 redis 发生了 次操作, 那么就会做数据持久化后面咱们详细写到持久化的时候,再来细说和实际测试持久化的事情stop-writes-on-bgsave-error yesrdbcompression yesrdbchecksum yesdir ./复制代码stop-writes-on-bgsave-errorredis 持久化出错是否继续执行 redis 程序,默认是打开的,持久化错误不能影响 redis 程序的执行,需要正常进行下去rdbcompression持久化的文件是否需要压缩,默认是开启的,这个功能会比较消耗性能rdbchecksum保存 rdb 持久化文件的时候,会进行错误检查校验dirrdb 文件的保存目录REPLICATION 主从复制主从复制的配置在这个位置详细的后续写到主动复制的时候详细的写SECURITY 安全redis 的安全相关配置文件,咱们来看看密码的事情# The requirepass is not compatable with aclfile option and the ACL LOAD# command, these will cause requirepass to be ignored.## requirepass foobared复制代码redis 默认是不设置密码的,但是我们为了远程访问安全,必须要设置密码127.0.0.1:6379> pingPONG127.0.0.1:6379> config get requirepass1) requirepass2) 127.0.0.1:6379> config set requirepass OK127.0.0.1:6379> pingPONG127.0.0.1:6379> config get requirepass1) requirepass2) 退出 redis 客户端,再次连接 redis-serverroot@iZuf66y3tuzn4wp3h02t7pZ:~# redis-cli127.0.0.1:6379> ping(error) NOAUTH Authentication required.复制代码对 redis 设置了密码之后,退出 redis 客户端,再次连接 redis-server,发现 redis 报错权限不足,此时我们使用 redis-client 连接 redis-server 就需要密码了127.0.0.1:6379> auth OK127.0.0.1:6379> pingPONG127.0.0.1:6379> config get requirepass1) requirepass2) 复制代码CLIENTS 客户端限制客户端连接数maxclients 复制代码maxclientsredis 限制客户端连接数 默认是 个,这个数字我们也可以修改成我们所期望的MEMORY MANAGEMENT 内存管理maxmemory maxmemory-policy noeviction复制代码maxmemoryredis 配置的最大内存容量,单位是字节maxmemory-policyredis 内存达到上限之后的处理策略是什么样的,有如下几个选型:noeviction永不过期,返回错误volatile-ttl删除即将过期的allkeys-random随机删除 keyvolatile-random随机删除即将过期的 keyallkeys-lru删除 lru 算法的 keyvolatile-lru只对设置了过期时间的 key 进行 LRULRU(Least recently used,最近最少使用)APPEND ONLY MODE 追加模式(aof 配置)APPEND ONLY MODE 用于 AOF 的持久化appendonly noappendfilename # appendfsync alwaysappendfsync everysec# appendfsync no复制代码appendonly默认是关闭的,redis 默认使用的是 rdb 持久化模式,基本是够用的appendfilenameaof 持久化 文件的名字appendfsync持久化同步策略always 每次修改都会同步,消耗性能everysec 每秒执行一次同步,异常情况下会丢失上 1 s 的数据no 不主动同步数据,系统会自动同步,这种方式速度最快,但是丢失数据的几率大对于 redis 配置文件常用常改的位置都给大家分享到了,需要多多在实际学习和工作中多多应用,熟能生巧

文章版权及转载声明:

作者:爱站本文地址:http://www.awz.cc/post/14418.html发布于 02-22
文章转载或复制请以超链接形式并注明出处爱网站

赞(0