海安零距离 海安论坛 海安新闻 海安

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2077|回复: 0

linux--redis

[复制链接]

6234

主题

6234

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
18716
发表于 2019-12-27 17:48 | 显示全部楼层 |阅读模式
redis

redis在linux的安装
  1. 1.redis安装方式    yum安装(提前设置好yum源)    yum install  redis -y  #    源代码编译安装    rpm包手动安装        2.编译安装redis     创建一个文件夹,存redis(也可以不消创建)        mkdir linux_redis        cd linux_redis    1.在redis目录下,下载redis源代码包        wget http://download.redis.io/releases/redis-4.0.10.tar.gz    2.解压缩redis源码包        3.编译三部曲         指定安装路径 ,天生makefile 编译文件             ./configure --prefix=redis的安装路径        开始编译            make        编译安装            make install          编译完成后,默认天生可利用的redis下令            /usr/local/bin/redis-server         4.修改redis的设置文件,支持更安全的启动方式        vim redis.conf             #打开redis暗码的参数        requirepass 123456789    #开启安全模式        protected-mode yes    #修改redis的默认启动端口,以及绑定地点        bind 0.0.0.0        port 6800            #过滤出非空行,解释行的内容,重定向写入到一个文件中     grep  -v "^$"  redis.conf |grep  -v "^#"  > linuxredis.conf    #在设置文件末端加上配景启动参数    daemonize  yes    5.启动redis服务端     redis-server linuxredis.conf     6.验证redis是否启动        netstat -tunlp |grep  redis        ps -ef|grep redis             7.指定暗码登录redis        [root@localhost redis-5.0.7]# redis-cli -p 6800        127.0.0.1:6800> ping        (error) NOAUTH Authentication required        127.0.0.1:6800> auth 123456789        OK        127.0.0.1:6800> ping        PONG  
复制代码
redis常用下令

redis的数据范例
  1. 字符串(strings)哈希(hashes)列表(lists)聚集(sets)有序聚集(sorted sets)
复制代码
下令练习

底子下令
  1. keys *         检察全部keytype key      检察key范例expire key seconds    逾期时间ttl key     检察key逾期剩余时间        -2表现key已经不存在了persist     取消key的逾期时间   -1表现key存在,没有逾期时间exists key     判断key存在    存在返回1    否则0del keys     删除key    可以删除多个dbsize         计算key的数目
复制代码
strings范例数据干系下令
  1. set   设置keyget     获取keyappend  追加stringmset    设置多个键值对mget    获取多个键值对del     删除keyincr    递增+1decr    递减-1127.0.0.1:6800> set name 'bajie' #设置key127.0.0.1:6800> get name   #获取key的值"bajie"127.0.0.1:6800> set name 'pig'   #覆盖keyOK127.0.0.1:6800> get name"pig"127.0.0.1:6800> APPEND name 'dsb'  #追加key的string ,不区分巨细写(integer) 6127.0.0.1:6800> get name"pigdsb"127.0.0.1:6800> mset name1 'monkey' name2 'tangseng' #设置多个键值对OK127.0.0.1:6800> keys *1) "name2"2) "name1"3) "name"127.0.0.1:6800> mget name name1 name2  #获取多个value1) "pigdsb"2) "monkey"3) "tangseng"127.0.0.1:6800> del name2   #删除key(integer) 1  #删除一个不存在的key,效果为nil127.0.0.1:6800> keys *1) "name1"2) "name"127.0.0.1:6800> set num 10OK127.0.0.1:6800> get num"10"#string范例现实上不光仅包罗字符串范例,还包罗整型,浮点型。redis可对整个字符串或字符串一部门举行利用,而对于整型/浮点型可举行自增、自减利用。127.0.0.1:6379> incr num    #给num string 加一 INCR 下令将字符串值剖析成整型,将其加一,末了将效果生存为新的字符串值,可以用作计数器(integer) 11127.0.0.1:6800> get num  "11"127.0.0.1:6800> decr num      #递减1  (integer) 10127.0.0.1:6800> decr num    #递减1(integer) 9127.0.0.1:6800> get num"9"
