系统运维

Docker新手入门实战教程

本文从新手视角记录了一个实际的Dokcer应用场景从创建、上传直到部署的详细过程,并简单的介绍了腾讯云容器服务的使用方法。通过Docker快速拉起一个定制服务,极大的简化了部署,加快了业务部署节奏,并降低了运维成本。 ------ 人生苦短,快用Docker。
阅读全文
WEB应用

Haproxy安装部署文档及多配置文件管理方案

最近我在负责一个统一接入层的建设项目,涉及到Haproxy和ospf的运维部署,本文分享一下我在部署Haproxy之后整理的运维部署规范,并实现了Haproxy的多配置文件管理方案。 一、部署安装 1、下载源码包 最新stable版本下载地址:http://www.haproxy.org/download/1.7/src/haproxy-1.7.9.tar.gz 2、编译安装 3、创建目录 二、软件配置 熟悉Nginx和Apache的朋友都知道,这两个Webservice都支持include加载多个配置文件的语法,但是Haproxy并不支持!如果现网映射规则非常多,那么haproxy.cfg这个配置文件就跟臭袜子一样,又臭又长! 因此,我也是翻遍了国外的各种论坛帖子,终于发现一种变相实现Haproxy多配置文件的方案。其实,Hparoxy是支持多配置文件的,但是不是include语法,而是在启动的时候多次使用-f 拼接配置文件,比如: 因此,我们可以在配置文件目录以及启动脚本上做点改变,让Haproxy支持多配置文件。 1、路径约定: 待上线的 tcp 映射规则存放目录:/usr/local/haproxy/conf/ready/tcp 待上线的 http 映射规则存放目录:/usr/local/haproxy/conf/ready/http 已上线的 tcp 映射规则存放目录:/usr/local/haproxy/conf/enabled/tcp 已上线的 http 映射规则存放目录:/usr/local/haproxy/conf/enabled/http Ps:本文为多配置模式,enabled 里面的配置为软链接形式,软链接至ready对应配置文件,方便管理。 2、配置模板 ①、主配置:haproxy.cfg ②、http 扩展配置文件模板 ③、tcp 扩展配置文件模板 Ps:多配置模式中,多个frontend必须绑定不同的IP或者端口,否则数据会串,导致映射到不同的后端而报错。因此,同一个IP+端口下的映射务必配置到同一个frontend模块内。 三、系统服务 1、服务脚本 对比已有的Haproxy脚本,我编写的时候新增了如下实用功能: 支持配置文件语法测试 支持进程的监控(自拉起)功能 重启之前会先检测配置语法,规避因配置错误导致重启后进程挂掉 支持多配置文件模式(按照前文约定目录存放拓展配置,脚本将自动识别) 下面是服务脚本代码: 保存为 /usr/local/haproxy/sbin/ctrl.sh,赋可执行权限,如下注册系统服务: 服务控制: 2、配置自拉起 全部完成后,最终目录结构如下: 四、日志配置 配置rsyslog 五、小结 以上内容就是我对Haproxy部署规范的整理,并通过拼接方式变相实现了Haproxy的多配置文件管理。当然,略遗憾的是未能实现Haproxy的WEB管理方案,这个有待继续研究实现,敬请期待!
阅读全文
操作系统

远程桌面报错解决:No Remote Desktop License Servers Available

用户发来反馈,使用部门Windows跳板机报错:The remote session was disconnected because there are no Remote Desktop License Servers available to provide a license.Please contact the server administrator,最后发现是微软RDP远程桌面套件的一个BUG,可通过安装微软补丁或修改注册表来解决,本文简单记录分享下解决过程...
阅读全文
WEB应用

libmemcached编译安装报错解决记录

