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

东莞做网站哪个公司好说做网站被收债

东莞做网站哪个公司好,说做网站被收债,wordpress高效写文章,做网站都有那些步骤目录 一、前言 二、环境准备 三、安装redis 3.1 前置准备 3.1.1 下载安装包 3.1.2 准备依赖环境 3.1.3 上传并解压包 3.2 执行安装 四、搭建redis主从集群 4.1 环境准备 4.2 搭建过程 4.2.1 创建实例文件目录 4.2.2 修改redis.conf配置文件 4.2.3 拷贝配置文件 4…目录 一、前言 二、环境准备 三、安装redis 3.1 前置准备 3.1.1 下载安装包 3.1.2 准备依赖环境 3.1.3 上传并解压包 3.2 执行安装 四、搭建redis主从集群 4.1 环境准备 4.2 搭建过程 4.2.1 创建实例文件目录 4.2.2 修改redis.conf配置文件 4.2.3 拷贝配置文件 4.2.4 修改配置文件端口信息 4.2.5 修改声明的IP地址 4.2.6 启动redis实例 4.2.7 开启主从关系 五、搭建redis哨兵集群 5.1 添加哨兵配置文件 5.1.1 在三个目录下添加配置文件 5.1.2 拷贝配置文件 5.2 启动哨兵集群 5.3 故障模拟 5.3.1 哨兵控制台日志 5.4 故障恢复 5.4.1 哨兵控制台日志 六、springboot整合redis哨兵集群 6.1 前置准备 6.1.1 搭建一个springboot工程 6.1.2 引入核心依赖 6.2 核心代码 6.2.1 哨兵配置类 6.2.2 redistemplate配置类 6.2.3 添加测试接口 6.2.4 接口正常效果测试 6.2.5 接口异常效果测试一 6.2.6 重新恢复之前的master节点 6.2.7 接口异常效果测试二 七、写在文末 一、前言 对于大多数开发的同学来说redis再熟悉不过了基本上来说在一个微服务项目中redis几乎成了标配经验来看redis大多数作为缓存来使用而且使用起来学习成本可以说很低了。通常来说为了确保redis的高可用性生产环境夏一般会使用集群模式这个需要结合项目自身的情况选择比如你的项目主要是为了应对高并发读主从集群即可满足而如果你的项目不仅读写频繁而且需要存储的缓存数量也很大可能cluster集群模式更适合你。本篇将以redis的哨兵集群为例从搭建到与springboot的整合做详细的说明。 二、环境准备 基于centos7的虚拟机或云服务器一台至少一台。 三、安装redis 3.1 前置准备 3.1.1 下载安装包 选择合适的版本进行下载下载地址Index of /releases/1604emgaMTkzMDcyNTg1NC4xNjY3ODkyODY2ga_8BKGRQKRPV*MTY4NzMxMzg1OC43LjEuMTY4NzMxMzg4NS4zMy4wLjA. 3.1.2 准备依赖环境 执行命令yum install -y gcc tcl 3.1.3 上传并解压包 tar -zxvf redis-6.2.11 cd redis-6.2.11 3.2 执行安装 进入到解压后的主目录执行下面的命令 make make install 看到下面的效果说明安装成功 四、搭建redis主从集群 4.1 环境准备 我们知道哨兵集群的目的是为了监控主从集群中的master节点的状态一旦master节点挂掉了可以迅速选出一个新的主节点从而坐到自动故障切换所以需要先搭建一个主从集群规划如下 机器地址端口角色192.168.9.1317001master192.168.9.1317002slave192.168.9.1317003slave 4.2 搭建过程 4.2.1 创建实例文件目录 在主目录下创建3个文件夹分别为700170027003文件名称可以自定这里是为了方便区分多个实例通过端口号的形式命名 mkdir 7001 7002 7003 4.2.2 修改redis.conf配置文件 备份一下原始的redis主目录中的redis.conf文件没然后编辑redis.conf文件修改下面两行配置 bind 0.0.0.0protected-mode no #本地测试验证吗暂时关掉包含模式 4.2.3 拷贝配置文件 从redis的主目录中拷贝redis.conf文件分别到700170027003中 cp  redis.conf ./7001 cp  redis.conf ./7002 cp  redis.conf ./7003 4.2.4 修改配置文件端口信息 由于这里是单机为了区分多个实例以端口来区分分别进入到3个目录下将端口号修分别修改为 700170027003主要修改里面的端口号依次修改为700170027003其他的配置暂时不做修改 也可以通过下面的命令进行批量修改 sed -i -e s/6379/7001/g -e s/dir .\//dir \//usr/local/redis/7001\//g slave1/redis.conf sed -i -e s/6379/7001/g -e s/dir .\//dir \//usr/local/redis/7002\//g slave2/redis.conf sed -i -e s/6379/7001/g -e s/dir .\//dir \//usr/local/redis/7003\//g slave3/redis.conf 4.2.5 修改声明的IP地址 虚拟机本身存在多个IP为了避免将来混乱需要在redis.conf文件中指定每一个实例的绑定ip信息格式如下 replica-announce-ip 当前IP 仍然可以使用批量修改的方式进行编辑 sed -i 1a replica-announce-ip 120.26.108.145 7001/redis.conf sed -i 1a replica-announce-ip 120.26.108.145 7002/redis.conf sed -i 1a replica-announce-ip 120.26.108.145 7003/redis.conf 4.2.6 启动redis实例 上面的配置就完成了在主目录下执行下面的命令依次启动3个redis实例我这里使用的是后台启动也可以直接前台启动去掉nohup即可 nohup redis-server /usr/local/redis/7001/redis.conf nohup redis-server /usr/local/redis/7002/redis.conf nohup redis-server /usr/local/redis/7003/redis.conf 通过ps查看进程可以看到3个实例都已经起来了 4.2.7 开启主从关系 上面启动了3个实例但是他们之间还并没有形成主从关系要配置主从可以使用replicaof 或者slaveof5.0以前命令。 有临时和永久两种模式 修改配置文件永久生效在redis.conf中添加一行配置 slaveof masterip masterport使用redis-cli客户端连接到redis服务执行slaveof命令重启后失效 slaveof masterip masterport 这里为了演示看出效果我们采用第二种方式进行说明在任意的shelli窗口执行redis-cli命令连接7002执行下面的命令 redis-cli -p 7002 然后通过命令info repliaction可以检查当前实例的身份 在另一个窗口连接7003这个实例客户端使用相同的方式操作即可到这里一主两从的主从集群就搭建好了当然也可以验证下效果比如在从节点的命令行中set一个key可以看到下面的效果 五、搭建redis哨兵集群 基于上述已经搭建好的主从集群模式下开始搭建哨兵集群关于哨兵集群的原理相关的知识有兴趣的同学可以参考相关的资料网上比较丰富 5.1 添加哨兵配置文件 5.1.1 在三个目录下添加配置文件 在700170027003三个目录下分别添加一个 sentinel.conf的文件以7001目录的该配置为例将下面的配置拷贝进去 port 27001 bind 0.0.0.0 #云服务测试的时候建议这样配置 sentinel announce-ip #你的IP sentinel monitor mymaster #你的IP 7001 2 sentinel down-after-milliseconds mymaster 5000 sentinel failover-timeout mymaster 60000 dir /usr/local/redis/7001 关于上述配置算是极简版的对各项内容简单说明一下 port 27001是当前sentinel实例的端口 sentinel monitor mymaster IP 7001 2指定主节点信息 mymaster主节点名称自定义任意写 IP 7001主节点的ip和端口 2选举master时的quorum值 5.1.2 拷贝配置文件 然后将7001目录下的该配置文件依次拷贝到其他3个目录下拷贝过去之后注意修改下面两个地方即端口号和dir的位置本次哨兵的三个端口为270012700227003 5.2 启动哨兵集群 在当前主目录下依次执行下面的3行命令启动3个哨兵 redis-sentinel 7001/sentinel.conf redis-sentinel 7002/sentinel.conf redis-sentinel 7003/sentinel.conf 3个哨兵启动后效果依次如下可以看到各自监听的端口 5.3 故障模拟 下面将主节点7001的redis实例对应的进程kill掉然后看看哨兵控制台的日志信息变化如何  5.3.1 哨兵控制台日志 kill掉7001的实例之后通过控制台日志可以捕获到sentinel的关键日志信息但是每个sentinel的日志信息稍有差异从上到小分别为监控的7001~7003的三个redis实例的sentinel日志信息 关于里面的日志内容有兴趣的同学可以参阅相关的资料进行深入的学习和解读这些日志的输出其实也就是redis哨兵集群进行master节点选举的完整流程 5.4 故障恢复 通过上述的命令再次开启7001的实例 5.4.1 哨兵控制台日志 再次启动7001的实例后不难发现此时被sentinel集群监控到了但是此时只能作为一个slave的角色加入到集群中如下展示了三个sentinel实例监控时的日志信息从上到下分别为监控的7001~7003的三个redis实例的sentinel日志信息 如果我们再次使用redis-cli命令登录到7002的客户端使用info命令查看一下可以看到此时的7002已经成为master节点这个与sentinel中输出的日志信息也是吻合的 六、springboot整合redis哨兵集群 搭建完成了哨兵集群后接下来演示下如何在微服务中整合使用。 6.1 前置准备 6.1.1 搭建一个springboot工程 完整的工程目录如下 6.1.2 引入核心依赖 引入必须的jar其他的可以根据自身情况引入 dependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactId/dependencydependencygroupIdredis.clients/groupIdartifactIdjedis/artifactIdversion3.2.0/version/dependency/dependencies 6.2 核心代码 6.2.1 哨兵配置类 添加一个哨兵配置类用于配置哨兵相关的信息 package com.congge.config;import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.RedisNode; import org.springframework.data.redis.connection.RedisSentinelConfiguration; import org.springframework.data.redis.connection.jedis.JedisConnectionFactory; import redis.clients.jedis.JedisPoolConfig;import java.util.HashSet; import java.util.List; import java.util.Set;Configuration EnableAutoConfiguration public class RedisSentinelConfig {private static Logger logger LoggerFactory.getLogger(RedisSentinelConfig.class);Value(#{${spring.redis.sentinel.nodes}.split(,)})private ListString nodes;Value(${spring.redis.sentinel.nodes})private String redisNodes;Value(${spring.redis.sentinel.master})private String master;//redis的连接池Bean(name poolConfig)ConfigurationProperties(prefix spring.redis)public JedisPoolConfig poolConfig() {JedisPoolConfig poolConfig new JedisPoolConfig();return poolConfig;}Beanpublic RedisSentinelConfiguration sentinelConfiguration() {RedisSentinelConfiguration redisSentinelConfiguration new RedisSentinelConfiguration();//配置matser的名称redisSentinelConfiguration.master(master);//数据库是1库redisSentinelConfiguration.setDatabase(1);//配置redis的哨兵sentinelSetRedisNode redisNodeSet new HashSet();nodes.forEach(x - {redisNodeSet.add(new RedisNode(x.split(:)[0], Integer.parseInt(x.split(:)[1])));});logger.info(redisNodeSet -- redisNodeSet);redisSentinelConfiguration.setSentinels(redisNodeSet);return redisSentinelConfiguration;}Bean(redisConnectionFactory)public JedisConnectionFactory redisConnectionFactory(JedisPoolConfig poolConfig,RedisSentinelConfiguration sentinelConfig) {return new JedisConnectionFactory(sentinelConfig, poolConfig);} }6.2.2 redistemplate配置类 在该配置类中针对ke/value进行序列化相关设置非必须如果不设置将会使用java默认的序列化 import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; import org.springframework.data.redis.serializer.StringRedisSerializer;Configuration public class RedisConfig {/*** 方法描述 初始化redis连接* param redisConnectionFactory redis连接工厂* return {link RedisTemplate}*/Beanpublic RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) {// 新建redisTemplate对象RedisTemplateString, Object template new RedisTemplate();// 设置工厂template.setConnectionFactory(redisConnectionFactory);//序列化配置Jackson2JsonRedisSerializer jackson2JsonRedisSerializer new Jackson2JsonRedisSerializer(Object.class);StringRedisSerializer stringRedisSerializer new StringRedisSerializer();//1用StringRedisSerializer进行序列化的值在Java和Redis中保存的内容是一样的//2用Jackson2JsonRedisSerializer进行序列化的值在Redis中保存的内容比Java中多了一对双引号。//3用JdkSerializationRedisSerializer进行序列化的值对于Key-Value的Value来说是在Redis中是不可读的。对于Hash的Value来说比Java的内容多了一些字符。//如果Key的Serializer也用和Value相同的Serializer的话在Redis中保存的内容和上面Value的差异是一样的所以我们保存时只用StringRedisSerializer进行序列化// key采用String的序列化方式template.setKeySerializer(stringRedisSerializer);// value序列化方式采用jacksontemplate.setValueSerializer(stringRedisSerializer);// hash的key也采用String的序列化方式template.setHashKeySerializer(stringRedisSerializer);// hash的value序列化方式采用jacksontemplate.setHashValueSerializer(stringRedisSerializer);// 返回redisTemplate对象return template;} } 6.2.3 添加测试接口 增加一个测试接口测试在接口中操作哨兵集群 RestController RequestMapping(/redis) public class RedisController {Autowiredprivate RedisTemplate redisTemplate;//localhost:8083/redis/setValue?keyaddressvaluehangzhouGetMapping(setValue)public String setValue(String key,String value) {redisTemplate.opsForValue().set(key, value);return true;}//localhost:8083/redis/getValue?keyaddressGetMapping(getValue)public String getValue(String key) {String value (String) redisTemplate.opsForValue().get(key);System.out.println(value);return value;}} 6.2.4 接口正常效果测试 启动工程后调用上面的接口 sentinel客户端窗口日志信息 浏览器中请求如下接口向集群中插入一条数据 接口执行成功后再执行查询接口可以查到上述插入到集群中的key 同时可以登录redis的客户端检查上述插入的key/value 6.2.5 接口异常效果测试一 将master节点进程强制kill掉 kill掉master进程之后集群存在一个短暂的重新选举的过程 然后触发重新选举master的过程 请求接口后控制台输出的日志由于master被kill掉会重新建立连接信息 如果在此期间继续向集群执行写入操作将会存在短暂的不可用的过程等到集群重新选出master节点之后接口又可以重新写入数据了而对于客户端来说这个是无感知的因为客户端并不关心数据写入到哪个节点上从上面的选举来看7002这个slave节点的实例被选举为主节点  6.2.6 重新恢复之前的master节点 再次启动7001的redis实例后sentinel集群会重新发起选举7001不再是master而是作为7002实例的slave节点加入集群 选举完成后可以再次请求接口执行数据写入 登录到7002的客户端可以看到数据写入成功 6.2.7 接口异常效果测试二 在集群模拟异常测试过程中出现过下面的错误这里贴出异常信息大概的意思是客户端写redis的时候连接到了集群的从节点默认情况下哨兵集群中的从节点是没有写数据权限的 关于这个异常网上也有一些同学遇到过大致的解决方案如下 配置sentinel.conf时没有设置密码所以需要在配置哨兵文件时增加密码的设置sentinel auth-pass mymaster 123456如果是阿里云或其他云服务器可能是安全组中sentinel的端口没有开放需要开放响应的端口 该问题也是小编在实际工作中遇到的一个问题对于这个问题我在上面的故障模拟中的分析结论如下 网络延迟有点大当网络延迟太大造成哨兵之间感知的时间超过了哨兵配置的故障转移时间这种情况下可能会造成选举时间过长而失败Redis主节点出现网络故障与哨兵节点失联这种情况下哨兵无法获取主节点的信息因此无法对主节点进行健康检查并在需要时执行故障转移操作Redis哨兵节点自身故障导致哨兵节点无法在集群中正常工作 遇到上述问题的时候为了尽量减少问题面的扩散建议的做法是 排查网络确认哨兵所在机器的网络是否有问题检查redis集群自身的状况看看主从集群的关系是否出现故障如果确认了前两步没什么问题的情况下建议重启哨兵 七、写在文末 哨兵集群是一种非常重要的redis集群模式这是一种高可用集群的常用部署方式有必要深入的学习并掌握希望对看到的同学有用本篇到此结束感谢观看
http://www.zqtcl.cn/news/966380/

