Redis

web架构
Redis_第1张图片
image.png
中心节点:name node
Redis_第2张图片
image.png
服务发现:service discovery
Redis_第3张图片
image.png
分布式  文件系统/存储系统/有无中心节点
varnish--http协议--nginx--存储协议--分布式系统(无http接口)
varnish--http协议--分布式系统(有http接口)
nosql流派众多
  计数器数据/日志数据
    redis(持久存储,性能不相上下的KV存储)
    memcached(不能实现持久存储)
关键词搜索--搜索引擎(存储+构建索引)--elasticsearch
应用程序服务器
  通过适配器连接存储系统实现供用户操作的美观界面--前端开发--ui设计/视觉设计
不同类型数据,存储不同系统
多个系统,在同一站点上,同时使用

节点down掉,文件不完整
  节点冗余
  数据块冗余--冗余1/2份
  无中心节点--quorum机制 >total/2,即leader
BASE--当前系统,ACID--系统的特性,具体参考文档

http://www.nosql-database.org/
https://redis.io/

help @list
Redis_第4张图片
image.png
help @pubsub
Redis_第5张图片
image.png
redis
yum info redis
yum -y install redis
rpm -ql redis
systemctl start redis; ss -ntl  tcp:6379端口
简单接口命令
没有启动认证,可直接连接
redis-cli -h
  -a 指定密码,不用指定用户名,默认用户名仅一个
redis-cli = redis-cli -h localhost -p 6379
select 0  切换至数据库0(类似MySQL的use)
select 1  切换至数据库1,提示符变化--localhost:6379[1]
  数据库默认0-15=16个数据库,不指定,默认就在0号数据库上
help  查看命令帮助
help @string  此处的字符包含数字
  set name tom
  get name
  set major math
  append major ,english
  get major
  setrange major 4 chinese  此处把4变为5--offset偏移量(english/chinese均7字符)
  get major
  strlen name  字符长度
  incr count  第一次从0开始+1
  incrby count 10  从原基础上+10
  decr count  从原基础上-1
  decrby count 5  从原基础上-5
  get count
help @list  如上图1
  rpush weekdays Tue Wed  右侧增加
  lindex weekdays 0/1/2  显示索引中的元素信息
  lpush weekdays Mon  左侧增加
  lindex weekdays 0/1/2
  lpop weekdays  左侧删除
  rpop weekdays  右侧删除
  lindex weekdays 0/1
  linsert weekdays before Tue Mon  Tue之前插入Mon
  linsert weekdays after Tue Wed  Tue之后插入Wed
  lindex weekdays 0/1/2
help @hash
  hset stu1 name tom
  hmset stu1 age 17 gender mail major biology
  hkeys stu1
  hvals stu1
  hget stu1 name
  hgetall stu1
  hdel stu1 major
  hgetall stu1
  hlen stu1  显示:the number of fields
  hstrlen stu1 name
help @set
  SDIFFSTORE
  SINTERSTORE
  sadd tom lucy lily wendy  增加tom(key)对应的members
  sadd jerry lucy obama trump
  sinter tom jerry  交集
  sunion tom jerry  并集
  sdiff tom jerry  tom(key)有,jerry没有的  差集
  sdiff jerry tom  jerry有,tom没有的
  smembers tom  查看tom的members
  smembers jerry
  sunionstore friends tom jerry  把tom和jerry的并集存储到friends中
  smembers friends  查看friends的members
  SDIFFSTORE  存储差集
  SINTERSTORE  存储交集
help @sorted_set
  索引和score是两回事
  zadd math 90 FengBaobao 95 ZhangChulan 99 ZhugeQing 89 Xusi
  zcard math  显示math(key)中的members的数量
  zcount math 95 100  显示score在95-100之间的members的数量
  zrange math 0 3  score由低到高排序(0/3--索引)
  zrevrange math 0 3  score由高到低排序(0/3--索引)
  zrangebyscore math 90 100  score由低到高排序(90/100--score)
  zrank math FengBaobao
  zscore math FengBaobao/ZhangChulan  显示各members的索引
help @pubsub
  fanout  扇出  图
  subscribe military finance entertainment education  订阅/监听这些频道
  另一个窗口:
  publish military 'US is going to cooperate with DPRK'
  publish finance 'Japan is going to cooperate with China'
  publish education 'The system of nine-year compulsory education is being implemented.'
  publish entertainment 'Exited-Poppin is going to broadcast on Saturday.'
help @transactions  少用--运维
help @connection
  ping  服务器的状态
  ping hi
  echo hello
  quit
