Nginx安装配置

Nginx作为一个后起之秀,他的迷人之处已经让很多人都投入了他的怀抱。配置简单,实现原理简单。做一个负载平衡的再好不过了。

其原理:

简单介绍一下他的安装及配置过程

官方网站
http://wiki.codemongers.com/Main

一、依赖的程序

1. gzip module requires zlib library
2. rewrite module requires pcre library
3. ssl support requires openssl library

二、安装
./configure
make
make install

默认安装的路径是/usr/local/nginx

更多的安装配置
./configure –prefix=/usr/local/nginx
–with-openssl=/usr/include (启用ssl)
–with-pcre=/usr/include/pcre/ (启用正规表达式)
–with-http_stub_status_module (安装可以查看nginx状态的程序)
–with-http_memcached_module (启用memcache缓存)
–with-http_rewrite_module (启用支持url重写)

三、启动及重启

启动:nginx
重启:kill -HUP `cat /usr/local/nginx/logs/nginx.pid`
测试配置文件:nginx -t

简单吧,安装,启动都比较方便。

四、配置文件
http://wiki.codemongers.com/NginxFullExample

#运行用户
user  nobody nobody;
#启动进程
worker_processes  5;
#全局错误日志及PID文件
error_log  logs/error.log notice;
pid        logs/nginx.pid;
#工作模式及连接数上限
events {
  #工作模式有:select(标准模式),poll(标准模式),kqueue(高效模式,适用FreeBSD 4.1+, OpenBSD 2.9+, NetBSD 2.0 and MacOS X),
  #epoll(高效模式,本例用的。适用Linux 2.6+,SuSE 8.2,),/dev/poll(高效模式,适用Solaris 7 11/99+, HP/UX 11.22+ (eventport), IRIX 6.5.15+ 和 Tru64 UNIX 5.1A+)
  use epoll;
  worker_connections      1024;
}
#设定http服务器,利用它的反向代理功能提供负载均衡支持
http {
  #设定mime类型
  include      conf/mime.types;
  default_type  application/octet-stream;
  #设定日志格式
  log_format main        '$remote_addr - $remote_user [$time_local] '
                         '"$request" $status $bytes_sent '
                         '"$http_referer" "$http_user_agent" '
                         '"$gzip_ratio"';
  log_format download    '$remote_addr - $remote_user [$time_local] '
                         '"$request" $status $bytes_sent '
                         '"$http_referer" "$http_user_agent" '
                         '"$http_range" "$sent_http_content_range"';
  #设定请求缓冲
  client_header_buffer_size    10k;
  large_client_header_buffers  4 4k;
  
  #开启gzip模块,要求安装gzip 在运行./config时要指定
  gzip on;
  gzip_min_length  1100;
  gzip_buffers    4 8k;
  gzip_types      text/plain;
  output_buffers  1 32k;
  postpone_output  1460;
  
  #设定访问日志
  access_log  logs/access.log  main;
  client_header_timeout  3m;
  client_body_timeout    3m;
  send_timeout          3m;
  sendfile                on;
  tcp_nopush              on;
  tcp_nodelay            on;
  keepalive_timeout  65;
  
  #设定负载均衡的服务器列表
  upstream backserver {
  #weigth参数表示权值,权值越高被分配到的几率越大
  #本例是指在同一台服务器,多台服务器改变ip即可
  server 127.0.0.1:8081 weight=5;
  server 127.0.0.1:8082;
  server 127.0.0.1:8083;
  }
  #设定虚拟主机,默认为监听80端口,改成其他端口会出现问题
  server {
    listen         80;
    server_name    test.com www.test.com;
    charset utf8;
    #设定本虚拟主机的访问日志
    access_log  logs/test.com.log  main;
    #如果访问 /images/*, /js/*, /css/* 资源,则直接取本地文件,不用转发。但如果文件较多效果不是太好。
    location ~ ^/(images|js|css)/  {
        root    /usr/local/testweb;
        expires 30m;
    }
    
    #对 "/" 启用负载均衡
    location / {
       proxy_pass      http://backserver;
       proxy_redirect          off;
       proxy_set_header        Host $host;
       proxy_set_header        X-Real-IP $remote_addr;
       proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
       client_max_body_size    10m;
       client_body_buffer_size 128k;
       proxy_connect_timeout  90;
       proxy_send_timeout      90;
       proxy_read_timeout      90;
       proxy_buffer_size      4k;
       proxy_buffers          4 32k;
       proxy_busy_buffers_size 64k;
       proxy_temp_file_write_size 64k;
    }
    #设定查看Nginx状态的地址,在运行./config 要指定,默认是不安装的。
    location /NginxStatus {
       stub_status            on;
       access_log              on;
       auth_basic              "NginxStatus";
       #是否要通过用户名和密码访问,测试时可以不加上。conf/htpasswd 文件的内容用 apache 提供的 htpasswd 工具来产生即可       
       #auth_basic_user_file  conf/htpasswd;
    }
}

				

Redis 安装配置

一、 下载redis最新版本2.2.14

cd /usr/local/src

wget –c http://redis.googlecode.com/files/redis-2.2.14.tar.gz

二、 编译安装redis

tar zxvf redis-2.2.14.tar.gz

cd redis-2.2.14

make

make命令执行完成后,会在src目录下生成5个可执行文件,分别是redis-server、redis-cli、redis-benchmark、redis-check-aof、redis-check-dump,它们的作用如下:
redis-server:Redis服务器的daemon启动程序
redis-cli:Redis命令行操作工具。当然,你也可以用telnet根据其纯文本协议来操作
redis-benchmark:Redis性能测试工具,测试Redis在你的系统及你的配置下的读写性能
redis-check-aof:更新日志检查

redis-check-dump:用于本地数据库检查

安装:

make prefix=/usr/local install

 

三、 配置 Redis

 

mkdir /etc/redis

cp redis.conf /etc/redis/redis.conf

mkdir  /var/lib/redis

 

1. redis.conf 配置参数:

#是否作为守护进程运行

daemonize yes

#如以后台进程运行,则需指定一个pid,默认为/var/run/redis.pid

pidfile redis.pid

#绑定主机IP,默认值为127.0.0.1

#bind 127.0.0.1

#Redis默认监听端口

port 3721

#客户端闲置多少秒后,断开连接,默认为300(秒)

timeout 300

#日志记录等级,有4个可选值,debug,verbose(默认值),notice,warning

loglevel verbose

#指定日志输出的文件名,默认值为stdout,也可设为/dev/null屏蔽日志

logfile stdout

#可用数据库数,默认值为16,默认数据库为0

databases 16

#保存数据到disk的策略

#当有一条Keys数据被改变是,900秒刷新到disk一次

save 900 1

#当有10条Keys数据被改变时,300秒刷新到disk一次

save 300 10

#当有1w条keys数据被改变时,60秒刷新到disk一次

save 60 10000

#当dump .rdb数据库的时候是否压缩数据对象

rdbcompression yes

#本地数据库文件名,默认值为dump.rdb

dbfilename dump.rdb

#本地数据库存放路径,默认值为 ./

dir /var/lib/redis/

########### Replication #####################

#Redis的复制配置

# slaveof <masterip> <masterport> 当本机为从服务时,设置主服务的IP及端口

# masterauth <master-password> 当本机为从服务时,设置主服务的连接密码

#连接密码

# requirepass foobared

#最大客户端连接数,默认不限制

# maxclients 128

#最大内存使用设置,达到最大内存设置后,Redis会先尝试清除已到期或即将到期的Key,当此方法处理后,任到达最大内存设置,将无法再进行写入操作。

# maxmemory <bytes>

#是否在每次更新操作后进行日志记录,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认值为no

appendonly no

#更新日志文件名,默认值为appendonly.aof

#appendfilename

#更新日志条件,共有3个可选值。no表示等操作系统进行数据缓存同步到磁盘,always表示每次更新操作后手动调用fsync()将数据写到磁盘,everysec表示每秒同步一次(默认值)。

# appendfsync always

appendfsync everysec

# appendfsync no

################ VIRTUAL MEMORY ###########

#是否开启VM功能,默认值为no

vm-enabled no

# vm-enabled yes

#虚拟内存文件路径,默认值为/tmp/redis.swap,不可多个Redis实例共享

vm-swap-file /tmp/redis.swap

#将所有大于vm-max-memory的数据存入虚拟内存,无论vm-max-memory设置多小,所有索引数据都是内存存储的 (Redis的索引数据就是keys),也就是说,当vm-max-memory设置为0的时候,其实是所有value都存在于磁盘。默认值为0。

vm-max-memory 0

vm-page-size 32

vm-pages 134217728

vm-max-threads 4

############# ADVANCED CONFIG ###############

glueoutputbuf yes

hash-max-zipmap-entries 64

hash-max-zipmap-value 512

#是否重置Hash表

activerehashing yes

注意:Redis官方文档对VM的使用提出了一些建议:

  • 当你的key很小而value很大时,使用VM的效果会比较好.因为这样节约的内存比较大.

  • 当你的key不小时,可以考虑使用一些非常方法将很大的key变成很大的value,比如你可以考虑将key,value组合成一个新的value.

  • 最好使用linux ext3 等对稀疏文件支持比较好的文件系统保存你的swap文件.

  • vm-max-threads这个参数,可以设置访问swap文件的线程数,设置最好不要超过机器的核数.如果设置为0,那么所有对swap文件的操作都是串行的.可能会造成比较长时间的延迟,但是对数据完整性有很好的保证.

 

2. 调整系统内核参数

如果内存情况比较紧张的话,需要设定内核参数:

echo 1 > /proc/sys/vm/overcommit_memory

这里说一下这个配置的含义:/proc/sys/vm/overcommit_memory
该文件指定了内核针对内存分配的策略,其值可以是0、1、2。
0,表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
1,表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
2,表示内核允许分配超过所有物理内存和交换空间总和的内存
Redis在dump数据的时候,会fork出一个子进程,理论上child进程所占用的内存和parent是一样的,比如parent占用的内存为 8G,这个时候也要同样分配8G的内存给child, 如果内存无法负担,往往会造成redis服务器的down机或者IO负载过高,效率下降。所以这里比较优化的内存分配策略应该设置为 1(表示内核允许分配所有的物理内存,而不管当前的内存状态如何)

四. 运行 Redis

 

1. 运行服务

redis-server /etc/redis/redis.conf

即可在后台启动redis服务,确认运行了之后,可以用redis-benchmark命令测试看看,还可以通过redis-cli命令实际操作一下,比如:

redis-cli set foo bar

OK

redis-cli get foo

bar

2. 关闭服务

redis-cli shutdown

如果端口变化可以指定端口:

redis-cli -p 6380 shutdown

3. 保存/备份

数据备份可以通过定期备份该文件实现。
因为redis是异步写入磁盘的,如果要让内存中的数据马上写入硬盘可以执行如下命令:
redis-cli save 或者 redis-cli -p 6380 save(指定端口)
注意,以上部署操作需要具备一定的权限,比如复制和设定内核参数等。
执行redis-benchmark命令时也会将内存数据写入硬盘。

4. 同步机制

redis实现的同步机制相对简单,缺少同步机制常见的check point和校验机制。
在运行时,如果master -> slave同步请求转发被丢弃, slave将无法恢复该请求的相关信息,直到slave重启时从master全量加载数据时才能修复。因此,建议使用redis尽量利用其 key/value和value支持多种类型的特性,存储一些相对不重要的数据。

五. 自启动

在/etc/rc.local文件中添加,使其开机自启动

echo “/usr/local/redis/src/redis-server /etc/redis/redis.conf” >> /etc/rc.local

或者:

从此处下载脚本  下载

声明:此脚本来自网络,经过简单修改,已测,可用。

用这个脚本管理之前,需要先配置下面的内核参数,否则Redis脚本在重启或停止redis时,将会报错,并且不能自动在停止服务前同步数据到磁盘上:

vi /etc/sysctl.conf

vm.overcommit_memory = 1

然后应用生效:
sysctl -p

然后增加服务并开机自启动:

chmod 755 /etc/init.d/redis
chkconfig –add redis
chkconfig –level 345 redis on
chkconfig –list redis

高并发、大流量网卡调优

1、Broadcom的网卡建议关闭GRO功能

ethtool-K eth0 gro off
ethtool-K eth1 gro off
ethtool-K eth2 gro off
ethtool-K eth3 gro off

2、关闭irqbalance服务并手动分配网卡中断

service irqbalance stop
chkconfig irqbalance off

# 查看网卡中断号

grepethx /proc/interrupts

# 分配到每颗颗CPU核上

cat/proc/irq/{84,85,86,87,88,89,90,91,92,93}/smp_affinity(下面echo的值从此获取)
echo1 > /proc/irq/84/smp_affinity
echo2 > /proc/irq/85/smp_affinity
echo4 > /proc/irq/86/smp_affinity
echo8 > /proc/irq/87/smp_affinity
echo10 > /proc/irq/88/smp_affinity
echo20 > /proc/irq/89/smp_affinity
echo40 > /proc/irq/90/smp_affinity
echo80 > /proc/irq/91/smp_affinity
echo100 > /proc/irq/92/smp_affinity
echo200 > /proc/irq/93/smp_affinity

3、开启网卡的RPS功能 (Linux内核2.6.38或以上版本支持)

# Enable RPS (Receive Packet Steering)
rfc=4096
cc=$(grep-c processor /proc/cpuinfo)
rsfe=$(echo$cc*$rfc | bc)
sysctl -w net.core.rps_sock_flow_entries=$rsfe
forfileRps in$(ls/sys/class/net/eth*/queues/rx-*/rps_cpus)
do
echofff > $fileRps
done
forfileRfc in$(ls/sys/class/net/eth*/queues/rx-*/rps_flow_cnt)
do
echo$rfc > $fileRfc
done
tail/sys/class/net/eth*/queues/rx-*/{rps_cpus,rps_flow_cnt}

献上一个完整的脚本:

vi/opt/sbin/change_irq.sh
#!/bin/bash
ethtool-K eth0 gro off
ethtool-K eth1 gro off
ethtool-K eth2 gro off
ethtool-K eth3 gro off
service irqbalance stop
chkconfig irqbalance off
cat/proc/irq/{84,85,86,87,88,89,90,91,92,93}/smp_affinity
echo1 > /proc/irq/84/smp_affinity
echo2 > /proc/irq/85/smp_affinity
echo4 > /proc/irq/86/smp_affinity
echo8 > /proc/irq/87/smp_affinity
echo10 > /proc/irq/88/smp_affinity
echo20 > /proc/irq/89/smp_affinity
echo40 > /proc/irq/90/smp_affinity
echo80 > /proc/irq/91/smp_affinity
echo100 > /proc/irq/92/smp_affinity
echo200 > /proc/irq/93/smp_affinity
# Enable RPS (Receive Packet Steering)
rfc=4096
cc=$(grep-c processor /proc/cpuinfo)
rsfe=$(echo$cc*$rfc | bc)
sysctl -w net.core.rps_sock_flow_entries=$rsfe
forfileRps in$(ls/sys/class/net/eth*/queues/rx-*/rps_cpus)
do
echofff > $fileRps
done
forfileRfc in$(ls/sys/class/net/eth*/queues/rx-*/rps_flow_cnt)
do
echo$rfc > $fileRfc
done
tail/sys/class/net/eth*/queues/rx-*/{rps_cpus,rps_flow_cnt}
chmod+x /opt/sbin/change_irq.sh
echo"/opt/sbin/change_irq.sh">> /etc/rc.local

PS:记得修改网卡中断号,别直接拿来用哦

linux mtr 命令详解

一般在windows 来判断网络连通性用ping 和tracert,ping的话可以来判断丢包率,tracert可以用来跟踪路由,在Linux中有一个更好的网络连通性判断工具,它可以结合ping nslookup tracert 来判断网络的相关特性,这个命令就是mtr
1
[root@10.10.90.97 ~]
# mtr -h
2
usage: mtr [-hvrctglspni46] [--help] [--version] [--report]
3
  
[--report-cycles=COUNT] [--curses] [--gtk]
4
  
[--raw] [--
split
] [--no-dns] [--address interface]
5
  
[--psize=bytes/-s bytes]
6
  
[--interval=SECONDS] HOSTNAME [PACKETSIZE]

mtr -h 提供帮助命令
mtr -v 显示mtr的版本信息
mtr -r 已报告模式显示

01
[root@10.10.90.97 ~]
# mtr -r 202.108.33.94
02
FOCUS9097                         Snt: 10    Loss%  Last   Avg  Best  Wrst StDev
03
220.181.61.252                                0.0%   6.8   3.3   1.8   7.4   2.2
04
220.181.17.217                                0.0%   0.4   0.5   0.4   0.7   0.1
05
220.181.16.17                                 0.0%   0.6   0.5   0.5   0.6   0.0
06
202.97.53.14                                 10.0%   0.7   0.7   0.7   0.8   0.0
07
219.158.35.1                                  0.0%   0.8   0.8   0.8   0.9   0.0
08
219.158.5.81                                  0.0%   1.2   1.3   1.2   1.6   0.1
09
123.126.0.138                                 0.0%   1.2   1.1   1.1   1.3   0.1
10
61.148.153.126                                0.0%   1.9  10.5   1.5  89.9  27.9
11
61.148.143.22                                 0.0%   1.5   1.6   1.5   1.7   0.0
12
210.74.178.198                                0.0%   1.6   1.6   1.5   1.9   0.1
13
202.108.33.94                                 0.0%   1.5   1.5   1.4   1.5   0.0

报告说明:
第一列:显示的是IP地址和本机域名,这点和tracert很像
第二列:snt:10 设置每秒发送数据包的数量,默认值是10 可以通过参数 -c来指定。

01
[root@10.10.90.97 ~]
# mtr -r -c 15 202.108.33.94
02
FOCUS9097                         Snt: 15    Loss%  Last   Avg  Best  Wrst StDev
03
220.181.61.252                                0.0%   1.9   3.4   1.8  12.9   3.1
04
220.181.17.217                                0.0%   0.5   0.5   0.4   0.8   0.1
05
220.181.16.17                                 0.0%   0.5   0.6   0.5   2.3   0.5
06
202.97.53.14                                  0.0%   0.7   0.7   0.7   0.7   0.0
07
219.158.35.1                                  0.0%   0.9   0.8   0.8   0.9   0.0
08
219.158.5.81                                  0.0%   1.3   2.8   1.2  22.8   5.5
09
123.126.0.138                                 0.0%   1.1   1.1   1.1   1.2   0.0
10
61.148.153.126                                0.0%  13.8   7.4   1.6  60.4  15.5
11
61.148.143.22                                 0.0%   1.7   1.6   1.5   1.8   0.1
12
210.74.178.198                                0.0%   1.6   1.6   1.4   1.7   0.1
13
202.108.33.94                                 0.0%   1.5   1.5   1.4   1.7   0.1

其中-c的说明是:–report-cycles COUNT
第三列 Loss: 是显示的每个对应IP的丢包率
第四列 Last: 显示的最近一次的返回时延
第五列 Avg : 是平均值 这个应该是发送ping包的平均时延
第六列 Best: 是最好或者说时延最短的
第七列 Wrst: 是最差或者说时延最常的
第八列 StDev: 是标准偏差
接下来接着说相关参数:
mtr -s 用来指定ping数据包的大小
mtr -n no-dns不对IP地址做域名解析
mtr -a 来设置发送数据包的IP地址 这个对一个主机由多个IP地址是有用的
mtr -i 使用这个参数来设置ICMP返回之间的要求默认是1秒
mtr -4 IPv4
mtr -6 IPv6

LVS在大流量下基于OSPF的负载均衡实施方案

 

 

随着开源技术的发展,以及商业设备价格的不断攀升。大公司总是希望能使用开源的方案来替换过去使用的商业设备。比如之前大家用的很多的F5和A10,现在已经在逐步被LVS替换。传统的单个lvs的性能是比不上商业设备的,而且稳定性等也相对会差些。告诉大家很多大公司都在用这些技术的。

 

基本思路就是把多个LVS组成一个OSPF集群,这样可以使得LVS集群的性能可以远远超过单个传统的商业设备(当然,对于F5等等其实也可以做这样的集群做水平化的扩展)

 

原来就是把服务器也模拟成ospf中的一份子,是他可以在实现ospf的负载均衡,以及高可用性。

 

在这里网络层的东西就不写了,往简单配置,没意思。往难里配置我也不懂,上线服务器的时候,这些东西都是网络组的负责,我只是负责服务器上的ospf的介入和业务方面的。

我这里只是简单的说下ospf的框架

045644257

 

 

 

OSPF(Open Shortest Path First开放式最短路径优先)是一个内部网关协议(Interior Gateway Protocol,简称IGP),用于在单一自治系统(autonomous system,AS)内决策路由。

ECMP(Equal-CostMultipathRouting)等价多路径,存在多条不同链路到达同一目的地址的网络环境中,如果使用传统的路由技术,发往该目的地址的数据包只能利用其中的一条链路,其它链路处于备份状态或无效状态,并且在动态路由环境下相互的切换需要一定时间,而等值多路径路由协议可以在该网络环境下同时使用多条链路,不仅增加了传输带宽,并且可以无时延无丢包地备份失效链路的数据传输。

特点:

 

1
2
3
4
4
层负载均衡,效率高
配置简单,只需安装基于linux的路由软件quagga
无法进行监控检查,服务异常无法处理
无session保持等,功能过于简单

 

贴上一个操作的例子:

 

 

 

OSPF(Open Shortest Path First开放式最短路径优先)是一个内部网关协议(Interior
 
Gateway Protocol,简称IGP),用于在单一自治系统(autonomous system,AS)内决
 
策路由。
 
ECMP(Equal-CostMultipathRouting)等价多路径,存在多条不同链路到达同一目的地址的网络
 
环境中,如果使用传统的路由技术,发往该目的地址的数据包只能利用其中的一条链路,其它链路处
 
于备份状态或无效状态,并且在动态路由环境下相互的切换需要一定时间,而等值多路径路由协议可
 
以在该网络环境下同时使用多条链路,不仅增加了传输带宽,并且可以无时延无丢包地备份失效链路
 
的数据传输。
 
特点:
1
4
层负载均衡,效率高
2
.配置简单,只需安装基于linux的路由软件quagga
3
.无法进行监控检查,服务异常无法处理
4
. 无session保持等,功能过于简单

 

路由器上的ospf的操作 ,这只是简单的配置,大家可以按照自己的想法和网络组的同学们扯淡提需求就行了。

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
配置命令:
R0配置:
Router>en
Router#config t
Enter configuration commands, one per line.  End 
with

 

CNTL/Z.
Router(config)#hostname r0
r0(config)#
r0(config)#
int

 

e1/
0
r0(config-
if
)#ip address 
192.168
.
2.222

 

255.255
.
255.0
r0(config-
if
)#no shutdown
r0(config)#
int

 

e1/
1
r0(config-
if
)#ip address 
192.168
.
0.111

 

255.255
.
255.0
r0(config-
if
)#no shutdown
r0(config-
if
)#exit
r0(config)#router ospf 
100
r0(config-router)#net
r0(config-router)#network 
192.168
.
0.0

 

0.0
.
0.255

 

area 
0
r0(config-router)#network 
192.168
.
2.0

 

0.0
.
0.255

 

area 
0
r0(config-router)#exit
r0(config)#
int

 

e1/
1
r0(config-
if
)#ip ospf cost 
2
r0(config-
if
)#
int

 

e1/
0
r0(config-
if
)#ip ospf cost 
2
r0(config-
if
)#end
r0#ping 
192.168
.
0.14
Type 
escape

 

sequence to abort.
Sending 
5
100
-byte ICMP Echos to 
192.168
.
0.14
, timeout 
is

 

2

 

seconds:
!!!!!
Success rate 
is

 

100

 

percent (
5
/
5
), round-trip min/avg/max = 
64
/
93
/
1
==========================================================================

 

cisco默认的是hello时间是10s,死亡时间是hello时间的4倍,默认为40s,当然这个时间是可以修改的。

在接口模式下面,通过命令:

ip ospf hello-interval <time>来修改hello时间。

ip ospf dead-interval <time>来修改死亡时间。

 

服务器端的配置

其实就是安装一个软路由,让他进到ospf的圈子里面。

先说下qugga的基本安装配置

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
1
.       下载源码
quagga-
0.99
.
10
.tar.gz
2
.       解压缩
tar xzvf quagga-
0.99
.
10
.tar.gz
3
.       配置
cd quagga-
0.99
.
10
    
./configure --prefix =/usr
                
--sysconfdir=/etc/quagga
                
--localstatedir=/
var
/run/quagga
                
--enable-vtysh
                
--enable-user=
'test'
                
--enable-group=
'test'
                 
--enable-vty-group=
'test'
配置输出:
                                                                                                                                                                                                                                                                                                                                                                                                   
Quagga configuration
--------------------
quagga version          : 
0.99
.
10
host operationg system  : linux-gnu
source code location    : .
compiler                : gcc
compiler flags          : -Os -fno-omit-frame-pointer -g -std=gnu99 -Wall -Wsign-compare -Wpointer-arith -Wbad-
function
-cast -Wwrite-strings -Wmissing-prototypes -Wmissing-declarations -Wchar-subscripts -Wcast-qual
make                    : make
includes                :
linker flags            :  -lcrypt   -lcap  -ltermcap -lreadline -lm
state file directory    : /
var
/run/quagga
config file directory   : /etc/quagga
example directory       : /etc/quagga
user to run 
as

          

: test
group to run 
as

         

: test
group 
for

 

vty sockets   : test
config file mask        : 
0600
log file mask           : 
0600
                                                                                                                                                                                                                                                                                                                                                                                                   
The above user and group must have read/write access
to the state file directory and
to the config files 
in

 

the config file directory.
4
.       编译和安装
make ;make install
5
.       添加test组和用户
groupadd test;
    
useradd test -g test
6
.       改变权限 
//最好写入启动脚本
chown test:test /
var
/run/quagga
chmod 
777

 

/
var
/run/quagga
chown test:test /etc/quagga 
//需要将配置写入操作系统
chmod 
777

 

/etc/quagga/*              
7
.       增加log权限
//最好写入启动脚本
Mkdir  /
var
/log/quagga/
Vi /
var
/log/quagga/zebra.log
Chmod 
777

 

/
var
/log/quagga/zebra.log
                                                                                                                                                                                                                                                                                                                                                                                                    
8
.       修改 /etc/services  
//just for telnet
                
zebrasrv    
2600
/tcp     # zebra service
                
zebra         
2601
/tcp    # zebra vty
                
ripd           
2602
/tcp    # RIPd vty
                
ripngd       
2603
/tcp    # RIPngd vty
                
ospfd        
2604
/tcp    # OSPFd vty
                
bgpd         
2605
/tcp    # BGPd vty
                
ospf6d      
2606
/tcp    # OSPF6d vty
                
ospfapi     
2607
/tcp    # ospfapi
                
isid           
2608
/tcp    # ISISd vty
                                                                                                                                                                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                                                                                                                                                                                    
9
.       编辑配置文件
copy /etc/quagga/zebra.conf.example   /etc/quagga/zebra.conf
! -*- zebra -*-
!
! zebra sample configuration file
!
hostname Router
password zebra
enable password zebra
log file  /
var
/log/quagga/zebra.log
//注意zebra.conf启用log,这样便于查找错误
                                                                                                                                                                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                                                                                                                                                                                   
10
.     启动
zebra –d
如果启动不成功,察看/
var
/log/quagga/zebra.log
一般由于权限设置会出现以下错误:
2008
/
10
/
22

 

16
:
59
:
22

 

ZEBRA: Could not lock pid_file /
var
/run/quagga/zebra.pid, exiting
                                                                                                                                                                                                                                                                                                                                                                                                   
11
.    登陆
telnet localhost zebra(0r 
2601
)
[root@localhost quagga-
0.99
.
10
]# telnet localhost 
2601
Trying 
127.0
.
0.1
...
Connected to localhost.
Escape character 
is

 

'^]'
.
                                                                                                                                                                                                                                                                                                                                                                                                   
Hello, 
this

 

is

 

Quagga (version 
0.99
.
10
).
Copyright 
1996
-
2005

 

Kunihiro Ishiguro, et al.
                                                                                                                                                                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                                                                                                                                                                                   
User Access Verification
                                                                                                                                                                                                                                                                                                                                                                                                   
Password:
Router> enable
Password:
Router# help
Quagga VTY provides advanced help feature.  When you need help,
anytime at the command line please press 
'?'
.
                                                                                                                                                                                                                                                                                                                                                                                                   
If nothing matches, the help list will be empty and you must backup
 
until entering a 
'?'

 

shows the available options.
Two styles of help are provided:
1
. Full help 
is

 

available when you are ready to enter a
command argument (e.g. 
'show ?'
) and describes 
each

 

possible
argument.
2
. Partial help 
is

 

provided when an abbreviated argument 
is

 

entered
   
and you want to know what arguments match the input
   
(e.g. 
'show me?'
.)
                                                                                                                                                                                                                                                                                                                                                                                                   
Router#

 

在lvs server上的配置

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
安装
Web服务器
192.168
.
0.14
192.168
.
0.15
上安装quagga软件
配置
1
).    配置web服务器quagga
使用root用户登录
192.168
.
0.14
192.168
.
0.15
cd /etc/quagga
cp ospfd.conf.sample ospfd.conf
chkconfig zebra on
chkconfig ospfd on
service zebra start
service ospfd start
telnet localhost ospfd
输入默认密码zebra
ospfd> en
ospfd# conf t
ospfd(config)# router ospf
ospfd(config-router)# router-id 
192.168
.
2.64
ospfd(config-router)# network 
192.168
.
0.23
/
32

 

area 
0.0
.
0.0
(lo IP)
ospfd(config-router)# network 
192.168
.
2.64
/
24

 

area 
0.0
.
0.0
(接口IP)
ospfd(config-router)#end
ospfd#wr
2
).    配置交换机端
根据交换机类型配置ospf与主机quagga建立ospf邻居关系
3
).    配置主机
使用root用户分别在
2
台web服务上执行以下命令
ifconfig lo:
0

 

192.168
.
0.23

 

netmask 
255.255
.
255.255

 

up
验证
多次访问http:
//192.168.0.23显示相应页面即说明负载成功
                                                                                                                                                                                                                                                                                                                                                           
3.2

   

功能测试
负载均衡测试
多次访问http:
//192.168.0.23显示realserver ip address 在192.168.0.14和
192.168
.
0.15
之间切换
服务切换测试
Down掉
192.168
.
0.14
/
15
上的服务IP 
192.168
.
0.23
可以正常访问应用

 

总结,淘宝的lvs已经做了fullnat的技术,原理也是ospf的负载的,腾讯不少业务也早已经用这样的方案了,知道腾讯的dns为啥能抗住几百万的流量请求并发,10g网压力测试能保持在1800w 流量请求并发, 除了dns的性能牛逼外,网络的框架用的就是这个方案。当然里面有些具体的流程方案不方便向大家show出来,比如 各种情况下的健康度检查,ospf的hello包的判断,自动化的ospf的配置,定时的负载调整。  但这些东西可以自己用shell配合网络组的同学们一起搞定制的。

 

Linux下源码搭建extmail邮件服务器

Extmail 是一个以perl语言编写,面向大容量/ISP级应用,它是一款免费的高性能Webmail软件  满足用户多变的需求,能快速进行开发、改进和升级,支持Maildir,索引技术,速度超快。支持多国语言同屏显示,支持巨型邮箱(超过1GB)海量文件,支持无限尺寸附件,I/O能力强,模板化,多语言,修改非常容易。适应能力强的webmail系统  对于国内的电子邮件系统来说,无论是从系统功能、易用性还是中文化等方面,ExtMail 平台都是一个相当不错的选择。其工作原理如下图所示:

 

6758400_1370057259u59d

一.准备工作

1.准备工具

apr-1.4.6.tar.gz      apr-util-1.5.1.tar.gz

httpd-2.4.4.tar.bz2    courier-authlib-0.65.0.20130314.tar.bz2

mysql-5.5.15-linux2.6-i686.tar.gz

postfix-2.8.2.tar.gz    dovecot-2.0.16.tar

extmail-1.2.tar.gz     Unix-Syslog-1.1.tar.gz

extman-1.1.tar.gz

2.准备开发环境

[root@lly ~]# mkdir /mnt/cdrom    建立光盘挂载点

[root@lly ~]# mount /dev/cdrom  /mnt/cdrom   挂载光盘

[root@lly ~]# vim /etc/yum.repos.d/rhel-debuginfo.repo    编辑yum客户端构建一个repo  id

6758400_13700572819k2m

[root@lly ~]# yum grouplist   检查开发环境

6758400_1370057304rUwi

注:软件依赖这几个开发环境,如果预先没有安装开发环境的话,可以用yum进行安装。

二.软件包的安装

1.安装apache

[root@lly ~]# tar -zxvf apr-1.4.6.tar.gz -C /usr/local/src/   拆解apr软件包

[root@lly src]# cd /usr/local/src/apr-1.4.6/

[root@lly apr-1.4.6]# ./configure   –prefix=/usr/local/apr把apr安装到/usr/local/apr目录下

[root@lly apr-1.4.6]#make

[root@lly apr-1.4.6]#make install

[root@lly apr-1.4.6]# cd

[root@lly ~]# tar -zxvf apr-util-1.5.1.tar.gz -C /usr/local/src/  拆解apr-util软件包

[root@lly src]# cd apr-util-1.5.1/

[root@lly apr-util-1.5.1]# ./configure –with-apr=/usr/local/apr/bin/apr-1-config

[root@lly apr-util-1.5.1]# make

[root@lly apr-util-1.5.1]# make install

[root@lly apr-util-1.5.1]# cd

[root@lly ~]# tar -jxvf httpd-2.4.4.tar.bz2 -C /usr/local/src/     拆解httpd软件包

[root@lly ~]# cd /usr/local/src/httpd-2.4.4/    进入拆解的apache目录

[root@lly httpd-2.4.4]# ./configure –prefix=/usr/local/apache  –sysconfdir=/etc/httpd  –enable-so   –enable-ssl  –enable-rewrite  –with-apr=/usr/local/apr/bin/apr-1-config   –with-apr-util=/usr/local/apr/bin/apu-1-config –with-pcre  -with-z –enable-mpms-shared=all

[root@lly httpd-2.4.4]# make

[root@lly httpd-2.4.4]# make install

[root@lly httpd-2.4.4]#cd /usr/local/apache/man

[root@lly man]# vim /etc/man.config   把apache的man手册添加到man路径方便查看apache的man手册

[root@lly apache]# ln -s /usr/local/apache/include/   /usr/include/apache为apache的头文件做一个符号链接

[root@lly ~]# cd /etc/init.d/

[root@lly init.d]# vim httpd   编辑apache的启动脚本

脚本如下

#!/bin/sh

#set -x

HTTPD=’/usr/local/apache/bin/httpd’

CONFFILE=’/etc/httpd/httpd.conf’

#description: http server

#chkconfig: 2345 88 60

start(){

[ -f /var/lock/subsys/httpd ]&& echo “apache is started” && exit

echo -n  “starting apache……”

sleep  1

$HTTPD  -f $CONFFILE && RETVAL=0 ||RETVAL=1

[ $RETVAL -eq 0 ]&& touch /var/lock/subsys/httpd && echo “ok” || echo “fail”

}

stop(){

[ ! -f  /var/lock/subsys/httpd ] && echo “httpd is stoped…” && exit

echo -n “stoping httpd……..”

sleep  1

/bin/rm -rf /var/lock/subsys/httpd

$HTTPD -k  stop  && RETVAL=0 ||RETVAL=1

[ $RETVAL -eq 0 ] && rm -rf /var/lock/subsys/httpd && echo “ok” || echo “fail”

}

case $1 in

start)

start

;;

stop)

stop

;;

restart)

stop

start

;;

*)

echo “start|stop|restart”

;;

esac

[root@lly init.d]# chmod a+x /etc/init.d/httpd   为apache服务添加可执行权限

[root@lly init.d]# service httpd start   启动apache服务

[root@lly init.d]# netstat -tupln |grep http  查看80端口是否启动

6758400_1370059925OYiW

[root@lly init.d]# chkconfig –add httpd  添加自启动

[root@lly init.d]# chkconfig –list  |grep http   查看添加开机启动是否成功

6758400_13700599326cfN

2.安装cmake

安装mysql的时候需要用到cmake工具

[root@lly ~]# tar -zxvf cmake-2.8.10.2.tar.gz -C /usr/local/src/

[root@lly ~]# cd /usr/local/src/cmake-2.8.10.2/

[root@lly cmake-2.8.10.2]# ./configure –prefix=/usr/local/cmake

[root@lly cmake-2.8.10.2]# make && make install

Waiting…………………..

[root@lly cmake-2.8.10.2]# cd /usr/local/cmake/

为了日后能快速访问cmake下的bin,把cmke下的bin添加路径

[root@lly cmake]# vim /etc/profile

6758400_137005994666u1

注:只有下次进入之后路径才会添加成功。

3.安装mysql

[root@lly ~]# tar zxvf mysql-5.6.10.tar.gz -C /usr/local/src/

[root@lly ~]# cd /usr/local/src/mysql-5.6.10/

[root@lly mysql-5.6.10]# less INSTALL-SOURCE

mysql的使用说明,我们可以按照安装说明进行安装。

6758400_137006023557z6

 

[root@lly ~]# cd /usr/local/src/mysql-5.6.10/

[root@lly mysql-5.6.10]# cmake .

[root@lly mysql-5.6.10]# make  &&  make install

6758400_1370275195YmKT

这个是很耗时的。Please  waiting  for  a  long time。。。。。。。。。。。。。。。。。。。。。。。。。。

[root@lly ~]# cd /usr/local/src/mysql-5.6.10/

[root@lly mysql-5.6.10]# less INSTALL-SOURCE

Mysql安装说明中的配置的步骤

6758400_1370275243Gcj7

[root@lly mysql-5.6.10]# cd /usr/local/mysql/

创建帐号信息

[root@lly mysql]# groupadd mysql

[root@lly mysql]# useradd -r -g mysql mysql

[root@lly mysql]# chown -R mysql .

进行初始化

[root@lly mysql]# scripts/mysql_install_db  –user=mysql

[root@lly mysql]# chown -R root .

[root@lly mysql]# chown -R mysql data

[root@lly mysql]# cd support-files/

[root@lly support-files]# cp my-default.cnf   /etc/my.cnf

[root@lly support-files]# cp mysql.server   /etc/init.d/mysqld

[root@lly support-files]# chmod a+x  /etc/init.d/mysqld

[root@lly support-files]# service mysqld start

Starting MySQL…..                                        [  OK  ]

mysqld 服务成功启动

[root@lly support-files]# netstat -tupln |grep mysqld

6758400_1370275252k2Ji

[root@lly support-files]# cd ..

[root@lly mysql]# pwd

/usr/local/mysql

[root@lly mysql]# vim /etc/profile

6758400_1370275258BCM6

[root@lly bin]# . /etc/profile

[root@lly ~]# mysql

mysql> show databases;

+——————–+

| Database           |

+——————–+

| information_schema |

| mysql              |

| performance_schema |

| test               |

+——————–+

4 rows in set (0.00 sec)

[root@lly ~]# mysqladmin -u root -p password ‘123’设置一个管理员帐号密码123

[root@lly ~]# mysql -u root -p以后就可以以此帐号登陆了

6758400_1370275269Umpy

注:mysql生成的/usr/local/mysql/lib库文件不是标准路径系统无法识别(/lib 或者/usr/lib为标准路径)所以需做如下配置

[root@lly mysql]# vim /etc/ld.so.conf.d/mysql.conf

写入

/usr/local/mysql/lib

[root@lly mysql]# ldconfig

[root@lly mysql]# ln -s /usr/local/mysql/include/   /usr/include/mysql   对mysql的头文件include做一个连接

 

4.安装dns服务器

[root@lly ~]# yum install -y  bind  bind-chroot caching-nameserver

[root@lly ~]# service mysqld start

这里创建本地域126.com   邮件服务器域mail.126.com  本机地址192.168.126.129

[root@lly ~]# cd /var/named/chroot/etc/

[root@lly etc]# cp -p named.caching-nameserver.conf  named.conf

[root@lly etc]# vim named.conf  编辑dns配置

6758400_1370275281TxRV

[root@lly etc]# vim named.rfc1912.zones 编辑区域的声明文件

6758400_1370275308WBF4

[root@lly etc]# cd /var/named/chroot/var/named/

[root@lly named]# cp -p localhost.zone  126.com.zone  生成区域文件

[root@lly named]# vim 126.com.zone  编辑区域文件

6758400_1370275317VfO0

[root@lly named]# service named start  启动dns

[root@lly named]# chkconfig named on  添加自启动

[root@lly named]# vim /etc/resolv.conf    dns指向

6758400_1370275321MAxk

[root@lly named]# vim /etc/sysconfig/network   修改主机名(邮件服务器)

6758400_1370275324k2ri

[root@lly named]# vim /etc/hosts   修改hosts文件

6758400_1370275328JcmI

[root@lly named]# hostname mail.126.com   重新启动,或者修改下主机名

[root@mail ~]# nslookup mail.126.com   查看dns解析

6758400_1370275334MOIE

[root@mail ~]# dig -t mx 126.com   测试126.com区域的邮局

6758400_13702753444Mk0

一切正常。。。

5.安装postfix

[root@mail ~]# service sendmil stop

[root@mail ~]# chkconfig sendmail off   如果安装了sendmail,要先把sendmail服务关闭

[root@mail ~]# tar -zxvf postfix-2.8.2.tar.gz -C /usr/local/src/

[root@mail ~]# cd /usr/local/src/postfix-2.8.2/

没有configure文件可以改变makefile文件来代替configure

注:Postfix是一种服务,需要为其添加帐号。

[root@mail postfix-2.8.2]# groupadd -g 2121  postfix 添加postfix组,组id 2121

[root@mail postfix-2.8.2]# useradd -u 2121 -g postfix -s /sbin/nologin  -M postfix   创建账号 用户名postfix 组的名字postfix

[root@mail postfix-2.8.2]# groupadd -g 2122  postdrop

[root@mail postfix-2.8.2]# useradd -u 2122 -g postfix -s /sbin/nologin  -M postdrop   为队列管理服务创建帐号

[root@mail postfix-2.8.2]# make makefiles ‘CCARGS=-DHAS_MYSQL -I/usr/include/mysql -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/include/sasl  -DUSE_TLS ‘ ‘AUXLIBS=-L/usr/local/mysql/lib -lmysqlclient -lz -lm -L/usr/lib/sasl2 -lsasl2   -lssl –lcrypto’

注:(没有configure文件可以改变makefile文件来代替configure  这条命令相当于./configure)

[root@lly postfix-2.8.2]# make

[root@lly postfix-2.8.2]# make install

6758400_1370275372sUfi

其他的都可以直接回车默认值就行

6758400_1370275376T1Yo

注:之后会生成etc目录下aliases,这个文件是和sendmail结合的,为了让其与postfix结合,执行一下

[root@mail postfix-2.8.2]# /usr/bin/newaliases 执行

说明:这里调用redhat系统自带的启动脚本。由于postfix安装的时候基本都是默认安装,路径都是默认路径,所以使用系统自带的脚本没问题,基本不用修改就能用。

[root@mail postfix-2.8.2]# mkdir /tmp/abc

[root@mail postfix-2.8.2]# cd /tmp/abc/

[root@mail abc]# cp /mnt/cdrom/Server/postfix-2.3.3-2.1.el5_2.i386.rpm ./   把光盘上的拷贝过来

[root@mail abc]# rpm2cpio  postfix-2.3.3-2.1.el5_2.i386.rpm |cpio -id拆解postfix包

[root@mail abc]# cd etc

[root@mail etc]# cd rc.d

[root@mail rc.d]# cd init.d

[root@mail init.d]# cp -p postfix  /etc/init.d/   拷贝配置文件

[root@mail init.d]# service postfix start   启动postfix服务

6758400_1370275380B9As

[root@mail ~]# netstat -tupln |grep 25

6758400_1370275383hX75

[root@mail ~]# vim /etc/postfix/main.cf

6758400_1370275387AB9D

6758400_137027538866Qk

6758400_1370275390FLr8

6758400_1370275392xrum

6758400_1370275396WbAb

[root@mail ~]# service postfix restart  重启服务

[root@mail sbin]# useradd user1  添加user1用户

[root@mail sbin]# passwd user1  为user1用户添加密码123

[root@mail ~]# telnet 127.0.0.1 25   向user1发送一封测试邮件

6758400_1370275403lunB

查看user1是否收到邮件了

[root@mail ~]# su – user1   以user1用户登录查看邮件

[user1@mail ~]$ mail

6758400_1370275416ybz6

注:Postfix身份验证功能需要结合sasl

[root@mail ~]# cd /usr/lib/sasl2/

6758400_1370275419LgNh

[root@mail sasl2]# cp -p Sendmail.conf smtpd.conf

[root@mail sasl2]# vim smtpd.conf    编辑其配置文件

6758400_13702754220vb4

[root@mail sasl2]# service saslauthd start  启动sasl

[root@mail sasl2]# chkconfig saslauthd on  设置为开机启动

[root@mail ~]# vim /etc/postfix/main.cf 要想sasl对smtp生效,需要添加sasl的一些验证语句

6758400_1370275429MLpw

[root@mail sasl2]# service postfix restart重启postfix服务

6758400_1370275441KCkF

 

6.安装courier-authlib

[root@mail ~]# tar -jxvf courier-authlib-0.63.1.20111230.tar.bz2 -C /usr/local/src/

[root@mail ~]# cd /usr/local/src/courier-authlib-0.63.1.20111230/

[root@mail courier-authlib-0.63.1.20111230]# ./configure  –prefix=/usr/local/courier-authlib  –sysconfdir=/etc   –with-authmysql    –with-mysql-libs=/usr/local/mysql/lib/   –with-mysql-includes=/usr/include/mysql    –with-redhat    –with-authmysqlrc=/etc/authmysqlrc    –with-authdaemonrc=/etc/authdaemonrc    –with-ltdl-lib=/usr/lib    –with-ltdl-include=/usr/include

[root@mail courier-authlib-0.63.1.20111230]# make

[root@mail courier-authlib-0.63.1.20111230]# make install

[root@mail courier-authlib-0.63.1.20111230]# service postfix restart

[root@mail etc]# cp authdaemonrc.dist    authdaemonrc  验证时使用的模块

[root@mail etc]# cp authmysqlrc.dist    authmysqlrc

[root@mail etc]# vim authdaemonrc

6758400_1370275450h9F0

[root@mail etc]# vim authmysqlrc

6758400_1370275454icki

6758400_1370275457jyKX

6758400_13702754585r7q

6758400_1370275459NHEU

6758400_1370275481OHAd

6758400_1370275483nMNt

6758400_1370275486CXXq

6758400_1370275488PyCT

6758400_1370275489BIeE

6758400_1370275491MUgt

6758400_1370275498ZnTE

6758400_1370275502oPCw

[root@mail src]# cd /usr/local/src/courier-authlib-0.63.1.20111230/

[root@mai courier-authlib-0.63.1.20111230]#cp courier-authlib.sysvinit  /etc/init.d/courier-authlib 拷贝启动脚本

[root@mail courier-authlib-0.63.1.20111230]# chmod a+x /etc/init.d/courier-authlib 修改权限可执行

[root@mail courier-authlib-0.63.1.20111230]# chkconfig courier-authlib on添加开机启动

[root@mail courier-authlib-0.63.1.20111230]# service courier-authlib start启动courier-authlib

[root@mail courier-authlib-0.63.1.20111230]# cd /usr/local/courier-authlib/

[root@mail courier-authlib]# vim /etc/ld.so.conf.d/courier-authlib.conf导入库文件

6758400_13702755068b8z

[root@mail lib]# ldconfig

[root@mail lib]# ldconfig -pv |grep courie

6758400_1370275512YedU

[root@mail lib]# cd ..

[root@mail courier-authlib]# ln -s /usr/local/courier-authlib/include/   /usr/include/courier-authlib对头文件做一个符号链接

[root@mail courier-authlib]# vim /etc/postfix/main.cf

添加如下内容以便让postfix支持虚拟域和虚拟账号

6758400_1370275525cS0p

新建虚拟用户邮箱所在的目录,并将其权限赋予postfix用户

[root@mail ~]# mkdir -pv /var/mailbox

[root@mail ~]# chown -R postfix /var/mailbox

重新配置SMTP 认证

[root@mail postfix]# vim /usr/lib/sasl2/smtpd.conf

6758400_1370275537cRIH

7.安装extman

[root@mail ~]# tar -zxvf extman-1.1.tar.gz

[root@mail ~]# cd extman-1.1

[root@mail extman-1.1]# cd docs/

[root@mail docs]# mysql -u root -p <extmail.sql    导入数据库

[root@mail docs]# mysql -u root -p <init.sql

[root@mail docs]# mysql -u root -p 登陆数据库进行账号授权

mysql>  GRANT all privileges on extmail.* TO extmail@localhost IDENTIFIED BY ‘extmail’;

mysql>  GRANT all privileges on extmail.* TO extmail@127.0.0.1 IDENTIFIED BY ‘extmail’;

mysql> FLUSH PRIVILEGES;刷新授权

[root@mail docs]# cp mysql_virtual_*  /etc/postfix/

[root@mail postfix]# service postfix restart重启postfix服务

8.安装dovecot

[root@mail ~]# useradd  -M  -s  /sbin/nologin  dovecot   创建账号

[root@mail ~]# cd /usr/local/src/dovecot-2.0.16/

[root@mail dovecot-2.0.16]# ./configure –sysconfdir=/etc  –with-mysql

[root@mail dovecot-2.0.16]#make

[root@mail dovecot-2.0.16]#make install

[root@mail dovecot-2.0.16]#cd /usr/local/share/doc/dovecot/

[root@mail dovecot]# cp example-config/dovecot.conf  /etc/dovecot/dovecot.conf

6758400_1370275545DI6t

6758400_1370275554M3Hi

6758400_1370275558p307

 

[root@mail ~]# vim /etc/dovecot-mysql.conf   创建mysql.conf文件,让dovecot与mysql进行结合

6758400_13702755631yUl

[root@mail ~]# vim  /etc/postfix/main.cf

6758400_1370275565MAx3

9.安装extmail

[root@mail ~]# tar -zxvf extmail-1.2.tar.gz

[root@mail ~]# mkdir -pv /var/www/extsuite

[root@mail ~]# mv extman-1.1  /var/www/extsuite/extman

[root@mail ~]#mv extmail-1.2  /var/www/extsuite/extmail

[root@mail ~]# cd /var/www/extsuite/extmail/

[root@mail extmail]# cp webmail.cf.default webmail.cf

[root@mail extmail]# vim webmail.cf

6758400_1370275567hpLf

6758400_1370275570JPj9

6758400_13711953300egy

6758400_1371195335wHxU

注:Apache和extmail的结合是靠cgi进行的

[root@mail extmail]# vim /etc/httpd/conf/httpd.conf    修改apache配置虚拟主机

6758400_1371195351SKKA

[root@mail extmail]# chown -R postfix.postfix /var/www/extsuite/extmail/cgi/修改 cgi执行文件属主为apache运行身份用户

[root@mail extmail]# service httpd restart

extmail将会用到perl的Unix::syslogd功能,把补丁打上去

[root@mail ~]# tar zxvf Unix-Syslog-0.100.tar.gz  -C /usr /local/src/ Unix-Syslog-0.100

[root@mail ~]# cd Unix-Syslog-0.100

[root@mail Unix-Syslog-0.100]# perl Makefile.PL

[root@mail Unix-Syslog-0.100]# make

[root@mail Unix-Syslog-0.100]# make install

[root@mail Unix-Syslog-0.100]# cd /var/www/extsuite/extman/

[root@mail extman]#cp webman.cf.default   webman.cf

[root@mail extman]#vim webman.cf

6758400_1371195361zqmq

6758400_1371195366UT3N

[root@mail extman]# chown -R postfix.postfix /var/www/extsuite/extman/cgi/   修改cgi目录的属主

[root@mail extman]# vim /etc/httpd/conf/httpd.conf

6758400_1371195374iftN

[root@mail extman]# service httpd restart

三、登录管理

启动各种服务

地址栏输入http://192.168.126.129/extmail

6758400_1371195389BPZF

选择管理即可登入extman进行后台管理了。默认管理帐号为:root@extmail.org  密码为:extmail*123*

6758400_1371195405eQkw

之后就可以进行管理了。

【Ubuntu 12.04 64位】Linux下常用命令

 

以下命令在 Ubuntu 12.04 64位下测试通过。

 

在linux中一切都是文件,包括文件夹也是一种特殊的文件,甚至设备也是文件。

 

查看当前系统的版本

 

  1. cat /proc/version
  2. #Linux version 3.2.0-29-generic (buildd@allspice) (gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) ) #46-Ubuntu SMP Fri Jul 27 17:03:23 UTC 2012
  3. uname -a
  4. #Linux web 3.2.0-29-generic #46-Ubuntu SMP Fri Jul 27 17:03:23 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
  5. cat /etc/issue
  6. #Ubuntu 12.04.1 LTS n l

 

显示一个命令的路径

 

  1. which adduser
  2. /usr/sbin/adduser
  3. which groups
  4. /usr/sbin/groups
  5. which ls
  6. /bin/ls

 

查看在线的用户

who

 

显示当前用户的账号

whoami

 

重启

reboot

 

关机

shutdown

 

查看当前用户

users

 

查看当前用户所在的组

groups

 

修改当前用户的密码

passwd

 

修改用户user1的密码

passwd user1

 

切换用户user1

su user1

 

切换到root用户

su

 

创建目录

mkdir dir1

 

删除目录

rmdir dir1

 

切换目录

cd

 

返回上级目录

cd ..

 

 

新建文件file1

touch file1

 

新建并编辑文件file1

vi file1

 

删除文件

rm

 

显示文件内容

cat file1

more file1

less file1

 

cat还有一个功能就是可以新建文件,并且同时将输入的内容保存到文件中

cat >> file1

敲入上面的命令后,你就可以开始输入文件的内容了,还可以换行,如果输入完毕,就同时按下ctrl+D,就会结束输入,并且把刚才输入的内容保存到文件中。

 

 

 

显示文件的前面10行

通过参数可以指定显示前面的N行

head file1

 

显示文件的最后10行

通过参数可以指定显示后面的N行

tail file1

 

列出【home】目录的所有文件

ls /home

 

用列表的方式列出【home】目录的所有文件,不包括隐藏文件

会显示文件的权限,所有者,大小,最后更新时间

ls -l /home

 

用列表的方式列出【home】目录的所有文件,包括隐藏文件,以 . 开头的文件就是隐藏文件。

会显示文件的类型,权限,所有者,所有者的用户组,大小,最后更新时间

ls -al /home

 

更改文件的所有者

chown user1:group1 file1

 

更改文件的权限

a所有用户,+添加权限,rwx读、写、执行权限

chmod a+rwx file1

 

 

显示一个命令的说明

说明包括用法和解释

man cat

 

显示一个命令的参数和基本用法

在命令后面加上–help

cat –help

 

很多时候,如果不知道一个命令的具体用法,或者是有哪些参数,参数是什么意思,都可以使用上面的两个命令来查看一下。

 

添加用户user1

adduser user1

 

添加用户组

addgroup group1

 

添加用户的同时,初始化用户到一个组

adduser –ingroup group1 user11

 

添加已有用户到已有的组

adduser user12 group1

 

cut命令

cut命令可以对文件做一些分隔,分析的处理,是基于行来处理文件。将文件的每一行按照规律分隔,获取其中的部分内容。

比如说我想得到系统中的所有用户的登录账号,大家都知道系统中有一个/etc/passwd文件,里面有这些内容,但是同时也有其他的内容。

 

  1. cut -d: -f1 /etc/passwd

上面的命令做什么呢?-d参数用来指明分隔符,因为passwd文件的每一行是用冒号分隔的,-f参数指明你想要的字段,这里指明要第一个字段,也就是登陆账号字段,最后指明文件的位置就可以了。

如果是想要几个字段,可以使用-f1-3代表第一个到第三个字段,-f1,3代表第一个和第三个字段。

 

  1. cut -d: -f1 /etc/passwd >> /tmp/users

使用上面的命令,cut命令的结果就会保存到/tmp/users文件中。

 

wc命令

wc命令用来统计文件的行数,字符数,单词数,字节数信息。

 

  1. root@web:/home# wc -l file1
  2. 4613 file1
  3. root@web:/home# wc -c file1
  4. 221987 file1
  5. root@web:/home# wc -c file1
  6. 221987 file1
  7. root@web:/home# wc -m file1
  8. 220166 file1
  9. root@web:/home# wc -L file1
  10. 393 file1
  11. root@web:/home# wc -w file1
  12. 11902 file1

 

vi编辑器

vi newfile

两种模式:命令模式和插入模式。

首先进入的是命令模式,按a,i,o可以进入插入模式,在最下面的一行显示– INSERT –,代表现在可以编辑文件了。如果想回到命令模式,需要按下ESC键。

按下a会在下一个字符开始插入,按下i会在当前位置开始插入,按下o会从新的一行开始插入。

在命令模式下常用的命令包括

:w newfile2,另存为newfile2。
:wq,保存并且退出。
:q!,强行退出,不保存。
:w,只保存,不退出。

gg,回到文件的第一个字符。
G,到达文件的最后一个字符。
dd,删除光标所在的当前行。

x,删除光标所在位置的一个字符。

X,删除光标所在位置之前的一个字符。
h,向左移动一个字符。
j,向下移动一个字符。
k,向上移动一个字符。
l,向右移动一个字符。
ctrl+b,向后移动一页。
ctrl+f,向前移动一页。
ctrl+u,向后移动半页。
ctrl+d,向前移动半页。
w,跳到下个单词的开头。
e,跳到下个单词的结尾。
$,移动到光标所在行的末尾。
0,移动到光标所在行的开头。
u,undo操作,在误操作之后可以使用。
:set nu,在每一行前面列出行号。
:100,可以直接跳到第100行。

ggdG,清空文件的内容。

在某些时候,需要清空文件内容,而不删除文件。比喻有些日志文件(log.txt);在linux下的命令为:

 

清空文件log.txt的内容。

  1. true > log.txt

 

 

查询命令locate

locate是查询索引,在索引中查询是否存在匹配条件的文件,这就需要先做索引,系统每天自动进行索引工作。

也可以通过手动执行updatedb来建立索引。

 

  1. updatedb
  2. locate file1

 

查询命令find

find是实时搜索,所以查询消耗的时间要比locate长。

 

  1. find / -name ”file1″

 

查询命令grep

grep的查询对象是文件的内容,以行为单位进行条件的匹配。

 

  1. grep -c ”using” file1

在file1中查询using出现的个数。

grep是一个强大的文本搜索工具,通过正则表达式搜索匹配的文本,进行输出。

 

重定向

将hello重定向到readme文件中

 

  1. echo ”hello” > readme

 

将1,2,3重定向追加到readme文件中,追加是两个>符号。

 

  1. echo ”1,2,3″ >> readme

 

管道

将前一个命令的输出作为下一个命令的输入,|符号链接两个命令。

 

  1. user1@web:~$ cat /etc/passwd | cut -d: -f1
  2. root
  3. daemon
  4. bin
  5. sys
  6. sync
  7. games
  8. man
  9. lp
  10. mail
  11. news
  12. uucp
  13. proxy
  14. www-data
  15. backup
  16. list
  17. irc
  18. gnats
  19. nobody
  20. libuuid
  21. syslog
  22. messagebus
  23. sshd
  24. ntp
  25. user1
  26. user11
  27. user12
  28. mysql

 

/etc/passwd文件

这个文件存放所有的用户信息

user1:x:1000:1000:user1.web,,,:/home/user1:/bin/bash

信息分为几个部分,每部分用冒号:隔开。

第一部分,登陆账号。

第二部分,密码,密码放在另外一个文件/etc/shadow中(密文),这里用一个字符占位。如果为空,代表用户没有密码。

第三部分,用户ID。

第四部分,用户初始化组的ID。

第五部分,用户描述信息,全名等信息。

第六部分,用户主目录,工作目录,登录之后所处的目录。

第七部分,用户的shell。

 

/etc/group文件

这个文件存放所有用户组的信息。

user1:x:1000:user1,user11

信息分为几个部分,每部分用冒号:隔开。

第一部分,组名称。

第二部分,组密码。

第三部分,组ID。

第四部分,组包含的用户,用逗号分隔。上面的用户组user1中包含user1和user11两个用户。

 

/etc/shadow文件

这个文件保存所有用户的密码信息。

 

  1. user1:$6$UA2YOwOJ$tn.u3BmF1AjESuzbmmoMkMdjC1B4oUs3I0aA4bq2v.9auayz4Baz3SuZYCtM1xRqQUhjYYmPb4FF1XzPtE1l4/:15636:0:99999:7:::

信息分为几个部分,每部分用冒号:隔开。

第一部分,登陆账号。

第二部分,经过加密的密码,如果不想让当前用户登录,把这部分的内容修改为*或者!。

第三部分,最近更改密码的日期,日期以1970年1月1日作为第一天,然后依次加1。

第四部分,密码不可更改的天数。

第五部分,密码需要重置的天数。

第六部分,密码重置前的警告天数,就是在到达必须重置的日期之前的几天就会提示你更改密码。

第七部分,密码过期的宽限天数,就是在密码到达重置的天数,还没有重置,在后面的几天还可以继续使用。

第八部分,账号失效时间。

第九部分,保留。

 

chkconfig

查看开机自启动列表

 

  1. chkconfig –list

 

很多时候,我们需要编译源代码,然后安装一个应用。

源代码通常是tar.gz或者tar.bz2的,需要先解压释放,然后在进行编译和安装。

 

  1. tar zxvf apr-1.4.6.tar.gz
  2. cd apr-1.4.6
  3. ./configure
  4. make
  5. sudo make install

 

tar是一个归档的命令,就是将一堆文件,归档成一个文件,在需要的时候再进行释放。同时还支持压缩。

c,创建归档文件

x,释放归档文件

z,gz压缩

 

  1. tar cf demo.tar demo
  2. tar xf demo.tar
  3. tar czf demo.tar.gz demo
  4. tar xzf demo.tar.gz

 

link

建立连接,ln

-s,软连接,符号链接,有点像windows中的快捷方式。删除源文件,链接文件还存在,但是打开连接文件会失败,提示找不到文件。

-d,硬链接,有点像备份。删除源文件,连接文件依然存在,而且可以打开。

修改源文件,对应的软硬链接都会同步修改。硬链接应该是分配了新的空间,但是信息会和源文件进行同步。

两者在用ls -l查看的时候显示不一样。

 

  1. ls -s/-d target link_name
  1. user1@web:~$ ln -s demo1 demo1-slink
  2. user1@web:~$ ln -d demo1 demo1-dlink
  3. user1@web:~$ ls -l demo1
  4. -rw-rw-r– 2 user1 user1 7 Oct 23 21:30 demo1
  5. user1@web:~$ ls -l demo1*
  6. -rw-rw-r– 2 user1 user1 7 Oct 23 21:30 demo1
  7. -rw-rw-r– 2 user1 user1 7 Oct 23 21:30 demo1-dlink
  8. lrwxrwxrwx 1 user1 user1 5 Oct 25 10:25 demo1-slink -> demo1

 

查询进程

  1. ps -ef | grep nginx

 

杀死进程

  1. kill 进程号

 

取消开机启动

  1. update-rc.d -f nginx remove

 

停止一个apache2网站

  1. a2dissite blog
  2. service apache2 reload

 

启动一个apache2网站

  1. a2ensite blog
  2. service apache2 reload

 

 

踢出登陆的用户

  1. Last login: Thu Oct 25 23:23:27 2012 from 106.3.102.45
  2. root@web:~# who
  3. root     pts/3        2012-10-25 23:27 (106.3.102.45)
  4. root     pts/0        2012-10-25 21:40 (106.3.102.45)
  5. root     pts/2        2012-10-25 22:12 (106.3.102.45)
  6. root     pts/4        2012-10-25 22:21 (106.3.102.45)
  7. root     pts/5        2012-10-25 23:23 (106.3.102.45)
  8. root@web:~# pkill -KILL -t pts/0
  9. root@web:~# pkill -KILL -t pts/2
  10. root@web:~# pkill -KILL -t pts/4
  11. root@web:~# pkill -KILL -t pts/5
  12. root@web:~# who
  13. root     pts/3        2012-10-25 23:27 (106.3.102.45)

 

清屏命令

  1. clear

 

查看系统信息

查看内存使用情况

  1. free

 

查看系统资源使用情况

包括内存,进程,cpu

 

  1. top

 

I/O监视器-iotop

iotop 是一个用来监视磁盘 I/O 使用状况的 top 类工具。如下图所示,Iotop 具有与 top 相似的 UI,其中包括 PID、用户、I/O、进程等相关信息。
1、安装

  1. ubuntu:apt-get install iotop
  2. centos:yum install iotop

2、使用方法
iotop [OPTIONS]

主要选项有:
-o :只显示有io操作的进程
-b :批量显示,无交互。主要用作记录到文件。
-n NUM:显示NUM次,主要用于非交互式模式。
-d SEC:间隔SEC秒显示一次。
-p PID:监控的进程pid
-u USER:监控的进程用户。

iotop

Centos 禁Ping

1.关闭ping请求

sysctl -w net.ipv4.icmp_echo_ignore_all=1
sysctl -p

2.开启ping请求

sysctl -w net.ipv4.icmp_echo_ignore_all=0
sysctl -p

监控网络状态工具- Smokeping

一.安装软件
1.使用yum 命令安装所需的工具
yum install gcc freetype-devel zlib-devel libpng-devel libart_lgpl-devel httpd-devel apr-util-devel apr-devel cairo cairo-devel pango pango-devel libxml2 libxml2-devel perl-XML-Simple.noarch perl-Crypt-SSLeay perl-Digest-HMAC

2. 安装rrdtool
wget http://oss.oetiker.ch/rrdtool/pub/rrdtool-1.3.6.tar.gz
tar zxvf rrdtool-1.3.6.tar.gz
cd rrdtool-1.3.6
./configure –disable-tcl
make
make install

3. 安装cgilib
wget http://down1.chinaunix.net/distfiles/cgilib-0.5.tar.gz
tar zxvf cgilib-0.5.tar.gz
cd cgilib-0.5
make
cp libcgi.a /usr/local/lib
cp cgi.h /usr/include

4. 安装fping
wget http://fping.sourceforge.net/download/fping.tar.gz
tar zxvf fping.tar.gz
cd fping-2.4b2_to
./configure
make
make check
make install

5.安装 echoping
wget http://jaist.dl.sourceforge.net/project/echoping/echoping/6.0.0/echoping-6.0.0.tar.gz
tar zxvf echoping-6.0.0.tar.gz
cd echoping-6.0.0
./configure
make
make test
make install

6.安装 CGI-SpeedyCGI
wget ftp://195.220.108.108/linux/epel/5/x86_64/mod_speedycgi-2.22-4.el5.x86_64.rpm
wget ftp://ftp.muug.mb.ca/mirror/fedora/epel/5/x86_64/perl-CGI-SpeedyCGI-2.22-4.el5.x86_64.rpm
rpm -ivh –force perl-CGI-SpeedyCGI-2.22-4.el5.x86_64.rpm
rpm -ivh mod_speedycgi-2.22-4.el5.x86_64.rpm
wget http://mirrors.163.com/cpan/authors/id/H/HO/HORROCKS/CGI-SpeedyCGI-2.22.tar.gz
tar zxvf CGI-SpeedyCGI-2.22.tar.gz
cd CGI-SpeedyCGI-2.22
perl Makefile.PL
遇到问题选择默认选项(no)
make
make test
make install

7.安装smokeping
wget http://oss.oetiker.ch/smokeping/pub/smokeping-2.3.6.tar.gz
tar zxvf smokeping-2.3.6.tar.gz
mv smokeping-2.3.6 /usr/local/smokeping
cd /usr/local/smokeping

二.配置smokeping
1. 修改文件名
修改/usr/local/smokeping/bin下的smokeping.dist
cp smokeping.dist smokeping
修改etc/ 下的 basepage.html.dist,config.dist,smokemail.dist
cp basepage.html.dist basepage.html
cp config.dist config
cp smokemail.dist smokemail
chmod 600 smokeping_secrets.dist
修改htdoc/下的smokeping.cgi.dist
cp smokeping.cgi.dist smokeping.cgi

2. 修改配置文件

配置 bin/smokeping
vi /usr/local/smokeping/bin/smokeping
在这个文件里面我们需要修改前面两个 lib 和后面 config 文件的 path。
两个 lib 分别是 smokeping 的 lib 和 rrdtool 的 lib (红色为修改后的内容)
#!/usr/sepp/bin/perl-5.8.4 -w
#!/usr/bin/perl -w
use lib qw(/usr/pack/rrdtool-1.2.23-mo/lib/perl);
use lib qw(/usr/local/rrdtool-1.3.6/lib/perl);
use lib qw(lib);
use lib qw(/usr/local/smokeping/lib);
use Smokeping 2.003006;
Smokeping::main(“etc/config.dist”);
Smokeping::main(“/usr/local/smokeping/etc/config”);
配置 htdocs/smokeping.cgi,方法与上面相同
vi /usr/local/smokeping/htdocs/smokeping.cgi
************************
#!/usr/sepp/bin/speedy -w

#-*-perl-*-
#!/usr/bin/speedy -w
# -*-perl-*-
# use lib qw(/usr/pack/rrdtool-1.0.33-to/lib/perl);
use lib qw(/usr/local/rrdtool-1.3.6/lib/perl/);
# use lib qw(/home/oetiker/data/projects/AADJ-smokeping/dist/lib);
use lib qw(/usr/local/smokeping/lib);
use Smokeping 2.003006;
Smokeping::cgi(“/home/oetiker/data/projects/AADJ-smokeping/dist/etc/config”);
Smokeping::cgi(“/usr/local/smokeping/etc/config”);
配置 etc/config
vi usr/local/smokeping/etc/config   将以下几行替换为已经安装的相关软件的路径
*** General ***
imgcache = /home/oetiker/public_html/smokeping-ms/cache
imgcache = /usr/local/smokeping/htdocs/cache
imgurl = cache
imgurl = cache
datadir = /tmp/smokeping-ms/data
datadir = /usr/local/smokeping/var
piddir = /tmp/smokeping-ms/var
piddir = /usr/local/smokeping/var
cgiurl = http://some.url/smokeping.cgi
cgiurl = http://本机IP/htdocs/smokeping.cgi;
smokemail = /home/oetiker/checkouts/smokeping/trunk/software/etc/smokemail.dist
smokemail = /usr/local/smokeping/etc/smokemail
tmail = /home/oetiker/checkouts/smokeping/trunk/software/etc/tmail.dist
tmail = /usr/local/smokeping/etc/tmail.dist
*** Presentation ***
template= /home/oetiker/checkouts/smokeping/trunk/software/etc/basepage.html.dist
template = /usr/local/smokeping/etc/basepage.html
*** Probes ***
+ FPing
binary = /usr/sbin/fping
binary = /usr/local/sbin/fping
#** Database ***
step = 60
pings = 10

修改ping的频率,默认为300秒ping20 次,我们可以根据需要调整,这里修改为60秒 ping 10次。
*** Targets ***
#=================================
#这里用于配置监控目标,以+号分层,+为首页,++为子层,我们以百度和搜狐为例。
+TEST
menu= TEST
title = TEST
++ baidu
menu = baidu
title = baidu
host = 115.239.210.27
++ sohu
menu = sohu
title = sohu
host = 121.14.0.97
#=================================
3. 添加目录

建立下面三个目录用于保存smokeping的数据等

mkdir /usr/local/smokeping/data

mkdir /usr/local/smokeping/var

mkdir /usr/local/smokeping/htdocs/cache

chown –R apache:apache /usr/local/smokeping

4. 修改apache配置文件

vi /etc/httpd/conf/httpd.conf
添加下面内容:
Alias /smokeping/ “/usr/local/smokeping/htdocs/”
Alias /cache/ “/usr/local/smokeping/cache/”
<Directory “/usr/local/smokeping/htdocs”>
Options FollowSymLinks ExecCGI
AllowOverride None
AddHandler cgi-script cgi
Order allow,deny
Allow from all
</Directory>

三.启动
1.重启apache
service httpd restart

2.重启smokeping
/usr/local/smokeping/bin/smokeping restart

完成。