redis 单机部署、集群部署(主从同步+哨兵)

环境准备

服务器IP

服务器 IP 角色
redis-140 192.168.86.140 master
redis-141 192.168.86.141 slave
redis-142 192.168.86.142 slave

单机模式部署

  1. linux 安装 gcc : 用于编译 redis

    yum install gcc
    
  2. 上传安装包到服务器的 /opt 目录

  3. 解压安装包,此时 redis 没有编译

    cd /opt
    tar -zxvf redis-6.2.2.tar.gz
    
  4. 编译并测试

    cd /opt/redis-6.2.2
    make 
    #可能出现问题见常见问题,不执行 make test 也可以
    make test  
    
  5. 安装到指定目录

    make PREFIX=/usr/local/redis install 
    
  6. 增加一些目录和拷贝 redis.conf 到安装目录

    #配置文件存放路径
    mkdir /usr/local/redis/conf
    #数据存放目录
    mkdir /usr/local/redis/data
    #日志存放目录
    mkdir /usr/local/redis/logs
    #拷贝 配置文件到安装目录
    cp /opt/redis-6.2.2/redis.conf /usr/local/redis/conf/redis.conf
    
  7. 修改安装目录下的配置文件,修改指定的内容即可,vi /usr/local/redis/conf/redis.conf

    #用于指定本机网卡对应的IP地址,如果是默认 127.0.0.1 的话,则只有本机可以访问。如果注释掉则表示客户端可以通过本机所有网卡进来,如果这样设置,且没有设置 requirepass 密码, redis 默认开始了保护模式 protected-mode,则其它客户端都可以连接,但是一发送命令就会失败
    bind 192.168.86.140
    #数据存放目录
    dir /usr/local/redis/data
    #是否后台运行
    daemonize yes 
    #日志文件
    logfile "/usr/local/redis/logs/redis.log" 
    #设置客户端连接后进行任何其他操作前需要使用的密码
    requirepass  pass
    
  8. 启动 redis-server

    cd /usr/local/redis/bin
    ./redis-server ../conf/redis.conf
    
  9. 检查

    ps -ef | grep redis
    ./redis-cli -h 192.168.86.140 -p 6379
    

集群模式搭建(主从同步+哨兵模式)

  1. redis 高可用集群搭建依赖于 主从同步哨兵模式

  2. 若无特殊说明,以下操作均需在三台 redis 服务器上操作

  3. 按照单机模式部署的方式执行操作,一直执行到第七步修改配置文件为止

  4. 主从同步配置 > 修改 master 配置,修改指定的内容即可,vi /usr/local/redis/conf/redis.conf

    # 用于指定本机网卡对应的IP地址
    bind 192.168.86.140
    #数据存放目录
    dir /usr/local/redis/data
    #是否后台运行
    daemonize yes 
    #日志文件
    logfile "/usr/local/redis/logs/redis.log" 
    #设置客户端连接后进行任何其他操作前需要使用的密码
    requirepass  pass
    #当master服务设置了密码保护时(用requirepass制定的密码),slave服务连接master的密码
    masterauth  pass
    
  5. 主从同步配置 > 修改两台 slave 配置,修改指定的内容即可,vi /usr/local/redis/conf/redis.conf

    # 用于指定本机网卡对应的IP地址 每台机器设置为自己的IP
    bind 192.168.86.141
    #数据存放目录
    dir /usr/local/redis/data
    #日志文件
    logfile "/usr/local/redis/logs/redis.log" 
    #是否后台运行
    daemonize yes 
    #指定要同步的主机的 ip,端口
    replicaof 192.168.86.140
    #设置客户端连接后进行任何其他操作前需要使用的密码
    requirepass  pass
    #当master服务设置了密码保护时(用requirepass制定的密码),slave服务连接master的密码
    masterauth  pass
    
    
  6. 启动三台机器的 redis-server

    cd /usr/local/redis/bin
    ./redis-server ../conf/redis.conf
    
  7. 检查 redis 服务是否启动成功

    ps -ef | grep redis
    ./redis-cli -h <服务器IP> -p 6379
    
  8. 检查主从同步是否配置成功,分别登录三台 redis ,并输入 info replication

    • master-140

      image-20210604145640259

    • slave-141

      image-20210604145710337

    • slave-142

      image-20210604145819939

  9. 主从同步完毕之后进行 哨兵模式 配置,可以大概将 redis-sentinel 理解为 zookeeper,是用来监控机器的运行情况的,在 master 宕机之后,先从 哨兵集群中选举一个哨兵作为故障转移处理的机器,之后被选举出来的哨兵用来协调各个 slave 的进行选举 master

  10. 在每台机器上设置一个哨兵,配置文件完全一样,当然可以使用另外的机器来部署 哨兵

  11. 拷贝并修改哨兵配置

    cd /opt/redis-6.2.2
    cp sentinel.conf /usr/local/redis/conf
    vi sentinel.conf
    
  12. 修改 sentinel.conf ,只修改下面列出的项目

    #设置为后台运行
    daemonize yes 
    #日志存放目录
    logfile /usr/local/redis/logs/sentinel.log
    #数据存放目录
    dir /usr/local/redis/data/
    #监控名为 mymaster 的主节点,仲裁参数为 2,一般是哨兵个数的一半+1(类似于zookeeper的过半写成功机制) 
    sentinel monitor mymaster 192.168.86.140 6379 2
    #主机多长时间连接不上,哨兵就判定他挂了,单位毫秒
    sentinel down-after-milliseconds mymaster 30000
    #主机如果设置了 requirepass
    sentinel auth-pass mymaster pass
    
  13. 启动哨兵

    cd /usr/local/redis/bin
    ./redis-sentinel ../conf/sentinel.conf 
    
  14. 查看哨兵是否启动成功

    #查看进程
    ps -ef | grep redis
    #查看日志
    tail -f /usr/local/redis/logs/sentinel.log
    

    image-20210604172717670

  15. 测试集群是否搭建成功

    • 关闭或 kill 掉 master 上的 redis 服务,等待30秒,因为我们配置 30秒连接不上就认为他挂了

    • 查看 sentinel 日志

      image-20210604173005656

    • 在另外两台 slave 上执行 **info replication **

      image-20210604173201098

      image-20210604173218272

  16. 重新启动原来的主机,此时重启之后它将会变为新主机的从机

    image-20210604173359818

常见问题

  1. 执行 make 时,出现 "fatal error: jemalloc/jemalloc.h: No such file or directory"

    执行=> make distclean && make

  2. 执行 make test 时,出现 "You need tcl 8.5 or newer in order to run the Redis test"

    执行=> yum install tcl

  3. 执行 ./redis-cli -p 6379 出现 connection refused

    使用 ./redis-cli -h <服务器IP> -p 6379 访问

  4. 主从复制的时候,master 正常写入但是 salve 读取不到

    • 检查一下 master 的 bind 设置,关于 bind 的正常理解: Redis的bind的误区
    • 检查一下 slave 的 masterauth 是否正确
    • 服务器的端口是否开通,防火墙是否拦截了
  5. 主机宕机,但是 sentinel 集群没有重新进行选主

    • 如果使用 scp 命令拷贝的话,需要在 sentinel 从没运行过的时候拷贝,或者进入配置文件,在末尾删除程序运行自动生成的一些参数
posted @ 2021-06-04 17:37  君子如珩~  阅读(565)  评论(0编辑  收藏  举报