Fork me on GitHub
Suzf  Blog

Archive Linux

How-to compile vim with lua

vim 重新编译支持lua

安装依赖包
yum install ncurses lua lua-devel readline -y

安装LuaJit
luajit不在centos的官方repo里面,我们需要编译安装;
wget http://luajit.org/download/LuaJIT-2.0.4.tar.gz
tar -xzvf LuaJIT-2.0.4.tar.gz
cd LuaJIT-2.0.4
make && make install

下载源码
wget ftp://ftp.vim.org/pub/vim/unix/vim-7.4.tar.bz2
tar xzvf vim-7.4.tar.bz2
cd vim74

编译
vim的编译其实很简单,就configure -> make -> make install 这样的流程。
但是要添加 Lua支持,就有一些麻烦了。
configure的配置大概是这样的:
./configure --prefix=/usr/local/vim74 --with-features=huge --with-luajit --enable-luainterp=yes --enable-fail-if-missing
# 如果你的机器没有安装lua 和luajit的话会在检查lua支持那里中断了。
# make && make install

运行
# /usr/local/vim74/bin/vim
/usr/local/vim74/bin/vim: error while loading shared libraries: libluajit-5.1.so.2: cannot open shared object file: No such file or directory

# 显然是安装的luajit有问题。我们找一下luajit这个.so文件在哪里
# find / -name libluajit-5.1.so.2
/usr/local/lib/libluajit-5.1.so.2
^C

# 我们需要给这个libluajit-5.1.so.2生成一个软链接
# ln -s /usr/local/lib/libluajit-5.1.so.2 /lib64/libluajit-5.1.so.2

这样再运行vim就不会有问题了~也有Lua支持了
#/usr/local/vim74/bin/vim  --version | grep lua
+dialog_con      +lua             +rightleft       +windows
Linking: gcc   -L/usr/local/lib -Wl,--as-needed -o vim    -lSM -lICE -lXpm -lXt -lX11 -lSM -lICE  -lm -ltinfo -lelf -lnsl  -lselinux  -L/usr/lib -lluajit-5.1

mv /usr/bin/vim{,.old}
cp ~/vim74/src/vim /usr/bin

Reference:
- http://www.cnblogs.com/spch2008/p/4593370.html
- http://blog.wuxu92.com/z-compile-vim-with-lua-support-in-centos-7/

 

使用 VIM 打造 Python 开发IDE

编程常用的文本编辑器就那么几种常见的, 有人喜欢Vim, 有人喜欢emacs, 也有人喜欢IDE, 例如Pycharm, eclipse等. 今天我们不谈孰优孰劣, 只要适合自己就可以了.

如果你喜欢VIM, 又希望有IDE常见的功能. 你完全可以将这些功能集成到Vim中. 但是, 对于一个初学者, 或像我一样的懒人, 一个一个的查找并试验配置这些插件未免有些太麻烦. 因此, 本文介绍 spf13-vim, 可以简单的满足我们的需要.

Hadoop 单节点_伪分布 安装手记

实验环境
CentOS 6.X
Hadoop 2.6.0
JDK    1.8.0_65

目的
这篇文档的目的是帮助你快速完成单机上的Hadoop安装与使用以便你对Hadoop分布式文件系统(HDFS)和Map-Reduce框架有所体会,比如在HDFS上运行示例程序或简单作业等。

先决条件
支持平台
GNU/Linux是产品开发和运行的平台。 Hadoop已在有2000个节点的GNU/Linux主机组成的集群系统上得到验证。
Win32平台是作为开发平台支持的。由于分布式操作尚未在Win32平台上充分测试,所以还不作为一个生产平台被支持。

How-to deal with Ceph Monitor DB compaction?

Issue

Ceph Monitors DB compaction
mon.ceph1 store is getting too big! 48031 MB >= 15360 MB -- 62% avail
mon.ceph2 store is getting too big! 47424 MB >= 15360 MB -- 63% avail
mon.ceph3 store is getting too big! 46524 MB >= 15360 MB -- 63% avail

In Three Monitor nodes each one have ~50GB of store.db:
du -sch /var/lib/ceph/mon/ceph-ceph1/store.db/
47G     /var/lib/ceph/mon/ceph-ceph1/store.db/
47G     total

