redis原理及集群主从配置

redis原理及集群主从配置

分类: linux运维技术,redis

标签: redis

一、简介

  存储系统背景

    存储系统有三类:
    RDBMS
      oracle,dh2,postgresql,mysql,sql server
    NoSQL:
      KV NoSQL:redis,memcached
      列式Column Family NoSQL: HBase,每一行每一字段可以保留n份,也是按照字段存储
      文档Documentation NoSQL: MongoDB
      图式Graph NoSQL: Neo4j

    NewSQL
      aerospike,foundationDB,rethinkDB...

  1、什么是redis

    redis是一个开源的使用ANSI C 语言编写、支持网络、可基于内存即可持久化的日志型,key-value数据库(是一个key-value存储系统),支持多种语言的API

    它是一个高级key-value数据库,跟memcached类似,但是redis的数据可以持久化,并且支持数据类型更丰富,同时还支持服务端的计算集合的并、交、和补集等,支持多种排序功能。  

      

  2、特点:     

    常用来和memcache做比较,但redis是nosql,基于key-value(键值)的数据结构的存储,可以存储键值,字典,图表
    完全工作在内存中,数据保存在内存,性能不错,数据周期性备份到硬盘,(持久化)的单线程服务器
    可以通过lua脚本扩展
    支持sentinel主从架构高可用
    分布式  

 

  3、性能

    虽然是单线程,kv是一个单纯简单的存储cpu通常不会形成瓶颈的,官方测试50个并发请求10w次,写的速度是110000次/s,读的速度是81000次/s,读写大小为256bytes的字符串; 

 

  4、持久化persistence

 

    RDB: snapshot,二进制格式;按事先定制的策略,周期性地将数据保存至磁盘;数据文件默认为dump.rdb; 
      客户端也可显式使用SAVA或BGSAVE命令启动快照保存机制;
      SAVE: 同步,在主线程中保存快照;此时会阻塞所有客户端请求;
      BGSAVE:异步,
    AOF:Append Only File
      记录每一次写操作至指定的文件尾部实现持久化;当redis重启时,可通过重新执行文件中的命令在内存重建数据库;
      BGREWRITEAOF:AOF文件重写;
      不会读取正在使用AOF文件,而通过将内存中的数据以命令的方式保存到临时文件中,完成之后替换原来的AOF文件;

  5、是一个数据结构服务器它支持的value类型有:

 

    String字符串, List链表, Hash哈希, Set集合, Sorted Set有序集合, Bitmap, HyperLoglog

    

    Strings:
      SET key value [EX #] [NX|XX]
      GET
      INCR
      DECR
      EXIST

    Lists:
      LPUSH
      RPUSH
      LPOP
      RPOP
      LINDEX
      LSET

    Sets:
      SADD
      SINTER
      SUNION
      SPOP
      SISMEMBER

    Sorted Sets:
      ZADD
      ZRANGE
      ZCARD
      ZRANK

    Hashes:
      HSET
      HSETNX
      HGET
      HKEYS
      HVALS
      HDEL

    Bitmaps, HyperLogLog

 

  6、守护进程

    监听端口为6379/tcp

  7、数据库对比

 

    常见数据库功能对比

名称数据库类型数据存储选项操作类型备注
redis内存存储,nosql数据库支持字符串、列表、集合、散列标、有序集合增、删、修改、更新支持分布式存储,主从同步及高可用,单线程
memcached内存缓存数据库键值之间得映射增、删、修改、更新支持多线程
mysql典型关系数据库,RDBMS数据库由多表组成,每张表包含多行增、删、修改、更新支持ACID性质
postgresql典型关系数据库,RDBMS数据库由多表组成,每张表包含多行增、删、修改、更新支持ACID性质
mongodb硬盘存储,nosql数据库数据库包含多个表增、删、修改、更新主从复制,分片,副本集、空间索引

  

 

 

 

 

 

 

 

  

 

  8、简述和memcached之间的对比

    redis不仅仅支持简单的kv类型数据,还支持list,set,hash等数据结构

    redis支持数据备份

    redis支持数据持久化,可以将内存中的数据保持在磁盘中,重启的时候可以在加载使用

    集群,memcache不支持集群,多台memcache 共处

  9、redis的master/slave复制:

      支持一个master多个slave

      slave可以介绍其他slave的链接来替代他链接master

      复制在master是非阻塞的,在slave是阻塞的

      复制被利用来提供扩展性,在slave端只提供查询功能及数据的冗余

     

  10、应用场景

    缓存(数据查询,短连接、新闻内容、商品内容等)

    分布式集群架构中session分离

    聊天室在线好友列表

    任务队列(秒杀、抢购、12306)

    应用排行

    网站访问统计

    数据统计

为了解决高并发、高可用、高可扩展,大数据存储等一系列问题而产生的数据库解决方案

 

 

 

二、主从复制工作机制

   redis持久化解决了redis服务重启后能够将硬盘的持久化数据恢复到内存中,但当redis服务器硬盘坏掉就会导致数据丢失,为了避免这种单点故障就有了主从复制工作机制

  一主多从结构

  主从复制不会阻塞master,在同步数据时,master可以继续处理client请求

  一个redis即可以是主也可以是从

 

三、多实例redis配置

  1、下载软件及安装源

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

    如果源码安装下载源码

    如果yum安装请配置源

      rpm -ivh http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

  2、安装有两种安装方式

    1)、yum安装

      直接yum install redis

      systemctl enable redis

      systemctl start redis

 

