• redis集群


    Redis集群在保证主从加哨兵的基本功能之外,还能够提升Redis存储数据的能力。

    一致性hash环

    k1-->crc(16)===? 0-16384

     redis集群的ping-pang机制:一个主机向另一个主机ping,另一个pang回来,说明连接成功,通过这样的方式判断redis是否宕机,如果ping了没有pang回来,不一定是它坏了,也有可能是你坏了。

    redis主机宕机后,从机可以上位

    集群默认分配16384个hash槽,如果有三个主节点,则每个阶段对应0-5000,5000-10000,1000-15000 

    有四个主节点 ,对应你  0-4000 4000-8000 8000-12000 12000-16000

    存取数据是对key进行crc16算法,对16384取余,余数在那个范围里就在那个redis里面存。

     Redis集群选举原理

     

    集群配置

    新建 /usr/local/docker/redis/cluster 目录  目录下新建 conf 目录   conf目录下新建redis1-6.conf文件

     下图是文件的内容

    1. # redis.conf
    2. # 指定redis的端口号
    3. port 7001
    4. # 开启Redis集群
    5. cluster-enabled yes
    6. # 集群信息的文件
    7. cluster-config-file nodes-7001.conf
    8. # 集群的对外ip地址
    9. cluster-announce-ip 192.168.59.12
    10. # 集群的对外port
    11. cluster-announce-port 7001
    12. # 集群的总线端口
    13. cluster-announce-bus-port 17001

    redis1-6.conf的ip地址都一样,是宿主主机地址,但是总线端口,对外port,集群信息文件,port改为对应的123456.

    docker-compose.yml文件如下:

    1. # docker-compose.yml
    2. version: "3.1"
    3. services:
    4. redis1:
    5. image: daocloud.io/library/redis:5.0.7
    6. restart: always
    7. container_name: redis1
    8. environment:
    9. - TZ=Asia/Shanghai
    10. ports:
    11. - 7001:7001
    12. - 17001:17001
    13. volumes:
    14. - ./conf/redis1.conf:/usr/local/redis/redis.conf
    15. command: ["redis-server","/usr/local/redis/redis.conf"]
    16. redis2:
    17. image: daocloud.io/library/redis:5.0.7
    18. restart: always
    19. container_name: redis2
    20. environment:
    21. - TZ=Asia/Shanghai
    22. ports:
    23. - 7002:7002
    24. - 17002:17002
    25. volumes:
    26. - ./conf/redis2.conf:/usr/local/redis/redis.conf
    27. command: ["redis-server","/usr/local/redis/redis.conf"]
    28. redis3:
    29. image: daocloud.io/library/redis:5.0.7
    30. restart: always
    31. container_name: redis3
    32. environment:
    33. - TZ=Asia/Shanghai
    34. ports:
    35. - 7003:7003
    36. - 17003:17003
    37. volumes:
    38. - ./conf/redis3.conf:/usr/local/redis/redis.conf
    39. command: ["redis-server","/usr/local/redis/redis.conf"]
    40. redis4:
    41. image: daocloud.io/library/redis:5.0.7
    42. restart: always
    43. container_name: redis4
    44. environment:
    45. - TZ=Asia/Shanghai
    46. ports:
    47. - 7004:7004
    48. - 17004:17004
    49. volumes:
    50. - ./conf/redis4.conf:/usr/local/redis/redis.conf
    51. command: ["redis-server","/usr/local/redis/redis.conf"]
    52. redis5:
    53. image: daocloud.io/library/redis:5.0.7
    54. restart: always
    55. container_name: redis5
    56. environment:
    57. - TZ=Asia/Shanghai
    58. ports:
    59. - 7005:7005
    60. - 17005:17005
    61. volumes:
    62. - ./conf/redis5.conf:/usr/local/redis/redis.conf
    63. command: ["redis-server","/usr/local/redis/redis.conf"]
    64. redis6:
    65. image: daocloud.io/library/redis:5.0.7
    66. restart: always
    67. container_name: redis6
    68. environment:
    69. - TZ=Asia/Shanghai
    70. ports:
    71. - 7006:7006
    72. - 17006:17006
    73. volumes:
    74. - ./conf/redis6.conf:/usr/local/redis/redis.conf
    75. command: ["redis-server","/usr/local/redis/redis.conf"]

    docker-compose up -d 运行

    启动了6个Redis的节点。

    随便跳转到一个容器内部,使用redis-cli管理集群

    在容器内部输入一下命令,6台reids对应的ip加端口

    redis-cli --cluster create 192.168.59.12:7001  192.168.59.12:7002  192.168.59.12:7003  192.168.59.12:7004  192.168.59.12:7005  192.168.59.12:7006 --cluster-replicas 1

    显示以下信息,点yes

    输入命令 redis-cli -h 192.168.59.12 -p 7001 -c 连接   输入7001端口,存到7003里面了,就是通过算法算的

     

     redis-cli连不上

     

  • 相关阅读:
    Controller层代码优化
    前端面试题2
    Java实用类-Enum(枚举)
    Mybatis-Plus《学习笔记 22版尚硅谷 》——感谢【尚硅谷】官方文档
    windows10 vs2015编译64位activemq
    [PHP]写个简单的分页静态接口用宝塔部署到Nginx
    【微服务~Nacos】Nacos服务提供者和服务消费者
    在idea下新建javaweb项目-部署-运行
    【论文笔记】—低照度图像增强—Semi-Supervised—DRBN—2020-CVPR
    Fiddler的安装和简单使用
  • 原文地址:https://blog.csdn.net/weixin_60934893/article/details/127985363