当前位置: 首页 > news >正文

专业网站设计师去哪找赣州同城网

专业网站设计师去哪找,赣州同城网,昆山玉山网站建设,服务网站建设推广目录 分布式缓存 Redis 四大问题搭建Redis分片集群分片原理散列插槽#xff08;插槽原理#xff09;集群伸缩需求设定配置集群伸缩 故障转移自动故障转移手动故障转移 RedisTemplate访问分片集群 分布式缓存 Redis 四大问题 基于 Redis 集群解决单机 Redis 存在的四大问题插槽原理集群伸缩需求设定配置集群伸缩 故障转移自动故障转移手动故障转移 RedisTemplate访问分片集群 分布式缓存 Redis 四大问题 基于 Redis 集群解决单机 Redis 存在的四大问题 主从 和 哨兵 可以解决高可用、高并发读的问题。但是依然有两个问题没有解决 海量数据存储问题 高并发写的问题 使用分片集群可以解决上述问题 搭建Redis分片集群 分片集群需要的节点数量较多这里搭建一个最小的分片集群包含 3 个 master 节点每个 master 包含一个 slave 节点结构图 在同一台虚拟机中开启 6 个 Redis 实例模拟分片集群信息 IPPORT角色192.168.150.1017001master192.168.150.1017002master192.168.150.1017003master192.168.150.1018001slave192.168.150.1018002slave192.168.150.1018003slave 准备实例和配置 # 进入/tmp目录 cd /tmp # 删除之前的7001、7002、7003这几个目录避免配置干扰重新创建出7001、7002、7003、8001、8002、8003目录 rm -rf 7001 7002 7003 # 创建目录 mkdir 7001 7002 7003 8001 8002 8003在 /tmp下准备一个新的 redis.conf 文件内容如下 port 6379 # 开启集群功能 cluster-enabled yes # 集群的配置文件名称不需要我们创建由redis自己维护 cluster-config-file /tmp/6379/nodes.conf # 节点心跳失败的超时时间 cluster-node-timeout 5000 # 持久化文件存放目录 dir /tmp/6379 # 绑定地址 bind 0.0.0.0 # 让redis后台运行 daemonize yes # 注册的实例ip replica-announce-ip 192.168.150.101 # 保护模式 protected-mode no # 数据库数量 databases 1 # 日志 logfile /tmp/6379/run.log将这个文件拷贝到每个目录下 # 进入/tmp目录 cd /tmp # 执行拷贝 echo 7001 7002 7003 8001 8002 8003 | xargs -t -n 1 cp redis.conf修改每个目录下的redis.conf将其中的 6379 修改为与所在目录一致 # 进入/tmp目录 cd /tmp # 修改配置文件 printf %s\n 7001 7002 7003 8001 8002 8003 | xargs -I{} -t sed -i s/6379/{}/g {}/redis.conf因为已经配置了后台启动模式所以可以直接启动服务 # 进入/tmp目录 cd /tmp # 一键启动所有服务 printf %s\n 7001 7002 7003 8001 8002 8003 | xargs -I{} -t redis-server {}/redis.conf通过 ps 查看状态 ps -ef | grep redis# 如果要关闭所有进程可以执行命令 ps -ef | grep redis | awk {print $2} | xargs kill# 或者推荐这种方式 printf %s\n 7001 7002 7003 8001 8002 8003 | xargs -I{} -t redis-cli -p {} shutdown虽然服务启动了但是目前每个服务之间都是独立的没有任何关联。需要执行命令来创建集群在 Redis 5.0 之前创建集群比较麻烦5.0 之后集群管理命令都集成到了 redis-cli 中。 1Redis 5.0之前 Redis 5.0 之前集群命令都是用 Redis 安装包下的 src/redis-trib.rb来实现的。因为redis-trib.rb是有Ruby语言编写的所以需要安装Ruby环境。 # 安装依赖 yum -y install zlib ruby rubygems gem install redis然后通过命令来管理集群 # 进入redis的src目录 cd /tmp/redis-6.2.4/src # 创建集群 ./redis-trib.rb create --replicas 1 192.168.150.101:7001 192.168.150.101:7002 192.168.150.101:7003 192.168.150.101:8001 192.168.150.101:8002 192.168.150.101:80032Redis 5.0以后 使用的是Redis 6.2.4版本集群管理以及集成到了 redis-cli 中格式如下 redis-cli --cluster create --cluster-replicas 1 192.168.150.101:7001 192.168.150.101:7002 192.168.150.101:7003 192.168.150.101:8001 192.168.150.101:8002 192.168.150.101:8003命令说明 redis-cli --cluster或者./redis-trib.rb代表集群操作命令。create代表是创建集群。--replicas 1或者--cluster-replicas 1 指定集群中每个 master 的副本个数为 1此时节点总数 ÷ (replicas 1) 得到的就是master的数量。因此节点列表中的前 n 个就是 master其它节点都是 slave 节点随机分配到不同 master。 查看集群状态 redis-cli -p 7001 cluster nodes测试尝试连接7001节点存储一个数据 # 连接 redis-cli -p 7001 # 存储数据 set num 123 # 读取数据 get num # 再次存储 set a 1# 报错 # (error) MOVED 15495 192.168.150.101:7003集群操作时需要给redis-cli加上-c参数才可以 redis-cli -c -p 7001 # 读取数据 get numredis-cli -c参数连接集群结点时使用此选项可防止 moved 和 ask 异常。 分片原理 分片集群特征 集群中有多个 master每个 master 保存不同数据。 每个 master 都可以有多个 slave 节点。 master 之间通过 ping 监测彼此健康状态。 客户端请求可以访问集群任意节点最终都会被转发到正确节点。 散列插槽插槽原理 Redis 会把每一个 master 节点映射到 0~16383 共 16384 个插槽hash slot上查看集群信息时就能看到。 查看集群状态 redis-cli -p 7001 cluster nodes数据 key 不是与节点绑定而是与插槽绑定。Redis 会根据 key 的有效部分计算插槽值分两种情况 key中包含{}且“{}”中至少包含1个字符“{}”中的部分是有效部分。key中不包含“{}”整个key都是有效部分。 例如key 是num那么就根据 num 计算如果是 {itcast}num则根据 itcast 计算。计算方式是利用CRC16 算法得到一个 hash 值然后对 16384 取余得到的结果就是 slot 值。 在 7001 这个节点执行set a 1时对 a 做 hash 运算对 16384 取余得到的结果是 15495因此要存储到 103 节点。到了 7003 后执行 get num 时对 num 做 hash 运算对16384取余得到的结果是 2765因此需要切换到 7001 节点。 Redis如何判断某个 key 应该在哪个实例 将 16384 个插槽分配到不同的实例。根据 key 的有效部分计算哈希值对 16384 取余。余数作为插槽寻找插槽所在实例即可。 如何将同一类数据固定的保存在同一个 Redis 实例 这一类数据使用相同的有效部分例如key都以 {typeId} 为前缀。 集群伸缩 redis-cli --cluster提供了很多操作集群的命令可以通过redis-cli --cluster help 查看例如添加节点命令 add-node。 需求设定 向集群中添加一个新的 master 节点并向其中存储 num 10 启动一个新的 Redis 实例端口为 7004。添加 7004 到之前的集群并作为一个 master 节点。给 7004 节点分配插槽使得 num 这个 key 可以存储到 7004 实例。 这里需要两个新的功能 添加一个节点到集群中。将部分插槽分配到新插槽。 配置集群伸缩 # 创建一个文件夹 mkdir 7004# 拷贝配置文件 cp redis.conf /7004# 修改配置文件 sed /s/6379/7004/g 7004/redis.conf# 启动 redis-server 7004/redis.conf# 添加节点 add-node: new_host:new_port existing_host:existing_port redis-cli --cluster add-node 192.168.150.101:7004 192.168.150.101:7001# 通过命令查看集群状态 redis-cli -p 7001 cluster nodes7004 加入了集群并且默认是一个 master 节点可以看到 7004 节点的插槽数量为 0因此没有任何数据可以存储到 7004 上。 转移插槽配置 # 将num存储到7004节点因此需要先看看num的插槽是多少 192.168.150.101:7003 get num - Redirected to slot [2765] located at 192.168.150.101:7001 # num的插槽为 2765 123将 0~3000 的插槽从 7001 转移到 7004 [rootlocalhost tmp]redis-cli --cluster help ... reshard host:port--cluster-from arg--cluster-to arg--cluster-slots arg...[rootlocalhost tmp]redis-cli --cluster reshard 192.168.150.101:7001[OK] All nodes agree about slots configuration.Check for open slots...Check slots coverage... [OK] All 16384 slots covered. How many slots do you want to move(from 1 to 16384)? 3000 # 询问要移动多少个插槽计划是3000个 What is the receiving node ID? # 哪个node来接收这些插槽配置是7004那么7004节点的id是多少呢前面一串就是 7004 节点的 id 继续询问你的插槽是从哪里移动过来的 all代表全部也就是三个节点各转移一部分具体的id目标节点的iddone没有了 命令查看结果 # # 通过命令查看集群状态 [rootlocalhost tmp]redis-cli -p 7001 cluster node故障转移 之前 7001、7002、7003 都是 master我们计划让 7002 宕机。 自动故障转移 # 直接停止一个redis实例例如7002 redis-cli -p 7002 shutdown首先是该实例与其它实例失去连接 然后是疑似宕机 最后是确定下线自动提升一个 slave 为新的 master 当 7002 再次启动就会变为一个 slave 节点 手动故障转移 emsp利用 cluster failover 命令可以手动让集群中的某个 master 宕机切换到执行 cluster failover 命令的这个 slave 节点实现无感知的数据迁移。 这种 failover 命令可以指定三种模式 缺省默认的流程如图 1~6 步。force省略了对 offset 的一致性校验。takeover直接执行第 5 步忽略数据一致性、忽略 master 状态和其它 master 的意见。 例子在 7002 这个 slave 节点执行手动故障转移重新夺回 master 地位 步骤如下 利用 redis-cli 连接7002这个节点执行cluster failover命令 redis-cli -p 7002cluster failover OKRedisTemplate访问分片集群 RedisTemplate 底层同样基于 lettuce 实现了分片集群的支持而使用的步骤与哨兵模式基本一致。 【Redis】内存数据库Redis进阶Redis哨兵集群 引入 Redis 的 starter 依赖配置分片集群地址配置读写分离 与哨兵模式相比其中只有分片集群的配置方式略有差异 spring:redis:cluster:nodes:- 192.168.150.101:7001- 192.168.150.101:7002- 192.168.150.101:7003- 192.168.150.101:8001- 192.168.150.101:8002- 192.168.150.101:8003
http://www.hkea.cn/news/14413492/