复制代码
hashes哈徐数据干系下令
  1. 哈希布局就是  k1   ->  k1 : v1     如同字典 套字典  { k1 : { k2: v2 }  }   ,取出v2 必须  k1,取出k2hashes即哈希。哈希是从redis-2.0.0版本之后才有的数据布局。hashes存的是字符串和字符串值之间的映射,比如一个用户要存储其全名、姓氏、年龄等等,就很得当利用哈希。    hset 设置散列值    hget  获取散列值    hmset  设置多对散列值    hmget  获取多对散列值    hsetnx   假如散列已经存在,则不设置(防止覆盖key)    hkeys     返回全部keys    hvals     返回全部values    hlen      返回散列包罗域(field)的数目    hdel     删除散列指定的域(field)    hexists    判断是否存在
复制代码
  1. 127.0.0.1:6800> hset news title 'first news title'(integer) 1#设置第一条消息 news的id为1,添加数据title的值是"first news title"127.0.0.1:6800> hset news content 'first news content'(integer) 1 #添加一个conntent内容127.0.0.1:6800> hget news title  #获取new的标题"first news title"127.0.0.1:6800> hget news content  #获取new的内容"first news content"127.0.0.1:6800> hmget news title content  #获取news的标题和内容1) "first news title"2) "first news content"127.0.0.1:6800> hmset news1 title 'second news title' content 'second content'OK127.0.0.1:6800> hmget news1 title content1) "second news title"2) "second content"#分别同时设置标题和内容并获取标题和内容127.0.0.1:6800> hkeys news  #获取news的key1) "title"2) "content"127.0.0.1:6800> hvals news  #获取news的值1) "first news title"2) "first news content"127.0.0.1:6800> hlen news  #获取news的长度(integer) 2127.0.0.1:6800> hdel news title  #删除news的标题title(integer) 1127.0.0.1:6800> hlen news  #查抄一下长度(integer) 1127.0.0.1:6800> HEXISTS news title   #判断news中是否有title,不存在返回0,存在返回1(integer) 0
复制代码
lists列表干系下令
  1. lpush           从列表左边插rpush           从列表右边插lrange          获取一定长度的元素  lrange key  start stopltrim           截取一定长度列表lpop            删除最左边一个元素rpop            删除最右边一个元素lpushx/rpushx   key存在则添加值,不存在不处置惩罚127.0.0.1:6800> lpush users 'bajie' 'monkey' 'tagnseng'  #新建一个users,从左边放入三个元素(integer) 3  127.0.0.1:6800> llen users #检察users长度(integer) 3127.0.0.1:6800> lrange users 0 -1  #检察users全部元素1) "tagnseng"2) "monkey"3) "bajie"127.0.0.1:6800> rpush users 'shasha' #从右边插入shasha(integer) 4127.0.0.1:6800> lrange users 0 -1 #检察users的全部元素1) "tagnseng"2) "monkey"3) "bajie"4) "shasha"127.0.0.1:6800> lpop users  #删除左边第一个元素"tagnseng"127.0.0.1:6800> lrange users 0 -11) "monkey"2) "bajie"3) "shasha"127.0.0.1:6800> rpop users   #删除右边第一个元素"bajie"
复制代码
sets聚集干系下令
  1. redis的聚集,是一种无序的聚集,聚会合的元素没有先后序次。聚集干系的利用也很丰富,如添加新元素、删除已有元素、取交集、取并集、取差集等。我们来看例子:    sadd/srem         添加/删除 元素    sismember         判断是否为set的一个元素    smembers          返回聚集全部的成员    sdiff             返回一个聚集和其他聚集的差异    sinter            返回几个聚集的交集    sunion            返回几个聚集的并集
复制代码
  1. 127.0.0.1:6800> sadd class bajie monkey  #添加聚集,有三个元素,不加引号就当做字符串处置惩罚(integer) 2127.0.0.1:6800> SMEMBERS class  #检察聚集class成员1) "monkey"2) "bajie"127.0.0.1:6800> srem class monkey  #删除class的monkey(integer) 1127.0.0.1:6800> SMEMBERS class1) "bajie"127.0.0.1:6800> SISMEMBER class bajie  (integer) 1127.0.0.1:6800> SISMEMBER class monkey(integer) 0127.0.0.1:6800> #返回改是否是class的成员信息,不存在返回0,存在返回1127.0.0.1:6800> sadd class monkey #再把monkey参加class(integer)  1 127.0.0.1:6800> sadd class2 bajie shasha  #添加新聚集zoo2(integer) 2127.0.0.1:6800> SMEMBERS class21) "shasha"2) "bajie"127.0.0.1:6800> sdiff class class2 #找出聚集class中有的,而class2中没有的元素1) "monkey"127.0.0.1:6800> sdiff class2 class   #找出聚集class2中有的,而class中没有的元素1) "shasha"127.0.0.1:6800> sinter class class2 #找出class和class2的交集,都有的元素1) "bajie"127.0.0.1:6800> SUNION class class2  #找出class和class2的并集,全部的不重复的元素1) "shasha"2) "bajie"3) "monkey"
