关于 三月, 2014 的文章

XCP/XenServer自动化部署脚本分享

之前我曾经写过两篇关于XCP/XenServer的文章:
XCP/XenServer命令行方式自动化安装VM:http://heylinux.com/archives/2795.html
XCP/XenServer自动化创建并初始化VM:http://heylinux.com/archives/2768.html

在这两篇文章中,详细介绍了如何自动化安装VM,创建模板并初始化VM。
在实际的工作中,我编写了相应的脚本来完成这些工作,并在6个小时内批量创建了400+个不同配置的VM。
具体的脚本路径为:
自动化安装初始VM
https://github.com/mcsrainbow/shell-scripts/blob/master/scripts/xcp_ksinstvm/ksinstvm.sh
自动化批量创建VM
https://github.com/mcsrainbow/python-demos/blob/master/demos/xenserver.py
自动化VM网络配置
https://github.com/mcsrainbow/shell-scripts/blob/master/scripts/xcp_bootstrap/bootstrap.sh
自动化VM磁盘扩容
https://github.com/mcsrainbow/shell-scripts/blob/master/scripts/xcp_extendlv.sh
查看当前所有VM以及各个XenServer的使用情况
https://github.com/mcsrainbow/shell-scripts/blob/master/scripts/xcp_monitor.sh
获取指定VM的VNC终端,用于脚本故障时连接到本地终端进行调试(效果相当于Windows上XenCenter Console)
https://github.com/mcsrainbow/shell-scripts/blob/master/scripts/xcp_getvnc.sh

, ,

No Comments

Nginx+PHP(FastCGI)+MySQL在小内存VPS(t1.micro)上的安装配置与优化

参考资料:
http://blog.s135.com/nginx_php_v6/
http://blog.s135.com/post/375/

背景介绍:
以前,因为AWS EC2的价格比较昂贵而租用了其它国外小厂商的VPS,在使用了3年多之后,发现AWS EC2的价格居然比现在正在使用的VPS还要便宜。
全球线路与速度最理想的日本节点的t1.micro型号,选择3年长期合约的价格在3000元人民币左右,一年下来也不到1000元,所以就打算将Blog迁移到AWS EC2上。
ec2_tokyo_t1_micro

之前在部署VPS环境的时候,基本上是完整的参考了张宴的两篇文档,包括操作系统的选择也是相同的。
但这一次我想采用目前较新的CentOS 6.4 minimal x86_64
同时选择版本最新的Nginx,PHP以及MySQL,引入EPEL仓库来简化安装与部署过程中对额外的依赖软件的安装,优化一些原来的工作方式,比如创建服务管理脚本来启动/停止Nginx与MySQL,使用logrotate来切割日志等;
经过了一番折腾,在填了不少的坑之后,终于成功的完成了新环境的部署,感觉非常不错。

下面,就是此次的整个安装配置过程:
1. 安装常用工具
yum install -y vim wget unzip screen tree mlocate

2. 安装编译工具
yum install -y gcc gcc-c++ autoconf patch cmake automake

3. 安装EPEL仓库
yum install -y http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

4. 安装所有必需的软件包
yum install -y libjpeg-turbo libjpeg-turbo-devel libpng libpng-devel freetype freetype-devel
yum install -y libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel gmp gmp-devel
yum install -y bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel unixODBC unixODBC-devel
yum install -y krb5-libs krb5-devel libidn libidn-devel openssl openssl-devel openldap openldap-devel
yum install -y libgcrypt libgcrypt-devel libtool
yum install -y libmcrypt libmcrypt-devel mhash mhash-devel mcrypt pcre pcre-devel
yum install -y ImageMagick ImageMagick-devel

5. 下载所有必需的软件源码包
mkdir /root/packages
cd /root/packages
wget http://nginx.org/download/nginx-1.4.7.tar.gz
wget http://museum.php.net/php5/php-5.2.17.tar.gz
wget http://php-fpm.org/downloads/php-5.2.17-fpm-0.5.14.diff.gz
wget http://mirrors.sohu.com/mysql/MySQL-5.5/mysql-5.5.36.tar.gz
wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz
wget http://pecl.php.net/get/PDO_MYSQL-1.0.2.tgz
wget http://pecl.php.net/get/imagick-3.2.0RC1.tgz
wget https://github.com/downloads/eaccelerator/eaccelerator/eaccelerator-0.9.6.1.tar.bz2