We've set the following in our ceph.conf:
[mon]
mon compact on start = true
Then we restart one of the monitor to trigger the compact process.
Noticed that size of store.db increase more (and is still increasing) but it should decrease.

 

However

If mon compact on start is set true.

The larger the database, the longer the compaction would take. there by increasing the time for a node to join cluster / form quorum. <on the procuction, i restart one mon service. it costs more than one hour. It's soo long! >

This probably need a review alongside any other existing cluster-level heartbeats/failover process for safety if this approach is selected.

Clearly we don't want this on by default, but having the option to turn it on via auto-manage-soft might be nice.

Note you can also tell a monitor to run compaction on the fly with

sudo ceph tell mon.{id} compact

 

MySQL 5.7 multi-source replication

英文原文:MySQL 5.7 multi-source replication

近日ORACLE发布几个新的功能在最新的Mysql5.7.2的版本上,由此有了此篇文章。大多数的改善是在数据库性能和复制相关的功能上,这个新版本会带给我们不可思议的效果。

在这篇文章里,我将要用一些简单的步奏来尝试了解这新的多源复制工作原理以及我们怎样进行自己的测试。需要说明的是,这还是一个开发版本,不是给生产环境 准备的。因此这篇文章是打算给那些想了解此新功能的人,看看它是如何在应用中工作的,都是在临时环境中进行相关操作。

什么是多源复制?

首先,我们需要清楚 multi-mastermulti-source 复制不是一样的. Multi-Master 复制通常是环形复制,你可以在任意主机上将数据复制给其他主机。

Mysql 单机多实例详解

应用场景
采用了数据伪分布式架构的原因,而项目启动初期又不一定有那多的用户量,为此先一组物理数据库服务器,但部署多个实例,方便后续迁移
为规避mysql对SMP架构不支持的缺陷,使用多实例绑定处理器的办法,把不同的数据库分配到不同的实例上提供数据服务
一台物理数据库服务器支撑多个数据库的数据服务,为提高mysql复制的从机的恢复效率,采用多实例部署
已经为双主复制的mysql数据库服务器架构,想部分重要业务的数据多一份异地机房的热备份,而mysql复制暂不支持多主的复制模式,且不给用户提供服务,为有效控制成本,会考虑异地机房部署一台性能超好的物理服务器,甚至外加磁盘柜的方式,为此也会部署多实例
传统游戏行业的MMO/MMORPG,以及Web Game,每一个服都对应一个数据库,而可能要做很多数据查询和数据订正的工作,为减少维护而出错的概率,也可能采用多实例部署的方式,按区的概念分配数据库

[译] Repair MySQL 5.6 GTID replication by injecting empty transactions

在前面文章我提到了两种关于如何修复 Mysql 5.6 GTID 主从数据库
我没有提到大家说熟知的方法 - ` GLOBAL SQL_SLAVE_SKIP_COUNTER = n`。原因很简单,如果你使用的是MysqlGTID,它是不工作的。
那么问题来了:

有没有简单的方法跳过这单一事务 ?
是的!注入空事务。让我们想象一下,从服务器上的复制不工作,因为下面一个错误:

Last_SQL_Error: Error 'Duplicate entry '4' for key 'PRIMARY'' on query. Default database: 'test'. Query: 'insert into t VALUES(NULL,'salazar')'
Retrieved_Gtid_Set: 7d72f9b4-8577-11e2-a3d7-080027635ef5:1-5
Executed_Gtid_Set: 7d72f9b4-8577-11e2-a3d7-080027635ef5:1-4

这里有不同的方法可以找到失败的事务。你可以检查二进制日志,或者你也可以检查retrieved_gtid_set executed_gtid_set 从显示输出的例子中我们可以看出。此从服务器检索到1到5的交易,但只执行了1到4。这意味着交易5是导致问题的一个问题。

因为在GTID中sql_slave_skip_counter不工作,我们需要找到一种办法来忽视事务。我们可以在GTID中创建空事务以跳过它。