我负责的几个公司内部网站,仅集成了php原生memcache组件,不支持memcached分片存储的自动容灾方案,近期出现过几例因memcache服务器故障引起WEB爆卡的尴尬事,所以接到了一个给现网php集成memcached模块的需求。 内部的个别系统有多老、多难用我就不吐槽了,slackware、suse用过的人都知道。。。不说了,总之老老实实的编译安装吧。 memcached这个php模块依赖于libmemcached,所以集成前先要编译安装libmemcached。 按照常规编译方法,对libmemcached进行编译安装,结果如下报错: error: cinttypes: No such file or directory 查了下资料,发现是因为gcc版本过低,看了下系统当前的gcc版本,是4.1.2,决定升级之。 简单记录下gcc编译过程: 1、安装gmp 2、安装mpfr 4、安装mpc 5、安装gcc 对于这种老掉牙的服务器、程序,编译安装gcc的时候也不敢直接全局覆盖安装(编译不指定路径),于是将gcc-4.5.1安装到/usr/local/gcc-4.5.1 Ps:更多可选参数请参考官方文档。gcc编译安装必须注意依赖包的顺序,可谓环环相扣。 编译安装后,由于是指定的安装路径,所以系统用的依然是原来的gcc,所以为了本次编译libmemcached,需要将新版本软链过去,暂时使用(简单方案) 进入libmemcached源码目录继续编译,结果如下报错: error: bits/c++0x_warning.h: No such file or directory error: cstdint: No such file or directory error: tr1_impl/cinttypes: No such file or directory 真是醉人,明明都升级了还报错!没办法,继续耐着性子看信息,发现libmemcached在configure之后有如下统计信息: 赫然发现了图中还有个c++显示是4.1.2的老版本!!!于是,原来把c++给漏了,顺手补之: 再去编译安装,就行云流水,再无报错!后面编译memcached就不多说了,不会的可以参考前文教程。最后,记得取消gcc和c++的软链接,还原到4.1.2版本即可(当然,若无异常也可以继续保留)。
阅读全文
数据库

MySQL命令行工具:percona-toolkit安装使用初探

导读:percona-toolkit源自Maatkit 和Aspersa工具,这两个工具是管理mysql的最有名的工具,现在Maatkit工具已经不维护了,请大家还是使用percona-toolkit吧!这些工具主要包括开发、性能、配置、监控、复制、系统、实用六大类,作为一个优秀的DBA,里面有的工具非常有用,如果能掌握并加以灵活应用,将能极大的提高工作效率。 一、 工具简介 percona-toolkit是一组高级命令行工具的集合,用来执行各种通过手工执行非常复杂和麻烦的mysql任务和系统任务,这些任务包括: 检查master和slave数据的一致性 有效地对记录进行归档 查找重复的索引 对服务器信息进行汇总 分析来自日志和tcpdump的查询 当系统出问题的时候收集重要的系统信息 二、工具安装 ①、下载安装包 Percona-toolkit安装包: 最新rpm包:http://percona.com/get/percona-toolkit.rpm 最新编译包:http://percona.com/get/percona-toolkit.tar.gz (本文略)   Perl-TermReadKey安装包: 访问:http://pkgs.repoforge.org/perl-TermReadKey/ 下载最新rpm安装包 ②、安装记录 若发现缺失组件,则使用yum在线安装即可:  yum install -y perl-IO-Socket-SSL   成功安装后,系统会多出如下pt命令: 三、使用初探 pt有很多实用功能,但我就是奔着alter不锁表去的,所以率先测试 pt-online-schema-change 这个字段属性修改工具。 pt-online-schema-change ①、功能介绍 如果没有这个工具,直接使用alter修改字段,过程如下: 按照原始表(original_table)的表结构和DDL语句,新建一张不可见的临时表; 在原表上加write lock,此时对原表的所有U D I DDL 都是阻塞的; 执行insert into tmp_table select * from oldtable; rename oldtable 和 tmp_table,再drop oldtable; 释放 write lock。 为了避免锁表,该换 pt-online-schema-change 出马了! pt-online-schema-change 的 工作过程解析如下: 如果存在外键,根据alter-foreign-keys-method参数的值,检测外键相关的表,做相应设置的处理。 创建一个和你要执行 alter 操作的表一样的新的空表结构(是alter之前的结构)。 在新表执行alter table 语句, 在原表中创建触发器(3个)三个触发器分别对应insert,update,delete操作 从原表拷贝数据到临时表,拷贝过程中通过原表上的触发器在原表进行的写操作都会更新到新建的临时表。 Rename 原表到old表中,在把临时表Rename为原表,默认最后将原表删除,将原表上所创建的触发器删除。 因此,这个工具有如下限制: 表必须是单一列的主键或者单一唯一键。 若表存在外键,则需要指定参数 --alter-foreign-keys-method=auto|rebuild_constraints|drop_swap|none,而且外键不能有错误 表上不能有触发器,否则修改失败。如果有触发器,需要先删除触发器再执行PT,最后再增加触发器。 ②、demo ③、测试记录 在测试数据库上随便导入了一份现网的数据,居然就让我碰到了触发器和外键,人品不错! 测试数据,本机无密码,所以直接执行: 结果如下报错: 对象表存在触发器!于是,将其中某个表的触发器全部删除,继续执行,又发现如下错误: 对象表存在外键! 于是加入 –alter-foreign-keys-method=drop_swap 参数成功执行: 新增字段成功: 四、教程分享 除此之外,percona-toolkit 还有很多实用功能,比如: pt-config-diff : 比较本地与远程MySQL配置文件差异 pt-heartbeat : MySQL主从复制延迟监控 pt-slave-find : 查找和打印所有从服务器复制层级关系 pt-table-checksum : 主从复制一致性检查...
阅读全文
WEB应用

