切换keepalived ip 变更新master keepalived优先级,重载的方式切换 [root@new-master ~]# vim /etc/keepalived/keepalived.conf [root@new-master ~]# /etc/init.d/keepalived reload ; watch -n .2 ip a 使用给新master keepalived 升优先级重载的方式切IP 使用 watch 来观察ip变化 ---- 从两边密切监控观察检查应用与数据库状态 使用n
确认备份数据 在销毁slave和原master前,这是最后一次可以备份原库统计数据的机会 生产数据已经陈旧,不一致了 确认后可以进行下一步 ---- 备份新master以便重建 [root@new-master nfs]# time nohup /usr/bin/innobackupex --defaults-file=/etc/my.cnf --user=root --password=xxxxxxxxxx /data/nfs/test_full_backup >> /data/nfs/full_
写在开始 做项目不记录日志?线上的问题永远不会知道何时发生过?只会在出现事故之后身处茫然之中。 由于之前ELK日志分析是在自己的服务器上进行试水,断断续续运行了一年多时间。 今天抽空赶紧把ELK迁移一下,由于Logstash本身就配置于各个系统之中,所以这里只是对Redis、Elasticsearch和Kibana进行了配置,当然还有一些邮件发送的配置。 由于系统环境是JDK1.7,而Elasticsearch依赖JDK1.8,同时Kibana又必须依赖Elasticsearch,只能升级作罢,按照原来的迁移。 系统架构 ? 方便开发或者运维人员统计分析和查询日志信息。 对于错误日志统一处理并发送通知。 相关软件 Logstash-2.1.1 Redis-3.2.8 Elasticsearch-2.4.4 Kibana-4.3.1 Nginx-1.6.2 JDK-1.7 sendmail 迁移说明 配置
Logback是由log4j创始人设计的另一个开源日志组件,Logback的内核重写了,在一些关键执行路径上性能提升10倍以上。 -- logback --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> 也可以使用lombok的注解: @Slf4j ? 控制台正常打印日志: ? 在用户目录产生了日志文件: ? 日志文件中也打印了我们需要的日志: ? 目前有很多日志框架,市面上比较流行的就是log4j和logback,两者出自同一个作者,至于谁的性能好,肯定是作者说了算,所以推荐使用logback来实现日志管理。
alembic是用来做ORM模型与数据库的迁移与映射。 charset=utf8 (4)将models所在的目录路径添加到env.py,并指定target_metadata import sys,os # 1. #2.os.path.dirname(__file__):获取当前文件的目录 #3.os.path.dirname(os.path.dirname(__file__)):获取当前文件目录的上一级目录 #4. -m:本次迁移做了哪些修改 upgrade:将指定版本的迁移文件映射到数据库中,会执行版本文件中的upgrade函数 head:代表当前的迁移脚本的版本号 downgrade:会执行指定版本的迁移文件中的 if __name__ == '__main__': app.run() (3)初始化 alembic init alembic (4)alembic.ini sqlalchemy.url =
现在主流的日志方案是使用SLF4J作为API在代码中使用,具体的日志实现由不同的JAR完成,本文帮助了解一下SLF4J常见问题以及如何完美兼容各种不同日志框架 SLF4J如何自动使用lib中的日志实现 比如Logback, Log4j 答:直接使用org.slf4j.impl.StaticLoggerBinder,该类由各日志框架实现,比如Logback. import org.slf4j.impl.StaticLoggerBinder 答: 使用绑定包slf4j-log4j12, slf4j-jcl, slf4j-jdk14,这些包中都实现了StaticLoggerBinder 如果第三方的项目已经使用了其他日志框架,如何统一使用SLF4J 答:不可以,log4j-over-slf4j.jar中使用SLF4J实现了Log4j,但是slf4j-log4j12.jar又把SLF4J的实现交给了Log4j, 因此就产生了一个死循环。 日志系列 日志 --- Java混合日志组件的统一管理 参考 java日志组件介绍(common-logging,log4j,slf4j,logback )
MySQL线上日志库迁移优化案例 说说最近的一个案例吧,线上阿里云RDS上的一个游戏日志库最近出现了一点问题,随着游戏人数的增加,在线日志库的数据量越来越大,最新的日志库都已经到50G大小了,在线变更的时间非常长 之前之所以没有发现,是因为之前一直没有进行过日志库的变更,但是随着业务的深入,需要增加一些游戏属性,要对之前的日志库进行变更,这样一来,长时间的维护窗口让业务方和DBA都望而却步,日志优化迫在眉睫。 首先看日志库的情况: 1、日志库中数据量大于5000w的大表有5张; 2、这5张表开量前每个月的数据量大概在2000w左右,开量后会更多; 3、有2个表的索引大小已经超过数据文件大小 询问了业务方和运营对这些表的要求 3、日志库在迁移的过程中,能够容忍几分钟的表数据丢失,对数据的同步实时性要求不是很高 4、线上的日志库需要支持用户活跃度等统计 5、不希望执行分库分表,有很多查询近几个月的SQL操作,表之间存在一定的耦合性 4、删除game_log_bak库,并搭建一个只读从库,实时的从主库上同步game_log库的信息,如下: ?
vue-cli@2.x项目迁移日志 虽然 vue-cli@3 早就已经巨普及了,新项目应该已经很少有人还有使用 vue-cli@2.x 。 [image] 迁移配置 新建 babel.config.js 文件, 内容是 module.exports = { presets: [ '@vue/app' ] } 新建 vue.config.js
安装log4js:npm install log4js express中配置log4js中间件: var log = require(". : log4js.levels.WARN, DEBUG: log4js.levels.DEBUG, INFO: log4js.levels.INFO }; helper.config = (helper.config); var logInfo = log4js.getLogger('logInfo'); var name = null; /** * 日志保存 * @param req appender,主要包括:console-控制台输出、dateFile-根据日期配置自动生成当前日期下的日志、file-纯粹在一个文件中输出 type:日志输出类型 pattern:日志输出格式 category:日志类别 alwaysIncludePattern:是否始终以pattern指定格式输出日志 level:日志输出级别 replaceConsole:是否以log4js格式在控制台输出控制台自身
因为数据最后是写到 mysql 里,所以要安装 rsyslog 操作 mysql 的模块
MongoDB分片迁移原理与源码 异步删除数据 在from shard将迁移结果提交到config服务器成功后,from shard就会执行删除原数据的操作;如果迁移的参数"_waitForDelete 孤儿文档会造成数据的不一致,甚至一个数据块迁移了一部分然后被打断,后续相同的数据块重新迁移的时候,有可能造成迁移始终不成功的问题。 4.0 版本中迁移触发的阈值太低,导致迁移产生的性能问题太高 该问题主要从参考文献中得出来的结论。 详情可参考《MongoDB疑难解析:为什么升级之后负载升高了》 除此之外,由于整个迁移不是原子的,且存在异步过程,导致中间失败,产生其他问题的可能。 由数据迁移至MongoDB导致的数据不一致问题及解决方案
log4jdbc 是一款java jdbc驱动程序,它能够打印sql以及jdbc调用其他jdbc驱动 的日志,日志记录使用的是SLF4J系统,下面是常见的xml配置: <! --log4jdbc --> <logger name="jdbc.sqlonly" level="OFF"/> <logger name="jdbc.sqltiming" level= Logger connectionLogger = LoggerFactory.getLogger("jdbc.connection"); // admin/setup logging for log4jdbc . /** * Logger just for debugging things within log4jdbc itself (admin, setup, etc.) */ private final Logger debugLogger = LoggerFactory.getLogger("log4jdbc.debug");
目录 1.日志概述 日志是什么 为什么会有日志 2.log4j概述 什么是log4j 版本 3.log4j入门案例 步骤 实现 总结 4.log4j1详情:记录器rootLogger 5.log4j1 3、安全审计 2.log4j概述 什么是log4j Log4j是Apache旗下的一款开源的日志框架。 输出过程:通过定义日志的输出级别,可以更灵活的控制日志的输出过程 版本 log4j的结构、性能被很多新的日志框架所替代。 log4j.rootLogger=trace, stdout, file # 3 自定义日志级别 ## log4j.logger.包=日志级别 #log4j.logger.com.ibatis = 包括三个主要部件: 记录器 Loggers: 用于设置日志级别与输出源 输出源 Appenders: 日志要输出的地方 布局 Layouts: 日志输出格式 4.log4j1详情
Log4J 本文学习了网上其他老师的视频教程此处传送 log4J是Apache下的一款开源的日志框架,通过在项目中使用log4j,我们可以控制日志输出的位置。 我们可以控制每一条日志的输出格式,通过定义日志输出级别,可以更灵活的控制日志的输出过程; 创建一个log4J工程 1.导入依赖 <dependencies> <dependency> 其中Loggers控制日志的输出级别与日志是否输出;Appenders指定日志的输出方式(控制台、文件等);Layout控制日志信息的输出格式; 编写配置文件log4j.properties log4j.rootLogger #指定日志文件的保存路径 log4j.appender.rollingFile.file= D:/lianxi/log4j.log #指定日志文件字符集 log4j.appender.rollingFile.encoding (Log4jTest.class); //日志输出 logger.info("first log4j"); //日志级别 for (int
http://mpvideo.qpic.cn/0b78vuaakaaat4ame46tanpfblodawwqabia.f10002.mp4? dis_k=5a421ccd82de4f5bf7c677380c81391f&dis_t=1649658735&vid=wxv_1364744710258130946&format_id=10002&support_redirect
一.前言 IdentityServer4 4.x已经正式发布了,根据官方的 Release Note,3.1.x 到 4.x 的变更也是非常多,今天在将代码迁移到 4.x 遇到了一些问题在此记录下来,我使用的 IdentityServer4 的各种数据持久化,比如 ClientStore,ResourceStore 等,都是完全自定义的,非 EntityFramework,如果你是使用的 EF 那么官方提供了迁移脚本 4.x: ? 4.IResourceStore 的变化 ? 五.总结 以上就是我在 IdentityServer4 3.1.x 到 4.x 迁移所遇到的各个问题,所有问题都解决了并且成功运行。 官方开了一个 issues 记录迁移的问题,如果大家有难以解决的问题,不妨去提交:https://github.com/IdentityServer/IdentityServer4/issues/4592
有关迁移的入门资料,请查看 the topic guide. 数据迁移和多数据库 在使用多个数据库时,需要解决是否针对某个特定数据库运行迁移。例如,你可能 只 想在某个特定数据库上运行迁移。 在这个例子中,我们默认使用uuid.uuid4。 运行 makemigrations 命令。 编辑创建的迁移文件。 name='uuid', field=models.UUIDField(max_length=32, unique=True, default=uuid.uuid4) apps.get_model('myapp', 'MyModel') for row in MyModel.objects.all(): row.uuid = uuid.uuid4( model_name='mymodel', name='uuid', field=models.UUIDField(default=uuid.uuid4,
流失过程大致上是这样的 玩家从选择章节后,到进入游戏之间流失了4%,然后在阿呆这里待了3-5秒,之后开始又流失了4%,也就是打败阿呆的其实还是有91%左右。 第一个4%可以理解成游戏崩了或者其他的? 第二个4%就是单纯不想玩。 而最诡异的地方就在于,打赢阿呆后停留在胜利结算界面不点确定的有8%左右…… 为啥啊。
支持多个接口: 虽然Log4j 2 API将提供最佳性能,但Log4j 2提供了对Log4j 1.2,SLF4J,Commons Logging 和 java.util.logging(JUL)API的支持 自动重载配置: 参考Logback,与Logback一样,Log4j 2可以在修改时自动重新加载其配置。但与 Logback 不同的是,在重新配置发生时,它将在不丢失日志事件的情况下执行此操作。 无垃圾:在稳态日志记录期间,Log4j 2 在独立应用程序中是无垃圾的,在 Web 应用程序中是低垃圾。这减少了垃圾回收器的压力,并可以提供更好的响应时间性能。 更多详细转看官网:Log4j – Apache Log4j 2 配置Log4j2 在src下创建一个 log4j2.xml 文件,将以下代码添加进入即可 <? 编写代码 日志级别 Log4j2中日志有六个级别(level): trace:追踪,是最低的日志级别,相当于追踪程序的执行,一般不怎么使用 debug:调试,一般在开发中,都将其设置为最低的日志级别
Log4j2中记录日志的方式有同步日志和异步日志两种方式,其中异步日志又可分为使用AsyncAppJava 强烈推介IDEA2020.2破解激活,IntelliJ IDEA 注册码,2020.2 IDEA 激活码 Log4j 2中记录日志的方式有同步日志和异步日志两种方式,其中异步日志又可分为使用AsyncAppender Log4j-2.9及更高版本在类路径上需要disruptor-3.3.4.jar或更高版本。 在Log4j-2.9之前,需要disruptor-3.0.0.jar或更高版本。无需将系统属性“Log4jContextSelector”设置为任何值。 可以在配置中组合同步和异步记录器。 .component.properties配置文件 # 设置异步日志系统属性 log4j2.contextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector