zoukankan      html  css  js  c++  java
  • Redis安装、使用、主从、哨兵

    原文:https://www.jianshu.com/p/2f93bb771469

    1.安装部署

    • 安装编译环境
    yum install gcc patch libffi-devel python-devel  zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel openssl openssl-devel -y
    • 目录规划
    #redis配置文件目录:/opt/redis_cluster/redis{PORT}/conf/
    #redis日志文件目录:/opt/redis_cluster/redis{PORT}/logs/
    #redis数据文件目录:/opt/redis_cluster/redis{PORT}/data/
    #redis pid文件目录:/opt/redis_cluster/redis{PORT}/pid/
    #redis程序目录:/opt/redis
    • 创建目录
    mkdir -pv /opt/redis_cluster/redis{PORT}/{conf,logs,data,pid}
    
    • 下载并安装redis程序
    [root@nginx redis]# wget http://download.redis.io/releases/redis-3.2.13.tar.gz
    [root@nginx redis]# tar xf redis-3.2.13.tar.gz -C /opt/
    [root@nginx redis]# ln -sv /opt/redis-3.2.13.tar.gz /opt/redis
    [root@nginx redis]# cd /opt/redis/
    [root@nginx redis]# make && make install
    
    • 创建redis配置文件:/opt/redis_cluster/redis6379/conf/redis6379.conf
    ### 以守护进程模式启动
    daemonize yes
    
    ### 绑定的主机地址
    bind 192.168.1.92
    
    ###关闭只能本地访问
    protected-mode no
    
    ###添加认证密码
    requirepass 123456
    
    ### 监听端口
    port 6379
    
    ### 内存限制(最好是总内存的一半)
    maxmemory 5gb
    
    ### 超出内存之后的测率
    #volatile-lru:根据LRU算法删除最老的key。
    #allkeys-lru:根据LRU算法删除任何key。
    #volatile-random:删除最老的key。
    #allkeys->random:随机删。
    #volatile-ttl:根据key的过期时间删除
    #noeviction:谁也不删,没法再写
    maxmemory-policy volatile-lru 
    
    
    ### pid文件和log文件的保存地址
    pidfile /opt/redis_cluster/redis6379/pid/redis6379.pid
    logfile /opt/redis_cluster/redis6379/logs/redis6379.log
    
    ### 本地数据库的目录
    dir /opt/redis_cluster/redis6379/data
    
    ### 设置数据库的数量,默认数据库为0
    databases 16
    
    ###下面是持久化配置
    ### 指定本地持久化文件的文件名,默认是dump.rdb
    dbfilename redis6379.rdb
    save 900 1      #900秒(15分钟)内有1个更改
    save 300 10     #300秒(5分钟)内有10个更改
    save 60 10000   #60秒内有10000个更改  
     
    appendonly yes             #是否打开aof日志功能
    appendfsync always      #每1个命令,都立即同步到aof
    appendfsync everysec   #每秒写1次
    appendfsync no            #写入工作交给操作系统,由操作系统判断缓冲区大小,统一写入到aof.
    appendfilename appendonly.aof  #aof文件名
    • 启动程序和关闭程序
    #启动
    [root@nginx redis_cluster]# redis-server redis6379/conf/redis6379.conf
    
    #关闭
    [root@nginx redis_cluster]# redis-cli -h 192.168.1.92 shutdown 

    2.基本使用

    • 全局命令
    #查看所有键值
    > keys *
    
    #查看键的总数
    > DBSIZE
    
    #查看键是否存在
    > Exists KEY
    
    #删除键
    > Del key [key …]
    
    #键过期
    # Redis支持对键添加过期时间,当超过过期时间后,会自动删除键.
    # 通过ttl命令观察键的剩余时间
    #>0: 键剩余过期时间
    #-1: 键没设置过期时间
    #-2: 键不存在
    > Expire key seconds
    
    #键的数据类型
    > Type key 
    
    #查看redis使用情况
    > info 
    • 字符串数据类型
    #设置键
    > set key1 value1
    
    #获取键
    > get key1
    
    #增加删除键的值
    > set key2 100
    
    > incr key2
    (integer) 101
    > get key2
    "101"
    
    > incrby key2 10
    (integer) 111
    > get key2
    "111"
    
    #一次性设置多个值
    > mset key3 v3 key4 v4 key5 v5
    > mget key3 key4 key5
    
    #判断键是否存在和删除键,DEL命令返回1说明键存在,返回0说明不存在
    > exists key5
    > del key5
    
    #获取键类型
    > type key5
    
    #键超时,-1不超时,-2键不存在,>0还剩多少秒过期
    > ttl key5
    
    #设置键超时
    > expire key5 10
    
    #取消键超时
    > persist key5
    • 列表数据类型
    #向列表右侧添加数据
    > rpush list1 A
    
    #向列表左侧添加数据库
    > lpush list1 top1
    
    #从列表中取范围内数据
    > lrange list1 0 -1
    
    #从列表左侧删除数据
    > lpop list1
    
    #从列表右侧删除数据
    > rpop list1  
    • 哈希数据类型
    #指令设置hash中的多个域
    > hmset user:1000 username zhangya age 27 job it
    
    #取回单个域.
    > hget user:1000 username
    
    #取回一系列的值
    > hmget user:1000 username age job
    
    #取回所有值
    > hgetall user:1000  
    • 集合数据类型
    #设置集合
    > sadd set1 1 2 3
    
    #获取集合
    > smembers set1
    
    #删除集合内的值
    > srem set1 2 4
    
    #取两个集合的差集
    > sadd set1 1 2 3 4
    > sadd set2 1 4 5
    > sdiff set1 set2
    1) "2"
    2) "3"
    
    #取集合并集
    > sinter set1 set2
    1) "1"
    2) "4"
    
    #取集合合集
    > sunion set1 set2
    1) "1"
    2) "2"
    3) "3"
    4) "4"
    5) "5"  

    3.持久化  

    RDB 持久化优缺点
    可以在指定的时间间隔内生成数据集的 时间点快照(point-in-time snapshot)。
    优点:速度快,适合于用做备份,主从复制也是基于RDB持久化功能实现的。
    缺点:会有数据丢失
    dir /data/6379
    dbfilename dump.rdb
    save 900 1      #900秒(15分钟)内有1个更改
    save 300 10     #300秒(5分钟)内有10个更改
    save 60 10000   #60秒内有10000个更改
    
    AOF 持久化优缺点
    记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集。AOF 文件中的命令全部以 Redis 协议的格式来保存,新命令会被追加到文件的末尾。
    优点:可以最大程度保证数据不丢
    缺点:日志记录量级比较大
    appendonly yes          #是否打开aof日志功能
    appendfsync always      #每1个命令,都立即同步到aof
    appendfsync everysec    #每秒写1次
    appendfsync no          #写入工作交给操作系统,由操作系统判断缓冲区大小,统一写入到aof.
    appendfilename appendonly.aof  #文件名
    
    RDB和AOF文件同时存在时,会优先读取AOF文件。  

     4.安全认证

    #是否只让本地访问redis数据库
    protected-mode yes|no
    
    #绑定内网地址
    bind 10.0.0.51  127.0.0.1
    
    #添加认证密码,最常用
    requirepass 123456
    
    #认证节点密码
    masterauth 12345678 

    5.主从复制

    #每个从节点只能有一个主节点,主节点可以有多个从节点。开启复制有三种方法:
    1.在配置文件中加入slaveof {masterHost} {masterPort} 随redis启动生效.
    2.在redis-server启动命令后加入—slaveof {masterHost} {masterPort}生效.
    3.直接使用命令:slaveof {masterHost} {masterPort}生效.
    
    #从节点断开复制命令
    > slave of no one
    
    #查看主从复制状态
    > Info replication
    
    #主从复制流程
    1.从库发起同步请求
    2.主库接收到请求,执行bgsave命令保存数据
    3.主库将持久化的数据发送给从库
    4.从库接收到主库的数据,先清空自己的数据
    4.从库加载主库发来的数据  

    6.哨兵  

    • 在创建哨兵集群之前,需要先做好1主2从复制三个节点
    • 创建哨兵服务存放目录,这里是在一台服务器上做的,生产需要分开服务器
    ]# mkdir -pv {redis26379,redis26380,redis26381}/{conf,logs,pid,data}
    • 哨兵26379节点配置(需要密码的话添加sentinel auth-pass mymaster 12345678)
    #26379端口哨兵节点配置
    bind 192.168.1.92
    port 26379
    daemonize yes
    logfile "/opt/redis_cluster/redis26379/logs/redis26379.log"
    pidfile "/opt/redis_cluster/redis26379/pid/redis26379.pid"
    dir "/opt/redis_cluster/redis26379/data"
    
    #mymaster主节点别名 主节点 ip 和端口,判断主节点失败,两个sentinel节点同意
    sentinel monitor mymaster 192.168.1.92 6379 2 
    
    #选项指定了 Sentinel 认为服务器已经断线所需的毫秒数。
    sentinel down-after-milliseconds mymaster 30000 
    
    #向新的主节点发起复制操作的从节点个数,1轮询发起复制
    sentinel parallel-syncs mymaster 1 
    
    #故障转移超时时间
    sentinel failover-timeout mymaster 180000 
    
    • 哨兵26380节点配置
    bind 192.168.1.92
    port 26380
    daemonize yes
    logfile "/opt/redis_cluster/redis26380/logs/redis26380.log"
    pidfile "/opt/redis_cluster/redis26380/pid/redis26380.pid"
    dir "/opt/redis_cluster/redis26380/data"
    sentinel monitor mymaster 192.168.1.92 6379 2
    sentinel down-after-milliseconds mymaster 3000
    sentinel parallel-syncs mymaster 1
    sentinel failover-timeout mymaster 18000
    
    • 哨兵26381节点配置
    bind 192.168.1.92
    port 26381
    daemonize yes
    logfile "/opt/redis_cluster/redis26381/logs/redis26381.log"
    pidfile "/opt/redis_cluster/redis26381/pid/redis26381.pid"
    dir "/opt/redis_cluster/redis26381/data"
    sentinel monitor mymaster 192.168.1.92 6379 2
    sentinel down-after-milliseconds mymaster 3000
    sentinel parallel-syncs mymaster 1
    sentinel failover-timeout mymaster 18000
    
    • 启动三台哨兵
    ]# redis-sentinel redis26380/conf/redis26380.conf
    ]# redis-sentinel redis26381/conf/redis26381.conf
    ]# redis-sentinel redis26379/conf/redis26379.conf
    
    • 哨兵启动后,配置文件会发生变化
    1)Sentinel节点自动发现了从节点,其余Sentinel节点
    2)去掉了默认配置,例如parallel-syncs failover-timeout参数
    3)添加了配置纪元相关参数
    
    • 哨兵节点API命令
    Info Sentinel
    Sentinel masters
    Sentinel master <master name>
    Sentinel slaves <master name> 
    Sentinel sentinels <master name>
    Sentinel get-master-addr-by-name <master name>   
    Sentinel failover <master name>
    Sentinel flushconfig
    
    • 手动调整主节点
    #Redis Sentinel存在多个从节点时,如果想将指定的从节点晋升为主节点,可以将其他从节点的slavepriority配置为0,但是需要注意failover后,将slave-priority调回原值.
    
    1.查询命令:CONFIG GET slave-priority
    2.设置命令:CONFIG SET slave-priority 0
    3.主动切换:sentinel failover mymaster
    
    #db02/db03操作
    redis-cli -h db02 -p 6379 CONFIG SET slave-priority 0
    redis-cli -h db03 -p 6379 CONFIG SET slave-priority 0
    
    #db01操作
    redis-cli -h db01 -p 26379 Sentinel failover mymaster
    

      

      

     

    初学linux,每学到一点东西就写一点,如有不对的地方,恳请包涵!
  • 相关阅读:
    【SpringMVC 从 0 开始】SpringMVC RESTFul 实战案例
    【SpringMVC 从 0 开始】SpringMVC RESTFul 实战案例
    【SpringMVC 从 0 开始】RESTFul 介绍
    【SpringMVC 从 0 开始】SpringMVC 的视图
    【SpringMVC 从 0 开始】域对象共享数据
    【SpringMVC 从 0 开始】SpringMVC 中获取请求参数
    angular-cdk 探索
    angular 自定义表单/*ngFor增删不更新
    小白都能跑通的3D地图demo
    腾讯地图:输入关键字选取地点
  • 原文地址:https://www.cnblogs.com/forlive/p/12690957.html
Copyright © 2011-2022 走看看