复制代码
sorted sets有序聚集干系下令
  1. 都是以z开头的下令zset的每一个成员都有一个分数与之对应,并且分数是可以重复的。有序聚集的增编削由于有啦排序,实验服从就黑白常快速的,即便是访问聚会合心的数据也黑白常高效的。用来生存需要排序的数据,例如排行榜,效果,工资等。
复制代码
  1. 利用有序聚集的排序,排序门生的效果127.0.0.1:6800> ZADD class_test 70 'bajie'(integer) 1127.0.0.1:6800> ZADD class_test 80 'monkey'(integer) 1127.0.0.1:6800> ZADD class_test 75 'shasha'(integer) 1127.0.0.1:6800> ZADD class_test  99 'tangseng'(integer) 1
复制代码
排行榜,zreverange 倒叙 zrange正序
  1. 127.0.0.1:6800> ZREVRANGE class_test 0 -1 withscores1) "tangseng"2) "99"3) "monkey"4) "80"5) "shasha"6) "75"7) "bajie"8) "70"127.0.0.1:6800> ZRANGE class_test 0 -1 withscores1) "bajie"2) "70"3) "shasha"4) "75"5) "monkey"6) "80"7) "tangseng"8) "99"
复制代码
移除有序聚集class_test中的成员,bajie给移除掉
  1. 127.0.0.1:6800> ZREM class_test bajie(integer) 1127.0.0.1:6800> ZRANGE class_test 0 -1 withscores1) "shasha"2) "75"3) "monkey"4) "80"5) "tangseng"6) "99"
复制代码
返回有序聚集class_test的基数
  1. 127.0.0.1:6800> ZCARD class_test (integer) 3
复制代码
返回成员的score值
  1. 127.0.0.1:6800> ZSCORE class_test monkey"80"
复制代码
redis发布订阅

Redis 通过 PUBLISH 、 SUBSCRIBE 等下令实现了订阅与发布模式。
  1. PUBLISH channel msg    将信息 message 发送到指定的频道 channelSUBSCRIBE channel [channel ...]    订阅频道,可以同时订阅多个频道UNSUBSCRIBE [channel ...]    取消订阅指定的频道, 假如不指定频道,则会取消订阅全部频道PSUBSCRIBE pattern [pattern ...]    订阅一个或多个符合给定模式的频道,每个模式以 * 作为匹配符,比如 it* 匹配所    有以 it 开头的频道( it.news 、 it.blog 、 it.tweets 等等), news.* 匹配全部    以 news. 开头的频道( news.it 、 news.global.today 等等),诸云云类PUNSUBSCRIBE [pattern [pattern ...]]    退订指定的规则, 假如没有参数则会退订全部规则PUBSUB subcommand [argument [argument ...]]    检察订阅与发布系统状态留意:利用发布订阅模式实现的消息队列,当有客户端订阅channel后只能收到后续发布到该频道的消息,之前发送的不会缓存,必须Provider和Consumer同时在线。
复制代码

redis长期化RDB与AOF

RDB长期化
  1. Redis是一种内存型数据库,一旦服务器进程退出,数据库的数据就会丢失,为了办理这个题目,Redis提供了两种长期化的方案,将内存中的数据生存到磁盘中,制止数据的丢失。
复制代码
  1. redis提供了RDB长期化的功能,这个功能可以将redis在内存中的的状态生存到硬盘中,它可以手动实验。
复制代码
  1. 也可以再redis.conf中设置,定期实验。RDB长期化产生的RDB文件是一个颠末压缩的二进制文件,这个文件被生存在硬盘中,redis可以通过这个文件还原数据库当时的状态。
