2013年3月13日星期三

ssh-agent让远程ssh更方便

由于工作上的事情,需要在多台远程服务器之间来回切换,于是ssh便成为日常工作必备。在此之前,每次切换均是在本地新开终端,再敲入ssh命令连接远程服务器,此间操作好不繁琐!

今天不经意间想到:如若使用ssh agent,当可省去新开终端一步。遂用之。

ssh agent的用法很简单,输入下面两条命令即可:

ssh-agent $SHELL
ssh-add PATH_TO_YOUR_IDENTITY


虽然早就知道ssh agent的存在,亦知道其用处,然而从未深究其用法,便不知悉其所能带来效率上的提高!

2013年1月9日星期三

iPhone 5同步GMail联系人

刚刚入手了iPhone 5,用着觉得很好,流畅、界面一致,各方面整合得很好,尤其是虚拟键盘的使用上,比起我之前使用的milestone 2是好多了(当然,用ms2的更多是使用实体键盘的,不知道其他android手机的虚拟键盘如何)。

赞完了就进入正题吧:由于之前一直用webOS和android的手机,所以我一直将手机的联系人跟GMail同步的,但转到iOS平台后,发现在 设置->邮件、通讯录、日历 里直接添加GMail只能同步邮件、日历和备忘录,根本就没有联系人。

这时我就傻眼了,怎么会这样呢?难道用iPhone 5的人都不使用GMail的通讯录吗?于是探索一翻,终于发现:要在 设置->邮件、通讯录、日历 里添加Exchange,里面填GMail帐号就可以了。

具体步骤如下:
1. 添加Exchange帐户
2. 填入相应的电子邮件、密码等


3. 这里的参数最重要了!尤其是 服务器 那里必须填上 m.google.com


4. 到这里选择 通讯录 就完成了。


总结一下,iOS可能对Apple自家的服务整合的更好,对于Google家的服务整合程度肯定没android平台的深入。不过还好的就是iOS平台添加Google家的服务还不怎么麻烦。


2013年1月5日星期六

2012年终总结


在迈向2013的同时回首2012,发现2012整体上还是很不错的一年。

整个2012则可以分成上下半年,上半年颓废,下半年逐步学习,收获也不少。

2012是我成为网易正式员工的第一年,也许是2011实习和试用期时太忙了,什么实习项目啊、试用期项目啊,还有参加公司篮球比赛拿了第二,于是上天给我过个轻松的半年,所以上半年里并没有太多困难的事情需要处理,然而也导致我颓废了半年。

下半年就不一样了,工作上的挑战接踵而来,例如去解决game_monitor存在的很隐秘的bug、正式接手了yxsg的维护及维护方面的开发、还有接手平台部机器的维护和lvs的部署。这才发现原来我们的工作需要考虑很多方面的事情,而且所有事情是环环相扣,缺一不可。

在处理越来越多工作方面的事情之后发现,其实我们有很多东西在设计的时候并没有考虑完善,就拿yxsg来说,使用的维护基础架构工具竟然与新版不兼容,导致有很多功能无法实现,即使有些功能可以实现,但实现起来非常麻烦,结果我还要做版本迁移,同时还要重新写相应的维护模块。

lvs是我今年下半年学习的,在学习的过程中有所体会:原来做SA并不是想象中那么容易,对于一个系统,我需要去考虑它的负载均衡,它的可用性,它的安全,而这一切都是我原来所缺乏认识的。原本以为SA会是份很乏味的工作,结果发现竟然挑战重重,越来越有趣味,终于让我有了动力。

2012过去了,而我正式步入了2013,希望新的一年里工作上有更多的挑战,让我更充实。

2012年9月14日星期五

用vim画表

看到标题,有人可能会觉得:用vim画表?不用ms office或者openoffice?

事实上,我仅仅需要将一些数据表格化,并不使用到其它统计功能,无需使用到那么大型的工具;再者我平时使用vim较多,用vim编辑起来效率也挺高;而且,使用vim将数据表格化其实并不麻烦。于是乎,就有用vim画表这么一回事。

方法很简单,一句话可以概括:就是使用vim的特殊字符输入功能,绘制表格边框。其实了解dos下wps制表的朋友对这种方法应该不陌生。

在vim里面,虽然不能直接输入特殊字符,但要输入其实并不麻烦。
例如,如果需要输入下表中第一行的制表字符,即横线,输入的方法:
首先,保证vim处于Insert模式,也就是按了a, i, o其中一个所进入的模式;
然后,按Ctrl + k,跟着输入hh。
就这样,很简单。

