2008年10月18日星期六

包管理命令yum

如果您使用过debian系列操作系统,对apt-get命令一定不会陌生,同样地,Fedora系列为我们提供了与apt-get类似的包管理命令yum,它可以从一个软件库里调出用户指定的软件,然后进行安装,并且也具备卸载功能。

以下是对yum的简单说明:如果是第一次使用yum命令,请不用担心,现在将介绍yum的命令行

1、搜索应用程序

#yum search 程序名

可以搜索所有的启动仓库,告诉用户从哪里可以得到需要的软件包。



2、了解包安装信息

#yum info 程序名



3、安装应用程序

#yum install 程序名



4、列出rpm清单

#yum list extras



5、删除rpm包

#yum remove 程序名



6、系统升级

#yum update



7、 查看是否有升级

#yum check-update



8、列出最近升级的RPM包

#yum -qa--last |tac



9、本地安装

#yum localinstall RMP包



10、查看yum的帮助文件

#man yum

2008年10月14日星期二

Linux邮件sendmail+openwebmail配置方案

【IT168 服务器学院】纲要:

  1. 关于Linux邮件服务

  2.启动安装sendmail

  3.openwebmail的安装

  4.企业实战方案

  5。通过Web收发邮件效果演示

  一,关于Linux邮件服务

  sendmail作为一个优秀的MTA,一直是UNXI系统中缺省的邮件服务器。因为sendmail只是一个邮件代理传输软件,并不附带常见的WEB接收发送的功能,所以我们可以利用第三方软件实现,如下安装openwebmail,也可以,利用outlook等软件来收发邮件。

  二,启动安装sendmail

  # rpm –ivv sendmail* (在第一张光盘,和第三张光盘上。)

  #/etc/init.d/sendmail start 启动服务

  1. 添加邮件虚拟主机

  #cd /etc/mail

  # vi local-host-names ,在里面添加邮件虚拟主机

  linuxhero.com

  2.打开SMTP的外部连接

  #vi /etc/mail/sendmail.cf

  将O DaemonPortOptions=Port=smtp,Addr=127.0.0.1, Name=MTA,改为如下:

  O DaemonPortOptions=Port=smtp,Addr=192.168.0.230, Name=MTA

  这样是为了在192.168.0.230端口上监听请求

  3.打开SMTP发信认证

  #vi /etc/mail/sendmail.mc

  dnl TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl

  dnl define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl

  DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl

  将其改为如下:

  TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl

  define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl

  DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA')dnl

  重启sendmail

  service sendmail restart

  4.打开系统POP3功能

  #vi /etc/xinetd.d/ipop3

  将disable = yes, 将yes改为no

  #service xinetd restart 重新启动xinetd进程

  添加虚拟用户

  #useradd –s /sbin/nologin nestseek

  #passwd netseek

  #vi /etc/mail/virtusertable

  webmaster@linuxhero.com linuxhero_com

  cnseek@linuxhero.com netseek

  5.运行makemap命令为virtusertable重新建立数据库映谢。

  #cd /etc/mail

  #makemap hash virtusertable.db < virtusertable

  三.OpenWebmail的安装:

  安装支持软件

  # rpm -Uvh perl-CGI-2.81-88.i386.rpm

  # rpm -ivh perl-Text-Iconv-1.2-RH80.i386.rpm

  # rpm -ivh perl-suidperl-5.8.0-88.i386.rpm

  安装OpenWebmail:

  #rpm -ivh openwebmail-2.51-1.i386.rpm

  warning: openwebmail-2.51-1.i386.rpm: V3 DSA signature: NOKEY, key ID cfb164d8

  Preparing... ########################################### [100%]

  1:openwebmail ########################################### [100%]

  安装完后,会在/var/www/cgi-bin目录下创建一个openwebmail(该目录保存系统运行是需要的数程序),在/var/www/data目录下也创建了一个openWebmail的目录,该目录保存了一些页面。

  OpenWemail的设置

  # cd /var/www/cgi-bin/openwebmail/etc

  #vi defaults/dbm.conf

  将如下:

  dbm_ext .db

  dbmopen_ext none

  dbmopen_haslock no

  改成

  dbm_ext .db

  dbmopen_ext .db

  dbmopen_haslock yes

  保存退出。

  #cd .. 退到上一级目录

  #./openwebmail-tool.pl -–init

  出现如下信息:

  Base64.pm /usr/lib/perl5/5.8.0/i386-linux-thread-multi/MIME/Base64.pm

  Your MIME::Base64 module is too old (2.12),

  please update to 3.00 or later.

  ./openwebmail-tool.pl –init

  说我的Base64 module 版本太低,要下载更新3。0或以上的版本:

  我下载了一个新包:CGI.pm-3.05.tar.gz,进行安装.

  # tar -zxvf MIME-Base64-3.05.tar.gz

  # cd MIME-Base64-3.05

  #cat REDME 查看安装说明,按照里面的说明做

  [root@linuxhero CGI.pm-3.05]# perl Makefile.PL

  Checking if your kit is complete...

  Looks good

  Writing Makefile for CGI

  # make

  # make test 测试

  # make install

  安装完后,现在执行上面的操作:

  #cd /var/www/cgi-bin/openwebmail

  #./openwebmail-tool.pl –-init

  安装完成

  四,企业实战方案:

  要求:1,启用虚拟域名mail.linuxhero.com(DNS设置见“linux全能web服务器”)

  2.将linuxhero_com用户映射成为webmaster.

  3.通过web收发邮件测试

  配置Openwebmail的虚拟主机(mail.linuxhero.com)

  #vi /usr/local/httpd/conf/httpd.conf ,在里面添加如下:

  #mail.linuxhero.com

  

  ServerAdmin webmaster@linuxhero.com

  DocumentRoot /var/www/cgi-bin/openwebmail

  ServerName mail.linuxhero.com

  DirectoryIndex openwebmail.pl

  ErrorLog /home/linuxhero_com/logs/error_log

  CustomLog /home/linuxhero_com/logs/access_log common

  alias /data /var/www/data

  alias /cgi-bin /var/www/cgi-bin

  

  Options ExecCGI

  


  

  Options ExecCGI

  


  


  保存退出。

  五,通过web收发邮件效果演(略)

