元月's blog 元月's blog
首页
  • 基础
  • 并发编程
  • JVM
  • Spring
  • Redis篇
  • Nginx篇
  • Kafka篇
  • Otter篇
  • Shardingsphere篇
  • 设计模式
  • MySQL
  • Oracle
  • 基础
  • 操作系统
  • 网络
  • 数据结构
  • 技术文档
  • Git常用命令
  • GitHub技巧
  • 博客搭建
  • 开发工具
更多

元月

临渊羡鱼,不如退而结网
首页
  • 基础
  • 并发编程
  • JVM
  • Spring
  • Redis篇
  • Nginx篇
  • Kafka篇
  • Otter篇
  • Shardingsphere篇
  • 设计模式
  • MySQL
  • Oracle
  • 基础
  • 操作系统
  • 网络
  • 数据结构
  • 技术文档
  • Git常用命令
  • GitHub技巧
  • 博客搭建
  • 开发工具
更多
  • Redis

    • Redis安装
      • 一、前言
      • 二、安装前准备
        • 通过源码安装
      • 三、Standalone模式搭建
      • 四、主从架构搭建
      • 五、Sentinel架构搭建
      • 六、Cluster架构搭建
    • Redis持久化+灾难恢复方案
    • Redis常见数据类型和使用场景
    • Redis数据结构(一)Hyperloglog的实现原理
    • Redis数据结构(二)Bitmap位图的实现原理
    • Redis高可用
    • Redis缓存过期策略以及淘汰策略是什么?
    • 缓存穿透、缓存击穿和缓存雪崩的解决方案
    • Redis分布式锁的演变历史
    • Redis的集成与应用
  • Nginx

  • Kafka

  • Shardingsphere

  • Otter

  • nexus

  • 中间件
  • Redis
元月
2022-06-30
目录

Redis安装

# Redis安装

# 一、前言

这篇文章主要记录redis安装相关的内容,包括 单点模式安装、哨兵模式安装、集群模式安装,如果想了解Redis集群高可用相关原理,可以去看我另外一篇文章:Redis高可用

# 二、安装前准备

# 通过源码安装

  1. 下载redis,可以去官网下载更多版本,http://download.redis.io/releases/ (opens new window)

    #创建redis的安装目录并进入文件夹
    mkdir /usr/local/software/redis-5.0.12 && cd $_
    #下载redis
    wget http://download.redis.io/releases/redis-5.0.12.tar.gz
    
    1
    2
    3
    4
  2. 安装gcc ,redis依赖gcc

    yum install gcc 
    
    1
  3. 解压编译

    tar -xzvf redis-5.0.12.tar.gz
    cd redis-5.0.12
    make
    
    1
    2
    3

    由于某种原因,若第一次编译失败,可清理后再编译(make distclean && make)

  4. 修改redis.conf配置

    daemonize yes #后台启动 
    protected‐mode no #关闭保护模式,开启的话,只有本机才可以访问redis 
    
    # 需要注释掉bind 
    #bind 127.0.0.1(bind绑定的是自己机器网卡的ip,如果有多块网卡可以配多个ip,代表允许客户端通 过机器的哪些网卡ip去访问,内网一般可以不配置bind,注释掉即可)
    
    1
    2
    3
    4
    5

# 三、Standalone模式搭建

  1. 创建配置文件目录,拷贝配置文件

    mkdir /usr/local/redis-cluster/6379
    cp /usr/local/software/redis-5.0.12/redis.conf /usr/local/redis-cluster/6379
    
    1
    2
  2. 修改配置

    daemonize yes #后台启动 
    protected‐mode no #关闭保护模式,开启的话,只有本机才可以访问redis 
    
    # 需要注释掉bind 
    # bind 127.0.0.1(bind绑定的是自己机器网卡的ip,如果有多块网卡可以配多个ip,代表允许客户端通 过机器的哪些网卡ip去访问,内网一般可以不配置bind,注释掉即可)
    
    port 6379
    pidfile /var/run/redis_6379.pid  # 把pid进程号写入pidfile配置的文件
    logfile "6379.log"
    dir /usr/local/redis-cluster/6379  # 指定数据存放目录
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
  3. 启动服务

    /usr/local/software/redis-5.0.12/src/redis-server /usr/local/redis-cluster/6379/redis.conf
    
    1
  4. 其它相关

    # 验证启动是否成功 
    ps ‐ef | grep redis
    
    # 进入redis客户端 
    src/redis‐cli
    
    # 远程连接redis服务端(远程连接需要开放对应端口,也可以选择关闭防火墙)
    redis-cli -h hostname -p port
    
    # 退出客户端 
    quit 
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11