vim /etc/redis.conf  启动认证功能
/requirepass,在"# requirepass foobared"下面添加信息:
  requirepass qianggedu
systemctl restart redis
redis-cli -h localhost -p 6379
  get name  显示:NOAUTH Authentication required
  auth qianggedu  进行认证,只有一个用户,密码是相同的,即requirepass
  get name  可以访问
  exit
vim /etc/redis.conf
把"# requirepass foobared"下面添加的信息,注释掉,避免后面实验不受影响
  #requirepass qianggedu  
systemctl restart redis
redis-cli
help @server  设置主从相关...
  info  显示当前服务端的信息
  info server
  info clients
  info memory
    rss常驻内存集
    maxmemory:0  redis使用的最大内存--无限制
    maxmemory_policy:noeviction  定义内存空间的淘汰策略,此处即:不做任何淘汰
      后面详细将,若是cache--基于lru/ttl/
  info cpu
    used_cpu_sys:0.39  内核空间执行时长
    used_cpu_user:0.19  用户空间执行时长
  client list  列出客户端
    fd=5  文件标识符

centos7.4-2
grep -i "^###" /etc/redis.conf  查看配置段
vim /etc/redis.conf
bind 0.0.0.0  (不靠谱)
  绑定监听的服务所在主机的地址
  iptables层添加访问策略
  认证--require password
systemctl restart redis
centos7.4-3
yum -y install redis
redis-cli -h 192.168.1.6
get name
centos7.4-2
redis-cli
config get requirepass  显示密码为空
config set requirepass qianggedu  设置密码
config get requirepass  显示没有权限:NOAUTH Authentication required
auth qianggedu  密码认证
config get requirepass  显示密码信息
config rewrite  内存中的设置覆盖到配置文件,使之永久有效
  vim /etc/redis.conf
  在文件后面出现以下信息,即内存覆盖到配置文件成功
    # Generated by CONFIG REWRITE
    requirepass "qianggedu"
config get appendonly
config set appendonly yes
config get appendonly  
config rewrite
  vim /etc/redis.conf
    appendonly yes  no变为yes,仅追加
  ls /var/lib/redis/  显示appendonly.aof和dump.rdb
更多配置参考文档

图1:两种存储方式
Redis_第6张图片
image.png
图2:sentinel和redis cluster:读和写的负载均衡
Redis_第7张图片
image.png
复制
centos7.4-2:192.168.1.6  主节点
centos7.4-3:192.168.1.7  从节点
centos7.4-4:192.168.1.12  从节点
vim /etc/hosts
192.168.1.6  centos7.4-2.fgq.com
192.168.1.7  centos7.4-3.fgq.com
192.168.1.12  centos7.4-4.fgq.com

centos7.4-2
前面的实验--有认证auth/开启了appendonly yes
centos7.4-3和centos7.4-4
yum -y install redis
vim /etc/redis.conf
 修改信息:bind 0.0.0.0
systemctl restart redis;ss -ntl  tcp端口6379
redis-cli
help SLAVEOF  看用法
SLAVEOF 192.168.1.6 6379  关联主节点/端口
CONFIG SET masterauth qianggedu  设置主节点的认证
CONFIG REWRITE  覆盖配置文件,永久有效
  或者直接修改配置文件
  vim /etc/redis.conf
  /Replication
  # slaveof  
  slaveof 192.168.1.6 6379
  # masterauth 
  masterauth "qianggedu"
  systemctl restart redis;ss -ntl  tcp端口6379
centos7.4-2
info replication  查看从节点信息
centos7.4-3和centos7.4-4
get name  数据同步过来了
SMEMBERS tom/jerry

centos7.4-3和centos7.4-4
CONFIG get slave-read-only  从节点是否只读
set discipline physics  显示:"can't write against a read only slave"从节点不能再写

centos7.4-3和centos7.4-4
配置为和主节点相同的认证功能
避免从节点被提升为主节点时,出现与原主节点不一致的情况
config set requirepass qianggedu
auth qianggedu
CONFIG REWRITE

启动sentinel(类似mha--管理节点)  如上图1和2
sentinel节点需要至少3个,此处避免节点过多,带不动,就把3个sentinel节点和主从节点放在一起了
centos7.4-2
rpm -ql redis
vim /etc/redis-sentinel.conf  基于集群状态自动被修改
port 26379  不变
bind 0.0.0.0  手动添加,否则会以守护进程方式启动
sentinel monitor mymaster 192.168.1.6 6379 2  
sentinel auth-pass mymaster qianggedu  
  认证,密码和之前设定的相同,最好随机数加密,越难猜越好
