Welcome to

快雪Tang

Home / DevOps

今天发了一个consul tags工具

缘由 因为consul都已经0.8.0了,还是没有动态修改tags的功能(这是一个老生常谈的问题了,不过consul很坚持,哪怕PR都已经做好了,只等着动动拇指了,也还是不行)参见修订,通过api去做的话,又会超级繁琐和比较没办法,所以做了一个工具去处理tags的添加、删除;进一步的,提供一个翻转的功能。 consul service能够带有一组tags,consul的编程接口和API都能够通过tags来筛选services,因此我们通常会将一个服务的实例集群的角色也提供在tags中,例如 role=master,type=disk,rw=readwrite,等等。这时候 LoadBalancer 就能够通过筛选tags来获得可用列表。 例如向 redis 服务发出 rw=readwrite 筛选条件后得到的可用实例表经过 LoadBalancer 处理后对业务层可用,这样业务层就可以写入键值;反过来筛选 rw=readonly 得到的实例表,业务层就可以读取键值,通过 LoadBalancer 附着一个 ReadWriteSpliiter 的架构设计,业务层实质上可以透明地获得负载均衡后的 redis 服务,并且该服务内部隐含地完成了读写分离的 devops 架构。 类似的,DB也可以采用这样的设计方案。 话说回来,也不必鄙视consul坚决不提供tags修改功能或者在service definition中附着一个子K/V,两者各有各的问题,而集中使用单一一个全局的K/V事实上也是相当正确的做法。然而不符合直觉啊,为什么大家总是要想reload一个新tag,而不愿意使用K/V呢,甚至愿意放弃分布锁也要改tag?这是个很严肃的问题。 key+问题 无论如何,回到我们描述的那种策略中,那么这里就存在一个问题了,consul很难动态修改tags,这样的架构设计就难以落地了。 consul确实准许重新注册相同id的实例并能够在这个场景中正确的设置到新tags集合。但那是针对string,而不是key=value。 这时要简单地把key-value应用进去就不那么便利了。不过还是可以有方法。 一种方法是对该设计进行一点点微调,采用 consul 的 KV Store 来保存服务实例的角色,并在高可用切换场景下更新该key。 这个方法成本低廉,而且实际上利用ZooKeeper,Etcd来做服务发现的案子,谁又不是这么做的呢?所谓的成本低廉,是因为 consul v0.6+ […]

Read More

Foreman 的 AWS EC2 Provider 在 AWSCN 中无法工作的问题

foreman 中使用的是 fog-aws 0.13.x 来完成AWS管理。 通过 Foreman-ec2 你可以将AWS EC2定义为一个计算资源(Compute Resource),随即用于创建新的EC2实例,这一切很流畅,如果你使用AWS International的话。然而如果使用AWS CN(http://www.amazonaws.com.cn/),当你安装了foreman-ec2插件之后,试图新增计算资源的话,fog-aws的这个早期版本只会在非AWSCN中试图验证你的AWSCN Token,结果当然是悲剧的:“ AWS was not able to validate the provided access credentials ”。 fog-aws的新版本已经解决了这个问题。然而更新foreman捆绑的版本不是真的好主意。

Read More

figlet和lolcat

因为记忆力衰退,所以有时候必须存个档。 figlet是一个小小的工具,能够将单词句子以字符组织的方式改头换面呈现出来。lolcat则是纯粹的Linux终端的专用工具,目的是将输入的文字内容渐变着色后在终端上显示出来。 它们组合在一起造成的效果是很有趣的,所以下面用两张截图解释一下,而这篇文章并不负责做更多的解说了。 And:

Read More

Ubuntu 14.0.4/Mac 安装nodejs开发或生产环境 (rvm)

首先来讲,Mac上可以有几种安装nodejs开发环境的方法,然而各种坑我都踩过了,还是建议rvm来安装nodejs,事实上好像我现在并没有遇到什么古怪的问题了,所以这篇文章其实并不能解决初学者的所有问题,顶多只是把一种最佳流程给记录下来罢了。 首先还是上脚本,适用于Ubuntu,Bash环境,同时也适用于Mac的Terminal/iTerm2环境(但需要一点点更改,主要是去掉apt-get相关的指令):

Read More

安全截断mysql binlog日志

对于运维来讲,截断mysql binlog日志释放磁盘空间是必要的,因为时间太久远的binlog已经毫无意义了。 按照mysql的文档,截断binlog并不困难,下面是一个示例:

Read More

WordPress部署使用一个nginx前端

一般来说,WordPress都是被部署到一个LAMP环境的,不过为了追求分流、负载均衡,或者其他的具体需求,我们可能并不真的直接暴露Apache2给访问者,而是借助一个前端服务器(甚至是集群,话说谁的Blog还在写而且有百万千万级访问吗?)来转置。

Read More

解决WordPress前端nginx时无限重定向问题

问题现象是,使用nginx作为前端,php-fpm或者apache2后端,开首页收到“Redirection loop”错误,但后台登录正常的问题。这个问题相当典型,答案很多,可以乱搜,但基本上靠谱的方案就是一个:“remove_filter(‘template_redirect’, ‘redirect_canonical’);”。 这里着重要记录的,不是方案本身,只是提供一个脚本,目的在于一次性地修正wp-contents/themes/下的全部主题的functions.php,只要在安装了、更新了主题之后在ssh bash环境中执行一遍该脚本,就会一次性地解决全部问题。 脚本如下:

Read More