自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

sdmei

不懂devops的运维不是好dba

  • 博客(41)
  • 收藏
  • 关注

原创 AWS-解析mysql binlog同步数据方案

虽然是公有云的鼻祖,AWS在某些产品的实现却太不给力;可能是习惯了阿里云喂到嘴边的感觉,AWS很多方案需要自己折腾,蛋疼!比如这里要讲的mysql数据同步方案。阿里云产品DTS,点几下就OK了,AWS,只能通过插件安装、配置、调试、蹚坑……,具体就是用msk的debezium插件连接器。没见识过的一脸懵逼,下面说下配置步骤和一些注意的坑。

2023-03-10 09:01:35 909 2

原创 基于K8S+eureka的java应用快速上下线的WEB平台

功能看起来很简单,但麻雀虽小五脏俱全。直接操作生成环境的eureka\k8s,做了很多校验和保护,最终才敢在生产环境上线。技术栈:vue(element-plus)+flask技术上的关键点标签页和穿梭框,父子组件之间的通信,子组件选择应用后父组件动态响应;前后端分离,每个后端接口需要认证才能访问;每个应用的2个服务,在K8S中必须有1个共同的标签,和1个不同的标签如order-server应用,2个deployment的标签:功能上的关键点。

2023-01-18 17:18:26 1850

原创 容器化的springcloud微服务优雅关机

应用没有配置自动重试机制,因此发布或其他原因关闭时,调用方未及时更新本地缓存的IP,继续调用必然会有很多500错误。可用性低或访问量低的服务可能无感,但咱可是全国第四的充电SAAS平台,肯定不能接受这样的问题。要解决这个问题,K8S的prestop钩子函数就能派上用场了,即容器销毁前,先执行下线操作。容器销毁前,执行prestop.sh脚本,脚本的参数时注册在eureka中的名称。

2022-11-10 19:16:46 257

原创 java应用根据负载自动抓取jstack dump

环境:阿里云 + k8s + springcloud + prometheus + oss。poststart.sh调用上述python脚本(profile直接从环境变量中获取)目前我采用的方案是根据CPU负载自动执行jstack,并将文件上传到OSS。文件名最后的数字是当时的CPU使用量,如166指1.66C。逻辑主要在脚本:mon_cpu_jstack.py。oss相关的文件包括:oss客户端和配置文件;第三层目录:具体jstack文件。第一层目录:profiles。第二层目录:应用名称。

2022-09-26 17:40:17 574

原创 利用阿里云的MSE,上一个真正的灰度发布方案

1.MSE是啥阿里云MSE(Microservices Engine)微服务引擎含以下三个主要模块:微服务注册中心、微服务治理和云原生网关。其中微服务治理功能中的标签路由,可以实现灰度功能。2.灰度需求除了流量入口(如桩服务、gateway服务等),所有后端服务都要能支持按版本分组;将应用的相关版本隔离成一个独立的运行环境,通过设置流控路由规则,将满足规则的请求流量路由到目标版本应用。示意图:线上服务版本v1111; 新版版本v2222,即灰度版本; 设置流量规则,满足规则的流.

2021-12-21 19:46:02 2592 4

原创 对mysql表字段增减的监控报警

大数据同事抽数的程序有点low,没有自动适配表的字段变化,需要写个脚本自动监控字段变化,并报警到钉钉群。思路很简单:python,定时获取目标表的字段,持久化到文件,作为下一次比对的依据;下一次获取当前字段,与上次持久化的字段对比,有新增或删除的字段报警;直接上脚本:rds_col_monitor.py#!/usr/bin/python3# -*- coding: utf-8 -*-# @Time : 2021-12# @Author : meishidongimpo

2021-12-16 19:16:44 1150 3

原创 基于K8S和注册中心的一种版本快速回退方案

1.线上环境现状基于K8S容器化,spring cloud架构,eureka注册中心; 通过jenkins发布; 后端微服务使用AB版本发布(类似通常的蓝绿发布,我司内部俗称AB版本);2.引入AB版本的原因分步验证(个人觉得这个作用有限,类似实现了50%的灰度); 服务未配置重试机制,为了防止发布过程中删除老版后调用方继续调用老服务导致报错,需要手动在注册中心下线老版服务,然后再删除;AB版本可以在删除老版前快速回退3.AB版本发布流程因jenkins对上述步骤的界面...

