• Redis入门


    1. 部署结构

     

    1. redis安装

    一、安装GCC编译环境

    yum install gcc gcc-c++ kernel-devel

     

    yum install tcl

     

    二、安装redis2.8.18

    #下载redis2.8.18

     

    wget http://download.redis.io/releases/redis-2.8.18.tar.gz

     

    #解压 redis-2.8.18.tar.gz

     

    tar xzf redis-2.8.18.tar.gz

     

    #进入redis-2.8.18文件

     

    Øcd redis-2.8.18

     

    #安装redis/usr/local/redis-2.8.18文件夹下

     

    make PREFIX=/usr/local/redis-2.8.18

     

    make install PREFIX=/usr/local/redis-2.8.18

     

    #复制redis-2.8.18下的redis-sentinel usr/local/redis-2.8.18/bin目录下

     

    cp src/redis-sentinel  /usr/local/redis-2.8.18/bin

     

    #创建redis日志文件redis-2.8.18,在var/log

     

    Ømkdir /usr/local/redis-2.8.18/log

     

    #创建redis配置目录

     

    mkdir /usr/local/redis-2.8.18/conf

     

    #创建redis rdb目录

     

    mkdir /usr/local/redis-2.8.18/rdb

     

    #创建redis run目录

     

    mkdir /usr/local/redis-2.8.18/run

     

    #复制根目录redis-2.8.18下的redis.conf文件到 usr/local/redis-2.8.8/conf目录下

     

    cp /root/redis-2.8.18/redis.conf /usr/local/redis-2.8.18/conf

     

    #复制根目录redis-2.8.18下的sentinel.conf文件到 usr/local/redis-2.8.18/conf目录下

     

    cp /root/redis-2.8.18/sentinel.conf /usr/local/redis-2.8.18/conf

     

    常见安装问题: zmalloc.h:51:31: error: jemalloc/jemalloc.h: No such file or directory

     

    异常原因:一些编译依赖或原来编译遗留出现的问题

     

    解决方案:make distclean。清理一下,然后再make

    1. 配置redis

    三、配置redis.config

    # 打开redis-2.8.18下的redis.conf

     

    vi /usr/local/redis-2.8.18/conf/redis.conf

     

    # 配置reids.config文件

     

    #是否以后台进程运行,默认为no,如果需要以后台进程运行则改为yes

     

    daemonize yes

     

    #接受连接的端口号,如果端口是0redis将不会监听TCP socket连接 #在不同的实例上端口不能相同,如主服务器是6379,从服务器可以是6479,1234

     

    port 6379

     

    logfile /var/log/redis-2.8.18/redis.log

     

    # maxmemory <bytes>10485760001G,可根据实际情况调整

     

    maxmemory 1048576000

     

    # The default is: 默认策略:

     

    #内存清理策略:如果达到了maxmemory,你可以采取如下动作:

     

    # volatile-lru → 使用LRU算法来删除过期的set

     

    # allkeys-lru → 删除任何遵循LRU算法的key

     

    # volatile-random →随机地删除过期set中的key

     

    # allkeysrandom → 随机地删除一个key

     

    # volatile-ttl → 删除最近即将过期的keythe nearest expire time (minor TTL)

     

    # noeviction → 根本不过期,写操作直接报错

     

    maxmemory-policy allkeys-lru

     

    #注意:如果你需要,你可以同时开启‘append only’模式和异步dumps模式(你需要注释掉上面的‘save’表达式来禁#dumps),这种情况下,Redis重建数据集时会优先使用appendonly.aof而忽略dump.rdb

     

    appendonly yes

     

    #如果是从服务器:使用slaveof把一个 Redis 实例设置成为另一个Redis server的从库(热备)。请把ip port修改为实际的主服务器的IP和端口。

     

    # slaveof <masterip> <masterport>主服务器不需要配置

     

    slaveof ip port

    1. 配置sentinel

    四、Redis.sentinel(故障转移)

    1.配置sentinel.conf

    #配置指示 Sentinel 去监视一个名为 mymaster 的主服务器, 这个主服务器的 IP 地址为 127.0.0.1 , 端口号为 6379 #而将这个主服务器判断为失效至少需要 2 Sentinel 同意 (只要同意 Sentinel 的数量不达标,自动故障迁移就不会执行)

     

    sentinel monitor mymaster 127.0.0.1 6379 2

     

    #选项指定了 Sentinel 认为服务器已经断线所需的毫秒数。

     

    sentinel down-after-milliseconds mymaster 3000

     

    #sentinel failover-timeout给另外一个Sentinelmaster的故障恢复投票它会等待这个master的故障恢复一段的时间

     

    sentinel failover-timeout mymaster 9000

     

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

     

    sentinel parallel-syncs mymaster 1

     

    #后台启动

     

    daemonize yes

     

    2.开放服务端口

    #打开iptables

     

    vi /etc/sysconfig/iptables

     

    #输入i编辑,6379,26379对应当前的redis.confredis.sentinel端口

     

    -A INPUT -m state –state NEW -m tcp -p tcp –dport 6379 -j ACCEPT

     

    -A INPUT -m state –state NEW -m tcp -p tcp –dport 26379 -j ACCEPT

     

    #Esc退出编辑,输入 :wq 退出保存

     

    #重启服务

     

    service iptables restart

     

    3.运行redis.conf redis sentinel

    #启动主从reids,先启动redis.conf后启动redis.sentinel

     

    cd /usr/local/redis-2.8.8/bin

     

    #启动redis.conf

     

    ./redis-server /usr/local/redis-2.8.18/conf/redis.conf

     

    #启动sentinel.conf

     

    ./redis-sentinel /usr/local/redis-2.8.18/conf/sentinel.conf

     

    1. sentinel相关命令

    port 26379

    daemonize no

    logfile "/data/app/redis/logs/sentinel_26379.log"

    sentinel monitor mymaster 192.168.56.11 6379 2

    sentinel down-after-milliseconds mymaster 30000

    sentinel parallel-syncs mymaster 1

    sentinel failover-timeout mymaster 180000

     

     

    # 不急,先介绍 redis sentinel 相关命令

    [plain] view plain copy

    127.0.0.1:26379> SENTINEL masters            #列出所有master状态信息  

    127.0.0.1:26379> SENTINEL master myredis222  #列出某个master状态信息(myredis222为例)  

    127.0.0.1:26379> SENTINEL slaves myredis222 #列出某个master的所有slave和状态信息(myredis222为例)  

    127.0.0.1:26379> SENTINEL sentinels myredis222   #列出某个mastersentinels((myredis222为例)  

    127.0.0.1:26379> SENTINEL get-master-addr-by-name myredis222 #通过某个master获取其IPportmyredis222为例)  

    127.0.0.1:26379> SENTINEL ckquorum myredis222    #检查某个master是达到投票及故障转移条件(myredis222为例)  

    127.0.0.1:26379> SENTINEL flushconfig            #强制重写 SENTINEL 配置到磁盘文件中  

    127.0.0.1:26379> SENTINEL failover myredis222    #这个操作就注意了!强制进行故障转移!慎操作!!!!!!!!!

     

    动态修改Sentinel配置

    以下是一些修改sentinel配置的命令:

     

    SENTINEL MONITOR <name> <ip> <port> <quorum>这个命令告诉sentinel去监听一个新的master

    SENTINEL REMOVE <name> 命令sentinel放弃对某个master的监听

    SENTINEL SET <name> <option> <value> 这个命令很像RedisCONFIG SET命令,用来改变指定master的配置。支持多个

     

     

    增加和移除Sentinel

    增加新的Sentinel实例非常简单,修改好配置文件,启动即可,其他Sentinel会自动发现该实例并加入集群。如果要批量启动一批Sentinel节点,最好以30秒的间隔一个一个启动为好,这样能确保整个 Sentinel集群的大多数能够及时感知到新节点,满足当时可能发生的选举条件。

     

    移除一个Sentinel实例会相对麻烦一些,因为Sentinel不会忘记已经感知到的Sentinel实例,所以最好按照下列步骤来处理:

     

    停止将要移除的sentinel进程。

    给其余的sentinel进程发送SENTINEL RESET *命令来重置状态,忘记将要移除的sentinel,每个进程之间间隔30秒。

    确保所有sentinel对于当前存货的sentinel数量达成一致,可以通过SENTINEL MASTER <mastername>命令来观察,或者查看配置文件。

     

    删除旧master或者不可达slave

    sentinel永远会记录好一个Masterslaves,即使slave已经与组织失联好久了。这是很有用的,因为sentinel集群必须有能力把一个恢复可用的slave进行重新配置。

     

    并且,failover后,失效的master将会被标记为新master的一个slave,这样的话,当它变得可用时,就会从新master上复制数据。

     

    然后,有时候你想要永久地删除掉一个slave(有可能它曾经是个master),你只需要发送一个SENTINEL RESET master命令给所有的sentinels,它们将会更新列表里能够正确地复制master数据的slave

     

    1. Redis命令:(热更新)

    http://www.redis.net.cn/order/3682.html

     

  • 相关阅读:
    Android 引用资源
    Android res目录结构
    Android 目录结构
    ubuntu 14.04 (desktop amd 64) 查看配置参数
    ros service
    install ros-indigo-map-server
    python 单例
    查看指定目录空间占用
    shell 设置超时时间
    nohup 不生成 nohup.out的方法
  • 原文地址:https://www.cnblogs.com/liuqiyun/p/9020789.html
Copyright © 2020-2023  润新知