复制代码
  1. RDB(长期化)    内存数据生存到磁盘    在指定的时间隔断内天生数据集的时间点快照(point-in-time snapshot)    长处:速率快,得当做备份,主从复制就是基于RDB长期化功能实现    rdb通过再redis中利用save下令触发 rdbrdb设置参数:    dir /data/6379/    dbfilename  dbmp.rdb    每过900秒 有1个利用就举行长期化    save 900秒  1个修改类的利用    save 300秒  10个利用    save 60秒   10000个利用    save  900  1    save  300  10    save  60   10000
复制代码
  1. #redis长期化之rdb机制,创建rdb的设置文件    touch rdbredis.conf #写入如下内容    daemonize yes #配景运行     port 6379   #指定端口     logfile /data/6379/redis.log    #指定日志路径    dir /data/6379  #redis的数据文件,会存放在这里    dbfilename  dbmp.rdb        #开启rdb长期化,且指定长期化文件的名字    bind 0.0.0.0    save 900 1    #界说触发rdb长期化的时间机制     save 300 10    save 60  10000  #创建数据文件夹    mkdir  -p /data/6379# 创建数据    set name bajie    set name1 monkey#手动生存    save#指定rdb文件启动redis    redis-server  rdbredis.conf  #在开另一个窗口:    cd /data/6379    ls    会存在.rdb文件
复制代码
AOF长期化
  1. AOF(append-only log file)记录服务器实验的全部变更利用下令(例如set del等),并在服务器启动时,通过重新实验这些下令来还原数据集AOF 文件中的下令全部以redis协议的格式生存,新下令追加到文件末端。长处:最大步调包管数据不丢缺点:日志记录非常大
复制代码
  1. #redis长期化之rdb机制,创建rdb的设置文件    touch rdbredis.conf #写入如下内容    daemonize yes #配景运行     port 6379   #指定端口     logfile /data/6379/redis.log    #指定日志路径    dir /data/6379  #redis的数据文件,会存放在这里    dbfilename  dbmp.rdb        #   开启rdb长期化,且指定长期化文件的名字    bind 0.0.0.0    save 900 1    #界说触发rdb长期化的时间机制     save 300 10    save 60  10000  #创建数据文件夹    mkdir  -p /data/6379# 创建数据    set name bajie    set name1 monkey#生存    save#指定rdb文件启动redis    redis-server  rdbredis.conf  #在开另一个窗口:    cd /data/6379    ls    会存在.rdb文件#redis长期化之aof方式,以日志情势,把修改类的利用,记录下来    修改设置文件如下    touch  aof.conf     写入如下内容    daemonize yes    port 6379    logfile /data/6379/redis.log    dir /data/6379    appendonly yes           #开启aof的俩参数    appendfsync everysec     #aof的长期化机制 #指定aof文件启动redisredis-server aof.conf #在开另一个窗口:    cd /data/6379    ls    会存在成.aof文件tail -f appendonly.aof  #会夯住,监测状态
复制代码
不重启,切换rdb长期化为aof长期化
  1. 1.准备一个rdb的redis数据库2.通过下令,直接切换aof    127.0.0.1:6379> CONFIG set appendonly yes   #开启AOF功能    OK    127.0.0.1:6379> CONFIG SET save ""  #关闭RDB功能    OK3.精确环境下,会天生aof日志文件了,此时下令利用都是在aof里面了4.还得修改设置文件,以上下令只是临时见效,改完以后,下次指定设置文件启动,就不停是aof了    port 6379    logfile /data/6379/redis.log    dir /data/6379    dbfilename  dbmp.rdb    save 900 1    save 300 10    save 60  10000    daemonize yes    appendonly yes      appendfsync everysec     
复制代码
redis主从复制
  1. redis集群中的数据库复制是通过主从同步来实现的主节点(master)把数据分发给从节点(slave)主从同步的利益自安于高可用,redis节点有冗余设计
复制代码
  1. 原理:1. 从服务器向主服务器发送 SYNC 下令。2. 接到 SYNC 下令的主服务器会调用BGSAVE 下令,创建一个 RDB 文件,并利用缓冲区记录接下来实验的全部写下令。3. 当主服务器实验完 BGSAVE 下令时,它会向从服务器发送 RDB 文件,而从服务器则会接收并载入这个文件。4. 主服务器将缓冲区储存的全部写下令发送给从服务器实验。1、在开启主从复制的时间,利用的是RDB方式的,同步主从数据的2、同步开始之后,通过主库下令传播的方式,自动的复制方式实现3、2.8以后实现PSYNC的机制,实现断线重连