2021-10-28 08:42:55 696

原创 数据归档工具pt-archiver原理研究与使用

之前处理mysql历史数据归档,直接写存储过程实现的(见方案《mysql历史数据自动归档》),换新东家后,还是决定研究下主流的pt-archiver并实施。mysql除了社区版,还有percona、mariadb两个分支;其中percona是一家做mysql咨询的公司,除了开发了自己的mysql分支外,还开发了大量的mysql运维工具,统称percona toolkit。使用最为广泛的,如pt-online-schema-change:解决DDL锁表问题,pt-archiver:数据归档。..

2021-09-03 09:17:30 5148 2

原创 Elasticsearch存储空间体系结构及空间异常增长问题分析

1. 基本概念和原理1.1.document(文档)数据记录,与关系数据库中的表记录类似。document由字段构成,每个字段有其特点的type,如integer, long, boolean, ip, keyword, text等等。1.2.index(索引)index是document的集合,与关系数据库中的table类似。index有静态特性和动态特性;静态特性在创建时指定,创建后不可修改,如index.number_of_shards(索引主分片的数量);动态特性在创建后可.

2021-07-10 16:33:14 671 2

原创 mysql设计与编码规范

规范目的:为研发人员在mysql表结构设计与SQL编码提供指导意见;规范等级:每个规范的强度由强到弱分为:强制、推荐、参考三个等级;规范范围:建表、建索引、SQL语句、编程框架

2021-06-18 18:24:51 390

原创 mysql timestamp字段的规范使用

1. 前言这个世界离不开时间,同样,数据库中也是如此,表中的每条记录除了数据模型的时间字段(如生日,生产日期,出发日期等),一般至少还有两个固定的时间字段:记录插入时间,记录更新时间。然而,看似很简单时间字段,谁能想到会导致应用报错,引发血案:个中缘由,正是接下来要讲到的。2. mysql中的时间字段因时间字段的一些特性与版本有关,且目前我司统一使用的mysql 5.7版本,因此本文内容都基于mysql 5.7。mysql时间相关的字段主要有DATE、DATETIME、TIMESTA

2021-04-20 09:49:36 5131

原创 sharding proxy测试分库分表的扩容问题

分库分表设计阶段的一个重要考虑的因素是分库分表的数量以及后期扩容问题。建议根据业务5-10年的发展,一次性固话表的数量,因为如果后期要改变表的数量,数据迁移难度较大(会涉及到记录级别的迁移);如果我们规划支持1024张表,初期可以1个实例,32个库,每个库32张表;后期随着业务发展,可以将32个库切分到不同实例,甚至将每个库的表切到不同的实例,最多切1024个实例,对应1024个库,每个库一个表。扩容的一个原则是只能表级迁移,不能记录级迁移。一个普遍的规则是(假设分1024张表,初期32个库)

2020-07-07 10:10:17 1032

原创 mysql sql语句digest收集与展示

mysql慢查询,已经有现成的成熟的方案收集展示了:pt-query-digest结合box公司的anemometer,没用过的移步:《mysql慢查询可视化》(本章内容需要了解anemometer)。但DBA们一定还遇到过这样的问题:某个时间段CPU负载较高,但慢查却没有,有时连实时看processlist都看不出异常。这种情况一般是由高并发的但单个性能正常的SQL导致的,所以慢查没有,但总体负载会升高。那怎么办呢?选择1:配置events_statements_history_long,缺点明显

2020-06-02 13:25:04 1931

原创 基于spark实时分析nginx请求日志,自动封禁IP之二:日志实时分析

