Docker搭建Nacos高可用集群
使用三台阿里云服务器:
第一台: 47.101.102.10第二台: 47.101.102.20第三台: 47.101.102.30
1.安装dockerdocker的安装可以参考我之前的一篇博客
docker安装
2.拉取nacos镜像使用docker pull 命令拉取镜像。这里使用2.0.4版本
拉取nacos镜像docker pull nacos/nacos-server:v2.0.4查看docker镜像docker images
3.创建nacos的持久化数据库我们只使用三台服务器中其中一台的数据库就可以,这里使用第一台服务器来作为持久化数据库。直接使用可视化工具创建一个数据库,名字叫nacos_config然后运行以下SQL语句
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 ...
K8s搭建
安装方式
minikube 只有一个几点的集群 只为测试用 master和worker在一起
云平台
重点裸机安装
开始搭建k8s集群
三台服务器修改主机名称
123hostnamectl set-hostname masterhostnamectl set-hostname node1hostnamectl set-hostname node2
修改每台节点hosts文件
12345vim /etc/hostsxxx.xxx.xxx.xxx masterxxx.xxx.xxx.xxx node1xxx.xxx.xxx.xxx node2
所有节点关闭 setLinux
12setenforce 0sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
每个节点添加k8s数据源
1234567891011121314# 添加 k8s 安装源cat <<EOF > kubernetes.repo[k ...
RabbitMQ延迟队列的使用
这次打算说一下rabbitmq的延迟队列。
延迟队列,名字中有个队列,队列是先进先出的。所以说延迟队列是一个有方向性的。
其次,延迟队列和普通队列最大的区别就是,普通队列里的消息是希望自己早点被取出来消费。而延迟队列中的消息都是由时间来控制的。也就是说,他们进入队列的时候,就已经被安排何时被取出了
rabbitmq实现延迟队列主要有种方式。
第一种是使用普通队列和死信队列来模拟实现延迟的效果。大致上是将消息放入一个没有被监听的队列上,设置TTL(一条消息的最大存活时间)为延迟的时间,时间到了没有被消费,直接成为私信。监听私信队列来进行操作。
第二种是使用rabbitmq官方提供的delayed插件来真正实现延迟队列。本文对第二种进行详解
应用场景
订单超时支付取消订单
用户发起退款卖家3天不处理自动退款
预约抢购活动,活动开始前10分钟短信通知用户
安装延迟插件默认交换机是有4种模式的
现在我们去安装延迟插件
https://www.rabbitmq.com/community-plugins.html
前往官网去下载延迟插件
下载完成之后,上传到我们的服务器。使用下面的命 ...
RabbitMQ六大模式的理解及应用
基本介绍rabbitmq是一个基于Erlang语言开发且非常好用的一款开源的amqp(高级消息队列)。主要的业务场景有秒杀、消息的订阅分发,抢优惠卷等高并发场景。主要的亮点有三个
三大亮点
解耦:一个系统调用多个模块。互相调用的关系很复杂很麻烦。如果没有消息队列,每当一个新业务接入,我们都要在主系统调用新接口。使用消息队列,我们只需要关心是否送达。服务自己订阅想要的信息即可
削锋:高峰时期对服务器的压力。比如下单的时候,大量的数据直接访问过来根本没时间处理,不妨先把他们存到消息队列里,让服务器不至于崩溃的同时尽可能的快速执行队列中的任务
异步:对于不是特别重要的一些请求。假如说有一个操作,要调用三个服务,a200ms,b300ms,c200ms,如果不使用mq的话,用户至少要等700ms,使用mq的话,直接发送3条消息到mq里,大大减少了耗时时间,同时用户体验也上个档次
说完优点,来说说缺点
三大缺点
系统可用性降低:mq也会出问题,没使用mq之前,a系统调用b系统,b系统调用c系统。这样虽然耦合高,但是可以正常工作。如果把mq引进来,把数据都发给mq,让mq来调用abc三个系统,万 ...
MySQL联合索引笔记
什么是联合索引?
联合索引指的是在一个表上,多个列加起来组成的一个索引。使用联合索引匹配的时候,首先会匹配第一个,如果匹配成功,会继续匹配第二个,依次类推。
最左前缀原则?
我们要使用联合索引,就必须要遵守最左前缀规则,最左前缀指的是查询的时候会从最左的索引开始匹配。比如现在age和name字段是一个联合索引,现在使用select id,name from user where name = ‘张三’进行查询,因为这条SQL没有对age进行条件查询,而age又是联合索引的第一个。没有满足最左前缀原则,所以这条SQL绝对不会使用联合索引。
实战测试
MySQL版本为5.7
创建一张测试表,插入AA、BB、CC列的联合索引
123456789101112131415161718192021222324252627282930-- ------------------------------ Table structure for index_test-- ----------------------------DROP TABLE IF EXISTS `index_test` ...
SpringBoot整合xxl-job
官网上是这么介绍xxl-job的:
XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。
特性
1、简单:支持通过Web页面对任务进行CRUD操作,操作简单,一分钟上手;
2、动态:支持动态修改任务状态、启动/停止任务,以及终止运行中任务,即时生效;
3、调度中心HA(中心式):调度采用中心式设计,“调度中心”自研调度组件并支持集群部署,可保证调度中心HA;
4、执行器HA(分布式):任务分布式执行,任务”执行器”支持集群部署,可保证任务执行HA;
5、注册中心: 执行器会周期性自动注册任务, 调度中心将会自动发现注册的任务并触发执行。同时,也支持手动录入执行器地址;
6、弹性扩容缩容:一旦有新执行器机器上线或者下线,下次调度时将会重新分配任务;
7、触发策略:提供丰富的任务触发策略,包括:Cron触发、固定间隔触发、固定延时触发、API(事件)触发、人工触发、父子任务触发;
8、调度过期策略:调度中心错过调度时间的补偿处理策略,包括:忽略、立即补偿触发一次等;
9、阻塞处理策略:调 ...
5分钟学会内网穿透
最近,在搞自己的一个项目。搭了一个Micrometer+prometheus+grafana的一个监控平台。
先给大家看一下结果
编辑
这个监控平台可以帮助我们查看项目的运行状态。包括JVM的堆占用、非堆占用、网络请求频率、CPU使用率、新生代老年代等等。是一个非常全面的一个监控平台。 但是在搭建的时候,因为我prometheus是部署在服务器上的。我的项目跑在本地。这就很尴尬了,服务器访问不到我本机的项目。这不就大眼瞪小眼了吗。于是,二话不说,把内网穿透撸了一遍。
一.下载cpolar我们需要一款工具来帮助我们实现内网穿透。我用的是cpolar,又简单又快速。
https://www.cpolar.com/
直接去上面官网,(记得注册一个账号)下载zip然后解压安装。
安装完成后你会发现上面都没有发生,别着急。进入安装目录,打开web控制台。
输入我们刚刚注册好的账号密码。
输入我们本地项目的端口号。比如这里我设置的就是 http://localhost:8080的地址 直接创建
然后点开隧道列表 现在我们就可以通过这个地址来让外网访问我们本机的项目了
后面的公网地址只要有网 ...
自己对RabbitMQ的理解
最基本的几种模式
RabbitMQ六大模式的理解及应用
MQ的特点
削锋:减少高峰时期对服务器的压力异步:对于不是特别重要的一些请求。假如说有一个操作,要调用三个服务,A服务200ms,B服务300ms,C服务200ms,如果不使用mq的话,用户至少要等700ms,使用mq的话,直接发送3条消息到mq里,大大减少了耗时时间,同时用户体验也上个档次
解耦:一个系统调用多个模块。互相调用的关系很复杂很麻烦。如果没有消息队列,每当一个新业务接入,我们都要在主系统调用新接口。使用消息队列,我们只需要关心是否送达。服务自己订阅想要的信息即可
消息基于什么传输?由于 TCP 连接的创建和销毁开销较大,且并发数受系统资源限制,会造成性能瓶颈。RabbitMQ使用信道的方式来传输数据。信道是建立在真实的 TCP 连接内的虚拟连接,且每条 TCP 连接上的信道数量没有限制。
消息确认机制和消息重发机制消息确认机制和消息重发机制
如何防止消息丢失
首先消息丢失可能出现在生产者,mq和消费者中。我们分情况讨论
生产者丢失
首先来说一下生产者丢失,生产者丢失就是数据发送到mq 的时候,可能数据在半路就丢失了, ...
清理服务器上的Docker日志
平时我们Docker运行产生的一些日志文件,莫名其妙的占满了服务器内存,我的服务器都是3天一清。这次分享下清理Docker日志的脚本。
直接找个地方,创建sh文件,例如 vim cleanDockerlog.sh 复制下面代码
1234567891011121314151617#!/bin/sh# vim:sw=4:ts=4:etset -eDOCKER_STORAGE_PATH="/var/lib/docker"echo "INFO:======== start clean docker containers logs ========"logs_file=$(find ${DOCKER_STORAGE_PATH}/containers/ -name *-json.log) #容器日志文件for log_name in ${logs_file}do echo "INFO:clean logs : ${log_name}" > ${log ...
自己对Redis的理解
最基本的五种数据类型
String (字符串):最基本的数据类型
list(列表):相当于java语言里面的LinkedList,是链表结构,所以插入和删除非常快,时间复杂度是O(1)
set(集合):相当于hashset
hash (哈希):相当于hashmap,数组+链表
zset(有序集合):在set的基础上 给每一个value会与了一个score 代表这个value的排序权重
redis为什么这么快
基于内存的操作
使用了非阻塞IO多路复用模型
单线程可以避免不必要的上下文切换和竞争条件,减少了这方面的性能消耗
Redis的线程模型
redis内部实际上就iu是一个文件时间处理器。文件事件处理器结构包含4个部分:
多个socket
IO多路复用程序
文件事件分配器
事件处理器(连接应答处理器,命令请求处理器 命令回复处理器)
多个socket可能会产生不同的操作,每个操作对应不同的文件事件,但是IO多路复用程序会监听多个socket,将socket产生的事件放入队列中排队。事件分派器每次从队列中取出一个事件,把该事件交给对应的事件处理器进行处理。
redis的 ...