6. 编译安装iconv
cd /root/packages
tar xzvf libiconv-1.14.tar.gz
cd libiconv-1.14
./configure
make
make install
阅读全文 »

, , , , , ,

2 Comments

在CentOS6.5上搞定Skype与QQ

背景介绍
目前,在工作状态下,我绝大部分时间都是在我的VMWare中。但又不得不经常切换到Windows当中来通过Skype和QQ联系同事和请教问题。
今天,也算是闲来无事,就试着想在CentOS中搞定Skype和QQ,这样,再配合安装好的FireFox,在工作的时候我基本上就可以告别Windows了。

系统环境
CentOS6.5 x86_64 with GNOME Desktop

1.安装配置Skype
参考文档:http://community.skype.com/t5/Linux/CentOS-RHEL-6-Skype-4-2-RPM-Installation-Steps/td-p/1740485

这篇文档的作者非常有心,把原本非常复杂的安装与配置步骤全部在一个RPM包中搞定了,因此只需要如下几个简单的步骤就能安装配置好Skype:
$ sudo yum groupinstall "GNOME Desktop"
$ sudo yum install http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
$ wget http://www.bromosapien.net:8080/others/skype-4.2.0.11-4.el6.i686.rpm
$ sudo yum install skype-4.2.0.11-4.el6.i686.rpm

然后就可以打开Skype了:
Applications -> Internet -> Skype

2.安装配置QQ
参考文档:http://m.blog.csdn.net/blog/yang1982_0907/17161865#

安装配置QQ就没有那么省心了,首先QQ目前根本不支持Linux,唯一的解决方案是通过Pidgin+lwqq插件来实现。

具体步骤如下:
安装系统所需软件包
$ sudo yum groupinstall "GNOME Desktop"
$ sudo yum install cmake git subversion
$ sudo yum install NetworkManager-devel perl-devel perl-ExtUtils-Embed
$ sudo yum install libcurl-devel sqlite-devel libsphinxclient-devel libpurple

下载pidgin源码包
$ wget 'http://downloads.sourceforge.net/project/pidgin/Pidgin/2.10.9/pidgin-2.10.9.tar.bz2?r=http%3A%2F%2Fpidgin.im%2Fdownload%2Fsource%2F&ts=1394018729&use_mirror=iweb' -O pidgin-2.10.9.tar.bz2

编译安装pidgin
$ tar xjf pidgin-2.10.9.tar.bz2
$ cd pidgin-2.10.9
$ ./configure
$ make
$ sudo make install
$ cd ..

编译安装js185
$ wget http://ftp.mozilla.org/pub/mozilla.org/js/js185-1.0.0.tar.gz
$ tar xzf js185-1.0.0.tar.gz
$ cd js-1.8.5/js/src
$ ./configure
$ make
$ sudo make install
$ sudo vim /etc/profile.d/js185.sh
PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
$ source /etc/profile
$ pkg-config mozjs185 --cflags
$ cd ..

编译安装lwqq
$ git clone https://github.com/xiehuc/pidgin-lwqq.git
$ cd pidgin-lwqq
$ git submodule init
$ git submodule update
$ mdir build
$ cd build
$ cmake ..
$ make (此时会提示一个编译错误,解决方法是立刻再执行一次make)
$ make
$ sudo make install
$ cd ../../

修改默认的明文密码保存为加密方式
$ sudo yum install gnome-keyring gnome-keyring-devel
$ svn checkout http://pidgin-gnome-keyring.googlecode.com/svn/ pidgin-gnome-keyring-read-only
$ cd pidgin-gnome-keyring-read-only
$ make
$ mkdir ~/.purple/plugins
$ mv gnome-keyring.so ~/.purple/plugins/