相关文章:

  • 对网站的赏析网站如何导流量
  • 三盛都会城网站 html5当地建设工程信息网
  • 网站建设云服务器安徽网站推广公司
  • 网站设计报价.doc公司网站做么做百度排名
  • 免费素材下载网站天津企业网站制作
  • 家教网站开发网站开发公司排名
  • 烟台建站服务网页设计代码含js
  • 企业建设网站专业服务网站建设详细描述产品的是什么
  • 民制作网站哪家便宜郑州男科十佳医院排名
  • 定制旅游网站建设方案盐都区城乡建设局网站
  • 校园门户网站 建设wordpress 动漫网站
  • 洛阳网站推广公司电话可以自己设计装修的免费软件
  • 产品网站建设公司建设银行网站下载中心
  • 电子商务网站中的信息技术阿里巴巴wordpress 挂马 清除
  • kingcms 暂未创建网站首页网站建设后端技术
  • 网站开发外包业务怎么接国外免费wordpress主题
  • 实战营销型网站建设刚建的网站百度搜不到
  • 怎么查网站找谁做的卖鞋推广引流方法
  • 血液中心网站建设规范易网网站多少
  • 雁塔免费做网站安装百度到手机桌面
  • 营销网站建设费用共享经济网站建设策划书
  • 增城网站公司电话建设厅考试网站
  • 如何让网站被收录wordpress 标题翻译
  • 网站建设流程报价彩票网站 在哪里做
  • 做个网站要多少钱营销比较成功的企业
  • 食品建设网站的目的松江品划网络做网站
  • 网站建设氵金手指下拉十三商城网站服务器
  • 昆明网站的建设常州网站设计湛江公司电话
  • 网站排名提高南昌哪里学做网站
  • 网站建设项目风险管理的主要内容青岛建设集团苏州招聘信息网站