2008年10月13日星期一

关于Apache (httpd)服务器防DDOS模块mod_evasive的使用说明

摘要:在服务器管理中,经常遇到DDOS攻击WWW服务器。对于Apache(httpd)服务器来说,防御DDOS是通过mod_evasive来实现的。本文将介绍mod_evasive模块的安装、配置;


目录



1、 mod_evasive 介绍;
2、 mod_evasive 的安装和配置;

2.1 mod_evasive 的下载地址;
2.2 mod_evasive 的安装;
2.3 mod_evasive 的配置;
2.4 对mod_evasive测试验证 ;

3、mod_evasive 的高级配置;
4、关于本文;
5、参考文档;
6、相关文档;





+++++++++++++++++++++++++++++++++++++++++++
正文
+++++++++++++++++++++++++++++++++++++++++++



1、 mod_evasive 介绍;


mod_evasive 是Apache(httpd)服务器的防DDOS的一个模块。对于WEB服务器来说,是目前比较好的一个防护DDOS攻击的扩展模块。虽然并不能完全防御DDOS攻击,但在一定条件下,还是起到缓服Apache(httpd)服务器的压力。如果配合iptables、硬件防火墙等防火墙设备配合使用,可能有更好的效果。可惜LinuxSir.Org 并没有硬件防火墙,所以是否这种组合效果有更好的效果,我没办法验证。

mod_evasive 的官方地址: http://www.zdziarski.com/projects/mod_evasive


2、 mod_evasive 的安装和配置;



2.1 mod_evasive 的下载地址;


mod_evasive_1.10.1.tar.gz


2.2 mod_evasive 的安装;


安装 mod_evasive 之前,你要用安装Apache(httpd)服务器软件包,还要安装httpd-devel或 apache-dev。在Slackware 12.0中,安装httpd软件即可;

对于Apache 1.x 请用下面的编译方法;


#/usr/sbin/apxs -iac mod_evasive.c

对于Apache 2.x 可以用下面的办法;


#tar zxvf mod_evasive_1.10.1.tar.gz
#cd mod_evasive
#/usr/sbin/apxs -i -a -c mod_evasive20.c

注:apxs 用于编译模块工具;如果是用系统自带的软件包,一般位于/usr/sbin目录。如果您是自己编译安装Apache(httpd)的,你应该自己来指定路径;

我们然后修改/etc/ld.so.conf 文件,把编译出来的动态模块的所在位置指定在 ld.so.conf中;比如我用的是Aapche 2.x ,编译完成后,模块mod_evasive20.so 安装到了 /usr/lib/httpd/modules 目录中;那我们就要把 这个目录写入到ld.so.conf中。


