zoukankan      html  css  js  c++  java
  • redis主从

    一、文档参考引用

    使用redis 安装配置.note安装redis后进行主从配置,在同一台主机上搭建

    本文参考https://www.cnblogs.com/gossip/p/5992716.htmlhttps://www.cnblogs.com/think-in-java/p/5123884.html

    二、主要配置情况

    说明:当前是使用了同一个主机配置(实际环境中应该分部在多台主机上),所以都用了IP127.0.0.1

    1、按照1主2从的结构搭建,即1个Master,2个Slaver节点

    2、Redis配置文redis.conf改为带端口号名称以便识别redis端口号.conf的配置

    3、Slaver连接Master:slaveof host:ip          (测试时使用slaveof手动连接master,正式环境使用配置文件)

    4、查看主从信息:info Replication

    daemonize

    (后台运行)

    pidfile

    port

    logfile(日志)

    # slaveof <masterip> <masterport>

      (测试时使用slaveof手动连接master,正式环境使用配置文件)

    Master

    yes

    /usr/local/dblog/redis/redis6379.pid

    6379

    "/usr/local/dblog/redis/redis6379.log"

    slaveof no one

    Slaver1

    yes

    /usr/local/dblog/redis/redis6381.pid

    6381

    "/usr/local/dblog/redis/redis6381.log"

    slaveof 127.0.0.1 6379

    Slaver2

    yes

    /usr/local/dblog/redis/redis6382.pid

    6382

    "/usr/local/dblog/redis/redis6382.log"

    slaveof 127.0.0.1 6379

    # mkdir -p /usr/local/dblog/redis

    # mkdir -p /usr/local/dbdata/redis

    # mkdir -p /usr/local/dbconf/redis

    配置情况如下(其中6479端口号可以更改为对应的)

    [root@localhost redis]# grep ^[^#] redis6379.conf

    bind 127.0.0.1

    protected-mode yes

    port 6379

    tcp-backlog 511

    timeout 0

    tcp-keepalive 300

    daemonize yes

    supervised no

    pidfile /usr/local/dblog/redis/redis6379.pid

    loglevel notice

    logfile "/usr/local/dblog/redis/redis6379.log"

    databases 16

    always-show-logo yes

    save 900 1

    save 300 10

    save 60 10000

    stop-writes-on-bgsave-error yes

    rdbcompression yes

    rdbchecksum yes

    dbfilename dump6379.rdb

    dir /usr/local/dbdata/redis

    # slaveof <masterip> <masterport> 指定主

    slave-serve-stale-data yes

    slave-read-only yes

    repl-diskless-sync no

    repl-diskless-sync-delay 5

    repl-disable-tcp-nodelay no

    slave-priority 100

    lazyfree-lazy-eviction no

    lazyfree-lazy-expire no

    lazyfree-lazy-server-del no

    slave-lazy-flush no

    appendonly no

    appendfilename "appendonly.aof"

    appendfsync everysec

    no-appendfsync-on-rewrite no

    auto-aof-rewrite-percentage 100

    auto-aof-rewrite-min-size 64mb

    aof-load-truncated yes

    aof-use-rdb-preamble no

    lua-time-limit 5000

    slowlog-log-slower-than 10000

    slowlog-max-len 128

    latency-monitor-threshold 0

    notify-keyspace-events ""

    hash-max-ziplist-entries 512

    hash-max-ziplist-value 64

    list-max-ziplist-size -2

    list-compress-depth 0

    set-max-intset-entries 512

    zset-max-ziplist-entries 128

    zset-max-ziplist-value 64

    hll-sparse-max-bytes 3000

    activerehashing yes

    client-output-buffer-limit normal 0 0 0

    client-output-buffer-limit slave 256mb 64mb 60

    client-output-buffer-limit pubsub 32mb 8mb 60

    hz 10

    aof-rewrite-incremental-fsync yes

    另两配置文件可直接复制后进行修改

    # sed -i s/6379/6381/g redis6381.conf

    # sed -i s/6379/6382/g redis6382.conf

    三、开启实例手动测试

    1、启动实例

    # redis-server /usr/local/dbconf/redis/redis6379.conf

    # redis-server /usr/local/dbconf/redis/redis6381.conf

    # redis-server /usr/local/dbconf/redis/redis6382.conf

    2、连接实例查看信息

    1Replication信息,三个端口的基本一样,role都为master

    # redis-cli -h 127.0.0.1 -p 6379

    127.0.0.1:6379> info Replication

    # Replication

    role:master

    connected_slaves:0

    master_replid:9499d69fa68edd997118285e8d84db5471a169ef

    master_replid2:0000000000000000000000000000000000000000

    master_repl_offset:0

    second_repl_offset:-1

    repl_backlog_active:0

    repl_backlog_size:1048576

    repl_backlog_first_byte_offset:0

    repl_backlog_histlen:0

    3)手动从指定主(在从上操作,两个从机操作方式一样,返回信息也一相同)

    127.0.0.1:6381> slaveof 127.0.0.1 6379

    OK

    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:0

    slave_priority:100

    slave_read_only:1

    connected_slaves:0

    master_replid:e7bacd0fdeef91da69221a778370c5f3dc0f2170

    master_replid2:0000000000000000000000000000000000000000

    master_repl_offset:0

    second_repl_offset:-1

    repl_backlog_active:1

    repl_backlog_size:1048576

    repl_backlog_first_byte_offset:1

    repl_backlog_histlen:0

    指定后主的Replication信息

    127.0.0.1:6379> info replication

    # Replication

    role:master

    connected_slaves:2

    slave0:ip=127.0.0.1,port=6381,state=online,offset=34735,lag=1

    slave1:ip=127.0.0.1,port=6382,state=online,offset=34735,lag=0

    master_replid:7f9a262ec80944797499774fdd7a00043acebf9b

    master_replid2:21a4e84ab69894128307bcd58c57e4d636b5c739

    master_repl_offset:34867

    second_repl_offset:30702

    repl_backlog_active:1

    repl_backlog_size:1048576

    repl_backlog_first_byte_offset:16296

    repl_backlog_histlen:18572

    4)主从同步测试

    在主上执行

    127.0.0.1:6379> set test 'I am test'

    OK

    在备上执行

    127.0.0.1:6381> get test

    "I am test"

    127.0.0.1:6381> set aa bb

    (error) READONLY You can't write against a read only slave. 可以发现从只读

    5)手动操作测试主挂掉换主

    在主上执行

    127.0.0.1:6379> shutdown

    not connected>

    在从(6381)上执行

    127.0.0.1:6381> slaveof no one

    OK

    在从(6382)上执行,将指定主127.0.0.1 6381

    127.0.0.1:6382> slaveof 127.0.0.1 6381

    OK

    这样从(6381)就为当前主了

    手动将6379拉起后指定主6381

    # redis-server /usr/local/dbconf/redis/redis6379.conf

    # redis-cli -h 127.0.0.1 -p 6379

    127.0.0.1:6379> slaveof 127.0.0.1 6381

    OK

    127.0.0.1:6381> info Replication

    # Replication

    role:master

    connected_slaves:2

    slave0:ip=127.0.0.1,port=6382,state=online,offset=16309,lag=1

    slave1:ip=127.0.0.1,port=6379,state=online,offset=16309,lag=1

    master_replid:21a4e84ab69894128307bcd58c57e4d636b5c739

    master_replid2:e7bacd0fdeef91da69221a778370c5f3dc0f2170

    master_repl_offset:16309

    second_repl_offset:2274

    repl_backlog_active:1

    repl_backlog_size:1048576

    repl_backlog_first_byte_offset:1

    repl_backlog_histlen:16309

    四、配置哨兵从而实现自动主从切换

    sentinel参考:http://doc.redisfans.com/topic/sentinel.html

    1)修改配置文件,配置文件参考:https://www.jianshu.com/p/f0ea643f7825  https://www.cnblogs.com/zhoujinyi/p/5570024.html

    # cp sentinel.conf sentinel26379.conf

    # grep ^[^#] /usr/local/dbconf/redis/sentinel26379.conf 红色字体是自己修改的,其中有的配置会根据当前redis服务情况自动调整

    port 26379

    sentinel myid f6c05ea79855664688492388058f0568c8b02f14

    dir "/tmp"

    sentinel monitor mymaster 127.0.0.1 6382 2

    sentinel config-epoch mymaster 5

    sentinel leader-epoch mymaster 5

    sentinel known-slave mymaster 127.0.0.1 6381

    sentinel known-slave mymaster 127.0.0.1 6379

    sentinel current-epoch 5

    sentinel announce-ip 127.0.0.1 #这里如果是本机127.0.0.1可以不用配置

    sentinel announce-port 6379

    logfile "/usr/local/dblog/redis/sentinel26379.log"

    daemonize yes

    2)启动sentinel

    # redis-server /usr/local/dbconf/redis/sentinel26379.conf --sentinel

    另一种启动方式 # redis-sentinel /usr/local/dbconf/redis/sentinel26379.conf

    3sentinel服务本身也不是万能的,也会宕机,所以我们还得部署sentinel集群,象我这样多启动几个sentinel。

    关注这个配置:sentinel monitor mymaster 127.0.0.1 6382 2  这个后面的数字2,是指当有两个及以上的sentinel服务检测到master宕机,才会去执行主从切换的功能。

    4)相关日志

  • 相关阅读:
    android aar Could not find :ucrop-debug2.2.4:.
    OpenGL 实践之贝塞尔曲线绘制
    OpenGL 实现视频编辑中的转场效果
    简单易用的图像解码库介绍 —— stb_image
    博客图床迁移记
    Android 图片加载框架 Glide4.x
    Android 屏幕适配插件 ScreenMatch
    Android .9.png 的介绍
    Android 网络框架 Retrofit2
    Android 网络框架 OKHttp3
  • 原文地址:https://www.cnblogs.com/uphold/p/11222115.html
Copyright © 2011-2022 走看看