redis3.0引入的分布式存储方案
集群由多个node节点组成,redis数据分布在这些节点当中。
在集群之中分为主节点和从节点
集群模式当中,主从一一对应,数据的写入和读取与主从模式一样,主负责写,从只能读,
集群模式自带哨兵模式,可以自动实现故障切换,但是在故障切换完成之前,整个集群都将不可用。切换完毕之后,集群会立刻恢复。
集群模式按照数据分片:
1、数据分片:是集群的核心功能,每个主都可以对外提供读、写的功能,但是数据是一一对应写入主的对应从节点。在集群模式中,可以容忍数据的不完整。
2、高可用:集群的主要目的。
数据分片的实现:
redis的集群引入了哈希槽的概念。
在redis集群当中,一共有16384个哈希槽位。(0-16383)
根据集群当中的主从节点数,分配哈希槽位,每个主从节点只负责一部分哈希槽位。
每次读写都涉及到哈希槽位,key通过CRC16校验之后,对16384取余数,余数值决定数据放入哪个哈希槽位。通过这个值去找到对应的哈希槽位所在地节点,然后直接跳转到这个节点进行存取操作。
注:主从节点的哈希槽位的值是连续的,如果出现不连续的哈希值,或者有哈希槽位没有被分配,整个集群将会报错。
主从复制的意义:主宕机之后,主节点原来复制的哈希槽将会不可用,需要从节点代替主节点继续负责原有的哈希操作。保证集群正常工作。
故障切换的过程中,会提示集群不可用,切换完成集群恢复继续工作。
redis-cli -h 192.168.233.7 --cluster create (所有ip地址) --cluster-replicas1
replicas 1:规定一个主只有一个从。
主从的配合是随机分配的。
在集群模式当中,只能选择0库,集群模式不能切换库,只能使用默认库。
Adding replica 192.168.233.15:6379 to 192.168.233.7;6379
Adding replica 192.168.233.16:6379 to 192.168.233.8;6379
Adding replica 192.168.233.17:6379 to 192.168.233.9;6379
(error)MOVED 4768.192.168.233.7:6379
表名客户端尝试读取键值对test1,但是实际槽位在4768,集群要求客户端移动到4768所在的主机节点,获取数据。
append-only yes 初始化库之后为空,否则会报错
集群流程:
1、集群自带主从和哨兵
2、每个主从节点之间相互隔离的,可以容忍数据的不完整。目的:高可用。
3、哈希槽位决定每个节点的读写操作,在创建key时,系统已经分配好了指定槽位。
4、MOVED不是报错,只是提醒客户端去分配的槽位节点,获取数据。
proxy.responses 1;在集群之中只要有一个节点响应,然后代理服务器就会把响应传递给客户端,可以增加整个系统的稳定性。
只要有一个节点可以响应,那么客户端就可以继续发起请求
四层转发:ip+端口
四层:全局配置
string四层
upstring七层(http)--->做反向代理
nginx可以提供多端口服务(80、6379...)
ELK日志分析系统:
ELK是一套完整的日志集中处理方案,由三个开源的软件简称组成
E:ElasticSearch:ES是一个开源的,分布式的存储检索引擎(索引型的非关系型数据库。)存储日志。(分片索引的形式存储)
Java代码开发的。基于Lucene结构开发的一套全文检索引擎。拥有一个web接口。用户可以通过浏览器的形式和ES组件进行通信。
作用:存储,允许全文搜索,结构化搜索(索引点),索引点可以支持大容量的日志数据。也可以搜索所有不同类型的文档。
K:kiabana图形化界面。可以更好的分析存储在ES上的日志数据。提供了一个图形化的界面,来浏览ES上的日志数据。汇总、分析、搜索。(方便用户检索)
L:Logstash:数据收集引擎(收集),支持动态的(实时的)从各种服务应用收集日志资源,还可以对收集到的日志数据进行过滤、分析,丰富,统一格式等待操作。然后把数据同步到es存储引擎。(分析、过滤)
RUBY语言编写的,运行在Java虚拟机上的一个强大的数据处理工具。数据传输,格式化处理,格式化输出。主要用来处理日志。
数据处理工具:
filebeat:轻量级的开源的,日志数据工具。收集的速度较快,但是没有数据分析和过滤的能力,一般是结合logstash一块使用
Kafka
RabbitMQ:中间件消息队列
总结:ELK的作用,当我们管理一个大集群时,需要分析和定位的日志就会很多,每一台服务器分别去分析,将会耗时耗力。所以我们应运而生了一个集中的统一的日志管理和分析系统。极大地提高的定位问题的效率。
日志收集的特征:
1、收集,可以收集基本上市面上常用的软件日志。
2、传输,收集到的日志需要发送到ES上
3、存储:es负责存储数据
4、UI:图形化界面(Kiabana)
三台主机:
es1:20.0.0.120
es2:20.0.0.121
logstash+kiabana:20.0.0.122(4核8G)
三台组件,每台最少要2核4G
ELK的版本(6.7.2)6、7版本主流
vim elasticsearch.yml
bootstrap.memory_lock:false 禁止使用交换分区
network.host 监听地址,0.0.0.0代表所有地址
http.port:9200 对外提供访问的端口
transport.tcp.port:9300 ES内部通信的端口
discovery.zen.ping.unicast.hosts: ["node1", "node2"]
grep -v "^#" 检查一下
/var/log/ElasticSearch 如果有错,看日志
es的性能调优:(搭建时需要优化的)
修改打开的最大文件数 vim /etc/security/limits.conf
soft nofile 65536
hard nofile 65536
soft nproc 32000
hard nproc 32000
soft memlock unlimited
hard memlock unlimited
优化系统配置文件
vim /etc/systemd/
DefaultLimitNOFILE=65536
一个用户会话的默认最大文件描述符的限制量。
文件描述符:用于标识打开文件或者I/O资源限制的整数。
DefautLimitNPROC=32000
一个用户可以打开的最大进程数量的限制32000.一个用户的终端可以运行多少个进程。
DefautLimitMEMLOCK=infinty
一个用户的终端默认锁定内存的限额,不限制
内核优化:
ES是基于Linux架构,实现一款索引型数据库。lucene可以利用操作系统的内存来缓存ES的索引数据。
提供更快的查询速度。在工作中我们会把系统的一半内存留给lucene。
机器内存小于64G,50%给操作系统。
机器内存大于64G,ES分配4~32G
systemctl.conf
vm.max_map_count=262144
一个进程可以拥有的最大内存映射区参数。
内存映射,将文件或者其他设备映射进程地址空间的方法,允许进程直接读取或写入文件,无需常规的I/O方式。
映射空间越大,ES和lucene的速度越快。
2g/262144
4g/4194304
8g/8388608
http.cors.enabled: true 开启跨域访问支持,默认为 false
http.cors.allow-origin: "*" 开启跨域访问之后允许访问的域名地址为所有
logstash的命令常用选项:
-f 指定配置文件,根据配置文件识别输入和输出流。
-e 测试,从命令行当中获取输入,然后经过logstash加工之后,形成一个标准输出
-t 检测配置文件是否正确,然后退出。
logstash -e 'input { stdin{} } output { stdout{} }'
所有的键盘命令行输出,转化成标准输出(rubydebug的模式),6.0之后,logstash的默认输出格式就是rubydebug格式的标准输出。
logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.233.20:9200"] } }'
--path.data /opt/test1
区分不同的数据存放目录。
6.0之后的logstash自带的输出格式rubydebug,自动的把输出格式,定义为统一的标准格式输出。
rubydebug
在以前的版本需要手动配置
Nov 27 12:05:56 test1 logstash:2023-11-27T12:05:56.354[logstash.config.config.sourceloader] No configuration found in the config
elk:
es:存储数据,索引型的数据库
logstash:收集日志。
K:可视化工具。更人性化的显示用户信息,方便用户检查
js的格式