zoukankan      html  css  js  c++  java
  • [NoSQL数据库] Redis主从部署

    一、Redis主从

    Redis主从有什么用:

    1.备份数据:使用slave节点来备份master节点中的数据,这样避免master节点宕机都导致数据丢失。

    2.读写分离:master节点只负责写,而slave节点只负责读。读写比例例如是10:1,这样可以提高执行效率。

    如下图所示:

    一个Master可以有多个Slave,而每个Slave也可以有多个Slave,这样就可以形成强大的服务器集群结构。

    二、Redis主节点配置

    1.Redis源码编译安装

    在CentOS7下:

    复制代码
    # 安装gcc编译器
    yum install gcc -y
    # 下载redis
    wget http://download.redis.io/releases/redis-5.0.7.tar.gz
    # 解压缩
    tar xzf redis-5.0.7.tar.gz
    # 移动文件夹到/usr/local中
    mv redis-5.0.7 /usr/local/
    # 进入redis目录
    cd /usr/local/redis-5.0.7
    # 编译
    make all
    复制代码
    # 安装tcl
    yum install tcl -y
    # 运行redis测试
    make test
    # 安装到/usr/local/bin下
    make install

    进入/usr/local/bin下查看安装好的redis命令:

    复制代码
    [root@centos-base bin]# ll
    total 32772
    -rwxr-xr-x. 1 root root 4366808 Jan  5 14:20 redis-benchmark
    -rwxr-xr-x. 1 root root 8125200 Jan  5 14:20 redis-check-aof
    -rwxr-xr-x. 1 root root 8125200 Jan  5 14:20 redis-check-rdb
    -rwxr-xr-x. 1 root root 4807880 Jan  5 14:20 redis-cli
    lrwxrwxrwx. 1 root root      12 Jan  5 14:20 redis-sentinel -> redis-server
    -rwxr-xr-x. 1 root root 8125200 Jan  5 14:20 redis-server
    复制代码

    2.Redis配置

    拷贝redis.conf:

    cd /etc
    mkdir redis
    cd /usr/local/redis-5.0.7
    cp redis.conf /etc/redis/redis.conf

    修改配置:

    vi /etc/redis/redis.conf
    复制代码
    bind 192.168.1.181 127.0.0.1 # 服务IP地址
    port 6379  # 服务端口
    daemonize yes  # 是否以守护进程形式运行
    dbfilename dump.rdb  # 持久化数据文件名称
    dir /var/lib/redis  # 持久化数据文件存放位置
    logfile /var/log/redis/redis-server.log  # 日志文件存放位置
    database 16  # 一共16个数据库,编号1~15
    slaveof  # 设置主从复制(用于分布式)
    复制代码

    注意:持久化数据文件和日志文件的存放地址,要事先创建存放文件目录。

    cd /var/lib
    mkdir redis
    cd /var/log
    mkdir redis

    配置文件参考:

    (转自https://blog.csdn.net/ljphilp/article/details/52934933

     View Code

    3.设置Redis服务

    配置systemctl管理Redis服务:

    复制代码
    # 编辑文件
    vim /usr/lib/systemd/system/redis.service
    
    # 在redis.service文件中加入以下内容 并保存
    
    ##########################
    
    [Unit]
    Description=Redis-5.0.7-6379
    After=network.target
    
    [Service]
    Type=forking
    PIDfile=/var/run/redis-6379.pid
    ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf
    ExecReload=/bin/kill -s HUP $MAINPID
    ExecStop=/bin/kill -s QUIT $MAINPID
    PrivateTmp=true
    
    [Install]
    WantedBy=multi-user.target
    
    ###########################
    
    # 加载服务
    systemctl daemon-reload
    复制代码

    reids服务操作:

    systemctl start redis  # 启动
    systemctl stop redis  # 停止
    systemctl restart redis  # 重启
    systemctl status redis  # 查看状态
    systemctl enable redis  # 开机启动
    systemctl disable redis  # 取消开机启动

    4.运行Redis

    复制代码
    [root@centos-base system]# systemctl start redis
    [root@centos-base system]# systemctl status redis
    鈼[0m redis.service - Redis-5.0.7-6379
       Loaded: loaded (/usr/lib/systemd/system/redis.service; enabled; vendor preset: disabled)
       Active: active (running) since Sun 2020-01-05 15:19:46 CST; 4s ago
      Process: 27232 ExecStop=/bin/kill -s QUIT $MAINPID (code=exited, status=0/SUCCESS)
      Process: 27243 ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf (code=exited, status=0/SUCCESS)
     Main PID: 27244 (redis-server)
       CGroup: /system.slice/redis.service
               鈹斺攢27244 /usr/local/bin/redis-server 127.0.0.1:6379
    
    Jan 05 15:19:46 centos-base systemd[1]: Starting Redis-5.0.7-6379...
    Jan 05 15:19:46 centos-base systemd[1]: Started Redis-5.0.7-6379.
    复制代码

    查看进程:

    [root@centos-base system]# ps -ef | grep redis
    root      27244      1  0 15:19 ?        00:00:00 /usr/local/bin/redis-server 127.0.0.1:6379
    root      27251  17132  0 15:22 pts/0    00:00:00 grep --color=auto redis

    三、Redis从节点配置

    1.安装从节点Redis

    参照主节点的安装过程,部署一台从节点。

    2.配置从节点

    修改redis.conf配置文件:

    # 修改replicaof配置项,填写主节点IP和端口
    replicaof 192.168.1.181 6379

    3.重启主从节点Redis服务

    四、主从操作

    1.查看主节点状态

    执行命令:

    [root@centos-base system]# redis-cli -h 192.168.1.181 info Replication
    # Replication
    role:master
    connected_slaves:1
    slave0:ip=192.168.1.180,port=6379,state=online,offset=42,lag=1
    master_replid:14e0a788c85de285ae34ab98f41893aaf097335a
    master_replid2:0000000000000000000000000000000000000000
    master_repl_offset:42
    second_repl_offset:-1
    repl_backlog_active:1
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:1
    repl_backlog_histlen:42

    可以看到,该节点为master节点,已连接的从节点有一台,从节点IP为192.168.1.180,端口为6379。

    2.查看从节点状态

    执行命令:

    [root@centos-base system]# redis-cli -h 192.168.1.180 info Replication 
    # Replication
    role:slave
    master_host:192.168.1.181
    master_port:6379
    master_link_status:up
    master_last_io_seconds_ago:3
    master_sync_in_progress:0
    slave_repl_offset:546
    slave_priority:100
    slave_read_only:1
    connected_slaves:0
    master_replid:14e0a788c85de285ae34ab98f41893aaf097335a
    master_replid2:0000000000000000000000000000000000000000
    master_repl_offset:546
    second_repl_offset:-1
    repl_backlog_active:1
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:1
    repl_backlog_histlen:546

    可以看到,该节点为slave节点,属于主节点192.168.1.181,主节点端口为6379。

    3.主从数据操作

    在主节点设置一个值:

    [root@centos-base system]# redis-cli -h 192.168.1.181 -p 6379
    192.168.1.181:6379> select 10
    OK
    192.168.1.181:6379[10]> set name helloworld
    OK

    我们在主节点设置了name的值为helloworld。

    在从节点获取name的值:

    [root@centos-base system]# redis-cli -h 192.168.1.180 -p 6379
    192.168.1.180:6379> select 10
    OK
    192.168.1.180:6379[10]> get name
    "helloworld"

    可以看到,从节点获得了name的值,为helloworld。

    这说明,主节点插入值以后,会自动同步到从节点

    在主节点存活的时候,使用从节点插入值:

    192.168.1.180:6379[10]> set age 32
    (error) READONLY You can't write against a read only replica.

    可以看到,在主节点存活的时候,从节点的只读(read only)的。

  • 相关阅读:
    简单跨域请求和带预检的跨域请求
    springmvc@RequestMapping-params参数规则
    ocketMQ概念模型
    java agent 详细介绍 -javaagent参数
    Spring使用多个 <context:property-placeholder/>
    什么时候会进行 SpringMVC重定向保存参数(FlashMap)?
    springMVC 数据模型相关注解 可注释类型 ModelAttribute SessionAttributes InitBinder
    Springmvc 异步处理
    Java并发包之阶段执行之CompletionStage接口
    Spring Web Flux 相关概念
  • 原文地址:https://www.cnblogs.com/leokale-zz/p/12153822.html
Copyright © 2011-2022 走看看