zoukankan      html  css  js  c++  java
  • Redis单机配置多实例,实现主从同步

    版权声明:本文为博主原创文章,欢迎转载,转载请保留或注明出处
    本文转自:http://www.cnblogs.com/lgeng/p/6623336.html 

    一,单机多实例:
    Redis官网: https://redis.io/
    1,安装:

    yum -y install gcc gcc-c++    #安装编译工具
    
    [root@localhost data]# wget http://download.redis.io/releases/redis-3.2.8.tar.gz
    [root@localhost data]# tar xzf redis-3.2.8.tar.gz
    [root@localhost data]# cd redis-3.2.8
    [root@localhost data]# make
    [root@localhost data]# mv redis-3.2.8  /usr/local/redis
    
    注意:可直接 yum install redis -y 安装

    启动:(默认启动6379端口)
    [root@localhost redis]# /usr/local/redis/src/redis-server 

     
     

    2,验证:使用 redis-cli命令验证 (注意路径)
    [root@localhost src]# /usr/local/redis/src/redis-cli -p 6379
    127.0.0.1:6379> keys *
    (empty list or set)
    127.0.0.1:6379> set k1 v1
    OK
    127.0.0.1:6379> keys *
    1) "k1"
    127.0.0.1:6379> get k1
    "v1"
    127.0.0.1:6379> 
    127.0.0.1:6379>

    3,配置环境变量 
    输入redis-server和redis-cli命令,每次输入完整的路径
    将路径添加到PATH变量中

    echo 'PATH=${PATH}:/usr/local/redis/src/' >> /etc/profile
    source  /etc/profile       #<== 重新加载配置文件

    二,单机多实例

    创建不同实例的数据存放目录 分别创建6380,6381,6382 三个实例
    每个实例目录中分别创建 conf,db,log目录,并拷贝配置文件到conf中

    [root@localhost /]# mkdir -p  /data/redis/{6380,6381,6382}/{conf,db,log}
    [root@localhost /]# cp /usr/local/redis/redis.conf /data/redis/6380/conf/
    [root@localhost /]# cp /usr/local/redis/redis.conf /data/redis/6381/conf/
    [root@localhost /]# cp /usr/local/redis/redis.conf /data/redis/6382/conf/
    [root@localhost /]# 
    [root@localhost /]# cd /data/redis
    [root@localhost redis]# ls
    6380  6381  6382
    [root@localhost redis]# tree
    .
    ├── 6380
    │   ├── conf
    │   │   └── redis.conf
    │   ├── db
    │   └── log
    ├── 6381
    │   ├── conf
    │   │   └── redis.conf
    │   ├── db
    │   └── log
    └── 6382
        ├── conf
        │   └── redis.conf
        ├── db
        └── log
     
    12 directories, 3 files
    [root@localhost redis]# 
    [root@localhost redis]# 

    修改配置文件:


    将redis.conf修改为对应的实例参数,修改部分如下

    [root@localhost redis]# grep "6380\|daemonize" 6380/conf/redis.conf
    daemonize yes                     <== daemon进程运行
    pidfile /data/redis/6380/redis.pid           <== 进程id存放文件
    port 6380                                    <== 端口
    logfile /data/redis/6380/log/redis.log       <== 日志目录
    dir /data/redis/6380/db/                     <== db目录
    [root@localhost redis]# 
    [root@localhost redis]# grep "6381" 6381/conf/redis.conf 
    daemonize yes
    pidfile /data/redis/6381/redis.pid
    port 6381
    logfile /data/redis/6381/log/redis.log
    dir /data/redis/6381/db/
    [root@localhost redis]# 
    [root@localhost redis]# grep "6382" 6382/conf/redis.conf
    daemonize yes 
    pidfile /data/redis/6382/redis.pid
    port 6382
    logfile /data/redis/6382/log/redis.log
    dir /data/redis/6382/db/
    [root@localhost redis]# 
    [root@localhost redis]# 

    启动实例:

    [root@localhost redis]# redis-server /data/redis/6380/conf/redis.conf
    [root@localhost redis]# redis-server /data/redis/6381/conf/redis.conf
    [root@localhost redis]# redis-server /data/redis/6382/conf/redis.conf
    [root@localhost redis]# 
    [root@localhost redis]# netstat -ntlp | grep -E ":6380|:6381|:6382"
    tcp        0      0 127.0.0.1:6380              0.0.0.0:*                   LISTEN      14301/redis-server  
    tcp        0      0 127.0.0.1:6381              0.0.0.0:*                   LISTEN      14305/redis-server  
    tcp        0      0 127.0.0.1:6382              0.0.0.0:*                   LISTEN      14309/redis-server  
    [root@localhost redis]# 
    [root@localhost redis]# 

    验证(略) redis-cli -p 6380 ; redi-cli -p 6381 ; redis-cli -p 6382

    三,配置主从同步
    修改从库配置,6380实例为主库,  从库为 6381,6382

    [root@localhost ~]# vim /data/redis/6381/conf/redis.conf
    [root@localhost ~]# vim /data/redis/6382/conf/redis.conf
     
    ################################# REPLICATION #################################
     
    # Master-Slave replication. Use slaveof to make a Redis instance a copy of
    # another Redis server. A few things to understand ASAP about Redis replication.
    #
    # 1) Redis replication is asynchronous, but you can configure a master to
    #    stop accepting writes if it appears to be not connected with at least
    #    a given number of slaves.
    # 2) Redis slaves are able to perform a partial resynchronization with the
    #    master if the replication link is lost for a relatively small amount of
    #    time. You may want to configure the replication backlog size (see the next
    #    sections of this file) with a sensible value depending on your needs.
    # 3) Replication is automatic and does not need user intervention. After a
    #    network partition slaves automatically try to reconnect to masters
    #    and resynchronize with them.
    #
    # slaveof <masterip> <masterport>
    slaveof 127.0.0.1 6380
     
    # If the master is password protected (using the "requirepass" configuration
    # directive below) it is possible to tell the slave to authenticate before
    # starting the replication synchronization process, otherwise the master will
    # refuse the slave request.
    #
    # masterauth <master-password>
     
    # When a slave loses its connection with the master, or when the replication
    # is still in progress, the slave can act in two different ways:
    #
    # 1) if slave-serve-stale-data is set to 'yes' (the default) the slave will
    #    still reply to client requests, possibly with out of date data, or the
    #    data set may just be empty if this is the first synchronization.
    #
    # 2) if slave-serve-stale-data is set to 'no' the slave will reply with
    #    an error "SYNC with master in progress" to all the kind of commands


     验证:

    先在主库上info一下

    [root@localhost 6380]# redis-cli -p 6380 "info"
    .
    .此处略去n行
    .
    # Replication
    role:master                                    <== 角色:master
    connected_slaves:2                      <== slave链接数 2
    slave0:ip=127.0.0.1,port=6381,state=online,offset=141,lag=1     <== slave 的信息
    slave1:ip=127.0.0.1,port=6382,state=online,offset=141,lag=1
    master_repl_offset:141
    repl_backlog_active:1
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:2
    repl_backlog_histlen:140
     

    看看从库

    [root@localhost 6381]# redis-cli -p 6381 "info"
    ...
    .此处略去n行
    ....
    # Replication
    role:slave          <==角色 slave
    master_host:127.0.0.1     <==master主机
    master_port:6380       <== master端口
    master_link_status:up      <== 链接状态 up
    master_last_io_seconds_ago:5
    master_sync_in_progress:0
    slave_repl_offset:673
    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
    [root@localhost 6382]# redis-cli -p 6382 "info"
    ...
    .此处略去n行
    ....
    # Replication
    role:slave
    master_host:127.0.0.1
    master_port:6380
    master_link_status:up
    master_last_io_seconds_ago:4
    master_sync_in_progress:0
    slave_repl_offset:911
    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


    在主库上写入数据:
    [root@localhost 6380]# redis-cli -p 6380
    127.0.0.1:6380> set k1 v1
    OK
    127.0.0.1:6380> keys *
    1) "k1"
    127.0.0.1:6380> get k1
    "v1"
    127.0.0.1:6380> 

    从库上查看是否已同步
    [root@localhost 6381]# redis-cli -p 6381
    127.0.0.1:6381> keys *
    1) "k1"
    127.0.0.1:6381> get k1
    "v1"
    127.0.0.1:6381> 
    127.0.0.1:6381> exit
    [root@localhost 6381]# redis-cli -p 6382
    127.0.0.1:6382> keys *
    1) "k1"
    127.0.0.1:6382> get k1
    "v1"
    127.0.0.1:6382>
     

    主库删除数据:

    [root@localhost 6380]# redis-cli -p 6380
    127.0.0.1:6380> keys *
    1) "k1"
    127.0.0.1:6380> del k1
    (integer) 1
    127.0.0.1:6380> keys *
    (empty list or set)
    127.0.0.1:6380> 

    从库查看 

    [root@localhost 6381]# redis-cli -p 6381
    127.0.0.1:6381> keys *
    (empty list or set)
    127.0.0.1:6381> exit
    [root@localhost 6381]# redis-cli -p 6382
    127.0.0.1:6382> keys *
    (empty list or set)
    127.0.0.1:6382> 
    127.0.0.1:6382> exit
    [root@localhost 6381]#

    END

    本文转自:http://www.cnblogs.com/lgeng/p/6623336.html 

  • 相关阅读:
    20200209 ZooKeeper 3. Zookeeper内部原理
    20200209 ZooKeeper 2. Zookeeper本地模式安装
    20200209 Zookeeper 1. Zookeeper入门
    20200206 尚硅谷Docker【归档】
    20200206 Docker 8. 本地镜像发布到阿里云
    20200206 Docker 7. Docker常用安装
    20200206 Docker 6. DockerFile解析
    20200206 Docker 5. Docker容器数据卷
    20200206 Docker 4. Docker 镜像
    Combining STDP and Reward-Modulated STDP in Deep Convolutional Spiking Neural Networks for Digit Recognition
  • 原文地址:https://www.cnblogs.com/lgeng/p/6623336.html
Copyright © 2011-2022 走看看