下面是我用vim画的简单表格,看起来还不错。注意哦,没有用html画的。

制表字符对应表
字符vim输入码
 ─       hh
 │       vv
 ┌       dr
 ┐       dl
 └       ur
 ┘       ul
 ├       vr
 ┤       vl
 ┬       dh
 ┴       uh
 ┼       vh

2012年8月23日星期四

High Availability方案简单比较


1. keepalived + lvs
   1.1. keepalived user guide: keepalived for lvs
   1.2. keepalived.conf manual
   1.1.和1.2.配合着阅读,很容易就能掌握keepalived。
   keepalived非常简单易懂,而且配置十分容易且可靠。
   机房里使用组播会有问题?

2. heartbeat + pacemaker + ldirectord + lvs
   2.1. 旧heartbeat方案 heartbeat + haresources + ldirectord + lvs
   2.2. 新heartbeat方案,即linux-ha方案 heartbeat/corosync + pacemaker +
   ldirectord + lvs
   heartbeat新旧两种方案:两种方案对比,旧方案需要多配置haresources(最终还是将haresources转成cib),用于指定ra;新方案指定ra则直接使用pacemaker来操控cib,功能比旧方案要强大,并且十分灵活,但也带来了较高的复杂度,尤其是在使用pacemaker时需要理解的东西比旧方案多得多。
   如果仅是简单使用双机主从策略来实现高可用,可直接使用旧方案(注意,旧方案最多只能支持双机);但从长远利益来看,使用pacemaker会比较好。

3. summary:
   三种方案中,keepalived方案最为简单,旧heartbeat方案次之,最后是新heartbeat方案。
   keepalived并不限制节点数,而且还可以对节点分组管理,对vip的控制甚至达到设备级别:例如,节点有eth0和eth1,两个都有各自的vip,eth0出现故障并不影响到eth1上的vip
   新heartbeat方案,在ra控制上十分灵活,可以支持多种方案active/passive、N+1、N-N等
   旧heartbeat方案,可以正常工作 =.="

2012年8月22日星期三

在debian squeeze上安装和配置heartbeat、pacemaker和ldirectord实现简单的高可用方案


注意:下面的操作均以root用户身份执行。

1. 安装heartbeat、pacemaker和ldirectord(事实还需要其它软件,但apt会自动处理信赖关系)
apt-get install heartbeat pacemaker ldirectord