Dependencies Resolved    #一些依赖

====================================================================================================================
 Package                    Arch                     Version                           Repository              Size
====================================================================================================================
Installing:
 redis                      x86_64                   3.2.12-2.el7                      epel                   544 k
Installing for dependencies:
 jemalloc                   x86_64                   3.6.0-1.el7                       epel                   105 k

Transaction Summary
====================================================================================================================
Install  1 Package (+1 Dependent package)




Complete!
[root@web1 ~]# systemctl start redis
[root@web1 ~]# systemctl enable redis
Created symlink from /etc/systemd/system/multi-user.target.wants/redis.service to /usr/lib/systemd/system/redis.service.

[root@web1 ~]# netstat -untlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      2570/redis-server 1 
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1/systemd           
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      2050/nginx: master  
tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN      2176/dnsmasq        
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      875/sshd            
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      879/cupsd           
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      2035/master         
tcp6       0      0 :::111                  :::*                    LISTEN      1/systemd           
tcp6       0      0 :::80                   :::*                    LISTEN      2050/nginx: master  
tcp6       0      0 :::22                   :::*                    LISTEN      875/sshd            
tcp6       0      0 ::1:631                 :::*                    LISTEN      879/cupsd           
tcp6       0      0 ::1:25                  :::*                    LISTEN      2035/master         
udp        0      0 0.0.0.0:5353            0.0.0.0:*                           574/avahi-daemon: r 
udp        0      0 127.0.0.1:323           0.0.0.0:*                           2334/chronyd        
udp        0      0 0.0.0.0:52822           0.0.0.0:*                           574/avahi-daemon: r 
udp        0      0 192.168.122.1:53        0.0.0.0:*                           2176/dnsmasq        
udp        0      0 0.0.0.0:67              0.0.0.0:*                           2176/dnsmasq        
udp        0      0 0.0.0.0:177             0.0.0.0:*                           890/lightdm         
udp6       0      0 ::1:323                 :::*                                2334/chronyd        
udp6       0      0 :::177                  :::*                                890/lightdm         
[root@web1 ~]# 

 

    2)、编译安装

      解压-->编译-->copy-->启动

     

   这次编译安装一个新版本

      mkdir /data

      cd /data

      #上传下载的包到此目录

        redis-5.0.4.tar.gz

      tar redis-5.0.4.tar.gz
      cd rredis-5.0.4
      make 

 

  3、编译安装及启动

    1)创建文件夹及拷贝关键文件

     mkdir /data/redis2

   cp redis.conf /data/redis2

   cp src/redis-server /data/redis2

   cd /data/redis2/       

    2)编辑配置文件

     因为有#号开的行可以先过滤掉

      sed -ri '/#|^$/d' redis.conf

     开始编辑配置文件,修改下面几项

       vim redis.conf   