复制代码
示例
  1. #redis的主从复制,做一个一主三从的实验(手动切换主从)mredis.conf   #主库的设置文件    port 6380    daemonize yes    pidfile /data/6380/redis.pid    loglevel notice    logfile "/data/6380/redis.log"    dbfilename dump.rdb    dir /data/6380    protected-mode no准备一个从库s1redis.conf     port 6381    daemonize yes    pidfile /data/6381/redis.pid    loglevel notice    logfile "/data/6381/redis.log"    dbfilename dump.rdb    dir /data/6381    protected-mode no    slaveof  127.0.0.1 6380  #也可以在设置文件中,直接界说,直接启动,默认就是主从复制了准备第二个从库s2redis.conf     port 6382    daemonize yes    pidfile /data/6382/redis.pid    loglevel notice    logfile "/data/6382/redis.log"    dbfilename dump.rdb    dir /data/6382    protected-mode no    slaveof  127.0.0.1 6380  #也可以在设置文件中,直接界说,直接启动,默认就是主从复制了#创建三个数据库的数据文件夹    mkdir -p  /data/{6380,6381,6382}#分别启动三个数据库实例    [root@s24_linux myredis]# redis-server mredis.conf     [root@s24_linux myredis]# redis-server s1redis.conf     [root@s24_linux myredis]# redis-server s2redis.conf     [root@s24_linux myredis]# ps -ef|grep redis    root      78545      1  0 10:54 ?        00:00:00 redis-server *:6380    root      78550      1  0 10:54 ?        00:00:00 redis-server *:6381    root      78555      1  0 10:54 ?        00:00:00 redis-server *:6382#分别检察三个redis数据库的库信息    [root@s24_linux myredis]# redis-cli -p 6380 info replication     [root@s24_linux myredis]# redis-cli -p 6381 info replication     [root@s24_linux myredis]# redis-cli -p 6382 info replication #通过下令,临时给三个数据库添加主从复制信息,假如在设置文件中设置成默认的主从关系,就不消写下面的内容    redis-cli -p 6381  slaveof 127.0.0.1 6380    #6380设置为主库,给6381指定为6380的从库    redis-cli -p 6381 info replication          #检察6381的复制信息    redis-cli -p 6380 info replication          #检察6380的复制信息    redis-cli -p 6382  slaveof 127.0.0.1 6380    #给6382设置为6380的从库    redis-cli -p 6380 info replication        效果:        [root@localhost linux_redis]# redis-cli -p 6380 info replication        # Replication        role:master         connected_slaves:2        slave0:ip=127.0.0.1,port=6381,state=online,offset=84,lag=1 #从s1redis        slave1:ip=127.0.0.1,port=6382,state=online,offset=84,lag=0 #从s2redis#举行主从复制读写演示    6380可读可写    6381 6382只读,不给写#杀死从库,无所谓,再把从库重新启动,大概再创建一个新的就行 #杀死主库,必须得手动办理故障,吧从库切换为新的主库,继承主从复制    只需要剔除当前本身的从的身份即可,剔除6381的从的身份    127.0.0.1:6381> slaveof no one    OK#再次启动一个新的从库,以6381为主库即可
复制代码
redis哨兵


  1. Redis-Sentinel是redis官方保举的高可用性办理方案,当用redis作master-slave的高可用时,假如master本身宕机,redis本身大概客户端都没有实现主从切换的功能。而redis-sentinel就是一个独立运行的进程,用于监控多个master-slave集群,自动发现master宕机,举行自动切换slave > master。
复制代码
sentinel主要功能如下:
  1. + 不时的监控redis是否良好运行,假如节点不可达就会对节点举行下线标识+ 假如被标识的是主节点,sentinel就会和其他的sentinel节点“协商”,假如其他节点也人为主节点不可达,就会推选一个sentinel节点来完成自动故障转义+ 在master-slave举行切换后,master_redis.conf、slave_redis.conf和sentinel.conf的内容都会发生改变,即master_redis.conf中会多一行slaveof的设置,sentinel.conf的监控目标会随之变更