sentinel down-after-milliseconds mymaster 5000
scp /etc/redis-sentinel.conf centos7.4-3.fgq.com:/etc/
scp /etc/redis-sentinel.conf centos7.4-4.fgq.com:/etc/
systemctl start redis-sentinel.service; ss -ntl  23679端口
centos7.4-3和centos7.4-4
systemctl start redis-sentinel.service; ss -ntl  23679端口
tail /var/log/redis/sentinel.log

centos7.4-2
redis-cli -h 192.168.1.7 -p 26379
sentinel masters  各集群的各主节点的各项属性信息--192.168.1.6
sentinel slaves mymaster  某主节点对应的各个从节点的各项属性信息
sentinel failover mymaster  手动切换主从节点
sentinel masters  192.168.1.7被提升为主节点
sentinel slaves mymaster  
sentinel failover mymaster  第二次切换
sentinel masters  显示"s_down,master,failover_in_progress"
sentinel slaves mymaster  显示"slave,promoted"
  需要等待3分钟,来投票,才会显示192.168.1.12被提升为主节点

centos7.4-4
此时为新的主节点,强行down掉
killall redis-server;ss -ntl  没有6379端口了,只有26379端口
centos7.4-2
sentinel masters  
  显示"s_down,master,disconnected,failover_in_progress"
  显示"s-down-time"和"166961"--等到180000ms后,即可显示谁为主节点
sentinel masters  等到180000ms后,显示192.168.1.7被提升为主节点
sentinel slaves mymaster  
  显示192.168.1.6  slave
  显示192.168.1.12  "s_down,slave,disconnected"
centos7.4-4
systemctl restart redis;ss -ntl  6379和26379端口都出现了
centos7.4-2
sentinel masters  显示192.168.1.12  slave

Twemproxy(Twitter)
Redis_第8张图片
image.png
Codis(豌豆荚)
Redis_第9张图片
image.png
Redis Cluster
Redis_第10张图片
image.png
Cerberus
Redis_第11张图片
image.png
一般情况下(小企业):只访问主节点(负责读写)--从节点只做冗余

测试--Codis/Redis Cluster

参考文档网站

修改内核参数vm.overcommit_memory = 1
vim /etc/sysctl.conf
vm.overcommit_memory = 1
sysctl -p
防止占用其他服务的内存空间/交换内存(不操作)

vim /etc/hosts
192.168.1.5  centos7.4.fgq.com
192.168.1.6  centos7.4-2.fgq.com
192.168.1.8  centos7.4-3.fgq.com

centos7.4和centos7.4-2和centos7.4-3
vim /etc/redis.conf
/bind
bind 192.168.1.5/6/8
/CLUSTER
cluster-enabled yes
cluster-config-file nodes-6379.conf  一个主机可运行多个实例,6379/6380/...便于区分
cluster-node-timeout 15000
cluster-slave-validity-factor 10
systemctl start redis;ss -ntl  6379端口

不操作:
cp /etc/redis.conf /etc/redis-6380.conf
vim /etc/redis-6380.conf
  port改为6380
  cluster-config-file nodes-6380.conf  nodes-6379改为nodes-6380
redis-server -h  不用systemctl启动;用redis-server读取配置文件,使之生效


centos7.4
redis-cli -h 192.168.1.5
cluster info  显示cluster_state:fail,没有分槽
cluster meet 192.168.1.6 6379  添加主节点
cluster meet 192.168.1.8 6379
quit
for i in {0..5460};do redis-cli -h 192.168.1.5 cluster addslots $i;done
  分槽:centos7.4的槽位为0-5460
centos7.4-2
for i in {5461..10921};do redis-cli -h 192.168.1.6 cluster addslots $i;done
centos7.4-3
for i in {10922..16383};do redis-cli -h 192.168.1.8 cluster addslots $i;done
centos7.4
redis-cli -h 192.168.1.5
cluster info  显示cluster_state:ok,已经分槽
cluster nodes  查看各节点id
命令行:for i in {0..100};do redis-cli -h 192.168.1.5 set key$i value$i;done
get key1
  显示(error) MOVED 9189 192.168.1.6:6379  槽位在192.168.1.6节点上
get key2  显示value2
centos7.4-2
get key1
  显示(nil)--空的  槽位在本机上,但是没有数据
  因为在其他节点上设置的,不能连接至centos7.4-2
help CLUSTER REPLICATE
  CLUSTER REPLICATE node-id
  Reconfigure a node as a slave of the specified master node

你可能感兴趣的:(Redis)