zoukankan      html  css  js  c++  java
  • Centos7上搭建redis主从

    1. 节点(服务器)数量说明

    按照redis官方建议:salve和master的数量按照2n+1台服务器(1台master节点,2n台slave节点)
    有兴趣的可以了解下redis的master选举机制
    但是本文是1台master节点,1台slave节点做测试,测试结果也没问题
    如果你要添加第2台salve节点的话,两台slave节点的配置几乎是一样的,我会在下文中提及不一样的地方
    

    2. 本文测试redis主从要达到的目的

    1. master节点上的redis服务down掉之后,slave节点升级为master节点
    2. 当老的master节点上的redis服务起来后,视新master节点为master,自己降为slave节点
    3. 如果你想让老的master还当master,你可以循环以上1、2两步,测过才知道
    

    3. 主机列表

    角色 IP
    master 192.168.1.9
    slave 192.168.1.10

    4. 配置前提

    假设你已经在master主机上配置好了redis服务(即单机版)

    假设你已经在slave主机上配置好了redis服务(即单机版)

    如果你还没有配置好单机版的redis服务,请点击这里,先把2个单机版的搞起来

    再回来搞这个主从

    5. 主从配置过程

    配置主从时,把2台机器的redis服务先停掉

    5.1 redis主配置文件需要改动的地方如下,其余保持默认即可

    [root@master ~]# vim /etc/redis.conf
    bind 192.168.1.9
    daemonize yes
    logfile "/var/log/redis.log"
    masterauth "123456"                  # 其它redis视我为master时的验证密码
    requirepass "123456"                 # 本机redis的登录密码
    maxmemory 100mb
    

    5.2 redis主的哨兵配置文件需要改动的地方如下,其余保持默认即可

    [root@master ~]# cp /usr/local/redis-4.0.6/sentinel.conf /etc/sentinel.conf
    [root@master ~]# vim /etc/sentinel.conf
    bind 192.168.1.9
    sentinel monitor mymaster 192.168.1.9 6379 2
    sentinel auth-pass mymaster 123456
    logfile "/var/log/sentinel.log"
    daemonize yes
    

    如果你在windows server上搭建主从,你需要手动创建sentinel.conf,除了添加一些内容,完整的配置内容如下:

    bind 192.168.1.9
    port 26379
    dir "/tmp"
    sentinel myid 6a23c773b7e139e2ebdd64e5c5fb6de3df3f7b77
    sentinel monitor mymaster 192.168.1.9 6379 2
    sentinel auth-pass mymaster 123456
    sentinel config-epoch mymaster 5
    sentinel leader-epoch mymaster 5
    logfile "/var/log/sentinel.log"
    daemonize yes
    

    5.3 redis从配置文件需要改动的地方如下,其余保持默认即可

    [root@slave ~]# vim /etc/redis.conf
    bind 192.168.1.10
    daemonize yes
    logfile "/var/log/redis.log"
    masterauth "123456"                  # 其它redis视我为master时的验证密码
    requirepass "123456"                 # 本机redis的登录密码
    maxmemory 100mb
    slaveof 192.168.1.9 6379           # master的ip和redis端口
    

    5.4 redis从的哨兵配置文件需要改动的地方如下,其余保持默认即可

    [root@slave ~]# cp /usr/local/redis-4.0.6/sentinel.conf /etc/sentinel.conf
    [root@slave ~]# vim /etc/sentinel.conf
    bind 192.168.1.10
    sentinel monitor mymaster 192.168.1.9 6379 2       # master的ip和redis端口
    sentinel auth-pass mymaster 123456
    logfile "/var/log/sentinel.log"
    daemonize yes
    

    如果你在windows server上搭建主从,你需要手动创建sentinel.conf,除了添加一些内容,完整的配置内容如下:

    bind 192.168.1.10
    port 26379
    dir "/tmp"
    sentinel myid 7f24d4d935d7e97c8267910535e0c1f0f26b8d6d
    sentinel monitor mymaster 192.168.1.9 6379 2
    sentinel auth-pass mymaster 123456
    sentinel config-epoch mymaster 5
    sentinel leader-epoch mymaster 5
    logfile "/var/log/sentinel.log"
    daemonize yes
    

    6. 哨兵是什么?

    1. 哨兵是redis用于主从或集群的不可缺少的故障切换机制。
    2. 单台redis的话,程序连接的是redis服务的6379端口;主从或集群的话,程序不再直接连接redis服务了,
       而要连接的是多个哨兵,哨兵会告诉程序端找哪个redis服务。
    

    7. 在2台机器上都允许端口通过防火墙

    在2台机器上允许对方访问对方的redis端口(6379)和哨兵端口(26379)

    iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 6379 -j ACCEPT
    iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 26379 -j ACCEPT
    service iptables save
    

    8. 在2台机器上起redis服务,并测试主从是否同步

    8.1 起redis服务

    [root@master ~]# redis-server /etc/redis.conf >> /var/log/redis-init.log 2>&1
    

    8.2 测试主从是否可以同步数据

    在master服务器终端上登录redis服务

    [root@master ~]# redis-cli -h 192.168.1.9 -p 6379 -a 123456
    192.168.1.9:6379> info replication         # 查看主从状态
    # Replication
    role:master
    connected_slaves:1
    slave0:ip=192.168.1.10,port=6379,state=online,offset=30290,lag=1
    master_replid:426acab1b0c50873b516b7f0bf265c98c927a4f2
    master_replid2:0000000000000000000000000000000000000000
    master_repl_offset:30290
    second_repl_offset:-1
    repl_backlog_active:1
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:1
    repl_backlog_histlen:30290
    192.168.1.9:6379>
    192.168.1.9:6379> quit
    not connected>
    [root@master ~]#
    

    在slave服务器终端上登录redis服务

    [root@slave ~]# redis-cli -h 192.168.1.10 -p 6379 -a 123456
    192.168.1.10:6379> info replication        # 查看主从状态
    # Replication
    role:slave
    master_host:192.168.1.9
    master_port:6379
    master_link_status:up
    master_last_io_seconds_ago:9
    master_sync_in_progress:0
    slave_repl_offset:350
    slave_priority:100
    slave_read_only:1
    connected_slaves:0
    master_replid:37472d667df3859cd37371453be2d0197ffbb07b
    master_replid2:0000000000000000000000000000000000000000
    master_repl_offset:350
    second_repl_offset:-1
    repl_backlog_active:1
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:1
    repl_backlog_histlen:350
    192.168.1.10:6379>
    192.168.1.10:6379>
    192.168.1.10:6379>
    

    在master服务器终端上登录redis服务,创建数据

    192.168.1.9:6379> set name zhangsan
    OK
    192.168.1.9:6379> set age 20
    OK
    192.168.1.9:6379> get name
    "zhangsan"
    192.168.1.9:6379> get age
    "20"
    

    在slave服务器终端上登录redis服务,如果可以查询到数据,说明数据同步到从了

    192.168.1.10:6379> get name
    "zhangsan"
    192.168.1.10:6379> get age
    "20"
    

    8.3 在2台机器上起哨兵服务,测试故障转移功能

    [root@master ~]# redis-sentinel /etc/sentinel.conf
    
    [root@slave ~]# redis-sentinel /etc/sentinel.conf
    

    把master的redis服务停掉

    192.168.1.9:6379> shutdown
    not connected> quit
    [root@master ~]#
    

    等待5秒后,查看从上的redis服务是否升级为了master

    192.168.1.10:6379> info replication
    # Replication
    role:master
    connected_slaves:0
    master_replid:33b4f309f906ecf6105b9822661236ad7689af27
    master_replid2:426acab1b0c50873b516b7f0bf265c98c927a4f2
    master_repl_offset:59193
    second_repl_offset:53354
    repl_backlog_active:1
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:1
    repl_backlog_histlen:59193
    192.168.1.10:6379> get name
    "zhangsan"
    192.168.1.10:6379> get age
    "20"
    192.168.1.10:6379> quit
    [root@slave ~]#
    

    把192.168.1.9上的redis服务起来,命令参照上文8.1

    再查看192.168.1.10上的redis主从状态,5秒后,应该会有slave信息

    192.168.1.10:6379> info replication
    # Replication
    role:master
    connected_slaves:1
    slave0:ip=192.168.1.9,port=6379,state=online,offset=112,lag=1
    master_replid:431fb03e1644a50620dd150c2527ca5acaa5648b
    master_replid2:0000000000000000000000000000000000000000
    master_repl_offset:112
    second_repl_offset:-1
    repl_backlog_active:1
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:1
    repl_backlog_histlen:112
    192.168.1.10:6379>
    

    注意1: master角色是非抢占模式

    即:一旦集群中存在master,则其余节点视其为master,除非master挂掉

    注意2: 从库是只读的

    9. 查看redis日志和哨兵日志

    在/etc/redis.conf和/etc/sentinel.conf里查找日志文件记录在哪个位置了,去看吧

    10. 你可以再增加1台slave主机,来测试一下2n+1台的主从

  • 相关阅读:
    drug targets | genetic | 遗传 | 药物靶点
    Cistrome数据库挖掘转录因子靶基因 | TF | target
    Gene-Regulatory Networks (GRNs) | 进阶分析
    PTBP1 | Polypyrimidine Tract Binding Protein | 聚嘧啶区结合蛋白 | 关键调控因子
    HDAC1 | histone deacetylases | 组蛋白脱乙酰基酶 | 关键调控因子
    免疫反应 | Immune Response
    干细胞疗法 | 抗衰老
    生物信息ID大全 | rsid | Ensembl | HGNC | Entrez | Refseq | Uniprot | OMIM
    (转)解药 | AI发现一罕见病新靶点 投资界谨慎乐观
    genome browser | ggplot | 基因组可视化 | R | transcript | isoform
  • 原文地址:https://www.cnblogs.com/weibin1/p/10441832.html
Copyright © 2011-2022 走看看