复制代码
Sentinel的工作方式:
  1. 每个Sentinel以每秒钟一次的频率向它所知的Master,Slave以及其他 Sentinel 实例发送一个 PING 下令 假如一个实例(instance)距离末了一次有效复兴 PING 下令的时间超过 down-after-milliseconds 选项所指定的值, 则这个实例会被 Sentinel 标记为主观下线。假如一个Master被标记为主观下线,则正在监督这个Master的全部 Sentinel 要以每秒一次的频率确认Master简直进入了主观下线状态。当有充足数目标 Sentinel(大于便是设置文件指定的值)在指定的时间范围内确认Master简直进入了主观下线状态, 则Master会被标记为客观下线在一样平常环境下, 每个 Sentinel 会以每 10 秒一次的频率向它已知的全部Master,Slave发送 INFO 下令当Master被 Sentinel 标记为客观下线时,Sentinel 向下线的 Master 的全部 Slave 发送 INFO 下令的频率会从 10 秒一次改为每秒一次若没有充足数目标 Sentinel 同意 Master 已经下线, Master 的客观下线状态就会被移除。若 Master 重新向 Sentinel 的 PING 下令返回有效复兴, Master 的主观下线状态就会被移除。主观下线和客观下线主观下线:Subjectively Down,简称 SDOWN,指的是当前 Sentinel 实例对某个redis服务器做出的下线判断。客观下线:Objectively Down, 简称 ODOWN,指的是多个 Sentinel 实例在对Master Server做出 SDOWN 判断,并且通过 SENTINEL is-master-down-by-addr 下令互相交流之后,得出的Master Server下线判断,然后开启failover.SDOWN得当于Master和Slave,只要一个 Sentinel 发现Master进入了ODOWN, 这个 Sentinel 就大概会被其他 Sentinel 推选出, 并对下线的主服务器实验自动故障迁徙利用。ODOWN只实用于Master,对于Slave的 Redis 实例,Sentinel 在将它们判断为下线前不需要举行协商, 以是Slave的 Sentinel 永久不会到达ODOWN。