整体思路:从kafka集群读取请求日志流,经过spark structured streaming(结构化流)实时分析,将触发阈值的数据输出至mysql。1.数据源nginx日志通过syslog协议输出至logstash,然后同时写入es和kafka:nginx -> logstash -> elasticsearch and kafkalogstash配置:output { elasticsearch { …… } ## 尽可能在来源...

2020-05-15 14:02:32 1355

原创 基于spark实时分析nginx请求日志,自动封禁IP之一:web功能设计

用过阿里高防的都知道,高防有个很牛X的防CC功能配置:基于域名,基于某URL(精确匹配或后模糊匹配),限制某个时间跨度的请求频率,超过该频率会拉黑n分钟,如:10秒内请求20次,达到这个阈值则拉黑IP5分钟。然而:高防不是所有公司都用得起的(月费用1万以上),高防配置的域名数量越来越苛刻(一级域名和二级域名数都有严格限制了),高防也有抽风的时候,有很多时候发现该功能没起效果,所以我们搞了个自己的防CC功能。改方案暂取名lbwaf,主要功能包括手动拉黑(就是手动填IP黑名单),自动拉黑(重点功

2020-05-12 11:46:16 512

原创 mysql高可用自动切换方案(半同步复制+keepalived+第三方数据逻辑判断)

1.前言自从踏进互联网运维这个行当,就无时不刻不在为高可用费神。nginx、tomcat、缓存、队列、数据库,每个环节高可用的最基本要求是避免单点故障,能够自动failover。mysql的高可用方案说起来很多,但真正想在你家的生产环境大面积使用,发现这个有缺点、那个不完美。之前用过MHA一段时间,代码较复杂(可能因为我没搞过perl),作者不再更新,总担心误切、脑裂……,至于高大上的pxc\...

2020-03-18 15:43:18 3900 6

原创 mysql主从切换的那些事(手动)

1.主从切换因为数据库迁移、升级、主库停机维护等原因,需要将从库升为主,主要步骤如下:1.主库锁库,禁止写入mysql> flush table with read lock;确认Executed_Gtid_Set不再变化,并记录mysql> show master status\G*************************** 1. row ******...

2020-03-17 13:57:09 1174

原创 Anemometer适应新版pt-query-digest需要的调整

pt-query-digest 3.0.11后续版本,生成的checksum包含英文字母,点击SQL的checksum进详情页提示:“Unknown checksum: ……”说明:老版本pt-query-digest生产的checksum存数字,anemometer为了展示美观(固定长度)等原因,将checksum转成16进制列表展示,进详情页后,再讲16进制转换成10进制查找具体SQL详...

2020-03-05 19:59:35 636

原创 TCP代理服务器动态路由方案

目前tcp长连接应用使用的方案是nginx(ngx_stream_core_module),静态配置;自带的健康检查只能基于端口,但应用有时程序错误或假死,端口是OK的,导致客户端不少报错,因此新的方案要求可以动态配置路由,由监控检查程序管理后端节点的动态配置。http动态路由(也叫动态upstream)方案较多,有现成的插件,或者lua对这块也支持得较好;但tcp的方案相对少,充分研究了下,...

2019-12-31 09:08:53 1016 1

原创 kettle实现数据增量同步方案

1. 背景我司目前数据库之间的数据同步都是oracle goldengate(ogg)方案,该方案的特点:优点:基于数据库的变更日志同步(oracle redo\mysql binlog),速度很快,对数据库性能影响很小,适合大量数据同步的场景缺点:同步表变更字段、新增表,需要修改数据库服务器上的很多配置文件,比较繁琐,在exact、pump、replicate进程很多的情况下,易...

2019-12-12 14:37:29 7865 2

原创 k8s支持大量商户自定义域名的配置

基于nginx -> traefik -> k8s的架构,某个应用需要支持商户的大量任意自定义域名,咋整呢?咱公司k8s上的应用遇到这个场景,因此研究了下,有以下两种方案:方案1, 最直接粗暴但很lowB的方案,ingress中列出每个域名# more ingress.yaml apiVersion: extensions/v1beta1kind: Ingressmet...

2019-12-11 19:36:58 897

原创 jenkins发布k8s应用

因为还没有完成控制台开发,我们k8s应用的发布目前只能直接在jenkins中实现了。1. 基础镜像按层次制作基础镜像centos -> centos-sshd -> centos74-jre[678] -> centos74-jre[678]-[tomcat6|tomcat7|tomcat8|springboot]发布应用时,根据jre\middleware参数,...

2019-09-24 20:57:46 1224 1

原创 k8s的容器存储空间资源限制ephemeral-storage

k8s1.8引入的特性,限制容器存储空间的使用;对于容器资源隔离来说,非常有用,万一应用程序失控,写大量日志把node空间写满,影响就大了。使用很简单,和cpu\memcache一样,如:resources: requests: cpu: 1 memory: 2048Mi ephemeral-storage: 2Gi limits: cpu: 2...

2019-09-19 14:47:24 22016

原创 k8s过期镜像清理

随着应用程序版本的发布,k8s环境会留下大量过期的镜像占用空间,因此需要通过任务自动清理。crontab任务调用以下脚本即可:1.节点镜像清理删除dangling镜像docker image prune -f删除无容器使用的镜像,外加条件:创建于10天前、限于应用程序imagedocker image prune -a --force --filter "label=t...

2019-09-11 20:01:38 5827 2

原创 通过linux跳板根据应用名称ssh访问容器

容器的IP是不固定的,因此无法像传统服务器在ssh工具中配置清单;最佳的方式是在浏览器上通过webterminal方案点击链接直接打开ssh终端,要求开发像样的容器管理平台(我们的平台还在设计阶段。。。),另外webterminal访问有一点点卡顿的感觉,没有直接ssh畅快淋漓,因此通过linux跳板ssh访问容器,是一个很有用的补充方案。效果1备注:project、app是pod的2...

2019-08-21 20:49:58 612

原创 web terminal工具gateone使用

稍微牛B的运维团队,没有运维平台是不行的,web terminal是运维平台的重要组成部分,这里吐血推荐gateone,github上5K颗星,遗憾的是作者不更新了,但瑕不掩瑜,它依然是我心目中web terminal no.1。web上直接点击终端按钮,打开一个ssh终端,体验还是很nice的:1.安装1.1.环境# cat /etc/redhat-release...

2019-07-01 20:47:00 4723

原创 消息队列选型:rocketmq or rabbitmq

1.目前我们用的activemq,面临一些问题activemq高可用基于leveldb的复制,但activemq从5.*开始,leveldb已经不再有任何更新The LevelDB store has been deprecated and is no longer supported or recommended for use. The recommended store is Kaha...

2019-05-28 20:54:34 8956 3

原创 ELK的监控工具Elastalert的报警功能扩展

Nginx请求日志输出到ELK,同时通过Elastalert监控ELK日志中的关键信息(如http状态500+错误,耗时较长的请求数达到阈值等等),这几乎是中小型互联网公司的标配。Elastalert自带的报警方式虽然多种多样,但是不能实现根据报警信息分组发送,如研发人员也很关心这些指标,需要接受本项目的报警,运维需要接受所有项目的报警,报警方式要支持电话语音、短信、邮件、钉钉群。要实现这些,...

2019-05-08 13:39:04 4389

原创 mysql历史数据自动归档

数据库跑一段时间后,因为查询性能、磁盘容量,运维管理等方面的原因,需要将在线数据挪到历史库(不同的服务器)。如我们的在线订单只留3个月数据,3个月以前的就需要到历史库查了。自动归档常见的方式有pt-archiver,但我还是觉得自己写存储过程更靠谱。。。思路:在线库实例打开federated支持,创建数据库dborder(业务库), linkhis(归档用); 历史库创建历史表dbo...

2019-03-20 20:12:17 14718

原创 nginx ip黑名单动态封禁

网站被恶意请求,拉黑IP是重要的手段,如果每次拉黑都要到nginx上配置,未免太low了;我们需要更方便的控制nginx IP黑名单。1.方案黑名单持久化到mysql (常见的方案是redis,但不利于控制,如:不同的IP设置不同的有效期、IP的CRUD、统计等等);通过lua-nginx-module,在nginx中开辟一块内存(lua_shared_dict),lua将黑名单定期从...

2019-03-08 10:12:40 12516

原创 calico的iptables规则

学习了下calico的iptables规则,挺复杂的,没想到iptables能这么用。。。iptables中的链涉及到不少简写:hep: host endpointwl: workload endpointfw: from workload endpointtw: to wordkoad endpointfip: floating IP (为某容器绑定的一个非容器段的IP地址:如n...

2018-12-26 16:19:23 2679

原创 ELK收集监控nginx请求日志

1.前言对于互联网公司来说,nginx的请求日志简直就是一座金矿,如果不能充分利用,简直太可惜了。初期一般都是输出到日志文件,要查什么就awk\grep\uniq\sort...,能满足不少统计需求,但最大的缺点是不直观,不方便监控(目前虽然用了ELK,但是有些信息我还是用shell统计,两者互补)。整理下实施ELK最起码要实现的需求:查询条件(精确匹配):一级域名、二级域名、客户真实IP、HTT...

2018-05-05 23:02:17 9367 7

原创 数据同步工具oracle goldengate安装与配置

1.前言跨平台、异构数据库之间的数据同步,方案有限,Oracle OGG算比较靠谱的一个:优点:性能好,大数据量速度快,对线上库性能的影响忽略不计;缺点:安装配置、维护有点麻烦,尤其是后期有字段变更时;个人觉得适合部署在小范围、大数据量、对性能要求较高的同步需求。本案例以Oracle(10.10.10.1) -> mysql(10.10.10.2)说明其部署过程以及注意事项。原理说明:OGG...

2018-04-10 09:18:17 7283 1

原创 用syslog服务器收集java日志

初来公司时,java日志收集使用的nfs方式,将nfs server上的一块大容量磁盘挂载到所有java服务器的$catalina_home/logs目录,解决服务器本地空间不足问题;这个方案的弊端是,如果nfs server想停机做个维护,几乎不可行;同时,多节点的日志在nfs服务器上是分开的,如果某个应用有8个节点,那查日志要查8个文件。用syslog收集java日志,能完美解决这个问题。安装...

2018-04-05 12:27:39 3519

原创 python调用vmware api关闭虚拟机

mha的博文中说到mha切换mysql时,如果主库无法正常ssh,为防止脑裂,需要通过控制卡关物理机,或者vmware api关闭虚拟机。这里总结下如何调用api关闭虚拟机。安装环境:centos6.91.下载python安装包Python-3.3.7.tgzpip-9.0.1.tar.gzsetuptools-36.5.0.zip2.安装python3yum install readline-d...

2018-02-08 21:04:00 4846

原创 mysql高可用mha部署

Mysql的高可用方案五花八门,本人人为最可靠、稳定、实用的还是mha。mha方案涉及到5个节点:manager\secondary-check1\secondary-check2\db1\db2备注:a.secondary-check1\secondary-check2虽是可选的,但强烈建议使用,防止因为网络原因误切换;b.官方推荐数据库3节点,但我人为业务量不是超大的情况下2节

2018-02-06 08:55:02 1113

原创 windows跳板机账号安全监控

根据以往经验,windows服务器遭受的最常见的攻击行为包括:以外网应用服务器为跳板,扫描端口、上传木马、创建账号、登录等。公司目前应用服务器用windows的已经很少了,但最近搞了生产环境网络隔离,所有访问生产服务器的操作必须通过windows跳板机,因此这些跳板机的安全就显得更加重要了。主要思路:将这些跳板机的登录操作通过syslog集中到某台日志服务器,定期扫描日志,判断嫌疑操作并报警。

2017-12-26 21:12:37 2297

原创 静态资源运维方案

最初静态资源使用的最原始的方案:虚拟机上开通FTP让UED直接上传,nginx作为WEB服务器发布应用,前端通过nginx反向代理访问。client -> nginx反向代理 -> nginx web服务器 -> 静态文件

2017-12-16 12:20:04 519

原创 memcache集群方案

1.方案选型缓存方案的基本要求:避免单点故障;较好的性能和稳定性;便于运维管理。常见方案如下:A. 客户端直接访问多个memcache 实例优点:简单,未引入新的节点;缺点:维护不方便,未实现集中管理;性能不满足,实例宕机后不能自动踢出(hash到该实例的请求都要等到超时才能转到其他正常实例)。B. magent代理优点:简单,满足缓存对代理的大部分要求;缺点:无成

2017-12-02 18:08:25 6555

原创 mysql慢查询可视化

mysql实例多了,直接查slowlog文件即便用某些脚本自动处理文件,效率也是极其低下,发现Anemometer很好用。官方文档:https://github.com/box/Anemometer一般一台4C4G的虚拟机作为Anemometer足够了,假设IP:1.1.1.1安装apache# yum installgcc gcc++ zlib zlib-devel如果已

2017-12-02 12:09:05 1092

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除