#echo "/usr/lib/httpd/modules" >> /etc/ld.so.conf
#ldconfig

注: 具体要与你的系统环境为准,不要照搬照抄,如果你对Linux不太熟的话;


2.3 mod_evasive 的配置;


在编译安装完成后,会自动插入一行到Apache 配置文件中,对于Apache 2.x 版本中,应该在其配置文件中有类似下面的一行;


LoadModule evasive20_module lib/httpd/modules/mod_evasive20.so

对于Apache 1.x来说,也应该差不多,大体只是路径不同罢了;

然后我们再修改 Apache 的配置文件,配置文件名为httpd.conf;

在Apache v1.x 版本中,要加入;



DOSHashTableSize 3097
DOSPageCount 2
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 10


在Apache v2.x加入;



DOSHashTableSize 3097
DOSPageCount 2
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 10


如果您不知道把这些插入到哪,用下面的办法做也是可以的;

在/etc目录中创建一个文件,比如mod_evasive.conf;


#touch /etc/mod_evasive.conf

然后把根据自己的Apache版本来加入相应的内容;

接着我们再修改 httpd.conf ,在最后一行加入


Include /etc/mod_evasive.conf

修改完成后,我们要重启Apache服务器;

比如在Slackware 12.0中,Apache 2.x的重启,我们要用到


#/etc/rc.d/rc.httpd restart

在Redhat、Fededora、Debian、Ubuntu、CentOS中的Apache,可以用;


#/etc/init.d/httpd restart

#/etc/init.d/apache restart

大体上差不多是这样的……


2.4 对mod_evasive测试验证 ;


防DDOS的模块做好后,我们可以要验证,可以用Apache 自带的ab工具,系统默认安装在/usr/sbin目录中;比如;


#/usr/sbin/ab -n 1000 -c 50 http://www.google.com:80/

注:上面的例子的意思是,如果您的服务器是google的WEB服务器,我们要发送数据请求包,总共1000个,每次并发50个;

另外一个测试工具就是mod_evasive的解压包的目录中,有个test.pl ,你可以修改IP地址,然后用


#perl test.pl

是不是有效果,请根据 ab工具或 测试脚本出来的结果来查看;

因为我们编译mod_evasive时,用的是默认配置,所以日志被存放在/tmp目录中。如果有DDOS攻击,会在/tmp产生日志。日志的文件是以 dos-开头的;


3、mod_evasive 的高级配置;


如果想更改一些适合自己的参数,有些必要的参数,并不是通过配置文件修改就一下起作用的,我们要修改源码包中的 mod_evasive.c(Apache 1.x用之) 或 mod_evasive20.c (Apache 2.x用之);


#define DEFAULT_HASH_TBL_SIZE 3097ul // Default hash table size
#define DEFAULT_PAGE_COUNT 2 // Default maximum page hit count per interval
#define DEFAULT_SITE_COUNT 50 // Default maximum site hit count per interval
#define DEFAULT_PAGE_INTERVAL 1 // Default 1 Second page interval
#define DEFAULT_SITE_INTERVAL 1 // Default 1 Second site interval
#define DEFAULT_BLOCKING_PERIOD 10 // Default for Detected IPs; blocked for 10 seconds
#define DEFAULT_LOG_DIR "/tmp" // Default temp directory

比如我们改改其中的数字,根据英文很容易理解。比如修改日志存放目录,就把/tmp改成别的目录。如果您不知道放在哪好,还是用默认的吧;

如果您在这里更改了参数,不要忘记修改Apache 配置文件中关于mod_evasive 的参数;

如果您想加入一些其它的参数,请查阅源码包中的README,里面有详细说明,大多来说没太大的必要……

这个文件相当重要,如果您想更改某些设置,就要修改这个文件…… 


4、关于本文;


mod_evasive 还是有点用的,安装也不费力气。如果你需要的时候,会想到这个模块的 …… mod_evasive 是否有更高级的用法,也不是在这篇文章里能说的清楚的。如果不懂怎么办?请查看源码包中的README。

本文权当做软件说明 ……

北南 记之

From LinuxSir.Org


5、参考文档;


参考 mod_evasive 源码包中的README ……


6、相关文档;


《PHP加速器 eaccelerator 介绍》

2008年10月12日星期日

使用飞信为系统监控报警

一、飞信机器人软件
官网地址:http://www.it-adv.net/
需要Glibc2.4以上的版本;RHEL5默认安装的Glibc2.5,所不需要额外升级;