port 6380      //监听端口
appendonly no  yes //日志开关,不是包报错的日志,是二进制,记录数据变化
pidfile /var/run/redis_6380.pid  //pid名字
logfile "/data/redis2/redis.log" //log日志
daemonize yes  //后台启动   
dbfilename dump.rbd  //持久化数据文件     

    3)启动

      标红的就是一个yum安装的实例,一个编译安装的实例,这个就是多实例了

[root@web1 redis2]# ./redis-server ./redis.conf 
[root@web1 redis2]# netstat -tunlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      2570/redis-server 1 
tcp        0      0 192.168.216.51:6380     0.0.0.0:*               LISTEN      15434/./redis-serve 
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1/systemd           
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      2050/nginx: master  
tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN      2176/dnsmasq        
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      875/sshd            
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      879/cupsd           
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      2035/master         
tcp6       0      0 :::111                  :::*                    LISTEN      1/systemd           
tcp6       0      0 :::80                   :::*                    LISTEN      2050/nginx: master  
tcp6       0      0 :::22                   :::*                    LISTEN      875/sshd            
tcp6       0      0 ::1:631                 :::*                    LISTEN      879/cupsd           
tcp6       0      0 ::1:25                  :::*                    LISTEN      2035/master         
udp        0      0 0.0.0.0:5353            0.0.0.0:*                           574/avahi-daemon: r 
udp        0      0 127.0.0.1:323           0.0.0.0:*                           2334/chronyd        
udp        0      0 0.0.0.0:52822           0.0.0.0:*                           574/avahi-daemon: r 
udp        0      0 192.168.122.1:53        0.0.0.0:*                           2176/dnsmasq        
udp        0      0 0.0.0.0:67              0.0.0.0:*                           2176/dnsmasq        
udp        0      0 0.0.0.0:177             0.0.0.0:*                           890/lightdm         
udp6       0      0 ::1:323                 :::*                                2334/chronyd        
udp6       0      0 :::177                  :::*                                890/lightdm         
[root@web1 redis2]# 

 

 

 

    4)变量,赋值取值,正常关闭,非正常的关闭

[root@web1 redis2]# redis-cli -h 192.168.216.51 -p 6380 
192.168.216.51:6380> 
192.168.216.51:6380> 
192.168.216.51:6380> 
192.168.216.51:6380> set home zxg  //赋值
OK192.168.216.51:6380> get home    //取值
"zxg"
192.168.216.51:6380> get abc 123
(error) ERR wrong number of arguments for 'get' command
192.168.216.51:6380> set abc 123 
OK
192.168.216.51:6380> get abc
"123"192.168.216.51:6380> KEYS *    //查看所有的key
1) "abc"
2) "home"
192.168.216.51:6380> 
192.168.216.51:6380> SHUTDOWN  //正常关闭,非正常关闭就是kill了

 

   

    

四、主从配置

  1、配置从服务器

   redis主从配置非常简单,只需要把从服务器改一个配置即可

   vim redis.conf

 

slaveof 192.168.216.51 6379

  2、启动服务

[root@web2 ~]# systemctl start redis
[root@web2 ~]# systemctl enable redis

  3、查看主从状态测试结果

[root@web1 redis2]# redis-cli -h 192.168.216.51 -p 6379
192.168.216.51:6379>  info replication 
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.216.52,port=6379,state=online,offset=99,lag=0
master_repl_offset:99
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:98
192.168.216.51:6379> 

 

127.0.0.1:6379> info replication
# Replication
role:slave
master_host:192.168.216.51
master_port:6379
master_link_status:up
master_last_io_seconds_ago:3
master_sync_in_progress:0
slave_repl_offset:253
slave_priority:100
slave_read_only:1
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
127.0.0.1:6379>

注意1:从服务器只读

    

    master新建key test zxg

192.168.216.51:6379> set test zxg
OK
192.168.216.51:6379> get test
"zxg"
192.168.216.51:6379> 

    slave查看有没有值

127.0.0.1:6379> get test
"zxg"
127.0.0.1:6379> 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值