复制代码
架构图



  1. #redis的哨兵设置,能够自动的办理主从切换故障1.准备三个redis数据库实例,设置好,主从关系    [root@localhost linux_redis]# cat mredis.conf     port 6380    daemonize yes    pidfile /data/6380/redis.pid    loglevel notice    logfile "/data/6380/redis.log"    dbfilename dump.rdb    dir /data/6380    protected-mode no    [root@localhost linux_redis]# cat s1redis.conf     port 6381    daemonize yes    pidfile /data/6381/redis.pid    loglevel notice    logfile "/data/6381/redis.log"    dbfilename dump.rdb    dir /data/6381    protected-mode no    slaveof 127.0.0.1 6380    [root@localhost linux_redis]# cat s2redis.conf     port 6382    daemonize yes    pidfile /data/6382/redis.pid    loglevel notice    logfile "/data/6382/redis.log"    dbfilename dump.rdb    dir /data/6382    protected-mode no    slaveof  127.0.0.1 6380        #分别启动三个redis数据库节点        redis-sentinel shaobing.conf         redis-sentinel shaobing1.conf         redis-sentinel shaobing2.conf2.准备三个哨兵sentinel(哨兵)的设置文件,三个哨兵设置文件,仅仅是端口的差异,默认是26379,26380,26381 s24shaobing.conf     port 26379      dir /var/redis/data/    logfile "26379.log"    #当前Sentinel节点监控 192.168.119.10:6379 这个主节点    #2代表判断主节点失败至少需要2个Sentinel节点节点同意    #mymaster是主节点的别名    sentinel monitor s24ms 127.0.0.1  6380  2    #每个Sentinel节点都要定期PING下令来判断Redis数据节点和其余Sentinel节点是否可达,假如超过30000毫秒30s且没有复兴,则判断不可达    sentinel down-after-milliseconds s24ms 30000    #当Sentinel节点聚集对主节点故障判断达成同等时,Sentinel领导者节点会做故障转移利用,选出新的主节点,    #原来的从节点会向新的主节点发起复制利用,限定每次向新的主节点发起复制利用的从节点个数为1    sentinel parallel-syncs s24ms 1    #故障转移超时时间为180000毫秒    sentinel failover-timeout s24ms 180000    #配景运行哨兵     daemonize yes s24shaobing1.conf s24shaobing2.conf #快速天生2个设置文件    [root@localhost linux_redis]# sed 's/26379/26380/g'   s24shaobing.conf  > s24shaobing1.conf    [root@localhost linux_redis]# sed 's/26379/26381/g'   s24shaobing.conf  > s24shaobing2.conf#创建数据文件夹    mkdir -p /var/redis/data/3.分别启动三个哨兵并查抄进程是否启动    [root@localhost linux_redis]# redis-sentinel shaobing.conf     [root@localhost linux_redis]# redis-sentinel shaobing1.conf     [root@localhost linux_redis]# redis-sentinel shaobing2.conf     [root@localhost linux_redis]# ps -ef|grep redis    root      78952      1  0 11:42 ?        00:00:00 redis-server *:6380    root      78957      1  0 11:42 ?        00:00:00 redis-server *:6381    root      78963      1  0 11:42 ?        00:00:00 redis-server *:6382    root      79051      1  0 11:51 ?        00:00:00 redis-sentinel *:26379 [sentinel]    root      79056      1  0 11:51 ?        00:00:00 redis-sentinel *:26380 [sentinel]    root      79061      1  0 11:51 ?        00:00:00 redis-sentinel *:26381 [sentinel]4.干掉master主库,哨兵会自动的推选一个从库为新的主库    kill -9 789525.将挂掉的主库,重新启动,检察复制信息    [root@localhost linux_redis]# redis-cli -p 6382 info replication     # Replication    role:master   #已经变为master    connected_slaves:1    slave0:ip=127.0.0.1,port=6381,state=online,offset=54714,lag=1    master_replid:b7cdc9508bb529976720a385bafd804ffb35a2ab    master_replid2:8c144e2f317052c195eefa4e56d67a3ab8848c9d    master_repl_offset:54844    second_repl_offset:48410    repl_backlog_active:1    repl_backlog_size:1048576    repl_backlog_first_byte_offset:71    repl_backlog_histlen:54774#在过程中心只是更改了主的设置文件检察主的设置文件    port 26379    dir "/var/redis/data"    logfile "26379.log"    sentinel myid 690257e82c765fe396a45bf9caee7e0a93b86db2    sentinel deny-scripts-reconfig yes    sentinel monitor s24ms 127.0.0.1 6382 2    sentinel config-epoch s24ms 1    daemonize yes    # Generated by CONFIG REWRITE    protected-mode no    sentinel leader-epoch s24ms 1    sentinel known-replica s24ms 127.0.0.1 6380    sentinel known-replica s24ms 127.0.0.1 6381    sentinel known-sentinel s24ms 127.0.0.1 26380 af8573b42730ed3bd6fc07a3af465c40ceddf340    sentinel known-sentinel s24ms 127.0.0.1 26381 f8e9d772a588472f76778c0352d5e9405cc397f3    sentinel current-epoch 1
复制代码
redis-cluster集群的搭建
  1. redis官方天生可以到达 10万/每秒,每秒实验10万条下令假如业务需要每秒100万的下令实验呢?
复制代码
  1. 应该是思量分布式,加呆板,把数据分到差异的位置,分摊会合式的压力,一堆呆板做一件事
复制代码
  1. redis实例集群主要头脑是将redis数据的key举行散列,通过hash函数特定的key会映射到指定的redis节点上
复制代码
数据分布理论
  1. 分布式数据库主要办理把整个数据集按照分区规则映射到多个节点的题目,即把数据集划分到多个节点上,每个节点负责整个数据的一个子集。常见的分区规则有哈希分区温序次分区。Redis Cluster接纳哈希分区规则,因此接下来会讨论哈希分区规则。    节点取余分区    同等性哈希分区    假造槽分区(redis-cluster接纳的方式)
复制代码
安装设置


大概步调:
  1. 搭建集群分为几部    准备节点    节点通讯    分配槽位给节点
