记录docker构建优化
记录一次node项目优化方案优化前: 以ubuntu发行版为基础镜像 不带小版本号 每次构建都从头构建(这里也推荐将package*json先copy过来进行install再copy . .,如果文件没变化,那就使用缓存,不重新构建) 优化后: 建立runtime基础镜像(包含提前安装好的基础依赖和环境, 包括node_modules),并使用alpine为基础镜像发行版 使用nexus管理项目包(docker/npm/maven) 指定具体版本号(只有 major version,没有指定 minor version、patch version。当该基础镜像 minor 或 patch 版本更新后,如果本地的镜像缓存也被清除了,那么打包就会使用新版本的基础镜像) 构建 Docker 镜像的时候,会缓存 Dockerfile 中尚未更改的所有步骤。所以,如果新构建时更改任何指令,将后的指令步骤将会重新来不再使用缓存。举例来说,就是指令 3 发生了变更,其后的 4-n 就会重跑并重新生成缓存。因此,编写 Dockerfile 的时候,就需要将最不可能产生更...
nexus3配置docker
安装nexus312345678910111213141516171819202122mkdir -p /usr/local/nexus3chown -R 200 /usr/local/nexus3docker run -d \--privileged=true \--name=nexus3 \-u root \-p 8081:8081 \# 这几个端口给docker私有仓库使用,在创建仓库时指定,并且在Dockers中需要添加配置 "insecure-registries": ["ip:port"]-p 8001:8001 \-p 8002:8002 \-p 8003:8003 \# 启动容器时加入时间挂载,使用宿主机时间-v /etc/localtime:/etc/localtime:ro \-v /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime:ro \-v /usr/local/nexus3/nexus-data:/nexus-data \-v /usr/local/nexus3/so...
nexus-docker镜像清理
先清理mainfests方法1 - Cleanup Policies查看docker repo 比如你的docker repo名字叫做test-repo,然后在nexus3首页的seatch下面找到docker,点进去随便查看一个已经上传的镜像 记住上面的Name选项,之后要用到 设定清理策略(clean policies) 在nexus3 设置中找到 Cleanup Policies 点击 Create Cleanup Policy 创建一个新的清理策略 注意到Asset Name Matcher区域,这里可以填写RE表达式,过滤的是第一步中得到的Name选项。比如你想要过滤所有以clean结尾的rabbitmq镜像,你可以这么编写你的表达式: 1v2/rabbitmq/manifests/.*-clean 如果你想要清理所有的镜像,而不只是rabbitmq 1v2/.*/manifests/.*-clean 当然你也可以根据情况选择是否设置镜像过期时间一起配合使用(注意这里的三个条件是逻辑与的关系)配置完成后,不要忘了点击下方进行预览,以...
关于mysql死锁
关于MySQL的死锁 MySQL的死锁指的是两个事务互相等待的场景,这种循环等待理论上不会有尽头。 比如事务A持有行1的锁,事务B持有行2的锁,然后事务A试图获取行2的锁,事务B试图获取行1的锁,这样事务A要等待事务B释放行2的锁,事务B要等待事务A释放行1的锁,两个事务互相等待,谁也提交不了。 这种情况下MySQL会选择中断并回滚其中一个事务,使得另一个事务可以提交。MySQL会记录死锁的日志。 制造一个死锁的场景新建一个表,添加两条数据: 创建两个事务,事务执行的sql分别是: 事务A: 1234set autocommit=0;update medicine_control set current_count=1 where id='1';update medicine_control set current_count=1 where id='2';COMMIT; 事务B: 1234set autocommit=0;update medicine_control set current_count=2 where id=&...
自定义监控指标开发(四):配合K8s收集服务指标信息
介绍 在Kubernetes中,Prometheus Operator可以通过两种方式自动发现监控目标:PodMonitor和ServiceMonitor。PodMonitor用于监控由单个Pod定义的服务,而ServiceMonitor用于监控Kubernetes Service中的所有Pod。 要使用PodMonitor和ServiceMonitor,需要在Kubernetes中定义它们,然后Prometheus Operator将从这些定义中自动发现和创建监控目标。 在Kubernetes中,Prometheus Operator可以通过两种方式自动发现监控目标:PodMonitor和ServiceMonitor。PodMonitor用于监控由单个Pod定义的服务,而ServiceMonitor用于监控Kubernetes Service中的所有Pod。 要使用PodMonitor和ServiceMonitor,需要在Kubernetes中定义它们,然后Prometheus Operator将从这些定义中自动发现和创建监控目标。 以下是如何使用PodMonitor和Ser...
限流算法
前言 在开发高并发系统时,有三把利器用来保护系统:缓存、降级和限流。那么何为限流呢?顾名思义,限流就是限制流量,就像你宽带包了1个G的流量,用完了就没了。通过限流,我们可以很好地控制系统的qps,从而达到保护系统的目的。本篇文章将会介绍一下常用的限流算法以及他们各自的特点。 几种常见的限流方法计数器固定窗口算法计数器算法是限流算法里最简单也是最容易实现的一种算法。 比如我们规定,对于A接口来说,我们1分钟的访问次数不能超过100个。那么我们可以这么做:在一开 始的时候,我们可以设置一个计数器counter,每当一个请求过来的时候,counter就加1,如果counter的值大于100并且该请求与第一个 请求的间隔时间还在1分钟之内,那么说明请求数过多;如果该请求与第一个请求的间隔时间大于1分钟,且counter的值还在限流范围内,那么就重置 counter,具体算法的示意图如下: 伪代码12345678910111213141516171819202122232425public class CounterTest { public long timeSta...
K8s安装部署MongoDB
Mongodb高可用模式mongodb的部署方式有: Standalone单节点部署此种部署方式就是最简单易用并且常见的部署了,直接使用mongod起来一个进程。 Master-Slave主从结构主从架构一般用于备份或者做读写分离。一般有一主一从设计和一主多从设计。 主(Master) 可读可写,当数据有修改的时候,会将oplog同步到所有连接的salve上去。 从(Slave) 只读不可写,自动从Master同步数据。 特别的,对于Mongodb来说,并不推荐使用Master-Slave架构,因为Master-Slave其中Master宕机后不能自动恢复,推荐使用Replica Set,后面会有介绍,除非Replica的节点数超过50,才需要使用Master-Slave架构,正常情况是不可能用那么多节点的。 还有一点,Master-Slave不支持链式结构,Slave只能直接连接Master。Redis的Master-Slave支持链式结构,Slave可以连接Slave,成为Slave的Slave。 Relica Set副本集Mongodb的Replica Set即...
记录各类第三方服务的ldap对接
Rancher测试版本:2.7.x 参考文档:http://ranchermanager.docs.rancher.com/zh/pages-for-subheaders/configure-openldap Nexus3配置步骤登录nexus管理账户,进入配置界面 依次点击Security>>LDAP进入配置页面点击 “Create Connection” 创建LDAP连接 1234567891011121314name:此连接的名称,可自定义LDAP server address Protocol:是否启用SSL,是选用 LDAPS,否则选用 LDAP Hostname:LDAP的服务器地址 Port:LDAP端口号Search base:基本DN,即一般从域的根节点开始搜索,如 dc=test,dc=comAuthentication method:加密方式Username or DN:输入用于获取LDAP用户的账户,建议使用只读账户 用户名:格式为 用户名@域名,如 userget@test.com password:...
GitLab Runner注册
参考链接:https://help.aliyun.com/document_detail/106968.html#title-xfl-dp6-kta 大概过程: 获取runner token -> 进行注册 GitLabRunner 类型 shared : 运行整个平台项目的作业(gitlab) group: 运行特定group下的所有项目的作业(group) specific: 运行指定的项目作业(project) locked: 无法运行项目作业 paused: 不会运行作业 GitLabRunner 注册流程获取runner token获取shared类型runnertoken进入系统设置 -> Runners 获取group类型的runnertoken进入group -> Settings -> CI/CD -> Runners -> Group Runners 获取specific类型的runnertoken进入具体的项目 -> Settings -> CI/CD -> Run...
scp,ssh用法
上传到远端 上传目录: scp -r ./util/ 用户名@192.168.1.65:/home/wwwroot/limesurvey_back/util/ 上传文件 scp ./util.js 用户名@192.168.1.65:/home/wwwroot/limesurvey_back/scp/ 远端下载scp [-r] 用户名@192.168.1.65:/share/webCompileOut.sql ./ 如果是目录拷贝要加“-r”参数,用户名可选,如果省略用户名,默认为终端的用户名。 免密 先执行su 用户名切换到想要免密的账户 在你的主控方机器上使用 ssh-keygen命令创建公钥,使用ssh-keygen -t rsa来创建,程序会问你存放目录,如果不需要修改(建议不修改, 会放在~/路径下),直接回车几次即可 将主控方~/.ssh目录下id_rsa.pub文件拷贝到受控机器的~/.ssh目录中,然后操作受控方将文件内容导入到~/.ssh/authorized_keys文件 1234主控方:scp ~/.ssh/id_rsa....