heartbeat、pacemaker和ldirectord三者之间的关系图(此处借用文章http://hi.baidu.com/leolance/item/bdc6ecd9f49fc93b48e1dd49中的结构图):

其中,heartbeat为消息交换和基础结构层,pacemaker为资源分配层中的群集资源管理器(CRM),此层还包括本地资源管理器(LRM,包含在cluster-glue软件包中),ldirectord属于资源层,此处资源指代是的linux主机上可用的服务,只要某服务提供符合ocf或lsb标准的控制脚本(即提供了start、stop和status方法的脚本,/etc/init.d下的启停脚本大多符合这一标准)。

下面假设192.168.10.134和192.168.10.136为两个lvs节点,vip为192.168.10.137,两台realserver分别是192.168.11.93和192.168.11.94,realserver上提供http服务。

2. 配置heartbeat
配置ha.cf之前需要知道各节点的名字(在各节点上运行uname -n所得即是),并配置各节点的hosts,使得可用节点的名字解析出相应ip。
例如:在节点192.168.10.134上运行uname -n,得到online10-134,于是在/etc/hosts中添加192.168.10.134 online10-134一行。

注意:ha.cf和authkeys是lvs节点上的配置文件,两个lvs节点上的authkeys必须相同,ha.cf也应相同(可能发心跳的配置有些少不同,其他则相同)。

2.1. ha.cf
cat /etc/ha.d/ha.cf
    # enable pacemaker, without stonith
    crm yes
 
    # log where?
    debugfile /var/logs/heartbeat/ha-debug
    logfile /var/logs/heartbeat/ha-log
    logfacility     local0
 
    # warning of soon be dead
    warntime 10
 
    # declare a host (the other node) dead after:
    deadtime 20
 
    # dead time on boot (could take some time until net is up)
    initdead 120
 
    # time between heartbeats
    keepalive 2
 
    # the nodes
    node online10-134
    node online10-136
 
    # heartbeats, over dedicated replication interface!
    ucast eth0 192.168.10.134
    ucast eth0 192.168.10.136
 
    # ping the switch to assure we are online
    ping 192.168.10.1
    auto_failback on

2.2. authkeys
cat /etc/ha.d/authkeys
    auth 1
    1 sha1 c4920938a12dfa6d9110834c49479b6c

可用下面命令在一个节点中生成随机的密钥,然后复制到各节点。注意:各节点中的authkeys文件必须相同,权限也必须为0600。
( echo -ne "auth 1\n1 sha1 "; \
  dd if=/dev/urandom bs=512 count=1 | openssl md5 ) \
  > /etc/ha.d/authkeys
chmod 0600 /etc/ha.d/authkeys

3. 配置ldirectord

注意:ldirectord.cf是lvs节点上的配置文件,两个lvs节点上的ldirectord.cf内容相同。

cat /etc/ldirectord.cf

    checktimeout=3
    checkinterval=1
    autoreload=yes
    logfile="info"
    emailalert="admin@foo.com"
    emailalertfreq=3600
    emailalertstatus=all
    quiescent=no
    fallback=192.168.10.137:80 gate 3

    virtual=192.168.10.137:80
        real=192.168.11.93:80 gate 3
        real=192.168.11.94:80 gate 3
        service=http
        scheduler=wrr
        persistent=60
        protocol=tcp
        checktype=connect
        checkport=80

4. 使用pacemaker添加资源
pacemaker提供一个交互的shell用于控制资源。以下操作均在crm shell下的configure子项中进行。
添加vip资源:
primitive ip ocf:heartbeat:IPaddr2 \
   op monitor interval="60" timeout="20" \
   params ip="192.168.10.137" lvs_support="true"
添加ldirectord资源:
primitive lvs ocf:heartbeat:ldirectord \
   op monitor interval="20" timeout="10"
将vip和ldirectord绑定一个组:
group ip-lvs ip lvs

2012年7月6日星期五

在debian squeeze上编译安装mysql-5.5.24

由于mysql-5.5已经发布,为了观察mysql-5.5的性能如何,这次决定在deiban上使用mysql-5.5.24,但debian源上并没有mysql-5.5,因此需要编译安装。

准备
首先去下载mysql-5.5.24

另外从源码编译mysql-5.5.24还需要安装以下包:
aptitute install cmake make gcc g++ ncurses-dev

编译及安装
解压源码包:
tar xvf mysql-5.5.24.tar.gz && cd mysql-5.5.24

编译及安装:
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.5.24 && make && make install

后续操作
添加用户和用户组并修改属主:
groupadd mysql
useradd -r -g mysql mysql
cd /usr/local/mysql-5.5.24
chown -R mysql .
chgrp -R mysql .
scripts/mysql_install_db --user=mysql
chown -R root .

参考
源码包中的INSTALL-SOURCE关于安装mysql需要的软件:
Source Installation System Requirements

   Installation of MySQL from source requires several development
   tools. Some of these tools are needed no matter whether you use a
   standard source distribution or a development source tree. Other
   tool requirements depend on which installation method you use.

   To install MySQL from source, your system must have the following
   tools, regardless of installation method:

     * CMake, which is used as the build framework on all platforms.
       CMake can be downloaded from http://www.cmake.org.

     * A good make program. Although some platforms come with their
       own make implementations, it is highly recommended that you
       use GNU make 3.75 or newer. It may already be available on
       your system as gmake. GNU make is available from
       http://www.gnu.org/software/make/.

     * A working ANSI C++ compiler. GCC 4.2.1 or later, Sun Studio 10
       or later, Visual Studio 2008 or later, and many current
       vendor-supplied compilers are known to work.

     * Perl is needed if you intend to run test scripts. Most
       Unix-like systems include Perl. On Windows, you can use a
       version such as ActiveState Perl.
源码包中INSTALL-SOURCE关于mysql的相关操作步骤:
# Preconfiguration setup
shell> groupadd mysql
shell> useradd -r -g mysql mysql
# Beginning of source-build specific instructions
shell> tar zxvf mysql-VERSION.tar.gz
shell> cd mysql-VERSION
shell> cmake .
shell> make
shell> make install
# End of source-build specific instructions
# Postinstallation setup
shell> cd /usr/local/mysql
shell> chown -R mysql .
shell> chgrp -R mysql .
shell> scripts/mysql_install_db --user=mysql
shell> chown -R root .
shell> chown -R mysql data
# Next command is optional
shell> cp support-files/my-medium.cnf /etc/my.cnf
shell> bin/mysqld_safe --user=mysql &
# Next command is optional
shell> cp support-files/mysql.server /etc/init.d/mysql.server