复制代码
  1. 1.准备6个数据库节点,搭建三主三从的数据库主从机群,6个节点,仅仅是端口的差异 指定7000~7005 6个节点touch redis-7000.conf vim redis-7000.conf      port 7000    daemonize yes    dir "/opt/redis/data"    logfile "7000.log"    dbfilename "dump-7000.rdb"    cluster-enabled yes   #开启集群模式    cluster-config-file nodes-7000.conf  #集群内部的设置文件touch redis-7001.conf touch redis-7002.conf touch redis-7003.conf touch redis-7004.conf touch redis-7005.conf #每个节点写入7000端口的编辑内容,留意端口不一样    sed 's/7000/7001/g'  redis-7000.conf > redis-7001.conf     sed 's/7000/7002/g'  redis-7000.conf > redis-7002.conf     sed 's/7000/7003/g'  redis-7000.conf > redis-7003.conf     sed 's/7000/7004/g'  redis-7000.conf > redis-7004.conf     sed 's/7000/7005/g'  redis-7000.conf > redis-7005.conf 创建数据文件夹分别启动6个redis节点    redis-server redis-7000.conf     redis-server redis-7001.conf     redis-server redis-7002.conf     redis-server redis-7003.conf     redis-server redis-7004.conf     redis-server redis-7005.conf查抄状态:    [root@localhost clusterredis]# ps -ef|grep redis    root       7138      1  0 01:01 ?        00:00:10 redis-server 0.0.0.0:6800    root       7286      1  0 02:13 ?        00:00:06 redis-server *:6381    root       7494      1  0 03:21 ?        00:00:03 redis-server *:6382    root       7532      1  0 03:35 ?        00:00:04 redis-sentinel *:26379 [sentinel]    root       7537      1  0 03:35 ?        00:00:04 redis-sentinel *:26380 [sentinel]    root       7542      1  0 03:35 ?        00:00:04 redis-sentinel *:26381 [sentinel]    root       7634      1  0 04:04 ?        00:00:00 redis-server *:7000 [cluster]    root       7639      1  0 04:05 ?        00:00:00 redis-server *:7001 [cluster]    root       7644      1  0 04:05 ?        00:00:00 redis-server *:7002 [cluster]    root       7649      1  0 04:05 ?        00:00:00 redis-server *:7003 [cluster]    root       7686      1  0 04:07 ?        00:00:00 redis-server *:7004 [cluster]    root       7691      1  0 04:07 ?        00:00:00 redis-server *:7005 [cluster]2.设置ruby环境,一键创建redis机群slot槽位分配    yum直接安装ruby表明器        yum install ruby -y      下载ruby利用redis的模块        wget http://rubygems.org/downloads/redis-3.3.0.gem              gem install -l redis-3.3.0.gem    一键开启redis集群槽位分配,先找一下这个ruby工具在哪    find / -name  redis-trib.rb           #创建槽位:    /linux_redis/redis-5.0.7/src/redis-trib.rb  create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005    这个实验不了用:redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 --cluster-replicas 1    会创建六个槽位:三主三从:        M: 181c47f790297d5f49058bcaa8886c06df43b172 127.0.0.1:7000         slots:[0-5460] (5461 slots) master        M: c347896134bcc4fbc5061e82157c58a5835be3bd 127.0.0.1:7001        slots:[5461-10922] (5462 slots) master        M: 6dacb795eec38a3f0eb310ea43593d79a2884632 127.0.0.1:7002        slots:[10923-16383] (5461 slots) master        S: 326a871d0cb797b3f4f5c8660e027bf54605873e 127.0.0.1:7003        replicates c347896134bcc4fbc5061e82157c58a5835be3bd        S: 084b2cebed67291e98d54f61619aa3efbb93b3c7 127.0.0.1:7004        replicates 6dacb795eec38a3f0eb310ea43593d79a2884632        S: 1808e48c98f420164adc17ca476820778ba8f54f 127.0.0.1:7005        replicates 181c47f790297d5f49058bcaa8886c06df43b172        Can I set the above configuration? (type 'yes' to accept): yes3.开启redis集群功能,向集群中写入数据,检察数据重定向    以集群模式登岸redis-cluster ,写入数据             [root@localhost clusterredis]# redis-cli -p 7000 -c   #登录7000端口        127.0.0.1:7000> set name cluster          #创建数据         -> Redirected to slot [5798] located at 127.0.0.1:7001  #重定向到7001端口        OK        退出当前端口,再次登录        127.0.0.1:7000> get name        -> Redirected to slot [5798] located at 127.0.0.1:7001        "cluster"  #可以查到内容   
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|深圳论坛-深圳人的网上家园  

GMT+8, 2020-6-1 13:32 , Processed in 0.149012 second(s), 30 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表