2021年7月19日星期一

Redis集群搭建(v6)

Redis Sentinel集群搭建

介绍

  • 使用6.2.4 搭建 主从、哨兵、集群模式。

准备

  • 准备三台电脑

    IP地址主机名称
    172.16.241.2linux1
    172.16.241.3linux2
    172.16.241.4linux3
    172.16.241.5linux4
    172.16.241.6linux5
    172.16.241.7linux6
  • 机器配置

    1. linux 系统

      image-20210716100620011

    2. 关闭防火墙

      systemctl stop firewalld.service // 关闭

      systemctl disable firewalld.service // 禁止开启自动

      systemctl status firewalld.service // 查看防火墙状态

    3. 修改 linux配置

      net.core.somaxconn = 2048
      vm.overcommit_memory=1

  • 下载redis 包,解压并make(如果make指令缺失,执行yum install -y gcc automake autoconf libtool make

    $ wget https://download.redis.io/releases/redis-6.2.4.tar.gz$ tar xzf redis-6.2.4.tar.gz$ cd redis-6.2.4$ make
  • 文件目录目录如下:

    image-20210715154658452

主从模式

  • 修改三台机器的redis.conf

    1. master(linux1)

      bind * //允许其他服务器访问
    2. 其他两个Salve(linux2, linux3)

      slaveof linux1 6379 // 配置两个slave属于哪个master
  • 启动

    启动master,然后启动两个salve

    进入src目录执行./redis-server ../redis.conf

  • 验证主从模式是否搭建完毕

    访问其中任意一个redis-cli: ./redis-cli 然后输入./redis-server ../redis.conf

    a

    两个salve已经存在。

  • Java调用

    1. pom引入

    2. <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.6.1</version></dependency>
    3. 核心代码

      // 主从模式// 1. 向master写Jedis jedis = new Jedis("linux1", 6379);jedis.set("a", "accccc");jedis.close();// 2.从slave读取Jedis readJedis = new Jedis("linux2", 6379);String a = readJedis.get("a");System.out.println("获取从master中写入的数据a = " + a);readJedis.close();

Sentinel哨兵模式

  • 按照主从模式的配置,启动三个节点

  • 修改sentinel.conf, 监控master主机

    sentinel monitor mymaster 172.16.241.2 6379 2

  • 启动master(linux1)的sentinel

    image-20210716095204177

  • 启动slave1, slave2, 查看master日志

    image-20210716111246583

  • 测试

    1. 停止slave1,查看master的日志

    2. image-20210716112136530

    3. JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();jedisPoolConfig.setMaxIdle(5);jedisPoolConfig.setMaxTotal(10);jedisPoolConfig.setMinIdle(5);Set<String> sentinels = new HashSet<>();sentinels.add("linux1:26379");sentinels.add("linux2:26379");sentinels.add("linux3:26379");JedisSentinelPool jedisSentinelPool = new JedisSentinelPool("mymaster", sentinels, jedisPoolConfig);Jedis pj = jedisSentinelPool.getResource();pj.set("a", "sentinel");String sentinelStored = pj.get("a");System.out.println("使用sentinel模式存储的a=" + sentinelStored);
    4. 重启master,sentinel会选择其中一个slave升级为master,原master重启后,会变为slave不会重新升级为master。

Cluster 集群

  • 跟着官网教程(https://redis.io/topics/cluster-tutorial)

  • 配置说明

    1. cluster-enabled<yes/no>:启用集群支持
    2. cluster-config-file<filename>:该文件无需用户编辑,是Cluster集群节点变化后时自动持久化集群配置
    3. cluster-node-timeout<milliseconds>:Redis集群节点不可用的最长时间,如果主节点在指定的时间内无法访问,那么由从节点进行故障转移
    4. luster-slave-validity-factor<factor>:如果设置为0,那么从节点始终认为自己有效。将始终尝试对主节点进行故障转移
    5. cluster-migration-barrier<count>:一个主节点的将保持连接的最小从节点数量,以便另一个从节点迁移到不再被任何从站覆盖的主节点
    6. cluster-require-full-coverage<yes/no>:如果将其设置为 yes,默认情况下,如果任何节点未覆盖一定百分比的密钥空间,则集群将停止接受写入。如果该选项设置为 no,即使只能处理有关密钥子集的请求,集群仍将提供查询服务。
    7. luster-allow-reads-when-down<yes/no>:如果设置为 no,默认情况下,当集群被标记为失败时,Redis 集群中的节点将停止服务所有流量,或者当节点无法访问时达到法定人数或未达到完全覆盖时。这可以防止从不知道集群中的变化的节点读取可能不一致的数据。可以将此选项设置为 yes 以允许在失败状态期间从节点读取,这对于希望优先考虑读取可用性但仍希望防止不一致写入的应用程序非常有用。它也可以用于使用只有一个或两个分片的 Redis Cluster 时,因为它允许节点在主节点发生故障但无法自动故障转移时继续提供写入服务。
  • 配置和使用Redis集群(官网教程是在一个机器上启动多个服务的伪集群,本文使用之前准备的三台虚拟机)

    1. 在三台节点上,解压之前的压缩包为redis-cluster, 并执行make指令。

    2. 三台机器都配置redis.conf(因为我之前在这三台机器上启动了redis,我又不想改端口号。所以讲之前的redis和sentinel都关闭)

      最小配置:

      cluster-enabled yescluster-config-file nodes.confcluster-node-timeout 5000appendonly yes
    3. 分别启动redis

    4. 使用redis-cli启动集群:./redis-cli --cluster create 172.16.241.2:6379 172.16.241.3:6379 172.16.241.4:6379 172.16.241.5:6379 172.16.241.6:6379 172.16.241.7:6379 --cluster-replicas 1

      日志信息如下:

      Performing hash slots allocation on 6 nodes...
      Master[0] -> Slots 0 - 5460
      Master[1] -> Slots 5461 - 10922
      Master[2] -> Slots 10923 - 16383
      Adding replica 172.16.241.6:6379 to 172.16.241.2:6379
      Adding replica 172.16.241.7:6379 to 172.16.241.3:6379
      Adding replica 172.16.241.5:6379 to 172.16.241.4:6379
      M: b31d4478d5b521e289491a89da26976a85b1f3c9 172.16.241.2:6379
      slots:[0-5460] (5461 slots) master
      M: 2cdbe3aba12a65444a00a2170390d1dbf108a865 172.16.241.3:6379
      slots:[5461-10922] (5462 slots) master
      M: 31ac1ad83587697634bae2a363dfdcd58b15d63e 172.16.241.4:6379
      slots:[10923-16383] (5461 slots) master
      S: da22af2f724033b2e7cec8fd49d4e80aae4712f3 172.16.241.5:6379
      replicates 31ac1ad83587697634bae2a363dfdcd58b15d63e
      S: 732ce03d83245d0a0a9b002bbfa8bf959aeb7720 172.16.241.6:6379
      replicates b31d4478d5b521e289491a89da26976a85b1f3c9
      S: 546e7ed39dc7427bed062e5529e5831c9a35bdcb 172.16.241.7:6379
      replicates 2cdbe3aba12a65444a00a2170390d1dbf108a865
      Can I set the above configuration? (type 'yes' to accept): yes
      Nodes configuration updated
      Assign a different config epoch to each node
      Sending CLUSTER MEET messages to join the cluster
      Waiting for the cluster to join
      ..
      Performing Cluster Check (using node 172.16.241.2:6379)
      M: b31d4478d5b521e289491a89da26976a85b1f3c9 172.16.241.2:6379
      slots:[0-5460] (5461 slots) master
      1 additional replica(s)
      M: 2cdbe3aba12a65444a00a2170390d1dbf108a865 172.16.241.3:6379
      slots:[5461-10922] (5462 slots) master
      1 additional replica(s)
      S: 546e7ed39dc7427bed062e5529e5831c9a35bdcb 172.16.241.7:6379
      slots: (0 slots) slave
      replicates 2cdbe3aba12a65444a00a2170390d1dbf108a865
      S: 732ce03d83245d0a0a9b002bbfa8bf959aeb7720 172.16.241.6:6379
      slots: (0 slots) slave
      replicates b31d4478d5b521e289491a89da26976a85b1f3c9
      S: da22af2f724033b2e7cec8fd49d4e80aae4712f3 172.16.241.5:6379
      slots: (0 slots) slave
      replicates 31ac1ad83587697634bae2a363dfdcd58b15d63e
      M: 31ac1ad83587697634bae2a363dfdcd58b15d63e 172.16.241.4:6379
      slots:[10923-16383] (5461 slots) master
      1 additional replica(s)
      [OK] All nodes agree about slots configuration.
      Check f......

      原文转载:http://www.shaoqun.com/a/887693.html

      跨境电商:https://www.ikjzd.com/

      e邮包:https://www.ikjzd.com/w/594.html?source=tagwish

      斑马物流:https://www.ikjzd.com/w/1316

      zappos:https://www.ikjzd.com/w/330


      RedisSentinel集群搭建介绍使用6.2.4搭建主从、哨兵、集群模式。准备准备三台电脑IP地址主机名称172.16.241.2linux1172.16.241.3linux2172.16.241.4linux3172.16.241.5linux4172.16.241.6linux5172.16.241.7linux6机器配置linux系统关闭防火墙systemctlstopfirewall
      瀚霖:https://www.ikjzd.com/w/2345
      省旅游执法总队开展港澳游大检查 :http://www.30bags.com/a/409401.html
      省内景区积极应对雨雪天气 :http://www.30bags.com/a/409101.html
      省内自驾旅游攻略 :http://www.30bags.com/a/406755.html
      省钱旅游小贴士:http://www.30bags.com/a/414429.html
      小坏蛋今晚可以不戴套 求求你别在里面会怀孕:http://lady.shaoqun.com/a/248299.html
      老师晚上求我桶她 老师好大好深啊把腿开开:http://lady.shaoqun.com/m/a/247844.html
      情感故事:回忆我当坐台小姐的那些年(11/15):http://www.30bags.com/m/a/249663.html
      如何增加亚马逊留评率?:https://www.ikjzd.com/articles/146720
      8月15日起,HPL征收美线5000$/箱增值附加费!美西铁路进口转运暂停7天:https://www.ikjzd.com/articles/146729
      今年中美航运成本飙涨翻倍!一些航线运费上涨近10倍!:https://www.ikjzd.com/articles/146728
      小学女生被4个男生拖到男厕所。嫌疑人不满14岁,没有立案:http://lady.shaoqun.com/a/425284.html

没有评论:

发表评论