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

苏州网站建设公司科技城在线识图

苏州网站建设公司科技城,在线识图,惠州营销型网站建设,骏域网络Redis 7.2.0 搭建和集群配置 一.Redis 下载与单机部署1.Redis 下载2.虚拟机配置3.Redis 单机源码安装和测试4.Java 单机连接测试1.Pom 依赖2.配置文件3.启动类4.配置类5.单元测试6.测试结果 二.Redis 集群部署1.主从1.从节点配置2.Java 测试 2.哨兵1.哨兵节点配置2.复制一个哨兵… Redis 7.2.0 搭建和集群配置 一.Redis 下载与单机部署1.Redis 下载2.虚拟机配置3.Redis 单机源码安装和测试4.Java 单机连接测试1.Pom 依赖2.配置文件3.启动类4.配置类5.单元测试6.测试结果 二.Redis 集群部署1.主从1.从节点配置2.Java 测试 2.哨兵1.哨兵节点配置2.复制一个哨兵节点双哨兵3.Java 测试访问哨兵 3.集群1.集群配置文件修改2.Java 访问 Redis 集群测试 一.Redis 下载与单机部署 1.Redis 下载 Redis 官网 2.虚拟机配置 ## 1.关闭防火墙 systemctl stop firewalld systemctl disable firewalld systemctl status firewalld ## 2.配置域名解析 echo 192.168.1.103 rd1 /etc/hosts echo 192.168.1.104 rd2 /etc/hosts echo 192.168.1.105 rd3 /etc/hosts echo 192.168.1.106 rd4 /etc/hosts echo 192.168.1.107 rd5 /etc/hosts echo 192.168.1.108 rd6 /etc/hosts关闭并禁用防火墙 3.Redis 单机源码安装和测试 ## 1.解压缩 tar zxvf redis-7.2.0.tar.gz ## 2.进入源码安装目录 cd /home/redis-7.2.0/src/ ## 3.编译和安装 make make install PREFIX/usr/local/redis ## 4.进入Redis解压目录 cd /home/redis-7.2.0/ ## 5.修改配置 vim redis.conf ## 6.启动服务 /usr/local/redis/bin/redis-server redis.conf ## 7.停止服务 kill -9 ps aux |grep redis|grep -v grep | awk {print $2}以下行号仅供参考增加配置后会有微小变动 行号原值新值含义87bind 127.0.0.1 -::1bind 0.0.0.0 -::1绑定地址111protected-mode yes#protected-mode no防火墙保护533replicaof replicaof rd1 6379配置主节点主从同步541masterauth masterauth 123456配置主节点密码主从同步535requirepass 123456密码在空行添加 哨兵配置可在配置哨兵模式时参考 行号原值新值含义92sentinel monitor sentinel monitor mymaster 192.168.1.103 6379 1哨兵初始监控的主机地址112sentinel auth-pass mymaster MySUPER–secret-0123passw0rdsentinel auth-pass mymaster 123456哨兵配置主节点密码保持所有节点密码一致避免重新选取主节点后连接失败170requirepass requirepass 456789哨兵密码 服务启动 连接测试 连接 4.Java 单机连接测试 1.Pom 依赖 ?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdorg.example/groupIdartifactIdredis-demo/artifactIdversion1.0-SNAPSHOT/versionpropertiesmaven.compiler.source20/maven.compiler.sourcemaven.compiler.target20/maven.compiler.targetproject.build.sourceEncodingUTF-8/project.build.sourceEncoding/propertiesdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactIdversion3.1.2/version/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactIdversion3.1.2/version/dependencydependencygroupIdorg.apache.commons/groupIdartifactIdcommons-pool2/artifactIdversion2.11.1/version/dependency!-- 测试类 --dependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion4.13.2/version/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdversion3.1.2/version/dependency/dependencies /project2.配置文件 spring:data:redis:host: 192.168.1.103port: 6379password: 1234563.启动类 package org.example;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;/*** author zhuwd moon* Description* create 2023-08-22 22:28*/ SpringBootApplication public class RedisApp {public static void main(String[] args) {SpringApplication.run(RedisApp.class,args);} } 4.配置类 package org.example.config;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.StringRedisSerializer; import org.springframework.stereotype.Component;/*** author zhuwd moon* Description* create 2023-08-22 22:29*/ Component public class RedisConfig {private RedisConnectionFactory redisConnectionFactory;Autowiredpublic void setRedisConnectionFactory(RedisConnectionFactory redisConnectionFactory) {this.redisConnectionFactory redisConnectionFactory;}Bean(name redisTemplate)public RedisTemplateString, Object redisTemplate(){RedisTemplateString, Object redisTemplate new RedisTemplate();// 序列化keyredisTemplate.setKeySerializer(new StringRedisSerializer());redisTemplate.setValueSerializer(new StringRedisSerializer());// 序列化hashredisTemplate.setHashKeySerializer(new StringRedisSerializer());redisTemplate.setHashValueSerializer(new StringRedisSerializer());// 连接redis数据库redisTemplate.setConnectionFactory(redisConnectionFactory);return redisTemplate;} }5.单元测试 import org.example.RedisApp; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.test.context.junit4.SpringRunner;/*** author zhuwd moon* Description* create 2023-08-22 22:29*/ RunWith(SpringRunner.class) SpringBootTest(classes RedisApp.class) public class TestApp {AutowiredRedisTemplateString, Object redisTemplate;Testpublic void test(){redisTemplate.opsForValue().set(test,haha);} } 6.测试结果 查看值 二.Redis 集群部署 集群信息 HostIPrd1192.168.1.103rd2192.168.1.104rd3192.168.1.105rd4192.168.1.106rd5192.168.1.107rd6192.168.1.108 ## 1.将修改后的配置文件复制到安装目录 cp /home/redis-7.2.0/redis.conf /usr/local/redis/1.主从 1.从节点配置 ## 1.将 Redis 包拷贝到 rd2 / rd3 scp -r /usr/local/redis rootrd2:/usr/local/redis scp -r /usr/local/redis rootrd3:/usr/local/redis ## 2.修改 rd2 / rd3 上 redis.conf 配置增加主节点信息 replicaof rd1 6379 / masterauth 123456 vi /usr/local/redis/redis.conf ## 3.依次启动 rd1 rd2 rd3 /usr/local/redis/bin/redis-server /usr/local/redis/redis.conf ## 4.客户端连接 /usr/local/redis/bin/redis-cli ## 5.认证 auth 123456Redis 安装包复制 增加主节点配置 主节点启动信息 从节点启动信息 查看主从信息 2.Java 测试 通过上面测试代码写入主节点 主从模式故障不支持自动恢复需要人为处理从节点读需要手动写读取代码 2.哨兵 1.哨兵节点配置 ## 1.复制 redis 包到 rd4 scp -r /usr/local/redis rootrd4:/usr/local/redis ## 2.拷贝 sentinel 配置文件 scp -r /home/redis-7.2.0/sentinel.conf rootrd4:/usr/local/redis/ ## 3.修改哨兵配置 # sentinel monitor master-redis-name master-redis-ip master-redis-port quorum # quorum 表示当有多少个 sentinel 认为一个 master 失效时才算真正失效取值参考 sentinels/2 1 vi /usr/local/redis/sentinel.conf ## 将 92 行修改为 sentinel monitor mymaster 192.168.1.103 6379 1 ## 在 112 行增加 sentinel auth-pass mymaster 123456 ## 在 170 行增加 requirepass 123456 ## 4.启动哨兵 /usr/local/redis/bin/redis-sentinel /usr/local/redis/sentinel.conf ## 5.查看信息 /usr/local/redis/bin/redis-cli -p 26379 127.0.0.1:26379 info修改配置 哨兵启动信息注意端口为 26379 查看哨兵信息 2.复制一个哨兵节点双哨兵 ## 1.停止所有节点 kill -9 ps aux |grep redis|grep -v grep | awk {print $2} ## 2.创建日志目录 mkdir -p logfile /var/log/redis ## 3.修改配置文件 增加日志输出 大概 355 行 vi /usr/local/redis/redis.conf vi /usr/local/redis/sentinel.conf ## 增加 logfile /var/log/redis/redis.log ## 增加 logfile /var/log/redis/sentinel.log ## 4.复制配置好的哨兵文件到 rd5 scp -r /usr/local/redis rootrd5:/usr/local/redis ## 5.启动 rd1 / rd2 / rd3 /usr/local/redis/bin/redis-server /usr/local/redis/redis.conf ## 6.启动 rd4 / rd5 的哨兵 /usr/local/redis/bin/redis-sentinel /usr/local/redis/sentinel.conf 3.Java 测试访问哨兵 配置文件 spring:data:redis:password: 123456 # 访问主从节点的密码sentinel:master: mymasternodes: 192.168.1.106:26379,192.168.1.107:26379password: 123456 # 访问哨兵的密码lettuce:pool:max-idle: 50min-idle: 10max-active: 100max-wait: 1000logging:level:root: infoio.lettuce.core: debugorg.springframework.data.redis: debug 配置类 package org.example.config;import io.lettuce.core.ReadFrom; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.autoconfigure.data.redis.RedisProperties; import org.springframework.context.annotation.Bean; import org.springframework.data.redis.connection.RedisClusterConfiguration; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.connection.RedisSentinelConfiguration; import org.springframework.data.redis.connection.RedisStandaloneConfiguration; import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; import org.springframework.data.redis.connection.lettuce.LettucePoolingClientConfiguration; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.StringRedisSerializer; import org.springframework.stereotype.Component;import java.time.Duration; import java.util.HashSet;/*** author zhuwd moon* Description* create 2023-08-22 22:29*/ Component public class RedisConfig {/*** 配置 Redis 工厂* param properties* return*/Bean(name redisConnectionFactory)public RedisConnectionFactory redisConnectionFactory(RedisProperties properties) {//取配置RedisProperties.Cluster cluster properties.getCluster();RedisProperties.Sentinel sentinel properties.getSentinel();RedisProperties.Pool pool properties.getLettuce().getPool();//池化配置LettucePoolingClientConfiguration poolingClientConfiguration LettucePoolingClientConfiguration.builder().readFrom(ReadFrom.ANY_REPLICA).build();if (null ! pool){if (pool.getMaxIdle() 0){poolingClientConfiguration.getPoolConfig().setMaxIdle(pool.getMaxIdle());}if (pool.getMinIdle() 0){poolingClientConfiguration.getPoolConfig().setMinIdle(pool.getMinIdle());}if (pool.getMaxActive() 0){poolingClientConfiguration.getPoolConfig().setMaxTotal(pool.getMaxActive());}if (pool.getMaxWait().compareTo(Duration.ZERO) 0){poolingClientConfiguration.getPoolConfig().setMaxWait(pool.getMaxWait());}}//Redis 配置if (null ! cluster){//集群RedisClusterConfiguration clusterConfiguration new RedisClusterConfiguration(cluster.getNodes());if (null ! properties.getPassword()){clusterConfiguration.setPassword(properties.getPassword());}if (null ! cluster.getMaxRedirects()){clusterConfiguration.setMaxRedirects(cluster.getMaxRedirects());}return new LettuceConnectionFactory(clusterConfiguration,poolingClientConfiguration);} else if (null ! sentinel){//哨兵RedisSentinelConfiguration sentinelConfiguration new RedisSentinelConfiguration(sentinel.getMaster(),new HashSet(sentinel.getNodes()));sentinelConfiguration.setSentinelPassword(sentinel.getPassword());sentinelConfiguration.setPassword(properties.getPassword());//设置从节点读return new LettuceConnectionFactory(sentinelConfiguration,poolingClientConfiguration);} else {//单机RedisStandaloneConfiguration config new RedisStandaloneConfiguration();config.setHostName(properties.getHost());config.setPort(properties.getPort());config.setPassword(properties.getPassword());return new LettuceConnectionFactory(config);}}/*** redis 配置* param redisConnectionFactory* return*/Bean(name redisTemplate)public RedisTemplateString, Object redisTemplate(Qualifier(redisConnectionFactory) RedisConnectionFactory redisConnectionFactory){RedisTemplateString, Object redisTemplate new RedisTemplate();// 序列化keyredisTemplate.setKeySerializer(new StringRedisSerializer());redisTemplate.setValueSerializer(new StringRedisSerializer());// 序列化hashredisTemplate.setHashKeySerializer(new StringRedisSerializer());redisTemplate.setHashValueSerializer(new StringRedisSerializer());// 连接redis数据库redisTemplate.setConnectionFactory(redisConnectionFactory);return redisTemplate;}} 启动类 package org.example;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;/*** author zhuwd moon* Description* create 2023-08-22 22:28*/ SpringBootApplication public class RedisApp {public static void main(String[] args) {SpringApplication.run(RedisApp.class,args);} } 测试类 package org.example.controller;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;/*** author zhuwd moon* Description* create 2023-08-23 20:13*/ RequestMapping(/redis) RestController public class RedisTest {AutowiredRedisTemplateString, Object redisTemplate;GetMapping(/write)public void write(String key,String val){redisTemplate.opsForValue().set(key,val);}GetMapping(/read)public void read(String key){System.out.println(redisTemplate.opsForValue().get(key));} } 查看主节点/usr/local/redis/bin/redis-cli -p 26379 启动服务 测试写集群127.0.0.1:8080/redis/write?keytestvalhello 写节点rd3 读数据rd2 杀掉主节点并等待kill -9 ps aux |grep redis|grep -v grep | awk {print $2} 查看 rd4 哨兵主节点切为 rd2 查看 rd5 哨兵主节点 写测试127.0.0.1:8080/redis/write?keytestvalreHello 读测试127.0.0.1:8080/redis/read?keytest 恢复 rd5 服务/usr/local/redis/bin/redis-server /usr/local/redis/redis.conf 通过 rd1 查看从节点信息 3.集群 清除之前测试写入的数据 查找持久化文件find / -type f -name dump.rdb 如果存在也删掉 1.集群配置文件修改 ## 1.在 rd1 复制配置文件 cp /home/redis-7.2.0/redis.conf /usr/local/redis/redis-cluster.conf ## 2.编辑 vim /usr/local/redis/redis-cluster.conf ## 设置密码 requirepass 123456 ## 关闭保护模式 protected-mode no ## 开启集群 cluster-enabled yes 约1586行 ## 设置配置文件 cluster-config-file redis-cluster.conf 约1594行 ## 设置超时 cluster-node-timeout 15000 约1600行 ## 设置主节点密码 masterauth 123456 ## 设置日志 logfile /var/log/redis/redis-cluster.log ## 3.将 redis-cluster.conf 分发到 rd2 / rd3 / rd4 / rd5 / rd6 scp /usr/local/redis/redis-cluster.conf rootrd2:/usr/local/redis/ scp /usr/local/redis/redis-cluster.conf rootrd3:/usr/local/redis/ scp /usr/local/redis/redis-cluster.conf rootrd4:/usr/local/redis/ scp /usr/local/redis/redis-cluster.conf rootrd5:/usr/local/redis/ scp /usr/local/redis/redis-cluster.conf rootrd6:/usr/local/redis/ ## 4.依次启动 rd1 / rd2 /rd3 /rd4 /rd5 / rd6 /usr/local/redis/bin/redis-server /usr/local/redis/redis-cluster.conf ## 5.清空已有数据 ## 5.创建集群 在任一节点执行 ## -a 密码认证若没写密码无效带这个参数 ## --cluster create 创建集群实例列表 IP:PORT IP:PORT IP:PORT IP:PORT IP:PORT IP:PORT ## --cluster-replicas 复制因子1即每个主节点需2个从节点 /usr/local/redis/bin/redis-cli -a 123456 --cluster create --cluster-replicas 1 192.168.1.103:6379 192.168.1.104:6379 192.168.1.105:6379 192.168.1.106:6379 192.168.1.107:6379 192.168.1.108:6379 启动所有节点服务 创建集群集群至少要三个主节点 查看集群信息和集群节点 新建三台虚拟机 HostIPrd7192.168.1.109rd8192.168.1.110rd9192.168.1.111 ## 1.新建三台虚拟机并分发配置 rd7 / rd8 /rd9 scp -r /usr/local/redis root192.168.1.109:/usr/local/ scp -r /usr/local/redis root192.168.1.110:/usr/local/ scp -r /usr/local/redis root192.168.1.111:/usr/local/ ## 2.创建日志目录 / 关闭防火墙并禁用 mkdir -p /var/log/redis systemctl stop firewalld systemctl disable firewalld ## 3.启动 rd7 / rd8 /rd9 /usr/local/redis/bin/redis-server /usr/local/redis/redis-cluster.conf ## 4.将新节点添加到当前集群 在 rd1 执行 ## -a 密码认证若没写密码无效带这个参数 ## --cluster add-node 创建集群实例列表 IP:PORT IP:PORT IP:PORT IP:PORT IP:PORT IP:PORT ## 要有一个节点为当前集群的节点 ## /usr/local/redis/bin/redis-cli -a 123456 --cluster add-node 192.168.1.109:6379 192.168.1.110:6379 192.168.1.111:6379 192.168.1.103:6379查看集群命令说明/usr/local/redis/bin/redis-cli --cluster help ## 添加主节点 /usr/local/redis/bin/redis-cli -a 123456 --cluster add-node 192.168.1.109:6379 192.168.1.103:6379 ## 如果 slot 分配不均可以用如下命令修复集群 ## 分配不均报错如下 [ERR] Not all 16384 slots are covered by nodes. /usr/local/redis/bin/redis-cli -a 123456 --cluster fix 192.168.1.103:6379 ## 执行 resharding 指令来为它分配 hash slots ## 执行下面命令后要依次设置移动 slot 的节点 ID 源节点列表可直接用 all /usr/local/redis/bin/redis-cli -a 123456 --cluster reshard 192.168.1.103:6379添加主节点并查看结果部分截图 查看主从节点状态/usr/local/redis/bin/redis-cli -a 123456 --cluster check 192.168.1.103:6379 | grep ‘M|S’ ## 随机添加从节点优先添加到从节点少的节点下 /usr/local/redis/bin/redis-cli -a 123456 --cluster add-node 192.168.1.110:6379 192.168.1.103:6379 --cluster-slave ## 添加到指定主节点下添加到 103 即 rd1 下面 /usr/local/redis/bin/redis-cli -a 123456 --cluster add-node 192.168.1.111:6379 192.168.1.103:6379 --cluster-slave --cluster-master-id 9e99c815e3660680439261573c5c5b382573cf1c随机添加 查看主从节点状态/usr/local/redis/bin/redis-cli -a 123456 --cluster check 192.168.1.103:6379 2.Java 访问 Redis 集群测试 配置集群主节点 spring:data:redis:password: 123456 # 访问主从节点的密码cluster:max-redirects: 10nodes: 192.168.1.103:6379,192.168.1.105:6379,192.168.1.108:6379,192.168.1.109:6379lettuce:pool:max-idle: 50min-idle: 10max-active: 100max-wait: 1000enabled: truelogging:level:root: infoio.lettuce.core: debugorg.springframework.data.redis: debug 修改插入方法计算 SLOT package org.example.controller;import io.lettuce.core.codec.CRC16; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;/*** author zhuwd moon* Description* create 2023-08-23 20:13*/ RestController RequestMapping(/redis) public class RedisTest {AutowiredRedisTemplateString, Object redisTemplate;private static final int SLOT_S 16384;GetMapping(/write)public void write(String key,String val){int slot CRC16.crc16(key.getBytes())%SLOT_S;redisTemplate.opsForValue().set(key,val);System.out.println(slot slot key key val val);}GetMapping(/read)public void read(String key){System.out.println(redisTemplate.opsForValue().get(key));} } 测试插入数据127.0.0.1:8080/redis/write?keytestvalreHello 查看日志插入主节点为 rd3【192.168.1.105】槽号为 6918 读数据127.0.0.1:8080/redis/read?keytest 从节点 192.168.1.104 为 rd2查看其是否为 rd3 从节点/usr/local/redis/bin/redis-cli -a 123456 --cluster check 192.168.1.103:6379 客户端查看数据 查看集群槽号 12376 属于 103 节点 rd1 插入 Key 测试其节点127.0.0.1:8080/redis/write?keyRedisTJXYval12376 查看客户端数据
http://www.w-s-a.com/news/125079/