# 四、主从架构搭建

一主(6379)两从(6380、6381)搭建过程如下:

  1. 复制一份redis.conf文件

    cp -r /usr/local/redis-cluster/6379 /usr/local/redis-cluster/6380
    cp -r /usr/local/redis-cluster/6379 /usr/local/redis-cluster/6381
    
    1
    2
  2. 将redis.conf相关配置修改为如下值

    port 6380
    pidfile /var/run/redis_6380.pid  # 把pid进程号写入pidfile配置的文件
    logfile "6380.log"
    dir /usr/local/redis-cluster/6380  # 指定数据存放目录
    
    # 也可以通过全局查找替换
    vi /usr/local/redis-cluster/6380/redis.conf
    :%s/6379/6380/g
    vi /usr/local/redis-cluster/6381/redis.conf
    :%s/6379/6381/g
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
  3. 配置主从复制,两个从的配置文件都要配置

    replicaof 10.66.50.80 6379   # 从本机6379的redis实例复制数据,Redis 5.0之前使用slaveof
    replica-read-only yes  # 配置从节点只读
    
    1
    2
  4. 启动从节点

    /usr/local/software/redis-5.0.12/src/redis-server /usr/local/redis-cluster/6380/redis.conf
    /usr/local/software/redis-5.0.12/src/redis-server /usr/local/redis-cluster/6381/redis.conf
    
    1
    2
  5. 测试验证

    #连接从节点
    /usr/local/software/redis-5.0.12/src/redis-cli -p 6379
    
    #测试在6379实例上写数据,6380、6381实例是否能及时同步新修改数据
    /usr/local/software/redis-5.0.12/src/redis-cli -p 6380
    /usr/local/software/redis-5.0.12/src/redis-cli -p 6381
    
    1
    2
    3
    4
    5
    6

# 五、Sentinel架构搭建

参考文档:High availability with Redis Sentinel (opens new window)

完成主从架构搭建后,随后可进行Sentinel架构搭建

  1. 复制一份sentinel.conf文件

    # 创建目录
    mkdir /usr/local/redis-cluster/26379
    cp /usr/local/software/redis-5.0.12/sentinel.conf /usr/local/redis-cluster/26379/sentinel.conf
    
    1
    2
    3
  2. 修改配置

    port 26379
    daemonize yes
    pidfile "/var/run/redis-sentinel-26379.pid"
    logfile "26379.log"
    dir "/usr/local/redis-cluster/26379"
    # sentinel monitor <master-redis-name> <master-redis-ip> <master-redis-port> <quorum>
    # quorum是一个数字,指明当有多少个sentinel认为一个master失效时(值一般为:sentinel总数/2 + 1),master才算真正失效
    sentinel monitor mymaster 10.66.50.80 6379 2   # mymaster这个名字随便取,客户端访问时会用到
    
    1
    2
    3
    4
    5
    6
    7
    8
  3. 可以自己再配置两个sentinel,端口26380和26381,注意上述配置文件里的对应数字都要修改

    cp -r /usr/local/redis-cluster/26379 /usr/local/redis-cluster/26380
    cp -r /usr/local/redis-cluster/26379 /usr/local/redis-cluster/26381
    #处理26380 sentinel
    vi /usr/local/redis-cluster/26380/sentinel.conf
    :%s/26379/26380/g
    #处理26381 sentinel
    vi /usr/local/redis-cluster/26381/sentinel.conf
    :%s/26379/26381/g
    
    1
    2
    3
    4
    5
    6
    7
    8

    这里要注意,因为上面是复制的文件,有可能sentinel.conf的myid一样,此处要删掉,自动生成,不然会导致感知不到其它哨兵

    sentinel myid 30d98508603b8bb90990e9343b7a8aef641cb2dc
    
    1
  4. 启动sentinel哨兵实例

    #启动26379、26380、26381
    /usr/local/software/redis-5.0.12/src/redis-sentinel /usr/local/redis-cluster/26379/sentinel.conf
    /usr/local/software/redis-5.0.12/src/redis-sentinel /usr/local/redis-cluster/26380/sentinel.conf
    /usr/local/software/redis-5.0.12/src/redis-sentinel /usr/local/redis-cluster/26381/sentinel.conf
    
    1
    2
    3
    4
  5. 查看sentinel的info信息

    /usr/local/software/redis-5.0.12/src/redis-cli -p 26379
    # 可以看到Sentinel的info里已经识别出了redis的主从
    127.0.0.1:26379>info sentinel
    # Sentinel
    sentinel_masters:1
    sentinel_tilt:0
    sentinel_running_scripts:0
    sentinel_scripts_queue_length:0
    sentinel_simulate_failure_flags:0
    master0:name=mymaster,status=ok,address=127.0.0.1:6379,slaves=2,sentinels=3
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10

    sentinel集群都启动完毕后,会将哨兵集群的元数据信息写入所有sentinel的配置文件里去(追加在文件的

    最下面),我们查看下如下配置文件sentinel.conf,如下所示

    # Generated by CONFIG REWRITE
    protected-mode no
    sentinel leader-epoch mymaster 0
    sentinel known-replica mymaster 127.0.0.1 6381
    sentinel known-replica mymaster 127.0.0.1 6380
    sentinel known-sentinel mymaster 127.0.0.1 26380 5d102c1f1608e6aa1a872aef60bda4e5205f41c3
    sentinel known-sentinel mymaster 127.0.0.1 26381 30d98508603b8bb90990e9343b7a8aef641cb2dc
    sentinel current-epoch 0
    
    1
    2
    3
    4
    5
    6
    7
    8
  6. 验证哨兵选举

    当redis主节点如果挂了,哨兵集群会重新选举出新的redis主节点,同时会修改所有sentinel节点配置文件

    的集群元数据信息

    同时还会修改sentinel文件里之前配置的mymaster对应的6379端口,改为6381

    sentinel monitor mymaster 127.0.0.1 6381 2
    
    1