Nginx内容替换模块http_substitutions_filter_module及实用案例分享

说到Nginx的内容替换功能,大部分人应该都听说过Nginx内置的的subs_filter替换模块,但是这个模块有个缺憾,就是只能替换一次,而且还不支持正则表达式,这就有些鸡肋了。 不过,我们可以集成一个第三方的替换模块:ngx_http_substitutions_filter_module,来实现我们的各种需求。 经过测试,这个模块至少有如下实用功能: ①、支持多次替换 ②、支持正则替换 ③、支持中文替换 Ps:略有遗憾的是,这个替换不能使用到 if 判断模块内,否则就超神了。。。 下面,简单介绍下 ngx_http_substitutions_filter_module 的安装实用以及一些实用案例。 一、编译集成 和所有Nginx非内置模块一样,添加模块需要在编译的时候指定模块源码包来集成。当然,Tengine可以使用动态模块加载的功能,这里就不细说了。 ①、下载模块源码包并解压,最后列出目录位置备用 github手动下载地址:https://github.com/yaoweibin/ngx_http_substitutions_filter_module/ ②、在服务器上执行 nginx -V 查看当前  Nginx 编译参数,比如: ③、加上模块参数,重新编译Nginx 找到服务器上原来安装时留下的 Nginx 源码目录(如果没有请重新下载并解压,此处不赘述),进入目录后,在第②步中的参数基础上新增集成替换模块(请注意前面需要加上  ./configure ): ./configure --add-module=/root/ngx_http_substitutions_filter_module-master/ 例如: 再往后,则是make以及平滑升级,请参考之前的文章完成: Nginx在线服务状态下平滑升级或新增模块的详细操作记录 正确完成后,Nginx就具备内容替换功能了。 二、使用说明 模块的github主页其实已经有了很详细的说明了,这里就简单的做下搬运工。 使用示例: 从github给出的使用示例来看,这个模块涉及2个指令: * subs_filter_types subs_filter_types 语法: subs_filter_types mime-type 默认: subs_filter_types text/html 适用: http, server, location subs_filter_types 是用来指定替换文件类型的 默认仅仅替换text/html类型的文件。   * subs_filter subs_filter 语法: subs_filter source_str destination_str 默认: none 适用: http,server,location subs_filter 是用来替换文本的,可以使用正则 g(默认):替换匹配项。 i  :区分大小写的匹配 o : 只匹配发现的第一个。 r  : 正则匹配。 三、案例分享 ①、全站https 有了这个功能,要实现全站https也就是非常简单了,只要把本站的http://协议代码全部替换成https即可。当然,替换时要注意匹配范围,免得把不支持https的外链也一起替换了。。。 比如,将如下代码添加到网站Nginx配置内即可完成替换 ②、CDN域名替换 这个模块在CDN方面同样简单实用!比如,我们网站要用到七牛CDN,不管是纯代码还是插件,那都是靠PHP代码来进行替换的,性能肯定就不如Nginx直接替换来的简单粗暴了。 Ps:经测试,在使用正则模式时,不能使用nginx内置变量,比如:$host,否则会出现如下报错: nginx: match part cannot contain variable during regex mode in *** ③、解决前台暴露管理员账号风险 前段时间,看到有博客在说 WordPress 会在前台暴露管理员登陆账户的问题,然后给出了较为复杂的解决办法:通过修改 WordPress 内核函数来隐藏账户名。 修改内核函数,一般是非常无奈,没有其他解决方法的时候才会用到,所以,我看到这个问题第一件时间想到的办法就是替换。 使用PHP替换是非常简单的,参考博客之前分享的文章即可搞定:...
阅读全文