打开Pidgin
Applications -> Internet -> Pidgin Internet Messenger
在Pidgin的窗口上进行如下设置:
Tools -> Plugins -> 勾选 Gnome Keyring 即可

接下来就是在Pidgin中添加QQ了
在Pidgin的窗口上进行如下设置:
Buddies -> Show -> 勾选Offline Buddies和Protocol Icons
Accounts -> Manage Accounts -> Add -> Protocol 选择WebQQ并输入账号密码

最终的效果如下:
Skype_QQ_CentOS

, , ,

1 Comment

使用BBCP来提升跨互联网的数据传输速度

背景介绍:
目前项目在美国东西部以及欧洲都有服务器节点,跨互联网的数据传输速度很不稳定,之前我们主要是通过SCP以及Rsync等方式进行数据传输的。
无意间发现了BBCP这个软件之后,经过测试,效果非常好,速度提升效果很明显,并且传输速度一直比较稳定,同时支持日志以及失败后重试等参数,非常不错。

参考资料:
http://www.slac.stanford.edu/~abh/bbcp/
http://pcbunn.cithep.caltech.edu/bbcp/using_bbcp.htm
https://www.olcf.ornl.gov/kb_articles/transferring-data-with-bbcp/

安装配置:
[heydevops@east-server1 ~]$ sudo wget http://www.slac.stanford.edu/~abh/bbcp/bin/amd64_rhel60/bbcp -O /usr/bin/bbcp
[heydevops@east-server1 ~]$ sudo chmod +x /usr/bin/bbcp

[heydevops@west-server1 ~]$ sudo wget http://www.slac.stanford.edu/~abh/bbcp/bin/amd64_rhel60/bbcp -O /usr/bin/bbcp
[heydevops@west-server1 ~]$ sudo chmod +x /usr/bin/bbcp

[heydevops@east-server1 ~]$ which bbcp
/usr/bin/bbcp
[heydevops@east-server1 ~]$ ssh west-server1 which bbcp
/usr/bin/bbcp

[heydevops@east-server1 ~]$ cd heydevops
[heydevops@east-server1 heydevops]$ sudo dd if=/dev/zero of=/home/heydevops/heydevops/file.2g bs=1024M count=2

 
2+0 records in
2+0 records out
2147483648 bytes (2.1 GB) copied, 45.9129 s, 46.8 MB/s

[heydevops@east-server1 heydevops]$ ls -lh
total 2.0G
-rw-r--r-- 1 root root 2.0G Mar 4 06:40 file.2g

[heydevops@east-server1 heydevops]$ time bbcp -r -P 2 -V -w 8m -s 16 file.2g west-server1:/home/heydevops/heydevops/

 
bbcp: Window size reduced to 245760 bytes.
bbcp: Indexing files to be copied...
bbcp: Copying 0 files in 0 directories.
Source east-server1.heylinux.com using initial send window of 18700
Target west-server1.heylinux.com using initial recv window of 87380
bbcp: Creating /home/heydevops/heydevops/file.2g
bbcp: 140304 06:46:12  0% done; 8.5 MB/s, avg 8.5 MB/s
bbcp: 140304 06:46:14  1% done; 6.9 MB/s, avg 7.5 MB/s
...
bbcp: 140304 06:51:46  99% done; 7.7 MB/s, avg 6.1 MB/s
bbcp: 140304 06:51:48  99% done; 3.3 MB/s, avg 6.1 MB/s
Source cpu=3.643 (sys=3.552 usr=0.091).
File /home/heydevops/heydevops/file.2g created; 2147483648 bytes at 6.0 MB/s
48 buffers used with 0 reorders; peaking at 0.
Source east-server1.heylinux.com using a final send window of 433840
Target cpu=15.149 (sys=14.505 usr=0.644).
Target west-server1.heylinux.com using a final recv window of 2298624
1 file copied at effectively 6.0 MB/s

real    5m42.236s
user    0m0.104s
sys     0m3.567s