二、安装过程
下载包地址LINUX X86/32:支持库 最新程序fetion20080901004-linux.tar.gz
分别下载支持库和最新程序
1.安装支持库
[root@RHEL5 fetion]# tar -xvf lib_lin_32.tar.gz.tar
library_linux32/
library_linux32/libcrypto.so.0.9.8
library_linux32/libACE.so.5.4.7
library_linux32/libACE_SSL.so.5.4.7
library_linux32/libssl.so.0.9.8


[root@RHEL5 fetion]# cd library_linux32/
[root@RHEL5 library_linux32]# cp *so* /usr/lib


2.安装fetion
[root@RHEL5 fetion]# tar -xvf fetion20080901004-linux.tar.gz.tar
[root@RHEL5 fetion]# mv install/ /opt/fetion
3. 测试fetion是否可以正常使用
[root@RHEL5 opt]# cd /opt/fetion/
[root@RHEL5 fetion]# ldd fetion
linux-gate.so.1 => (0x00969000)
libACE.so.5.4.7 => /usr/lib/libACE.so.5.4.7 (0x00e35000)
libACE_SSL.so.5.4.7 => /usr/lib/libACE_SSL.so.5.4.7 (0x00110000)
libssl.so.0.9.8 => /usr/lib/libssl.so.0.9.8 (0x00393000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00791000)
libm.so.6 => /lib/libm.so.6 (0x00d55000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00940000)
libc.so.6 => /lib/libc.so.6 (0x00c0a000)
libdl.so.2 => /lib/libdl.so.2 (0x00d4f000)
libpthread.so.0 => /lib/libpthread.so.0 (0x00d7e000)
librt.so.1 => /lib/librt.so.1 (0x00d97000)
libcrypto.so.0.9.8 => /usr/lib/libcrypto.so.0.9.8 (0x00510000)
libz.so.1 => /usr/lib/libz.so.1 (0x00da2000)
/lib/ld-linux.so.2 (0x00bec000)
所有的库文件都可以正常找到


[root@RHEL5 fetion]# ./fetion -h 查看帮助


三、实际测试
1.登录飞信默认是中文utf8的,如果linux系统不支持utf8会出现乱码:我使用english的方式来登录啦。
测试帐号:13713718888
密码:123456 (如果密码中含有特殊字符,请使用单引号)
./fetion -u 13713718888 -p 123456 -EN
登录后输入?获得帮助
****************************************************************
指令 指令说明
list 好友列表: list
sms 发送短信: sms 飞信号/手机号/编号 短信内容(换行请用\n代替)
chat 在线消息: chat 飞信号/手机号/编号 短信内容(换行请用\n代替)
status 在线状态: status online/busy/away/hidden [个性化信息]
add 添加好友: add 飞信号/手机号 申请信息 本地呢称
del 删除好友: del 飞信号/手机号/编号
invite 邀请好友: invite 手机号 您的姓名(邀请好友开通飞信)
autoaccept 自动接受: autoaccept on/off/status 自动接受加为好友申请
myinfo 修改资料: myinfo nickname/impresa 内容(呢称/心情)
help 帮助菜单: help/?
exit 退出系统: quit/exit
****************************************************************


sms 137******** "this is test message" # 这个就是我们需要的发送短信的指令啦!




2.脚本测试:
可以使用fetion的-b参数来实现p处理;
举例如下:
# vi p.sh
sms 137xxxxxxxx “msyqlserver is down”


保存后执行:
./fetion -u 137xxxxxxxx -p 123456 -b p.sh
就是一次发出报警信息。






3.配合监控脚本
#!/bin/bash
disk=$(df /dev/sda1 |grep /dev|awk '{print $5}'|tr -d "%")
if [ "$disk" -gt "80" ]; then
/opt/fetion/fetion -u 138xxxxxxxx -p 123456 -EN -b /opt/mon.sh >>/opt/fetion.log 2>&1
else :
fi




4.脚本实例
监控网站是否可以正常访问,有问题时报警,恢复后提示 (注:如果复制粘贴,运行出错,注意查一下是否是某些字符复制时格式改变了)


#!/bin/sh


#############################Var################################


errpath=/tmp/alert-err
okpath=/tmp/alert-ok
fetionum=13811012345
fetionpass=12345
admin=13811012345