相关文章:

  • 建站的目的网站的月度流量统计报告怎么做
  • 网站备案添加域名拼多多代运营公司十大排名
  • 网站访客qq获取系统 报价客户管理系统入口
  • 院网站建设情况报告怎么在虚拟主机上建网站
  • 厦门网站建设系统鞍山百度网站怎么制作
  • html5建设网站app开发公司不退款该怎么投诉
  • 南昌网站建设公务手工制作代加工接单网
  • 排名好的手机网站建设你知道吗 网站
  • 网站信息组织优化成都网站制作计划
  • 网站网页背景颜色 多彩做搜狗网站点击赚钱
  • 门户网站开发 系统介绍wordpress 代码在哪
  • 石家庄网站设计建设门面设计效果图
  • 公司设计网站多少钱月子中心网站设计
  • 网站悬浮微信二维码手机端网站优化排名seo推广
  • 房地产公司网站建设乡村建设规划网站
  • 有没有做高仿手表的网站商会网站模板
  • 网站建设小组网页微博
  • org域名做商业网站弹出快捷菜单一般通过
  • wordpress模板的网站_网页字体怎么修改?网站权重怎么查询
  • 企业门户网站的建设与实现论文莲花直播
  • 做网站公司需要什么职位临沂seo代理商
  • 网站建设和发布的一般流程图wordpress 后端
  • 西安哪有学做淘宝网站html企业网站源码
  • 网站成品超市核心关键词是什么意思
  • 为什么自己花钱做的网站竟然不是自己的 (wordpress排版工具
  • 2017优惠券网站怎么做坪山网站建设特色
  • wordpress 多站点模式望江网站建设
  • 常熟网站制作哪家好平面素材设计网站
  • 网站建设客户怎么找网站建设开发软件
  • 青岛制作企业网站的公司怎么清空WordPress