CentOS 7 下安装KVM和WebVirtCloud管理面板 写在前面 本教程依据官方Wiki和现有教程以及自身实践编写而成,更正了官网Wiki的部分错误并简化了内容,适合一把梭操作,转载请标注来源。 WebVirtCloud 开源地址: https://github.com/retspen/webvirtcloud 感谢 @a350064 KVM安装 检查环境是否支持KVM cat /proc/cpuinfo | egrep 'vmx|svm' 若环境支持则有内容返回 关闭SELinux vi /etc/sysconfig/selinux 修改 SELinux=enforcing 为 SELinux=disabled 安装KVM环境 使用yum软件包管理器进行安装 yum -y install qemu-kvm python-virtinst libvirt libvirt-python virt-manager libguestfs-tools bridge-utils virt-install 检查KVM模块是否被加载 lsmod | grep kvm 若被正确加载则返回如下 kvm_intel 249856 0 kvm 655360 1 kvm_intel irqbypass 16384 1 kvm 配置 libvirt 启用TCP服务 命令行输入: LIBVIRTD_CONFIG=/etc/libvirt/libvirtd.conf LIBVIRTD_ARGS="--listen" 修改 /etc/sysconfig/libvirtd 文件 去除 LIBVIRTD_ARGS="--listen" 前的#号 修改 /etc/libvirt/libvirtd.conf 文件 listen_tls = 0 listen_tcp = 1 tcp_port = "16509" auth_tcp = "none" 若为单机运行则需修改为 listen_addr = "127.0.0.1" 否则需修改为 listen_addr = "0.0.0.0" 开启服务并... 阅读全文
MIUI EU 欧洲版/国际版 本地化 Magisk 模块 一、前言 刷机有风险,ROOT需谨慎!搞机不规范,wipe两行泪! 博主买了一台K30 5G,在使用过程中发现谷歌全家桶在MIUI大陆版上很不正常,非常影响日常使用,经朋友推荐了MIUI EU。虽然Google全家桶都正常了,但是没有小米公交属实有点拉垮,遂决定制作一个Magisk模块,将大陆版MIUI的功能搬到MIUI EU上。 这并不是重复造轮子,就目前而言,博主并没有找到一个本地化模块能将大部分特性移植到MIUI EU,所以自己又写了一个轮子。 二、正文 当前最新版本:v0.33 2020-12-01 请尊重他人的劳动成果,对本模块进行再发布或者修改请不要抹去原作者的信息,转载请注明来源,谢谢。 1.模块介绍 将部分MIUI大陆版特性移植到MIUI EU上。 更新将发布在个人博客 https://blog.minamigo.moe 。 交流QQ群:1012211595 ———— 目前支持的特性有: 小米兰亭Pro字体、小米钱包、应用商店、小爱同学、快应用(未测试)、黄页、传送门、全球上网(一元流量,需要自行从应用商店中安装)。 ———— 部分应用调整为大陆版: 拨号、短信、负一屏、mipush、下载管理(迅雷加速)、日历(农历)。 ———— 注意事项: * 部分应用的广告会回归 * 如果提示需要授权小米智能卡权限,请选择“总是允许”,否则会无法正常工作。如果错误授权,可以清除小米智能卡的数据。 * mipush切换到大陆地区需要手动删除/data/data/com.xiaomi.xmsf 已知问题: * 小爱同学无法使用语音唤醒 * 长按选词翻译功能无法使用 ———— 模块版本:v0.33 系统版本:20.11.18 Android 11 目前未完成的功能: 黄页(可能无法正常工作) 负一屏(未添加) ———————— 当前计划: * 增加可以根据自己需求选择性的恢复本地化功能 * 开始适配Android 11 2.下载安装 此处将不再赘述如何安装Magisk,仅提供下载连接。 Mega网盘: 传送门 阁下可能需要使用代理才能访问mega网盘。如果有朋友可以代传至其它网盘可以与博主联系。 ———— 安装/更新系统顺序: 刷入MIUI EU系统,并成功开机 刷入... 阅读全文
ELK实时日志分析平台环境部署--完整记录 在日常运维工作中,对于系统和业务日志的处理尤为重要。今天,在这里分享一下自己部署的ELK(+Redis)-开源实时日志分析平台的记录过程 (仅依据本人的实际操作为例说明,如有误述,敬请指出) ~ ================概念介绍================ 日志主要包括系统日志、应用程序日志和安全日志。系统运维和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的错误及错误发生的原因。经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误。 通常,日志被分散在储存不同的设备上。如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志。这样是不是感觉很繁琐和效率低下。当务之急我们使用集中化的日志管理,例如:开源的syslog,将所有服务器上的日志收集汇总。 集中化管理日志后,日志的统计和检索又成为一件比较麻烦的事情,一般我们使用grep、awk和wc等Linux命令能实现检索和统计,但是对于要求更高的查询、排序和统计等要求和庞大的机器数量依然使用这样的方法难免有点力不从心。 通过我们需要对日志进行集中化管理,将所有机器上的日志信息收集、汇总到一起。 完整的日志数据具有非常重要的作用: 1)信息查找 。通过检索日志信息,定位相应的bug,找出解决方案。 2)服务诊断 。通过对日志信息进行统计、分析,了解服务器的负荷和服务运行状态,找出耗时请求进行优化等等。 3)数据分析 。如果是格式化的log,可以做进一步的数据分析,统计、聚合出有意义的信息,比如根据请求中的商品id,找出TOP10用户感兴趣商品。 开源实时日志分析ELK平台能够完美的解决我们上述的问题, ELK由ElasticSearch、Logstash和Kiabana三个开源工具 组成: 1)ElasticSearch 是一个基于Lucene的开源分布式搜索服务器。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是第二流行的企业搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。 在ela... 阅读全文
编写 docker-entrypoint.sh 入口文件 在 docker 的官方 Registry 中(store.docker.com) 流行的第三方应用在自己的页面中都提供了 dockerfile 的链接. 而很多 dockerfile 的 ENTRYPOINT 命令都是这么写的 ["docker-entrypoint.sh"] 本篇文章就扫盲下 docker-entrypoint.sh 的特殊用法和设计逻辑 MySQL set -e 你写的每个脚本都应该在文件开头加上 set -e , 这句语句告诉bash如果任何语句的执行结果不是 true 则应该退出. 这样的好处是防止错误像滚雪球般变大导致一个致命的错误, 而这些错误本应该在之前就被处理掉. 如果要增加可读性, 可以使用 set -o errexit , 它的作用与 set -e 相同 set -o pipefail 设计用途同上, 就是希望在执行错误之后立即退出, 不要再向下执行了. 而 -o pipefail 的作用域是管道, 也就是说在 Linux 脚本中的管道, 如果前面的命令执行出了问题, 应该立即退出 shopt -s nullglob 在使用 Linux 中的通配符时 * ?等 如果没有匹配到任何文件, 不会报 No such file or directory 而是将命令后面的参数去掉执行 if [ “${1:0:1}” = ‘-‘ ]; then… 这是一个判断语句, 在官方文件中, 上一行已经给出了注释: if command starts with an option, prepend mysqld 这个判断语句是 ${1:0:1} 意思是判断 $1(调用该脚本的第一个参数), 偏移量0(不偏移), 取一个字符(取字符串的长度) 如果判断出来调用这个脚本后面所跟的参数第一个字符是 - 中横线的话, 就认为后面的所有字符串都是 mysqld 的启动参数 上面的这个操作类似于 Python 的字符串切片 set – mysqld “$@” 在上面判断完第一个参数是 - 开头之后, 紧接着就执行了 set -- mysqld "$@" 这个命令. 使用了 set -- 的用法. set — 会将他后面所有以空格区分的字符串, 按顺序分别存储到$1,... 阅读全文
Kubernetes-部署高可用的MySQL 1 、MySQL简介 MySQL 是一个开源的关系型数据库管理系统,使用标准的sql语言,由瑞典 MySQL AB 公司开发,当前属于 Oracle 公司。能够 支持大型的数据库,可以处理上千万条的数据记录。可以运行于在Windows、Linux等多种系统上;支持C、C++、Python、Java、Perl、PHP、Eiffel、Ruby和Tcl等编程语言。对于32位系统,MySQL的表文件最大可支持4GB,对于64位系统,MySQL支持最大的表文件为8TB。 2 、MySQL的高可用方案 本文的MySQL高可用方案为主从复制+读写分离,即由单一的master和多个slave所构成。其中,客户端通过master对数据库进行写操作,通过slave端进行读操作。master出现问题后,可以将应用切换到slave端。 此方案是MySQL官方提供的一种高可用解决方案,节点间的数据同步采用MySQL Replication技术。 MySQL Replication从一个MySQL数据库服务器(master)的数据复制到一个或多个MySQL数据库服务器(slave)。在默认情况下,复制是异步的;slave不需要一直接收来自主机的更新。根据配置,可以复制数据库中的所有数据库、选定的数据库,或者特定的表。 MySQL中复制的优点包括: 扩容解决方案:在多个slave之间扩展负载以提高性能。在这种模式下,所有的写入和更新操作都必须在主服务器上进行。然而,读取操作通过slave镜像。该模型可以提高写入操作的性能,同时,也能够通过增加slave的节点数量,从而显著地提升读取速度。 数据安全:数据从master被复制到slave,并且slave可以暂停复制过程。因此,可以在不损坏master的情况下,在slave上运行备份服务。 分析:现场数据可以在master上创建,而对信息的分析可以在slave进行,而不影响master的性能。 远程数据分发:可以使用复制为远程站点创建本地数据的副本,而不必一直通过访问master。 此高可用的解决方案适用于对数据实时性要求不是特别严格的场景,在使用时可以通过廉价的硬件来扩展slave的节点数量,将读压力分散到多台slave的机器上面。此方案能够在很大的程度上解决数据库读取数据的压力瓶颈问题,这是因为在大多的应用系统中,读压力要比写压... 阅读全文
打造一个可国内访问的Blogger(Blogspot)方法 Blogger,一个干爽、免费的博客发布平台,作为主流的发布,提供免费的托管,免去了Typecho&Wordpress高昂的服务器费用,避免了Hexo&Jekyll静态博客无后台的缺陷,与CSDN、简书相比,可以绑定域名,界面干净,无广告【当然可以自己放自己的广告】。 实际上,当今写博客的软件数不胜数,主要分为一下三类: 服务器部署:典型代表:Wordpress\Typecho 无服务器托管:典型代表:Hexo\Jekyll\Gidea\Hugo\Hola等等 集成型网站:Blogger、简书、CSDN、cnblog、wodemo等等 上面所有软件,优缺点都有,具体看个人选择 当然,个人认为Typecho适合做个人博客,Hexo可以作为要求不高的人。集成性网站最主要的是只要安安心心写文章,不用管后端乱七八糟的代码。当然,最有问题的是大多数都不支持绑定域名,而且经常往网站上塞广告,自定义范围也不够。 接下来,我们扯扯集成博客中的一股清流:Blogger Blogger.com是由Pyra Labs公司创立,是目前全球用户数量最多的个人网志服务提供商。Pyra Labs和Blogger.com均被Google公司收购,成为其旗下的一项服务内容。 Blogger提供免费主机Blogspot.com存放博客,用户不必写任何代码或者安装服务器软件或脚本,通过所见即所得界面轻松地创建、发布、维护和修改自己的网志。 Blogger允许有经验的用户自行设计博客界面,其模板支持使用HTML和CSS进行编辑 实际上,由于Blogger托管于谷歌,写作域名 www.blogger.com 和托管域名 *.blogspot.com 均被MainLand所Ban。但是接下来来,我会讲讲如何打造一个能在国内大陆访问的Blogger 1. 注册Blogger 众所周知,请善用技术上网。 用谷歌账号登录 ( https://www.blogger.com ) ,没有?不是⑧不是吧不是扒,都0202年了,还不会去注册一个谷歌账号? 进入控制台,新建一个博客: 绑... 阅读全文
mysql(多级分销)无限极数据库设计方法 相信有过开发经验的朋友都曾碰到过这样一个需求。假设你正在为一个新闻网站开发一个评论功能,读者可以评论原文甚至相互回复。 这个需求并不简单,相互回复会导致无限多的分支,无限多的祖先-后代关系。这是一种典型的递归关系数据。 对于这个问题,以下给出几个解决方案,各位客观可斟酌后选择。 一、邻接表:依赖父节点 邻接表的方案如下(仅仅说明问题): CREATE TABLE Comments( CommentId int PK, ParentId int, --记录父节点 ArticleId int, CommentBody nvarchar(500), FOREIGN KEY (ParentId) REFERENCES Comments(CommentId) --自连接,主键外键都在自己表内 FOREIGN KEY (ArticleId) REFERENCES Articles(ArticleId) ) 由于偷懒,所以采用了书本中的图了,Bugs就是Articles: 这种设计方式就叫做邻接表。这可能是存储分层结构数据中最普通的方案了。 下面给出一些数据来显示一下评论表中的分层结构数据。示例表: 图片说明存储结构: 邻接表的优缺分析 对于以上邻接表,很多程序员已经将其当成默认的解决方案了,但即便是这样,但它在从前还是有存在的问题的。 分析1: 查询一个节点的所有后代(求子树)怎么查呢? 我们先看看以前查询两层的数据的SQL语句: SELECT c1.*,c2.* FROM Comments c1 LEFT OUTER JOIN Comments2 c2 ON c2.ParentId = c1.CommentId 显然,每需要查多一层,就需要联结多一次表。SQL查询的联结次数是有限的,因此不能无限深的获取所有的后代。而且,这种这样联结,执行Count()这样的聚合函数也相当困难。 说了是以... 阅读全文
使用 GitOps 在无服务器时代构建现代 CI/CD 管道 本文是 Datree.io 首席技术官兼联合创始人、AWS 社区精英 Shimon Tolts 所写的一篇客座文章。他专门从事开发人员工具和基础设施研究,所经营的公司完全没有服务器。 近年来,软件构建和发布方式发生了重大转变。这些工作主要围绕微服务、将代码拆分成小组件、使用基础设施即代码,以及将 Git 用作粘合一切的单一事实来源展开。 在本文中,我们将讨论现代软件开发的转变过程和不同环节,以展示无服务器领域可行的解决方案。此外,我还列出了适用于当今时代的实用工具。 什么是无服务器? 在深入探讨无服务器开发和工具构建这一奇妙领域之前,我先介绍一下什么是无服务器。AWS 网站谈到了四大主要优势: 无需管理服务器。 可灵活扩展。 付出与价值成正比。 自动实现高可用性。 对我而言,无服务器是指无需自己管理和扩展的所有基础设施。 在我的公司 Datree.io ,95% 的工作负载是在 AWS Fargate 上运行的,而其余 5% 则在 AWS Lambda 上运行。我们是一家无服务器公司;我们的 AWS 账户中没有 Amazon EC2 实例。有关更多信息,请参阅以下内容: io 案例研究 在生产环境中迁移到 AWS ECS Fargate CON320: Operational Excellence w/ Containerized Workloads Using AWS Fargate (re:Invent 2018) 什么是 GitOps? Git 是 免费的开源 分布式版本控制系统,旨在快速高效地处理包括小型项目和超大型项目在内的所有内容。 CI/CD 顾问 Luis Faceira 认为,GitOps 是一种工作方式。您可以将其视为一种一切均以 Git 开始和结束的方法。以下是一些重要概念: Git 是系统的 单一 事实来源 Git 是我们操作(创建、更改和销毁)所有环境的 单一 场所 所有更改都是可观察/可验证的。 在云出现之前,您是如何构建软件的 回首瀑布式云前时代,大家曾经有单独的团队负责开发、测试、安全性、运营和监控等工作。 现在,大多数组织正在向开发... 阅读全文
图像识别在测试中的应用 sikuli 提起 ui 自动化大家首先想到的就是基于控件的自动化,比如常见的 xpath、id、css 选择器等手段进行元素定位并进行结果判断。但是在实际应用中,无论是 web 端还是移动端,仍有很多时候需要根据页面内容、页面中的图像进行定位及判定,是这些手段所达不到的,这里我们来介绍一下关于图像识别在测试中的应用。 在具体进行讲解之前先介绍一下图像识别在测试中能够想到的引用场景: 测试过程中,通过对待测软件进行屏幕截图,采用图像识别算法识别截图中是否包含预定义的可操作控件,如果存在,则触发控制指令,达到了图像识别引导测试过程的目的; 测试结果的验证,通过对待测软件的界面进行截图操作,利用图像识别技术将截图与期望的结果进行匹配,从而自动获取测试结果。 通过图像识别对比来进行性能测试,比如 app 测试中常见的响应时间的测试 首先分享一下图形识别在自动化测试中的应用,目前比较流行的就是 sikuli, 其中关于 sikuli 的安装在这里就不多说了,官网有具体的介绍( https://launchpad.net/sikuli/+download) 原理 Sikuli 脚本是由 jython 通过图像识别的方式来模拟键盘和鼠标事件,从而实现 ui 层面的自动化测试。Sikuli 脚本的核心是一个 java 库主要由两部分组成: java.awt.Robot 这个部分主要是讲键盘和鼠标事件传送给指定的位置,具体的位置是由 c++ 引擎(基于 opencv 模块)通过脚本中的目标图片去屏幕上搜索并定位。C++ 引擎与 java 的 JNI 链接并且进行编译来适应不同的平台。在 java 的上层是一个简单的应用层就是我们开发脚本用的,这层给最终用户提供了一套简单易用的命令。 函数介绍 Find(x) 在屏幕上找到相对于的图片,比如选定一个手机 示例代码: findall(x) 在屏幕上找到所有的相同图片 x,比如可以关注多个手机(一次性把所有的图片的坐标选定,如果选定后再刷新桌面背景有可能出现之前的坐标和之前的功能点对应不上,达不到测试效果) 示例代码: wait(x,10) 等待图片 x 在屏幕上或者指定的区域中出现,超时时间 10 秒 示例代码: waitVanish(x,10... 阅读全文
从零开始学习iftop流量监控(找出服务器耗费流量最多的ip和端口) 一、iftop是什么 iftop是类似于top的实时流量监控工具。 作用:监控网卡的实时流量(可以指定网段)、反向解析IP、显示端口信息等 官网: http://www.ex-parrot.com/~pdw/iftop/ 二、界面说明 =>代表发送数据,<= 代表接收数据 TX:发送流量 RX:接收流量 TOTAL:总流量 Cumm:运行iftop到目前时间的总流量 peak:流量峰值 rates:分别表示过去 2s 10s 40s 的平均流量 三、常用参数 -i 指定需要检测的网卡, 如果有多个网络接口,则需要注意网络接口的选择,如:# iftop -i eth1 -B 将输出以byte为单位显示网卡流量,默认是bit -n 将输出的主机信息都通过IP显示,不进行DNS解析 -N 只显示连接端口号,不显示端口对应的服务名称 -F 显示特定网段的网卡进出流量 如iftop -F 192.168.85.0/24 -h 帮助,显示参数信息 -p 以混杂模式运行iftop,此时iftop可以用作网络嗅探器 ; -P 显示主机以及端口信息 -m 设置输出界面中最上面的流量刻度最大值,流量刻度分5个大段显示 如:# iftop -m 100M -f 使用筛选码选择数据包来计数 如iftop -f filter code -b 不显示流量图形条 -c 指定可选的配置文件 如iftop -c config file -t 使用不带ncurses的文本界面, 以下两个是只和-t一起用的: -s num num秒后打印一次文本输出然后退出,-t -s 60组合使用,表示取60秒网络流量输出到终端 -L num 打印的行数 -f 参数支持tcpdump的语法,可以使用各种过滤条件。 四、进入界面后的操作 一般参数 P 切换暂停/继续显示 h 在交互界面/状态输出界面之间切换 b 切换是否显示平均流量图形条 B 切换显示 2s 10s 和 40s 内的平均流量 T 切换是否显示每个连接的总流量 j/k 向上或向下滚动屏幕显示当前的连接信息 f 编辑筛选码 l 打开iftop输出过滤功能 ,如输入要显示... 阅读全文