标签归档:效率工具

Qmeta: RabbitMQ元数据备份工具

RabbitMQ的元数据泛指服务器端的Exchange、Binding、Queue、Vhost、Policy、账户、权限等定义信息。对元数据进行备份有两个好处:

1. 队列迁移。可以直接导入,不必所有信息重新输入。
2. 故障恢复。『单机磁盘故障引发RabbitMQ镜像队列数据丢失』一文中分析了镜像队列数据丢失的场景,如果元数据进行过备份的话,可以快速恢复服务。

RabbitMQ管理插件本身提供了元数据备份的API(GET /api/definitions),关键是如何高效地备份,特别是当手上有上百个RabbitMQ节点需要运维的时候。

Qmeta是我用Go写的一个RabbitMQ元数据备份小工具,它支持批量备份元数据,并以json的形式存储在备份目录下。

使用方式:
1. 构建

$ git clone git@github.com:fengchj/ftool.git
$ cd ftool/qmeta
$ go build 

2. 使用

$ qmeta -h
Usage of qmeta:
  -file="config": config file contains RabbitMQ node addrs.
$ cat config
127.0.0.1:15672 guest guest
10.20.30.40:15672 guest guest
$ qmeta -file config
Host 127.0.0.1 backup done!
Host 10.20.30.40 backup done!
$ cd qmeta_{time-in-second}
$ ls -l
127.0.0.1.json
10.20.30.40.json

简单介绍下Qmeta的实现:

1. flag包解析配置文件路径。
2. 每个节点的备份任务交给独立的goroutine处理。
3. net/http包发送HTTP GET请求,设置连接超时参数Timeout。
4. 所有goroutine共享http.Client实例,协程安全。
5. 使用带缓冲区的channel来实现主程序和goroutine的同步,当所有goroutine返回后,安全关闭channel。
6. 协程在defer语句中进行channel数据写入,以此来保证是否备份成功,goroutine都会返回。

--EOF--

Vim必知必会:初阶

以前我对待Vim的态度不是很友好,因为它的学习曲线实在太陡,并认为其早就应该被更加现代化的文本编辑器取代。直到工作以后,接触了越来越多的服务器端运维操作,无论修改配置文件还是查询日志,没有Vim已经寸步难行,于是渐渐也就适应了。

本系列文章只讲究实用性,所有操作均来自于平日的实践总结,不罗列那些边边角角、充满秀技意味的命令。此为第一篇,关于Vim的初阶用法,熟记下列命令并熟练应用,就已经可以在Vim的江湖里存活了。

1. 移动光标

移动光标可以用hjkl键和左、下、上、右方向键,两者的作用一样,区别在于,hjkl只适用于普通模式下的操作,而方向键适用于各种模式(包括插入模式、命令模式等)。

2. 自由编辑文本

iIaAoO键可以使Vim进入插入模式,它们的区别在于插入位置不同:

* i: 在光标所在位置前插入。
* I (Shift + i): 在当前行首插入。
* a: 在光标所在位置后插入。
* A (Shift + a): 在当前行尾插入。
* o: 在下一行行首插入。
* O (Shift + o): 在上一行行首插入。

插入完毕后,按ESC键回到普通模式。

3. 保存&退出

普通模式下,按 : 进入命令模式:

* w: 保存。
* w!: 强制保存(比如修改只读文件)。
* q: 退出。
* q!: 忽略未保存修改,强制退出。
* wq: 保存后退出。
* wq!: 强制保存后退出。

4. 删除

在普通模式下,
* x: 删除光标所在处字符。
* dd: 删除当前行。

在插入模式下,
* 退格键(backspace): 删除字符。

5. 快速移动

* gg: 快速移动到文件开头。
* G (Shift + g): 快速移动到文件末尾。
* 0: 快速移动到当前行首。
* $: 快速移动到当前行尾。替代方式:按A进入行尾插入模式,再按ESC退出插入模式。
* Ctrl + f: 向前翻一页。
* Ctrl + b: 向后翻一页。
* w: 移动到下一个单词的首字母,符号、标点也算作一个单词。(可用e替代,移动到下一个单词的尾字母)
* b: 移动到上一个单词的首字母,符号、标点也算作一个单词。

6. 撤销/重做

* u: 撤销上次修改操作。
* Ctrl + r: 重做上次被撤销的操作。

7. 搜索

* /word: 向下搜索关键词word。
* ?word: 向上搜索关键词word。
* n: 跳到下一个搜索关键词匹配处。如果是/word搜索,n跳向文件末尾方向,如果是?word搜索,n跳向文件开头方向。
* N: 跳到上一个搜索关键词匹配处。如果是/word搜索,N跳向文件开头方向,如果是?word搜索,N跳向文件末尾方向。

8. 简单替换

:进入命令模式,

* %s/src_chars/dest_chars/g: 全局替换,将src_chars替换为dest_chars。同1,$s/src_chars/dest_chars/g
* N1,N2s/src_chars/dest_chars/g: 指定区域替换,将第N1行到第N2行(含N1,N2)之间的src_chars替换为dest_chars。

9. 复制/粘贴

按行复制:
* yy: 复制当前行。
* Nyy: 从当前行开始,复制N行。

自由复制
* v: 开始选择字符。
* y: 复制已选择的字符。

粘贴:
* p: 在下一行粘贴已复制内容。

10. 自定义Vim样式

自定义几个常用的样式配置,编辑~/.vimrc:

1
2
3
4
5
6
" 开启语法高亮
syntax enable
" 显示行号
set number
" 开启搜索关键词高亮
set hls

--EOF--