[heydevops@east-server1 heydevops]$ time scp file.2g west-server1:/home/heydevops/heydevops/

 
file.2g   100%   2048MB   2.1MB/s   16:06    

real    16m8.448s
user    0m43.497s
sys     0m7.548s

结论:
在上面的测试中,传输一个大小为2G的文件,使用BBCP耗时仅5分钟,而普通的SCP则耗时16分钟,速度提升超过60%。
更进一步的测试报告可以在这里看到:http://heylinux.com/en/?p=258

最近更新:
目前,我们在线上正式使用BBCP已经有一个月了,效果不错,下面,将我们用到的参数分享给大家:
[dong.guo@heydevops ~]$ dd if=/dev/zero of=/home/dong.guo/file.16m bs=1M count=16

 
16+0 records in
16+0 records out
16777216 bytes (17 MB) copied, 0.0457727 s, 367 MB/s

[dong.guo@heydevops ~]$ pwd

 
/home/dong.guo

[dong.guo@heydevops ~]$ ls -lh file.16m

 
-rw-r--r-- 1 dong.guo adm 16M May  5 12:08 file.16m

[dong.guo@heydevops ~]$ bbcp -k -a /tmp/bbcp_checkpoint -r -P 2 -V -f -w 9m -s 16 -T "ssh -x -a -p 2222 -oFallBackToRsh=no -i /home/dong.guo/.ssh/id_rsa -l heydevops heylinux.com /usr/bin/bbcp" file.16m heydevops@heylinux.com:/tmp/

 
Warning: the RSA host key for '[heylinux.com]:2222' differs from the key for the IP address '[54.238.131.140]:2222'
Offending key for IP in /home/dong.guo/.ssh/known_hosts:517
Matching host key in /home/dong.guo/.ssh/known_hosts:528
bbcp: Sink I/O buffers (147456K) > 25% of available free memory (40988K); copy may be slow
bbcp: Window size reduced to 245760 bytes.
bbcp: Indexing files to be copied...
bbcp: Copying 0 files in 0 directories.
Source heydevops using initial send window of 19800
Target ec2-tokyo.localdomain using initial recv window of 87380
bbcp: Appending to /tmp/file.16m at offset 0
bbcp: 140505 12:11:30  28% done; 4.0 MB/s, avg 4.0 MB/s
bbcp: 140505 12:11:32  30% done; 148.0 KB/s, avg 1.6 MB/s
Source cpu=0.239 (sys=0.233 usr=0.006).
File /tmp/file.16m created; 16777216 bytes at 3.3 MB/s
288 buffers used with 33 reorders; peaking at 21.
Target cpu=0.303 (sys=0.291 usr=0.012).
Target ec2-tokyo.localdomain using a final recv window of 502864
Source heydevops using a final send window of 71280
1 file copied at effectively 1.5 MB/s

参数详解:

 
-k 保留所有未传输完成的文件,并允许在重试时进行覆盖
-a 保留checkpoint信息用于校验文件的完整性
-r 递归传输指定路径下的所有文件
-P 2 每两秒显示传输的进程
-V 打印调试信息
-f 强制清除远程主机上传输失败的数据
-w 设置Disk (I/O) buffers
   算法为(window = netspeed/8*RTT = 1000Mb/8*74ms = 1000/1000/8*74 = 9.25 M)
   对应链接:http://www.slac.stanford.edu/~abh/bbcp/#_Toc332986061
-s 16 设置并发数为16
      参考官方建议:http://www.slac.stanford.edu/~abh/bbcp/#_Streams_(-s)
-T "ssh -x -a -p 2222 -oFallBackToRsh=no -i /home/dong.guo/.ssh/id_rsa -l heydevops heylinux.com /usr/bin/bbcp" 
   指定远端主机的认证方式:
   采用-p 2222指定端口;
   设置-oFallBackToRsh=no减少ssh响应时间;
   设置-i /home/dong.guo/.ssh/id_rsa指定SSH Key;
   设置-l heydevops指定登陆用户;
   heylinux.com为远程主机地址;
   /usr/bin/bbcp为远程主机的bbcp路径;

,

3 Comments