相关文章:

  • 网站积分的作用网站开发需要看相关书籍
  • 建设银行总行网站alexa排名与什么有关系
  • 阿里云服务器发布网站收款网站怎么建设
  • 开发东莞网站制作公司做网站优化步骤
  • 网站版权信息的正确写法如何制作网络游戏
  • 郑州移动端网站建设如何在网上推广自己的公司
  • 企业建站源码系统破解网站后台
  • 石家庄网站开发报价企业注册资本代表什么
  • 招商平台公司宁波seo教程推广平台
  • 哪些网站可以做房产推广垂直门户网站都有什么
  • 不得不知道的网站金石项目管理软件
  • 怎么恢复网站数据库网站开发作业代做
  • 哪里建设网站最好用中国第五冶金建设公司医院网站
  • 雄安网建 网站建设订餐网站建设
  • 广州视频网站建站公司网站 体系
  • 青浦门户网站网站推广烟台公司电话
  • 湖北荆门建设银行网站wordpress购物模板下载
  • 学ui+wordpress模板北京推广优化
  • 建分类网站得花多少钱深圳设计网站开发
  • 网站集群建设和网站集约化百度商桥怎么绑定网站
  • 青岛模板网站建设价格网络品牌网站建设
  • 网站建设的几大要素网站的做网站的公司
  • 怎么登陆自己的公司网站垂直电商网站建设
  • 温州微网站制作哪里有许昌网站建设哪家最好
  • 中国中小企业网站官网网页制作工具按其制作方式分 可以分为
  • 做资源下载网站违法吗河南企业做网站
  • 网站开发总体功能设计网站建设 北京昌平
  • 辽宁省高等级公路建设局网站书画院网站建设方案
  • 本地生活网站 源码重庆本地网站有哪些
  • 企业网站域名服务器国外html响应式网站