STOP SLAVE;
SET GTID_NEXT="7d72f9b4-8577-11e2-a3d7-080027635ef5:5";
BEGIN; COMMIT;
SET GTID_NEXT="AUTOMATIC";
START SLAVE;
[...]
Retrieved_Gtid_Set: 7d72f9b4-8577-11e2-a3d7-080027635ef5:1-5
Executed_Gtid_Set: 7d72f9b4-8577-11e2-a3d7-080027635ef5:1-5

START SLAVE 之后 检查事务5已经在它自己的二进制文件中了,这就意味着它已经执行过了。

这是一个简单的方法来跳过一些事务,但是,你应该想到主从服务器之间数据不一致。pt-table-checksum 在这里可以帮助你,它可以在Percona Toolkit for mysql 中找到。

上周我谈及了很多关于GTID的东西在多伦多 Percona Mysql 大学。 它包括MySQL 5.6 gtid 这个新功能的工作概述,可以帮助人们。这是来自该会议的幻灯片。我希望你觉得它有用:MySQL 5.6 GTID in a nutshell
 

原文: https://www.percona.com/blog/2013/03/26/repair-mysql-5-6-gtid-replication-by-injecting-empty-transactions/

 

How To Install ELK Stack (Elasticsearch, Logstash, and Kibana) on CentOS 6

ELK(Elasticsearch + Logstash + Kibana) 是一套开源的日志管理方案
Elasticsearch:负责日志检索和分析
Logstash:负责日志的收集,处理和储存
Kibana:负责日志的可视化

Logstash: The server component of Logstash that processes incoming logs
Elasticsearch: Stores all of the logs
Kibana 4: Web interface for searching and visualizing logs, which will be proxied through Nginx
Logstash Forwarder: Installed on servers that will send their logs to Logstash, Logstash Forwarder serves as a log forwarding agent that utilizes the lumberjack networking protocol to communicate with Logstash

Reference:
JDK - http://www.oracle.com/technetwork/java/javase/downloads/index.html
Elasticsearch - https://www.elastic.co/downloads/elasticsearch
Logstash - https://www.elastic.co/downloads/logstash
Kibana - https://www.elastic.co/downloads/kibana
redis - http://redis.io/download

数据流流向如下
Logstash-forwarder--->Logstash--->Elasticsearch--->kibana--->nginx--->客户浏览器

How-to: install elasticsearch plugin

elasticsearch 插件

由于公司内部访问权限控制严格,自己搭建的虚拟机只能通过搭建代理上网

因为某种限制第一种安装未成功, 所以有了后面的方法。
自动安装
[11:38:08][root@ocean-lab elasticsearch]$ ./bin/plugin -install mobz/elasticsearch-head
-> Installing mobz/elasticsearch-head...
Trying https://github.com/mobz/elasticsearch-head/archive/master.zip...
Failed to install mobz/elasticsearch-head, reason: failed to download out of all possible locations..., use --verbose to get detailed information

[11:35:35][root@ocean-lab elasticsearch]$ wget https://github.com/mobz/elasticsearch-head/archive/master.zip
--2015-11-26 11:35:56--  https://github.com/mobz/elasticsearch-head/archive/master.zip
Connecting to x.x.9.158:3128... connected.
Proxy request sent, awaiting response... 302 Found
Location: https://codeload.github.com/mobz/elasticsearch-head/zip/master [following]
--2015-11-26 11:36:05--  https://codeload.github.com/mobz/elasticsearch-head/zip/master
Connecting to x.x.9.158:3128... connected.
Proxy request sent, awaiting response... 200 OK
Length: 899159 (878K) [application/zip]
Saving to: “master.zip”

100%[==================================================
2015-11-26 11:36:10 (292 KB/s) - “master.zip” saved [899159/899159]

手动安装
[16:12:12][root@ocean-lab elasticsearch]$ ./bin/plugin --install elasticsearch-head --url file:///usr/share/elasticsearch/plugins/master.zip
-> Installing elasticsearch-head...
Trying file:/usr/share/elasticsearch/plugins/master.zip...
Downloading .........DONE
Installed elasticsearch-head into /usr/share/elasticsearch/plugins/head

Reference  elasticsearch-modules-plugins-install