单机

安装

  1. 下载安装包

    http://download.redis.io/releases/redis-4.0.14.tar.gz

  2. 解压文件

    tar -xzvf redis-4.0.14.tar.gz

  3. 编译安装

    make && make install

配置

  1. 在/usr/local/redis/redis4.0.14目录下复制redis.conf到/etc/redis/目录下,修改配置文件

    • 端口:port 6379

    • 后台启动:daemonize yes

    • 日志文件输出名字:logfile ./redis.log (需要手动创建文件)

    • 文件存储目录:dir /usr/local/redis/log (需要手动创建文件夹)

    • 连接redis密码:requirepass dcits001!

    • 允许任何人连接redis:bind 0.0.0.0

    • tcp-backlog修改为2048并执行echo 511 > /proc/sys/net/core/somaxconn

      要不启动会出现警告:

  2. 将下列内容添加到/etc/sysctl.conf中,保存退出, 执行sysctl -p 配置生效

    net.core.somaxconn = 1024 
    vm.overcommit_memory = 1
  3. echo never > /sys/kernel/mm/transparent_hugepage/enabled添加到/etc/rc.local中,执行source /etc/rc.local生效配置。

开机启动

  1. /usr/local/redis/redis-4.0.14/utils目录下,执行./install_server.sh

  2. 设为开机启动

    chkconfig redis_6379 on

  3. 常用启动及停止命令

    service redis_6379 start

    service redis_6379 stop

    如果停止失败,出现:

    是由于设置密码的原因,修改 /etc/init.d/redis_6379

  4. 打开防火墙并开放6379端口

    systemctl status firewalld #查看防火墙状态
    systemctl start firewalld #打开防火墙
    systemctl stop firewalld #关闭防火墙
    firewall-cmd --zone=public --add-port=6379/tcp --permanent   # 开放6379端口
    firewall-cmd --zone=public --remove-port=6379/tcp --permanent  #关闭6379端口
    firewall-cmd –reload  #配置立即生效

主从

开启两台redis从服务器,可以位于两台服务器或同一台服务器的不同端口。

配置

  1. master的redis配置文件只要设置好bind即可

    bind 0.0.0.0

  2. 修改slave的redis配置文件,如果master设置了验证密码,还需配置masterauth

    slaveof 192.168.56.112 6379 (映射到主服务器上,6379是端口号)
    masterauth d001!
  3. 配置完之后启动slave的Redis服务

    service redis_6379 restart

哨兵模式

配置

  1. Sentinel可以切换主从数据库,主数据库可能会变成从数据库,所以三台机器上都需要同时设置requirepass和masterauth配置项。编辑 /etc/redis/redis.conf

    requirepass d001!
    masterauth d001!
  2. 配置sentinel配置文件 /etc/redis/sentinel.conf,每个sentinel配置基本相同,内容如下

    daemonize yes
    port 26379
    bind 192.168.56.112  #每个主机该配置不同
    sentinel monitor redis-master 192.168.56.112 6379 2
    sentinel down-after-milliseconds redis-master 5000
    sentinel failover-timeout redis-master 180000
    sentinel parallel-syncs redis-master 2
    sentinel auth-pass redis-master dctis001!
    sentinel notification-script redis-master /etc/redis/notify.sh
    #sentinel client-reconfig-script mymaster /etc/redis/failover.sh
    logfile /var/log/redis/redis-sentinel.log
    • daemonize yes 以后台进程模式运行。

    • port 26379 Sentinel实例之间的通讯端口,该端口号默认为26379。

    • bind 192.168.56.112 Sentinel默认会绑定到127.0.0.1,这里要在多台机器间通信,我们将它绑定到主机IP上。

    • sentinel monitor redis-master 192.168.56.112 6379 2

      Sentinel去监视一个名为redis-master的主服务器,这个主服务器的IP地址为192.168.56.112 ,端口号为6379。将这个主服务器判断为失效至少需要2个Sentinel同意,一般设置为N/2+1(N为Sentinel总数)。只要同意Sentinel的数量不达标,自动故障迁移就不会执行。

    • sentinel down-after-milliseconds redis-master 5000

      down-after-milliseconds选项指定了Sentinel认为服务器已经断线所需的毫秒数。如果服务器在给定的毫秒数之内,没有返回Sentinel发送的PING命令的回复,或者返回一个错误,那么Sentinel将这个服务器标记为主观下线(subjectively down,简称SDOWN)。

    • sentinel failover-timeout redis-master 180000

      如果在多少毫秒内没有把宕掉的那台Master恢复,那Sentinel认为这是一次真正的宕机。在下一次选取时排除该宕掉的Master作为可用的节点,然后等待一定的设定值的毫秒数后再来探测该节点是否恢复,如果恢复就把它作为一台Slave加入Sentinel监测节点群,并在下一次切换时为他分配一个”选取号”。

    • sentinel parallel-syncs redis-master 2

      parallel-syncs选项指定了在执行故障转移时,最多可以有多少个从服务器同时对新的主服务器进行同步。这个数字越小,完成故障转移所需的时间就越长。

    • sentinel auth-pass redis-master d001!

      当Master设置了密码时,Sentinel连接Master和Slave时需要通过设置参数auth-pass配置相应密码。

    • sentinel notification-script redis-master /etc/redis/notify.sh

      指定Sentinel检测到该监控的Redis实例failover时调用的报警脚本。脚本被允许执行的最大时间为60秒,超过这个时间脚本会被kill。该配置项可选,但线上系统建议配置。这里的通知脚本简单的记录一下failover事件。

    • sentinel client-reconfig-script redis-master /etc/redis/failover.sh

      指定Sentinel failover之后重配置客户端时执行的脚本,该配置项可选,但线上系统建议配置。

    • logfile /var/log/redis/redis-sentinel.log

      日志文件所在位置,默认在/var/log/redis/redis-sentinel.log。该文件要手动创建。

  3. 创建通知脚本/etc/redis/notify.sh,并增加执行权限

    #! /bin/bash
    echo "master failovered at `date`" > /var/log/redis/redis_issues.log

    chmod +x /etc/redis/notify.sh

  4. 运行sentinel

    redis-sentinel /etc/redis/sentinel.conf

开机自启

  1. 将redis预设脚本复制到 /etc/init.d/ 中

    cp ~/redis-4.0.14/utils/redis_init_script /etc/init.d/redis_sentinel

  2. 调整脚本内容 vi /etc/init.d/redis_sentinel

    • REDISPORT 默认为26379,但只要和其他端口不重复就行
    • EXEC /usr/local/bin/redis-sentinel 指定redis-sentinel命令路径
    • CONF /etc/redis/sentinel.conf 配置文件路径
  3. 建立systemd, vi /etc/systemd/system/redis_sentinel.service,内容如下

    [Unit] 
    Description=Redis Sentinel on port 26379
        
    [Service] 
    Type=forking
    ExecStart=/etc/init.d/redis_sentinel start
    ExecStop=/etc/init.d/redis_sentinel stop
        
    [Install]
    WantedBy=multi-user.target
  4. 更新systemd配置

    systemctl daemon-reload

  5. 设置开机自启动

    systemctl enable redis_sentinel.service

集群

未完待续