• Redis 搭建高可用集群


    729161092ab248a6aea2b17986050e60.jpg、单个redis服务搭建请参考:redis服务搭建

     

     

    2、在/usr/local下创建目录redis-cluster,并在redis-cluster下创建 6379、6380、6381目录以及data、temp目录

     

    # cd /usr/local

    # mkdir redis-cluster

    --其他文件创建类似,此处不一一写出

    3、复制安装后的redis的配置文件(我的在/etc/目录下)的redis.conf 和 sentinel.conf文件到 6379、6380、6381目录中.

     

    # cp /etc/redis.conf /usr/local/redis-cluster/6379

    # cp /etc/redis-sentinel.conf /usr/local/redis-cluster/6379

    --6380和6379类似,此处不一一写出

    4、主从配置,修改 redis.conf文件 

     

    主redis 6379目录:

     

    复制代码

    protected-mode yes

    port 6379

    daemonize yes

    pidfile /var/run/redis_6379.pid

    logfile /var/log/redis/redis_6379.log

    dir /usr/local/redis-cluster/6379/data

    slave-read-only yes

    requirepass foo(设置访问登录密码)

    #从服务设置了密码需要加上 

    masterauth foo 

    复制代码

    从slave1 6380:

     

    复制代码

    protected-mode yes

    port 6380

    daemonize yes

    pidfile /var/run/redis_6380.pid

    logfile /var/log/redis/redis_6380.log

    dir /usr/local/redis-cluster/6380/data 

    slaveof 127.0.0.1 6379 

    #若主服务设置了密码需要加上 

    masterauth foo 

    #从服务密码设置 

    requirepass foo

    复制代码

    从slave2 6381:

     

    复制代码

    protected-mode yes

    port 6381

    daemonize yes

    pidfile /var/run/redis_6381.pid

    logfile /var/log/redis/redis_6381.log

    dir /usr/local/redis-cluster/6381/data 

    slaveof 127.0.0.1 6379 

    #若主服务设置了密码需要加上,在设置哨兵时主从之间连接需要

    masterauth foo 

    #从服务密码设置 

    requirepass foo

    复制代码

    master既可以读,也可以写,而 从服务器是只可以读,不可写的.

     

    5、哨兵配置.

     

    主redis 6379 sentinel.conf

     

    protected-mode no

    port 26379

    dir "/usr/local/redis-cluster/6379/temp"

    sentinel monitor redis1 127.0.0.1 6379 2

    sentinel down-after-milliseconds redis1 10000

    sentinel failover-timeout redis1 60000

    其中redis1可自定义

     

    从slave1 6380 centinel.conf

     

    protected-mode no

    port 26380

    dir "/usr/local/redis-cluster/6380/temp"

    sentinel monitor redis1 127.0.0.1 6379 2

    sentinel down-after-milliseconds redis1 10000

    sentinel failover-timeout redis1 60000

    从slave2 7003 sentinel.conf

     

    protected-mode no

    port 26381

    dir "/home/redis/redis-cluster/6381/temp"

    sentinel monitor redis1 127.0.0.1 6381 2

    sentinel down-after-milliseconds redis1 10000

    sentinel failover-timeout redis1 60000

    哨兵配置完成.

     

    6、启动

     

    启动redis

    分别到6379、6380、6381的目录下执行启动命令:

     

    redis-server ./redis.conf 

     

    启动哨兵

     

    redis-server ./sentinel.conf 

     

    7、查看主从信息:

     

    复制代码

    127.0.0.1:6379> info replication

    # Replication

    role:master

    connected_slaves:2

    slave0:ip=127.0.0.1,port=6380,state=online,offset=420,lag=1

    slave1:ip=127.0.0.1,port=6381,state=online,offset=420,lag=1

    master_repl_offset:434

    repl_backlog_active:1

    repl_backlog_size:1048576

    repl_backlog_first_byte_offset:2

    repl_backlog_histlen:433

    复制代码

     

     

    复制代码

    127.0.0.1:6380> info replication

    # Replication

    role:slave

    master_host:127.0.0.1

    master_port:6379

    master_link_status:up

    master_last_io_seconds_ago:1

    master_sync_in_progress:0

    slave_repl_offset:168

    slave_priority:100

    slave_read_only:1

    connected_slaves:0

    master_repl_offset:0

    repl_backlog_active:0

    repl_backlog_size:1048576

    repl_backlog_first_byte_offset:0

    repl_backlog_histlen:0

    复制代码

     

     

    复制代码

    127.0.0.1:6381> info replication

    # Replication

    role:slave

    master_host:127.0.0.1

    master_port:6379

    master_link_status:up

    master_last_io_seconds_ago:9

    master_sync_in_progress:0

    slave_repl_offset:406

    slave_priority:100

    slave_read_only:1

    connected_slaves:0

    master_repl_offset:0

    repl_backlog_active:0

    repl_backlog_size:1048576

    repl_backlog_first_byte_offset:0

    repl_backlog_histlen:0

    复制代码

     

     

    8、验证

     

    127.0.0.1:6379> set test 123

    OK

     

     

    127.0.0.1:6380> get test

    "123"

    127.0.0.1:6380> set hh 6380

    (error) READONLY You can't write against a read only slave.

     

     

    127.0.0.1:6381> get test

    "123"

    127.0.0.1:6381> set xx 6381

    (error) READONLY You can't write against a read only slave.

     

     

    此时,我们可以把主服务或者从服务停掉进行测试来看看效果

     

    停掉主服务6379:

     

    复制代码

    [root@VM_0_15_centos 6379]# ps -ef |grep redis

    root 10690 30720 0 18:24 pts/4 00:00:00 tailf -n 200 /var/log/redis/sentinel.log

    root 15650 1 0 19:01 ? 00:00:01 redis-sentinel *:26379 [sentinel]

    root 16404 1 0 19:06 ? 00:00:00 redis-sentinel *:26381 [sentinel]

    root 16565 1 0 19:07 ? 00:00:00 redis-sentinel *:26380 [sentinel]

    root 17248 28933 0 19:12 pts/0 00:00:00 grep --color=auto redis

    root 31060 1 0 16:55 ? 00:00:06 redis-server *:6379

    root 31488 1 0 16:58 ? 00:00:06 redis-server *:6380

    root 31563 29043 0 16:58 pts/1 00:00:00 redis-cli -c -p 6380 -a foo

    root 31952 1 0 17:01 ? 00:00:06 redis-server *:6381

    root 32057 29125 0 17:02 pts/2 00:00:00 redis-cli -c -p 6381 -a foo

    [root@VM_0_15_centos 6379]# kill 31060

    复制代码

    sentinel日志:

    复制代码

    15650:X 18 Dec 19:13:44.834 # +sdown master mymaster 127.0.0.1 6379

    16565:X 18 Dec 19:13:44.852 # +sdown master mymaster 127.0.0.1 6379

    16404:X 18 Dec 19:13:44.861 # +sdown master mymaster 127.0.0.1 6379

    16404:X 18 Dec 19:13:44.920 # +odown master mymaster 127.0.0.1 6379 #quorum 3/2

    16404:X 18 Dec 19:13:44.920 # +new-epoch 1

    16404:X 18 Dec 19:13:44.920 # +try-failover master mymaster 127.0.0.1 6379

    16404:X 18 Dec 19:13:44.927 # +vote-for-leader 6d5a34396cd5912cbfe1134a70cd3e14338ebf24 1

    15650:X 18 Dec 19:13:44.934 # +new-epoch 1

    16565:X 18 Dec 19:13:44.934 # +new-epoch 1

    16565:X 18 Dec 19:13:44.940 # +vote-for-leader

     

  • 相关阅读:
    【数据结构】第七章 查找
    原来大厂都是这样监控Tomcat性能的,废话不多说,直接开干
    Spring Boot前后端分离之后端开发
    CSP-J1 CSP-S1 初赛 第1轮 数学问题(数论、排列组合等)
    C# SolidWorks二次开发---工程图简单版标注长宽
    ZZULIOJ 1105: 判断友好数对(函数专题) (C/C++)
    嵌入式面试/笔试C相关总结
    计算机毕业设计Java微博系统网站(源码+系统+mysql数据库+Lw文档)
    核酸检测人员安排
    springboot停车场车辆定位管理可视化分析系统的设计与实现毕业设计源码101702
  • 原文地址:https://blog.csdn.net/weixin_57763462/article/details/127931016