############################function############################
scan ()
{
rm -rf /tmp/tmp.wget
(time -p wget --delete-after http://127.0.0.1) >/tmp/tmp.wget 2>&1


#setting realtime of run
realtime=$(cat /tmp/tmp.wget |grep "real"|awk '{ print $2}'|awk -F . '{print $1}')
#echo "Wget time is $realtime "


okstate=$(cat /tmp/tmp.wget |grep "OK"|awk '{print $5}')
#echo $okstate


}


alerterr ()
{
/opt/fetion/fetion -u $fetionum -p $fetionpass -EN -b $errpath
}




alertok ()
{
/opt/fetion/fetion -u $fetionum -p $fetionpass -EN -b $okpath
}
##############################Main###############################


while [ 1 ]
do
sleep 90
scan


if [ "$okstate" != "OK" ] ; then
if [ -f /tmp/err ];then
echo "`date +%Y/%m/%d-%T`wget not ok but has been alert"
#continue
else
echo "sms $admin `date +%Y/%m/%d-%T` wget is not OK " >$errpath
echo "exit" >>$errpath
alerterr
echo "`date +%Y/%m/%d-%T` -----------------------------------> wget is not OK "
touch /tmp/err
fi


else
if [ -f /tmp/err ];then
echo "sms $admin "`date +%Y/%m/%d-%T` Recover!! wget time is $realtime"" >$okpath
echo "exit" >>$okpath
alertok
rm /tmp/err
echo "`date +%Y/%m/%d-%T` ------------------------------------> Recover !!! wget time is $realtime"
#continue
else
echo "`date +%Y/%m/%d-%T` wget time is $realtime running ok"
fi




fi
done

使用htb进行流控

linux流控配置比较麻烦,一般都使用htb进行流控。



HTB 意味着是一个更好理解更容易掌握的可以快速替换LINUX CBQ 队列规定的队列, CBQHTB都可以帮助你限制你的链路上的出口带宽;他们允许你把一条物理链路模拟成几条更慢的链路或者是把发出的不同类型的流量模拟成不同的连接,在他们的实际应用中你必须指定怎么分配物理链路给各种不同的带宽应用并且如何判断每种不同的应用的数据包是怎么样被发送的。





htb本身的配置并不难,也就是配置htb
filter
是最复杂的,难点在于与iptables的结合。

通过webhtb可以进行图形化的配置。











webhtb最好的配置方式在于client,比较直观,
interface->class->client
很好的层次关系。



2008年10月11日星期六

mysql 主从复制读写分离实现

mysql 主从复制读写分离实现
作者:田逸


mysql主从复制
(一)安装mysql(主从服务器皆相同) 先创建用户 useradd mysql -s /sbin/nologin


tar zxvf mysql-5.0.45.tar.gz
cd mysql-5.0.45
./configure --prefix=/usr/local/mysql --localstatedir=/opt/data --with-extra-charsets=utf8,gb2312,gbk --with-pthread --enable-thread-safe-client
注:配置过程指定数据文件的位置及另加的字符集.
make
make install
cp support-files/my-large.cnf /etc/my.cnf
cd /usr/local/mysql
chgrp -R mysql .
生成基本的数据库和表: /usr/local/mysql/bin/mysql_install_db --user=mysql
成功执行后察看数据目录/opt/data,看是否有文件或目录生成.
chown -R mysql:mysql /opt/data
记得给每个数据库设置root密码.
(二)修改配置文件
不同的地方就是server-id,主服务器配置文件不用修改,从服务器的配置文件server-id=10.其他的内容基本相同.
(三)启动服务
/usr/local/mysql/bin/mysqld_safe --user=mysql&
这个过程主辅服务器都相同.
(四)授权(在主服务器上进行)
GRANT REPLICATION SLAVE ON *.* to [email=]'rep1'@'192.168.8.100[/email] identified by 'mylqs';
(五)查询主数据库状态(主服务器上进行)
mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 | 235 | | |
+------------------+----------+--------------+------------------+
记下file及position的值,后面做从服务器操作的时候需要用.
(六)配置从服务器
mysql> change master to master_host='192.168.8.101', master_user='rep1', master_password='mysql', master_log_file='mysql-bin.000003', master_log_pos=235;
正确执行后再执行:
mysql> start slave;
就启用了复制功能.这里我们运行一下 mysql> show slave status\G 来检查一下,一个正常的输出结果应该如下面的形式:
mysql> show slave status\G
*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.8.101

Master_User: rep1

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysql-bin.000003

Read_Master_Log_Pos: 235

Relay_Log_File: -relay-bin.000009

Relay_Log_Pos: 235

Relay_Master_Log_File: mysql-bin.000003
Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Replicate_Do_DB:

Replicate_Ignore_DB:

Replicate_Do_Table:

Replicate_Ignore_Table:

Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:

Last_Errno: 0

Last_Error:

Skip_Counter: 0

Exec_Master_Log_Pos: 235

Relay_Log_Space: 235

Until_Condition: None

Until_Log_File:

Until_Log_Pos: 0


Master_SSL_Allowed: No

Master_SSL_CA_File:

Master_SSL_CA_Path:

Master_SSL_Cert:

Master_SSL_Cipher:

Master_SSL_Key:

Seconds_Behind_Master: 0
1 row in set (0.00 sec)

请注意:slave_IO进程及slave_SQL进程都必须正常运行,在状态输出重表现为: Slave_IO_Running: Yes 及Slave_SQL_Running: Yes 否则都是不正确的状态(如一个值Yes,另外一个是NO则不行).
(七)主数据库有数据的情况:
1、数据库锁表操作,不让数据再进行写入动作。mysql> FLUSH TABLES WITH READ LOCK;
2、察看主数据库的状态 mysql> show master status; 照第(五)步记录输出值。
3、把主服务器数据文件复制到从服务器,最好先用tar处理一下。
4、取消主数据库锁定 mysql> UNLOCK TABLES;
5、从服务器的操作。跟前面的步骤一样(略过)



mysql代理安装配置

一、安装mysql-proxy.需要按下列顺序安装其所依赖的包:
(一)安装LUA
tar zxvf lua-5.1.tar.gz
cd lua-5.1
用vi修改Makefile,使"INSTALL_TOP=/usr/local/lua",这样做的目的是为了是lua的所有文件都安装在目录/usr/local/lua/
make posix
make install

(二)安装 libevent
tar zxvf libevent-1.1a.tar.gz
cd libevent-1.1a
./configure --prefix=/usr/local/libevent
make
make install


(三)安装check
tar zxvf check-0.8.4.tar.gz
cd check-0.8.4
./configure
make
make install


(四)设置安装mysql-proxy所需的环境变量.把下面的内容追加到/etc/profile中
export LUA_CFLAGS="-I/usr/local/lua/include" LUA_LIBS="-L/usr/local/lua/lib -llua -ldl" LDFLAGS="-L/usr/local/libevent/lib -lm"
export CPPFLAGS="-I/usr/local/libevent/include"
export CFLAGS="-I/usr/local/libevent/include"
然后执行 source /etc/profile (安装完mysql-proxy不再需要这些变量,可以删除之)

(五)安装mysql(只安装mysql客户端即可)
tar zxvf mysql-5.0.45.tar.gz
cd mysql-5.0.45
./configure --prefix=/usr/local/mysql --without-server
make
make install

(六)安装mysql-proxy

tar zxvf mysql-proxy-0.5.0.tar.gz
cd mysql-proxy-0.5.0
./configure –prefix=/usr/local/mysql-proxy --with-mysql=/usr/local/mysql --with-lua
Make
Make install

二、主要的命令行选项
--help-all显示所有的帮助选项
--admin-address=host:port 管理主机及端口,默认是4041
--proxy-address=host:port 代理服务器的监听地址及端口,默认4040
--proxy-read-only-address=host:port 只读连接时,代理服务器的监听地址及端口。默认4042
--proxy-backend-addresses=host:port连接真实服务器的地址及监听端口,默认是3306,这是mysql代理最重要的选项,多个主机之间用空格隔开。使用rr算法。
--proxy-lua-script=file
指定lua脚本的名称

三、
使用方法
2个mysql服务器的情形
mysql-proxy \




--proxy-backend-addresses=mysql_ip1:3306 \



--proxy-backend-addresses=mysql_ip2:3306

3个服务器的情形:一个主服务器,负责写入;2个从服务器,负责查询。
mysql-proxy --proxy-backend-addresses= :3306\

--proxy-read-only-address=:3306 \

--proxy-read-only-address=:3306


四、mysql-proxy启动
编写脚本/usr/local/bin/mysql-proxy.sh其内容如下:
#!/bin/bash
LUA_PATH="/usr/local/mysql-proxy/share/mysql-proxy/?.lua" mysql-proxy --proxy-read-only-backend-addresses=192.168.1.38:3306 --proxy-
backend-addresses=192.168.1.33:3306 --proxy-lua-script=/usr/local/mysql-proxy/share/mysql-proxy/rw-splitting.lua >> /var/log/mysql-proxy.log &
chmod 755 /usr/local/bin/mysql-proxy.sh; 执行命令/usr/local/bin/mysql-proxy.sh启动服务


配置验证
1、主从复制测试:在主数据库服务器上创建库和表,然后再插入记录,再登陆到从服务器,看是否也建立相一致的库和表以及记录。
mysql> create database first_db;
Query OK, 1 row affected (0.01 sec)
在主数据库服务器创建库first_db

mysql> create table first_tb(id int(3),name char(10));
Query OK, 0 rows affected (0.00 sec)
在主数据库服务器创建表first_db

mysql> insert into first_tb values (001,'myself');
Query OK, 1 row affected (0.00 sec)
在主数据服务器的表first_db中插入记录


现在转到从数据库服务器,看是否同步了上面主数据库的数据
mysql> show databases;
+--------------------+
| Database
|
+--------------------+
| information_schema |
| first_db
|
| mysql
|
| test
|
+--------------------+
4 rows in set (0.01 sec)
数据库自动生成了

mysql> use first_db;
Database changed
mysql> show tables;
+--------------------+
| Tables_in_first_db |
+--------------------+
| first_tb |
+--------------------+
1 row in set (0.00 sec)
表也自动生成了

mysql> select * from first_tb;
+------+--------+
| id | name |
+------+--------+
| 1 | myself |
+------+--------+
1 row in set (0.00 sec)
记录也按照我们的意愿存在了


2、读写分离:用mysql客户端程序如mysql登陆到mysql代理,然后执行读写操作,以测试读写分离的正确性。

本文出自:http://sery.blog.51cto.com/10037/88526

2008年10月9日星期四

linux网络管理员指南读后对iptables的理解


iptables将通信数据分为3个处理点,分别是filter,nat,mangle

filter代表过滤操作.
nat代表转址
mangle代表拆分,其实也是转址的一种.

filter是过滤入站,出站包的检查站(可以叫检查站)
nat是转址之用,当你只有一个IP地址,而有数个电脑时.就需要用到NAT.
nat分为SNAT,DNAT.下面分别解释一下SNATDNAT
SNAT意思为源地址转换,如果只有一个合法地址,其它主机得用保留地址.保留地址是无法与外部通信的.保留地址为10.0.0.0/8  172.16-31.0.0/16  192.168.1.0/24  
保留地址的主机要与外部通信,必须要有一个合法的网络IP地址.为什么不行,原因很简单,因特网没有到这些地址的路由.
SNAT流程:
保留地址的主机---->执行源网络地址转换的主机---->将源地址改为合法地址,目的地址不变---->网关主机用合法地址去请求源码要请求的数据---->接着将数据返回给源地址.
实例:iptables
-t nat -A POSTROUTING -o eth0 -s 192.168.100.0/24 -p tcp  -j
SNAT --to 218.84.9.X

将源络192.168.100/24访问internet转址成218.84.9.X
-p
参数为协议,只有ip标头为tcp的才执行转址,如果是udp,icmp就不干活了.可以将tcp改为ALL

DNAT意思是目的地址转换,这是地址转换的另一种,只不过用处不同.与保留地址也脱不了干系.这种转址也是为保留地址开发的
既然保留地址无法与外界通信,哪么外界主机要想与保留地址的主机通信,哪也得执行转址.
源地址:internet
目的地址:本地  端口:80  内部主机要提供http服务.internet主机的请求并不能进入内部主机.这时可在网关主机上执行DNAT.
实例:
iptables -t nat -A PREROUTING -p tcp -d 218.84.9.X --dport 80 -j DNAT
--to-destination
192.168.1.20

将外部请求218.84.9.X应答的HTTP服务转交给内部主机192.168.1.20
. -p
[tcp|udp|icmp|ALL]

nat正是iptables的拿手好戏,只需要几个命令,就可以实现一台路由器的功能.简单吧.

检查站的五个检查兵(应该可以这么理解的,他们与filter.net.mangle有着某着从属关系)
INPUT
OUTPUT FORWARD PREROUTING POSROUTING

input 
 internet
连接本地,意为输入.本地进程监听远程的连接
output  本地连接internet,意为输出.是本地进程所产生的包。
forward
这个命令应用在机器存在二块以上网卡的情形中.意思是当数据进入一块网卡,又离开,或者进入了别一块网卡.
prerouting
进入系统的有效包.说明在本地主机已经找到目的地址了.一般应用在SNAT/DNAT转址上.
posrouting
数据包已经进入,但马上要离开.该命令应用在ip伪装及snat.



防火墙规则匹配条件
iptables内置了osi协议模形.所以支持tcp/ip标头匹配条件.每个数据包里都有目的地址,源地址,源端口,目的端口.使用的协议等,讲到这,相信你也明白为什么防火必须在网络层了吧.防火墙对应用层的程序是一无所知的,应用层的程序如果发生网络应用,则要经过网络层,iptables就是内置在网络层的拦路虎,对过往数据按照规则逐一进行检查.如果匹配,放过.不匹配,拒绝.或者按默认设定的政策进行处理.

-s
(
代表源地址
 -s
 www.g.cn |
-s 191.1.2.4   
支持域名IP,0/0表示所有地址
-d
(
代表目的地址)
-d
 www.g.cn |
-d 218.84.9.251
支持域名IP,0/0表示所有地址
--dport(代表目的端口)
--dport 80 | --dport 80-85(80.81
一直到85)
80:85
单选8085 
--sport(代表源端口)
--sport 80 | --dport 80-85(80.81
一直到85)
80:85
单选8085

-p
(protocol
协议)
-p
[TCP | UDP | ICMP | ALL] ALL
选项表示匹配所有协议

-j
(operating
操作,对数据判断之后的后续操作)
-j
[ACCEPT | DROP | LOG | MARK | REJECT | TTL | MASQUERADE | SNAT |
DNAT]

-j的操作选项还有很多,这里并没有一一列出.挑选几个重要的说
ACCEPT
允许,让数据包继续进入下一检查点.
DROP 
 
拒绝,数据包在此检查点消失
LOG 
  LOG
当然是日志了,log还有许多选项的,比喻info
REJECT
抵抗,抵抗与拒绝不同,抵抗还表示与敌方有通话.DROP则表示不理睬你了.REJECT会给对方一个拒绝的回应
TTL 
 
数据包的生期周期,随你的爱好设置,微软的是64,google245,freebsd.org53,kernel.org51  设置过高浪费占用带宽.最高不要超过255
MASQUERADE
也是地址转换的一种,只不过是应用在动态地址上.它与网络接口存在着某种关系
SNATDNAT已经讲过了

-o
output  eth0
内网接口
-i  input 
   eth1
去往internet的接口


来几条命令吧,让你对iptables有点感觉
iptables
-P INPUT DROP

iptables
-t filter -a INPUT -s 0/0 -p tcp --dport 22 -j DROP

iptables
-t filter -a OUTPUT -d 0/0 --dport 80 -p tcp -j ACCEPT

iptables
-t filter -a FORWARD -d
 www.microsoft.com -p
ALL -j
DROP

第一条命令是设置INPUT检查点的缺省规则为拒绝
第二条命令是过滤internet来本地的22端口,协议为tcp,操作为拒绝
第三条命令是:本地请求internet80数据为允许
第四条命令是:去往www.microsoft.com的数据包全部拒绝


语法及用法FAQ:
问我写好了规则,我想保存规则怎么办
:/etc/init.d/iptables
save     //[stop | start]


问我想清空所有规则
iptables
-F       //
清空所有规则
iptables
-t nat -F   //
清空nat表规则

开机启动iptables
/etc/rc.d/rc.local 
 
添加/etc/init.d/iptables
start
或者chkconfig 

寻求帮助
iptables
-p tcp --help     //
单项帮助
iptables
--help          
   //
整项帮助
iptables
-s --help         
//
举一反三

实现路由器功能
将此行echo
"1" >
/proc/sys/net/ipv4/ip_forward
加入开机启动项或者去/etc/sysctl.conf更改
因定IP加此行,原理上面有
iptables
-t nat -A POSTROUTING -o eth0 -s 192.168.100.0/24 -p tcp  -j
SNAT --to 218.84.9.X

动态ip加此行,原理上面有  iptables
-t nat -A POSTROUTING -o ppp0 -s 192.168.100.0/24 -j MASQUERADE
看到这行有个PPP0没有,留你个问题,你想去吧







继续编写中........ 
   
小弟并没有电脑,只有凭以前从书上看到的及偶尔能摸一次linux的机会去回忆这些命令,所以并不能保证命令的正确,这些命令并没有在实例中证实是否可行,如果哪位兄弟的机器不是生产用机。希望能提供个ssh环境,非常感谢
QQ:3645636
近期在研究squid
. Vs/dr