备份是系统管理中最艰巨、最容易被忽略的工作之一,同时也是最重要的工作之一。备份是防御硬件故障、非法入侵和系统安全的最大威胁——终端用户的最后一道防线。
Rsync 是一个小巧的算法的强大实现。它最基本的功能是高效地镜像一个文件系统的能力。使用 rsync,可以灵活地选用一组网络协议,诸如 nfs、smb 或 ssh,方便地让一个文件系统与另一个文件系统保持同步更新。Rsync 的第二个功能,也就是备份系统使用的功能,它可以把已经发生改变或是被删除的文件的老的版本归档。
1.1 软件简介
Rsync是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。Rsync本来是用以取代rcp的一个工具,它当前由rsync.samba.org维护。Rsync使用所谓的“Rsync演算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。运行Rsync server的机器也叫backup server,一个Rsync server可同时备份多个client的数据;也可以多个Rsync server备份一个client的数据。
Rsync可以搭配rsh或ssh甚至使用daemon模式。Rsync server会打开一个873的服务通道(port),等待对方Rsync连接。连接时,Rsync server会检查口令是否相符,若通过口令查核,则可以开始进行文件传输。第一次连通完成时,会把整份文件传输一次,下一次就只传送二个文件之间不同的部份。
Rsync支持大多数的类Unix系统,无论是Linux、Solaris还是BSD上都经过了良好的测试。此外,它在windows平台下也有相应的版本,比较知名的有cwRsync和Sync2NAS。
Rsync的基本特点如下:
1.可以镜像保存整个目录树和文件系统;
2.可以很容易做到保持原来文件的权限、时间、软硬链接等;
3.无须特殊权限即可安装;
4.优化的流程,文件传输效率高;
5.可以使用rcp、ssh等方式来传输文件,当然也可以通过直接的socket连接;
6.支持匿名传输。
Rsync 是一个小巧的算法的强大实现。它最基本的功能是高效地镜像一个文件系统的能力。使用 rsync,可以灵活地选用一组网络协议,诸如 nfs、smb 或 ssh,方便地让一个文件系统与另一个文件系统保持同步更新。Rsync 的第二个功能,也就是备份系统使用的功能,它可以把已经发生改变或是被删除的文件的老的版本归档。
1.1 软件简介
Rsync是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。Rsync本来是用以取代rcp的一个工具,它当前由rsync.samba.org维护。Rsync使用所谓的“Rsync演算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。运行Rsync server的机器也叫backup server,一个Rsync server可同时备份多个client的数据;也可以多个Rsync server备份一个client的数据。
Rsync可以搭配rsh或ssh甚至使用daemon模式。Rsync server会打开一个873的服务通道(port),等待对方Rsync连接。连接时,Rsync server会检查口令是否相符,若通过口令查核,则可以开始进行文件传输。第一次连通完成时,会把整份文件传输一次,下一次就只传送二个文件之间不同的部份。
Rsync支持大多数的类Unix系统,无论是Linux、Solaris还是BSD上都经过了良好的测试。此外,它在windows平台下也有相应的版本,比较知名的有cwRsync和Sync2NAS。
Rsync的基本特点如下:
1.可以镜像保存整个目录树和文件系统;
2.可以很容易做到保持原来文件的权限、时间、软硬链接等;
3.无须特殊权限即可安装;
4.优化的流程,文件传输效率高;
5.可以使用rcp、ssh等方式来传输文件,当然也可以通过直接的socket连接;
6.支持匿名传输。
Rinetd是为在一个Unix和Linux操作系统中为重定向传输控制协议(TCP)连接的一个工具。Rinetd是单一过程的服务器,它处理任何数量的连接到在配置文件etc/rinetd中指定的地址/端口对。尽管rinetd使用非闭锁I/O运行作为一个单一过程,它可能重定向很多连接而不对这台机器增加额外的负担。
使用iptables 很容易将TCP 和UDP 端口从防火墙转发到内部主机上。但是如果您需要将流量从专用地址转发到甚至不在您当前网络上的机器上,又该怎么办呢?可尝试另一个应用层端口转发程序,如rinetd。
这些代码有点古老,但很短小、高效,对于解决这种问题来说是非常完美的。
下载地址: http://www.boutell.com/rinetd/
解压后,make && make install 就可以了
程序路径 /usr/sbin/rinetd
需要配置文件 /etc/rinetd.conf
配置文件格式很简单:
[Source Address] [Source Port] [Destination Address] [Destination Port]
在每一单独的行中指定每个要转发的端口。源地址和目的地址都可以是
主机名或IP 地址,IP 地址0.0.0.0 将rinetd 绑定到任何可用的本地IP
地址上:
直接运行程序就可以了看到占用端口服务了。
上面是把访问本机的8080端口的服务都迁移到www.aslibra.com的机器上,把访问本地的数据库的转移到192.168.1.77上,把访问本地88端口的指向80端口服务。
可是阿权发现这个只是做了个代理的功能,比如最后一条得到的访问者IP:
REMOTE_ADDR 192.168.1.77
也就是没法获取到用户ip,这个比较可惜,但是对于IP访问的服务做迁移还是不错的,比如数据库服务,可以在保留很多程序的连接方式不变的情况下,直接切换数据库,也就是在主数据库出问题了,可以立刻用这种方法转换到备份数据库。
所以,服务器主备模式的情况还是可以备一个的,这样保证准时切换,可以做shell程序判断端口服务是否正常,如果实在不正常或者无法服务,就自动切换到备份的,多方便呀~
使用iptables 很容易将TCP 和UDP 端口从防火墙转发到内部主机上。但是如果您需要将流量从专用地址转发到甚至不在您当前网络上的机器上,又该怎么办呢?可尝试另一个应用层端口转发程序,如rinetd。
这些代码有点古老,但很短小、高效,对于解决这种问题来说是非常完美的。
下载地址: http://www.boutell.com/rinetd/
解压后,make && make install 就可以了
程序路径 /usr/sbin/rinetd
需要配置文件 /etc/rinetd.conf
配置文件格式很简单:
[Source Address] [Source Port] [Destination Address] [Destination Port]
在每一单独的行中指定每个要转发的端口。源地址和目的地址都可以是
主机名或IP 地址,IP 地址0.0.0.0 将rinetd 绑定到任何可用的本地IP
地址上:
0.0.0.0 8080 www.aslibra.com 80
0.0.0.0 3306 192.168.1.77 3306
0.0.0.0 88 127.0.0.1 80
0.0.0.0 3306 192.168.1.77 3306
0.0.0.0 88 127.0.0.1 80
直接运行程序就可以了看到占用端口服务了。
上面是把访问本机的8080端口的服务都迁移到www.aslibra.com的机器上,把访问本地的数据库的转移到192.168.1.77上,把访问本地88端口的指向80端口服务。
可是阿权发现这个只是做了个代理的功能,比如最后一条得到的访问者IP:
REMOTE_ADDR 192.168.1.77
也就是没法获取到用户ip,这个比较可惜,但是对于IP访问的服务做迁移还是不错的,比如数据库服务,可以在保留很多程序的连接方式不变的情况下,直接切换数据库,也就是在主数据库出问题了,可以立刻用这种方法转换到备份数据库。
所以,服务器主备模式的情况还是可以备一个的,这样保证准时切换,可以做shell程序判断端口服务是否正常,如果实在不正常或者无法服务,就自动切换到备份的,多方便呀~
引用
当你的服务器要重新编号或物理位置变化而改变IP地址时你就能切实感受到这个工具的好处了,因为服务看上去就像保留在原始IP 地址(即便它们实际上完全是来自其他网络)上。如果仅仅是绑定大于1024的端口,那么rinetd就不需要以root账户来运行。这种小工具很值得放在身边,以便随时调用TCP 端口间接寻址。
上次写的mysql的停止脚本还是有点复杂,如果来点硬性的方式,应该很方便,比如杀掉该端口服务的进程,也就停止了,平时阿权偶尔也这么做 ^_^
我们先看看这么做的过程,把处理方式整理一下,然后才能用程序处理:
1 netstat -nlp 查看占用端口号的服务
2 找到该端口号的进程
3 找到该进程id
4 kill它
程序可以一点一点来:
1 查看占用端口号的服务
(省掉了一些内容)
2 可以用grep筛选一下,看看规律,找到有 :3306 的一行就好
用管道符给grep处理:
既然取出一行了,那就容易了,再筛选一下,用awk分割取出其中一个
3 读取出端口号
意思是取第七个字段,这里默认应该是用tab字符分割的,已经读取出来了,但是还得拿到/前面的数字
4 取/前面的数字就可以了,这里还是可以用awk处理
意思是用/符号分割,取第一部分
5 然后把这个数字传给kill就可以
kill命令不能跟在管道符后面继续处理了,会出错的
需要用到"`"操作符,它可以执行一个语句,这个可以如此执行:
好了,任务完成了,之后贴一下awk的介绍,挺使用的
当然,有更加精简的写法,这里只是描述思路的实现
我们先看看这么做的过程,把处理方式整理一下,然后才能用程序处理:
1 netstat -nlp 查看占用端口号的服务
2 找到该端口号的进程
3 找到该进程id
4 kill它
程序可以一点一点来:
1 查看占用端口号的服务
[root@aslibra root]# netstat -nlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 23946/
tcp 0 0 0.0.0.0:3307 0.0.0.0:* LISTEN 12711/
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 3936/httpd
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 3910/
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 3753/sshd
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 3786/
Active UNIX domain sockets (only servers)
Proto RefCnt Flags Type State I-Node PID/Program name Path
unix 2 [ ACC ] STREAM LISTENING 827412 23946/ /tmp/mysql.sock
unix 2 [ ACC ] STREAM LISTENING 733272 12711/ ./mysql.sock
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 23946/
tcp 0 0 0.0.0.0:3307 0.0.0.0:* LISTEN 12711/
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 3936/httpd
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 3910/
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 3753/sshd
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 3786/
Active UNIX domain sockets (only servers)
Proto RefCnt Flags Type State I-Node PID/Program name Path
unix 2 [ ACC ] STREAM LISTENING 827412 23946/ /tmp/mysql.sock
unix 2 [ ACC ] STREAM LISTENING 733272 12711/ ./mysql.sock
(省掉了一些内容)
2 可以用grep筛选一下,看看规律,找到有 :3306 的一行就好
用管道符给grep处理:
[root@aslibra root]# netstat -nlp | grep :3306
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 23946/
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 23946/
既然取出一行了,那就容易了,再筛选一下,用awk分割取出其中一个
3 读取出端口号
[root@aslibra root]# netstat -nlp | grep :3306 | awk '{print $7}'
23946/
23946/
意思是取第七个字段,这里默认应该是用tab字符分割的,已经读取出来了,但是还得拿到/前面的数字
4 取/前面的数字就可以了,这里还是可以用awk处理
[root@aslibra root]# netstat -nlp | grep :3306 | awk '{print $7}' | awk -F"/" '{ print $1 }'
23946
23946
意思是用/符号分割,取第一部分
5 然后把这个数字传给kill就可以
kill命令不能跟在管道符后面继续处理了,会出错的
[root@aslibra root]# netstat -nlp | grep :3306 | awk '{print $7}' | awk -F"/" '{ print $1 }' | kill
kill: usage: kill [-s sigspec | -n signum | -sigspec] [pid | job]... or kill -l [sigspec]
kill: usage: kill [-s sigspec | -n signum | -sigspec] [pid | job]... or kill -l [sigspec]
需要用到"`"操作符,它可以执行一个语句,这个可以如此执行:
kill `netstat -nlp | grep :3306 | awk '{print $7}' | awk -F"/" '{ print $1 }'`
好了,任务完成了,之后贴一下awk的介绍,挺使用的
当然,有更加精简的写法,这里只是描述思路的实现
最近搬服务器,麻烦的就是服务器环境不一样,如题。
其实之前处理过,顺便写出笔记,以后可以重蹈覆辙 ^_^
一般打出phpinfo检查php支持的内容,而正常的gd栏目,应该有:
JPG Support enabled
如果没有列出来,那就是缺了jpg的类库,编译没有成功或者忽略了。
检查一下configure的选项说明:
需要指定libjpeg的目录,比如:
以上是从 config.nice 摘抄的,显然配置的时候添加了命令,支持编译的时候失败了,所以可以补上就可以。
安装包可以网上查找 jpegsrc.v6b.tar.gz
或者有这个方式:
wget http://freshmeat.net/redir/libjpeg/5665/url_tgz/jpegsrc.v6b.tar.gz
解压后在该目录:
./configure --enable-shared --enable-static --prefix=/usr/local &&make &&make install
这样算是完成了jpeg类库的安装吧,然后升级一下php就可以,运行 config.nice ~ 这样可以保持原先的配置,不用自己重新写配置的
编译前,清理一下环境也是必要的:
make clean
make distclean
这样重启apache就可以看到gd栏目有支持了。
其实之前处理过,顺便写出笔记,以后可以重蹈覆辙 ^_^
一般打出phpinfo检查php支持的内容,而正常的gd栏目,应该有:
JPG Support enabled
如果没有列出来,那就是缺了jpg的类库,编译没有成功或者忽略了。
检查一下configure的选项说明:
引用
--with-gd[=DIR] Include GD support where DIR is GD install prefix.
If DIR is not set, the bundled GD library will be used
--with-jpeg-dir[=DIR] GD: Set the path to libjpeg install prefix
--with-png-dir[=DIR] GD: Set the path to libpng install prefix
If DIR is not set, the bundled GD library will be used
--with-jpeg-dir[=DIR] GD: Set the path to libjpeg install prefix
--with-png-dir[=DIR] GD: Set the path to libpng install prefix
需要指定libjpeg的目录,比如:
引用
'--with-gd' \
'--with-png-dir=/usr/local/' \
'--with-jpeg-dir=/usr/local/' \
'--with-freetype-dir=/usr/local/' \
'--with-png-dir=/usr/local/' \
'--with-jpeg-dir=/usr/local/' \
'--with-freetype-dir=/usr/local/' \
以上是从 config.nice 摘抄的,显然配置的时候添加了命令,支持编译的时候失败了,所以可以补上就可以。
安装包可以网上查找 jpegsrc.v6b.tar.gz
或者有这个方式:
wget http://freshmeat.net/redir/libjpeg/5665/url_tgz/jpegsrc.v6b.tar.gz
解压后在该目录:
./configure --enable-shared --enable-static --prefix=/usr/local &&make &&make install
这样算是完成了jpeg类库的安装吧,然后升级一下php就可以,运行 config.nice ~ 这样可以保持原先的配置,不用自己重新写配置的
编译前,清理一下环境也是必要的:
make clean
make distclean
这样重启apache就可以看到gd栏目有支持了。
我的牛角尖题目是:
假设要转移www.aslibra.com的网页服务,如何从 192.168.1.2 转移到 192.168.1.3 上,保持日志记录正常?
我觉得有几个方法:
1 切换域名即可,有一定的时间是两个机器同时服务的,要求不高的可以如此
2 proxy代理,服务正常,但192.1.1.3接受到的请求是 192.168.1.2,没法收到用户IP
3 Redirect方式,服务也正常,但可以用ip方式访问,对于多域名的虚拟主机不太行
4 LVS形式,没尝试过,但估计可以直接应用,而且把服务都直接转移到 192.168.1.2,同时切换域名,这样肯定就完全转移了,有严格的时间要求的切换都可以正常。
5 linux端口映射,可以把本端口收到的数据包全部转移
简单说明一下几个形式:
1 proxy形式1,按ip转移
ProxyPass / http://192.168.1.3/
ProxyPassReverse / http://192.168.1.3/
2 proxy形式1,按域名转移
指定hosts文件 www2.aslibra.com 192.168.1.3
ProxyPass / http://www2.aslibra.com/
ProxyPassReverse / http://www2.aslibra.com/
3 Redirect模式
Redirect permanent / http://192.168.1.3/
或者用正则把所有访问规律的转移
4 LVS和端口映射没懂
假设要转移www.aslibra.com的网页服务,如何从 192.168.1.2 转移到 192.168.1.3 上,保持日志记录正常?
我觉得有几个方法:
1 切换域名即可,有一定的时间是两个机器同时服务的,要求不高的可以如此
2 proxy代理,服务正常,但192.1.1.3接受到的请求是 192.168.1.2,没法收到用户IP
3 Redirect方式,服务也正常,但可以用ip方式访问,对于多域名的虚拟主机不太行
4 LVS形式,没尝试过,但估计可以直接应用,而且把服务都直接转移到 192.168.1.2,同时切换域名,这样肯定就完全转移了,有严格的时间要求的切换都可以正常。
5 linux端口映射,可以把本端口收到的数据包全部转移
简单说明一下几个形式:
1 proxy形式1,按ip转移
ProxyPass / http://192.168.1.3/
ProxyPassReverse / http://192.168.1.3/
2 proxy形式1,按域名转移
指定hosts文件 www2.aslibra.com 192.168.1.3
ProxyPass / http://www2.aslibra.com/
ProxyPassReverse / http://www2.aslibra.com/
3 Redirect模式
Redirect permanent / http://192.168.1.3/
或者用正则把所有访问规律的转移
4 LVS和端口映射没懂
新安装完centOS,发现配置完apache后没法访问,估计是防火墙问题。
/etc/init.d/iptables status
会得到一系列信息,说明防火墙开着。
/etc/init.d/iptables stop
永久关闭:
chkconfig --level 35 iptables off
另外,bz2的格式的解压也记录一下
bunzip2 filename.bz2
这样得到一个 filename的文件,原先文件消失了
示例:
下载后文件变tar文件后缀了
/etc/init.d/iptables status
会得到一系列信息,说明防火墙开着。
/etc/init.d/iptables stop
永久关闭:
chkconfig --level 35 iptables off
另外,bz2的格式的解压也记录一下
bunzip2 filename.bz2
这样得到一个 filename的文件,原先文件消失了
示例:
下载后文件变tar文件后缀了
mv termcap-2.0.8.tar.tar termcap-2.0.8.tar.bz2
bunzip2 termcap-2.0.8.tar.bz2
tar xvf termcap-2.0.8.tar
bunzip2 termcap-2.0.8.tar.bz2
tar xvf termcap-2.0.8.tar
引用
Webbench是有名的网站压力测试工具,它是由Lionbridge公司(http://www.lionbridge.com)开发。它的帮助文件和文档请到:www.webbench.com上查看。
Webbech 能测试处在相同硬件上,不同服务的性能以及不同硬件上同一个服务的运行状况。webBech的标准测试可以向我们展示服务器的两项内容:每秒钟相应请求数和每秒钟传输数据量。webbench不但能具有便准静态页面的测试能力,还能对动态页面(ASP,PHP,JAVA,CGI)进行测试的能力。还有就是他支持对含有SSL的安全网站例如电子商务网站进行静态或动态的性能测试。
Webbech 能测试处在相同硬件上,不同服务的性能以及不同硬件上同一个服务的运行状况。webBech的标准测试可以向我们展示服务器的两项内容:每秒钟相应请求数和每秒钟传输数据量。webbench不但能具有便准静态页面的测试能力,还能对动态页面(ASP,PHP,JAVA,CGI)进行测试的能力。还有就是他支持对含有SSL的安全网站例如电子商务网站进行静态或动态的性能测试。
上面是引用的介绍,webbench很简单,下载tar.gz文件后,解压后,make就可以出来了。
测试很简单,就是模拟多少个人同时访问,每个人持续多久,看看可以产生多少个有效连接,以便说明网站的效率。
我最近做了个apache和lighttpd的比较,只是简单的对比,没有做好最优化的配置,所以不算很科学,但也是发现一些问题:
./webbench -c 1000 -t 20 http://hi.baidu.com/hqlulu/
c=1000 20s
apache 58147
lighttp 61487
c=2000 10s
apache 26333
lighttp 30482
c=5000 1s
apache 2844
lighttp 2367
相对而言,apache在处理小文件会有点优势,或者是持续连接比较小的情况会比较好,可能文件比较大的情况就不太好了,lighttpd显得会有优势。相对而言,有人说apache处理php会稳定很多,那其实lighttpd处理静态文件应该是有优势的了。
有人做过对比,我贴一下图片:

坐标分两个:x轴是并发等级,y轴是每秒产生的连接数
估计可以这么理解:并发数不太多的情况下,每个webserver的表现差别不大,但并发数增大,则IIS、lighttpd等的表现则很好,那其实就看自己的网站现在是什么情况了。