# 六、Cluster架构搭建

参考文档:Scaling with Redis Cluster (opens new window)

  1. 环境准备,三台服务器,ip分别为:192.168.1.114、192.168.1.115、192.168.1.113,每台服务器一主一从,部署6个实例

    #开始搭建之前,首先关闭防火墙
    #查看防火墙状态
    systemctl status firewalld
    #关闭防火墙
    systemctl stop firewalld
    #禁用防火墙
    systemctl disable firewalld
    
    1
    2
    3
    4
    5
    6
    7
  2. 复制一份配置文件redis.conf

    cp -r /usr/local/redis-cluster/6379 /usr/local/redis-cluster/7001
    
    1
  3. 修改配置文件

    daemonize yes
    port 7001
    pidfile /var/run/redis_7001.pid  # 把pid进程号写入pidfile配置的文件
    dir /usr/local/redis-cluster/7001/(指定数据文件存放位置,必须要指定不同的目录位置,不然会丢失数据)
    cluster-enabled yes(启动集群模式)
    cluster-config-file nodes-7001.conf(集群节点信息文件,这里700x最好和port对应上)
    cluster-node-timeout 10000
     # bind 127.0.0.1(bind绑定的是自己机器网卡的ip,如果有多块网卡可以配多个ip,代表允许客户端通过机器的哪些网卡ip去访问,内网一般可以不配置bind,注释掉即可)
    protected-mode  no   (关闭保护模式)
    appendonly yes
    如果要设置密码需要增加如下配置:
    requirepass foobared     (设置redis访问密码)
    masterauth foobared      (设置集群节点间访问密码,跟上面一致)
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
  4. 配置另外一个节点

    cp -r /usr/local/redis-cluster/7001 /usr/local/redis-cluster/7002
    #批量替换端口
    vi /usr/local/redis-cluster/7002/redis.conf
    :%s/7001/7002/g
    
    1
    2
    3
    4
  5. 在另外两台服务器执行相同操作

    #复制到192.168.1.115服务器
    scp -r /usr/local/redis-cluster/7001 root@192.168.1.115:/usr/local/redis-cluster/7001
    scp -r /usr/local/redis-cluster/7002 root@192.168.1.115:/usr/local/redis-cluster/7002
    #复制到192.168.1.113服务器
    scp -r /usr/local/redis-cluster/7001 root@192.168.1.113:/usr/local/redis-cluster/7001
    scp -r /usr/local/redis-cluster/7002 root@192.168.1.113:/usr/local/redis-cluster/7002
    
    1
    2
    3
    4
    5
    6
  6. 启动服务

    #在每台服务器上启动两个实例
    /usr/local/software/redis-5.0.12/src/redis-server /usr/local/redis-cluster/7001/redis.conf
    /usr/local/software/redis-5.0.12/src/redis-server /usr/local/redis-cluster/7002/redis.conf
    #检查是否启动成功
    ps -ef | grep redis
    
    1
    2
    3
    4
    5
  7. 用redis-cli创建整个redis集群

    /usr/local/software/redis-5.0.12/src/redis-cli -a foobared --cluster create --cluster-replicas 1 192.168.1.114:7001 192.168.1.114:7002 192.168.1.115:7001 192.168.1.115:7002 192.168.1.113:7001 192.168.1.113:7002 
    
    1

    出现如下的信息代表成功:

    >>> Performing hash slots allocation on 6 nodes...
    Master[0] -> Slots 0 - 5460
    Master[1] -> Slots 5461 - 10922
    Master[2] -> Slots 10923 - 16383
    Adding replica 192.168.1.115:7002 to 192.168.1.114:7001
    Adding replica 192.168.1.113:7002 to 192.168.1.115:7001
    Adding replica 192.168.1.114:7002 to 192.168.1.113:7001
    M: 0561e64ad10c8414019a265f48dc37fc6ecd288f 192.168.1.114:7001
       slots:[0-5460] (5461 slots) master
    S: 581cbc4474bf2c44968ca183139cbcd0d6e84396 192.168.1.114:7002
       replicates 1c380d05e51b3f207778d213ee808de0f6718033
    M: a5d506d4213f631ee14d485ca4ecf757fbd64892 192.168.1.115:7001
       slots:[5461-10922] (5462 slots) master
    S: 2306c8292f8914d995d1a3b3f7fc1085d40d9ed7 192.168.1.115:7002
       replicates 0561e64ad10c8414019a265f48dc37fc6ecd288f
    M: 1c380d05e51b3f207778d213ee808de0f6718033 192.168.1.113:7001
       slots:[10923-16383] (5461 slots) master
    S: def61922b0f14fa405165c3772fb2ce464873266 192.168.1.113:7002
       replicates a5d506d4213f631ee14d485ca4ecf757fbd64892
    Can I set the above configuration? (type 'yes' to accept): yes
    >>> Nodes configuration updated
    >>> Assign a different config epoch to each node
    >>> Sending CLUSTER MEET messages to join the cluster
    Waiting for the cluster to join
    .
    >>> Performing Cluster Check (using node 192.168.1.114:7001)
    M: 0561e64ad10c8414019a265f48dc37fc6ecd288f 192.168.1.114:7001
       slots:[0-5460] (5461 slots) master
       1 additional replica(s)
    S: 2306c8292f8914d995d1a3b3f7fc1085d40d9ed7 192.168.1.115:7002
       slots: (0 slots) slave
       replicates 0561e64ad10c8414019a265f48dc37fc6ecd288f
    M: 1c380d05e51b3f207778d213ee808de0f6718033 192.168.1.113:7001
       slots:[10923-16383] (5461 slots) master
       1 additional replica(s)
    M: a5d506d4213f631ee14d485ca4ecf757fbd64892 192.168.1.115:7001
       slots:[5461-10922] (5462 slots) master
       1 additional replica(s)
    S: def61922b0f14fa405165c3772fb2ce464873266 192.168.1.113:7002
       slots: (0 slots) slave
       replicates a5d506d4213f631ee14d485ca4ecf757fbd64892
    S: 581cbc4474bf2c44968ca183139cbcd0d6e84396 192.168.1.114:7002
       slots: (0 slots) slave
       replicates 1c380d05e51b3f207778d213ee808de0f6718033
    [OK] All nodes agree about slots configuration.
    >>> Check for open slots...
    >>> Check slots coverage...
    [OK] All 16384 slots covered.
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48

    可选择清理数据,重新启动(nodes-7001.conf和appendonly.aof保存了集群信息,需要清理)

    pkill redis-server && cd /usr/local/redis-cluster && rm -rf ./7001/nodes-7001.conf && rm -rf ./7002/nodes-7002.conf && rm -rf ./7001/appendonly.aof && rm -rf ./7002/appendonly.aof && rm -rf ./7001/dump.rdb && rm -rf ./7002/dump.rdb
    
    1
  8. 验证集群

    # 访问服务端密码,-c表示集群模式,指定ip地址和端口号
    /usr/local/software/redis-5.0.12/src/redis-cli -c -a foobared -h 192.168.1.113 -p 7001
    # 进行验证: 
    cluster info
    cluster nodes
    
    1
    2
    3
    4
    5
#Redis
Redis持久化+灾难恢复方案

Redis持久化+灾难恢复方案→

最近更新
01
otter二次开发-支持按目标端主键索引Load数据
08-03
02
mvnw简介
06-21
03
gor流量复制工具
06-03
更多文章>
Theme by Vdoing | Copyright © 2022-2024 元月 | 粤ICP备2022071877号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式