6月 23

keepalived 实现 HA || AS

【整理人:张子萌 2010-06-23】
使用keepalived实现HA(High Availability)的架构,解决双机热备工作。

keepalived进行简单配置后即可使用。对nginx、tomcat、nfs和ssh的服务进行了测试运行正常。使用ping命令测试切换,效果也比较理想。

1。环境介绍

操作系统使用CentOS5。
使用两台服务器,两台的基础IP为192.168.1.3和192.168.1.4,使用vip地址为192.168.1.10。

2。准备工作。

keepalived官方网站http://www.keepalived.org/

下载源码后编译需要使用gcc,如果系统没有需要安装。

3。编译安装

# tar zxvf keepalived-1.1.20.tar.gz
# cd keepalived-1.1.20
# ./configure –prefix=/ –mandir=/usr/local/share/man/ –with-kernel-dir=/usr/src/kernels/2.6.18-164.el5-x86_64
# make
# make install

4。配置部分

使用!和#做为注释符号。

主机部分
# vi /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {
notification_email {
simon-zzm@163.com #发送告警的邮件
}
notification_email_from keepalived@liaojie.com
smtp_server 172.0.0.1 #如果本地安装sendmail,可以填写本地IP
smtp_connect_timeout 30
router_id liaojie_devel
}

vrrp_instance VI_1 {
state BACKUP
interface eth0 #绑定vip地址的网卡
garp_master_delay 10
smtp_alert
virtual_router_id 61
priority 150 #vrrp路由竞争级别
advert_int 1
authentication {
auth_type PASS
auth_pass abcd
}
virtual_ipaddress {
192.168.1.10
192.168.1.10 label eth0:1
}
}

备机部分
配置和主机一样 priority的值不一样,主备机之间数据推荐相距50以上。

问题1
在make时报错如下:
/usr/src/kernels/2.6.9-89.0.25.EL-i686/include/linux/types.h:158: error: syntax error before “__sum16”
/usr/src/kernels/2.6.9-89.0.25.EL-i686/include/linux/types.h:158: warning: type defaults to `int’ in declaration of `__sum16′
/usr/src/kernels/2.6.9-89.0.25.EL-i686/include/linux/types.h:158: warning: data definition has no type or storage class
/usr/src/kernels/2.6.9-89.0.25.EL-i686/include/linux/types.h:159: error: syntax error before “__wsum”
/usr/src/kernels/2.6.9-89.0.25.EL-i686/include/linux/types.h:159: warning: type defaults to `int’ in declaration of `__wsum’
/usr/src/kernels/2.6.9-89.0.25.EL-i686/include/linux/types.h:159: warning: data definition has no type or storage class
make[2]: *** [check_daemon.o] 错误 1
make[2]: Leaving directory `/usr/local/src/keepalived-1.1.20/keepalived/check’
make[1]: *** [all] 错误 1
make[1]: Leaving directory `/usr/local/src/keepalived-1.1.20/keepalived’
make: *** [all] 错误 2

解决方案如下:
将types.h调用的部分注释掉
vi /usr/src/kernels/2.6.9-89.0.25.EL-i686/include/linux/types.h
到158行操作如下
#endif /* __KERNEL_STRICT_NAMES */
/*
typedef __u16 __bitwise __sum16;
typedef __u32 __bitwise __wsum;
*/

注:编译没有报错,建议编译完成将注释去掉。

5月 16

haproxy 安装 配置

[整理人:张子萌 2010-4]

一、概述

测试环境

操作系统CentOS

VIP地址:192.168.11

负载到两台web地址:192.168.1.2和192.168.1.3

WEB服务器备用地址:192.168.1.4

二、下载、安装

下载地址:http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.5.tar.gz

# tar zxvf haproxy-1.4.5.tar.gz

# cd haproxy-1.4.5

# make TARGET=linux26 PREFIX=/usr/local/haproxy

编译过程中TARGET=linux26 为系统内核版本为2.6。

# make install PREFIX=/usr/local/haproxy

# mkdir –p /usr/local/haproxy/logs

# groupadd –g650 haproxy

# useradd -u650 -g haproxy haproxy

三、配置

默认配置可以参见编译环境中examples/haproxy.cfg

本文手动编辑配置文件

# /usr/local/haproxy

# vi haproxy.cfg

global

log 127.0.0.1 local0 #使用本机的syslog来记录log

log 127.0.0.1 local1 notice

#log loghost local0 info

maxconn 4096 # ulimit-n必须是maxconn的两倍以上

chroot /usr/local/haproxy

uid haproxy

gid haproxy

daemon

nbproc 2 #设置haproxy的并发进程

pidfile /usr/local/haproxy/logs/haproxy.pid

#debug

#quiet

defaults

log global

mode http

option httplog

option httpclose #启用被动的http连接关闭

option dontlognull

option forwardfor #apache日志转发功能

option redispatch # 不会连接到宕机服务器

option nolinger #在连接关闭时立即清理连接,减少FIN_WAIT1连接

retries 3 #web无法访问的重试次数

maxconn 2000

balance roundrobin

contimeout 5000

clitimeout 50000

srvtimeout 50000

listen test 192.168.1.1:80

mode http #监听模式”tcp”也即4层,和”http”,即7层

stats enable #打开状态监控

stats auth admin:admin #进入状态监控页面

stats refresh 5s

stats uri /haproxy-stats #状态监控后缀

balance roundrobin #负载算法 roundrobin(动态加权轮循)source(加权源地址哈希)

cookie JSESSIONID prefix #处理session

option forwardfor #apache日志转发功能

option httpchk HEAD /robots.txt HTTP/1.0 #健康检测连接和协议

option forwardfor # 插入 X-Forwarded-For 头部

server web1 192.168.1.2 weight 3 minconn 100 maxconn 900 check inter 20000 fall 3

# inter 健康检测间隔 20000微妙

server web2 192.168.1.3 weight 3 minconn 100 maxconn 900 check inter 20000 fall 3

server web3 192.168.1.4 weight 3 check inter 20000 fall 3 backup

errorfile 400 /etc/haproxy/errors/400.http #根据错误号,解析错误页面

四、启动

命令在/usr/local/haproxy/sbin.

haproxy -f <配置文件> [-n 最大并发连接总数] [-N 每个侦听的最大并发数] [-d] [-D] [-q] [-V] [-c] [-p] [-s] [-l] [-dk] [-ds] [-de] [-dp] [-db] [-m <内存限制M>] [{-sf|-st} pidlist…]

-d 前台,debug模式

-D daemon模式启动

-q 安静模式,不输出信息

-V 详细模式

-c 对配置文件进行语法检查

-s 显示统计数据

-l 显示详细统计数据

&nbsp
; -dk 不使用kqueue

-ds 不使用speculative epoll

-de 不使用epoll

-dp 不使用poll

-db 禁用后台模式,程序跑在前台

-sf 程序启动后向pidlist里的进程发送FINISH信号,这个参数放在命令行的最后

-st 程序启动后向pidlist里的进程发送TERMINATE信号,这个参数放在命令行的最后但配置后,死活不会输出日志,还没找到解决方法,网上有些,但行不通:

建议第一次运行建议使用前台模式便于调试

./haproxy –f /usr/local/haproxy/haproxy.cfg –d

五、优化

a)日志部分

健康检测会产生大量日志,建议屏蔽掉。

apache不记录健康检查和监控的log

SetEnvIf Request_URI “^//robots.txt$” dontlog

CustomLog output/logs/cookie_logs/%w/cookie_log cookielog env=!dontlog

六、常见问题

a) 启动失败

使用./haproxy –f /usr/local/haproxy/haproxy.cfg –d启动系统报错如下:

Starting haproxy: [ALERT] 015/191034 (15631) : Starting proxy webfarm: cannot bind socket…on both load balancers

[ALERT] 056/103843 (1358) : Starting proxy www-balancer: cannot bind socket

解法方法:

修改# vi /etc/sysctl.conf

net.ipv4.ip_nonlocal_bind=1

保存结果,使结果生效

# sysctl –p

5月 01

tokyo cabinet和tokyo tyrant安装 调试

Tokyo Cabinet和Tokyo Tyrant 是日本人 平林幹雄 开发的分布式缓存工具。

Tokyo Cabinet是 DBM 数据库,读写快速,哈希模式写入100万条数据只需0.643秒,读取100万条数据只需0.773秒。数据文件只有一个,里面存放多个的数据记录,key和valuevalue都是连续不定长的,即可以是二进制,也可是是字符串。数据文件记录组织有三种模式,hash表、B+树、定长数组。

Tokyo Tyrant 是Tokyo Cabinet 数据库网络接口。它拥有Memcached兼容协议,也可以通过HTTP协议进行数据交换。

Tokyo Tyrant和Tokyo Cabinet合并即成为高并发的分布式持久性存储系统。此系统支持双机热备,主辅库均可读写。用于主辅同步的数据日志也很小,大约是数据文件的1.3倍。为了保证性能建议在64位操作系统安装。

作者个人主页:http://1978th.net/

1.tokyocabinet安装

下载地址http://1978th.net/tokyocabinet/pastpkg/tokyocabinet-1.3.27.tar.gz

# tar zxvf tokyocabinet-1.3.27.tar.gz

# cd tokyocabinet-1.3.27

# ./configure && make && make install

直接编译不指定路径,如果是32为操作系统,需要添加–enable-off64参数,且数据文件不能超过2G。

2.Tokyotyrant安装

下载地址http://1978th.net/tokyotyrant/pastpkg/tokyotyrant-1.0.1.tar.gz

# tar zxvf tokyotyrant-1.0.1.tar.gz

# cd tokyotyrant-1.0.1

# ./configure && make && make install

3.优化系统,指定日志等文件存放位置

# ulimit -SHn 51200

# mkdir -p /usr/local/ttserver

4. 启动参数

ttserver [-host name] [-port num] [-thnum num] [-tout num] [-dmn] [-pid path] [-log path] [-ld|-le] [-ulog path] [-ulim num] [-uas] [-sid num] [-mhost name] [-mport num] [-rts path] [dbname]

-host name :要绑定的服务器域名或IP地址。默认绑定本机所有IP地址。

-port num : 要绑定的端口号。默认端口号为1978

-thnum num : 指定线程数。默认为8个线程。

-tout num : 指定每个会话的超时时间(单位为秒)。默认永不超时。

-dmn : 以守护进程方式运行。

-pid path : 输出进程ID到指定文件。

-log path : 输出日志信息到指定文件(这里指定文件名)。

-ld|-le : 日志文件中记录DEBUG调试信息|在日志文件中仅记录错误信息。此项为二选一,推荐使用-le。

-ulog path : 指定同步日志文件存放路径,此处路径为存放目录。

-ulim num : 指定每个同步日志文件的大小(例如128m)。

-uas : 使用异步IO记录更新日志(使用此项会减少磁盘IO消耗,但是数据会先放在内存中,不会立即写入磁盘,如果重启服务器或ttserver进程被kill掉,将导致部分数据丢失。一般情况下不建议使用)。

-sid num : 指定服务器ID号(当使用主辅模式时,每台ttserver需要不同的ID号)

-mhost name : 指定主辅同步模式下,对方服务器域名或IP地址。

-mport num : 指定主辅同步模式下,对方服务器的端口号。

-rts path : 指定用来存放同步时间戳的文件名。

dbname:制定数据库名,如果省略,则被视作内存hash数据库。

5.单机启动服务

服务器IP地址为192.168.1.100

# ttserver -host 192.168.1.100 -port 1111 -thnum 9 -dmn -pid /usr/local/ttserver/ttserver.pid -log /usr/local/ttserver/ttserver.log -le -ulog /usr/local/ttserver/ -ulim 64m -sid 1 –rts /usr/local/ttserver/ttserver.rts /usr/local/ttserver/database.tch

6.双机模式

主机IP地址192.168.1.100。 备机IP地址192.168.1.101

主机启动:

# ttserver -host 192.168.1.100 -port 1111 -thnum 9 -dmn -pid /usr/local/ttserver/ttserver.pid -log /usr/local/ttserver/ttserver.log -le -ulog /usr/local/ttserver/ -ulim 64m -sid 100 -mhost 192.168.101 -mport 1111 -rts /usr/local/ttserver/ttserver.rts /usr/local/ttserver/database.tch

备机启动:

# ttserver -host 192.168.1.101 -port 1111 -thnum 9 -dmn -pid /usr/local/ttserver/ttserver.pid -log /usr/local/ttserver/ttserver.log -le -ulog /usr/local/ttserver/ -ulim 64m -sid 101 -mhost 192.168.1.100 -mport 1111 -rts /ttserver/ttserver.rts /ttserver/database.tch

注:

如果使用的是哈希数据库,可以指定参数“#bnum=xxx”来提高性能。程序可以指定bucket存储桶的数量。例如指定“#bnum=10000”,就可以将最新最热的1万条记录缓存在内存中。

使用hash数据库,最大会缓存20000个记录,最大使用内存434217728bytes(414M),bucket存储桶的数量10000000

如果使用B+ tree数据库我们可以通过指定”#lcnum=xxx#bnum=yyy” 来提高性能.第一个参数指定被缓存的最大叶子节点数,受内存容量限制,第二个参数指定桶的数量,它应该大于总记录数的1/128.举例#xmsiz=434217728#rcnum=20000

数据库类型

数据库名的命名方式被Tokyo Cabinet的抽象API指定。

如果数据库名为”*”,表示内存hash数据库。

如果数据库名为”+”表示内存tree数据库。

如果数据库名为”.tch”,则数据库为hash数据库。

如果数据库名的后缀为”.tcb”,数据库将为B+ tree数据库。

如果数据库名的后缀为”.tcf”。则数据库将为fixed-length数据库。

如果数据库名的后缀为”.tct”,则数据将为一个table数据库(有表
的概念)。

数据库的调整参数通过数据库名的延伸来指定,通过”#”分开,每个参数通过一个参数名和值来指定,用”=”隔开。

内存hash数据库支持”bnum”, “capnum”, 和 “capsiz”

内存tree数据库支持”capnum” 和 “capsiz”

capnum指定记录的最大容量,capsiz指定最大的内存使用量(在内存数据库中),记录通过存储的顺序移除。

hash数据库支持”mode”, “bnum”, “apow”, “fpow”, “opts”, “rcnum”, 和 “xmsiz”.

`rcnum’指定最大的缓存记录数。如果它不大于零,那么缓存记录不可用。默认不可用。

xmsiz 指定外部内存的大小。如果不大于0,内存不可用。默认是67108864,即64M。

`bnum’ 指定bucket存储桶的数量。如果指定的数目不大于0,将会使用默认的数值131071

推荐数量应该在所有需要存储的记录总数的0.4-4倍

`apow’ 跟一个key关联的记录数,2的N次方表示. 如果不指定,默认2^4=16.

`fpow’ specifies the maximum number of elements of the free block pool by power of 2. 默认2^10=1024.

`opts’ 指定选项,位或:`HDBTLARGE’ 指定数据库的大小通过使用64位数组桶能够超过2G。

`HDBTDEFLATE’ 指定每个记录被Deflate encoding压缩。

`HDBTBZIP’ 指定每个记录被BZIP2 encoding压缩

`HDBTTCBS’指定每个记录被 TCBS encoding压缩.

B+ tree数据库支持”mode”, “lmemb”, “nmemb”, “bnum”, “apow”, “fpow”, “opts”, “lcnum”, “ncnum”, 和 “xmsiz”.

Fixed-length 数据库 支持 “mode”, “width”, and “limsiz”.

Table 数据库支持 “mode”, “bnum”, “apow”, “fpow”, “opts”, “rcnum”, “lcnum”, “ncnum”, “xmsiz”, 和 “idx”

“idx”指定表的索引。

“mode”可以包含 “w” 写, “r” 读, “c” 创建, “t” 截断,”e” 无锁,和”f” 非阻塞锁。默认的的mod为”wc”。

7.测试

ttserver对外有三种协议,可以用curl程序调用http协议访问,可用tt自带的客户端程序,使用私有二进制协议访问。

tcrtest :测试程序, tc remote test

tcrmttest :多线程测试程序 tc multi-thread test

两个测试程序写入的数据key,value均是8字节的,按照00000001,00000002格式

tcrtest write host rnum : 写入 rnum条记录(是重新写,不是追加)

tcrtest read host : 读出所有记录

tcrtest remote host : 删除所有记录

tcrmgr : 测试和调试

usage:

tcrmgr inform [-port num] [-st] host

tcrmgr put [-port num] [-sx] [-dk|-dc] host key value

tcrmgr out [-port num] [-sx] host key

tcrmgr get [-port num] [-sx] [-px] [-pz] host key

tcrmgr mget [-port num] [-sx] [-px] host [key…]

tcrmgr list [-port num] [-m num] [-pv] [-px] [-fm str] host

tcrmgr sync [-port num] host

tcrmgr vanish [-port num] host

tcrmgr copy [-port num] host dpath

tcrmgr restore [-port num] [-ts num] host upath

tcrmgr setmst [-port num] [-mport num] host [mhost]

tcrmgr repl [-port num] [-ts num] [-sid num] [-ph] host

tcrmgr http [-ah name value] [-ih] url

tcrmgr version

tcrmgr inform host: 获取服务器的信息

tcrmgr put host key value : 添加记录

tcrmgr get host key : 获取记录

tcrmgr out host key : 删除记录

tcrmgr list host : 列出数据库中所有的key(这个在memcached中是需要patch才能实现的)

tcrmgr vanish host : 删除所有数据

举例

1)查看服务器统计信息

tcrmgr inform -port 1111 -st 192.168.1.100

2)写入数据

tcrmgr put -port 1111 192.168.1.100 test value

3)读取数据

tcrmgr get -port 1111 192.168.1.100 test

4)删除数据

tcrmgr out -port 1111 192.168.1.100 test

5)查看所有的key

tcrmgr list -port 1111 192.168.1.100

6)备份数据

tcrmgr copy -port 1111 192.168.1.100 /usr/local/ttserver/backup/backup.tch

一定要写绝对路径

7) 同步内存数据到磁盘(当使用异步io时将缓存的数据写入磁盘)

tcrmgr sync -port 1111 192.168.1.100

8)数据导入

注意:tsv格式的文件以TAB分隔,如:test2tvalue2n

注意:路径是本地路径,所以不必是绝对路径

tcrmgr importtsv -port 1111 192.168.1.100 temp/2.tsv

9)通过ulog日志恢复数据

注意:路径是服务器上的绝对路径

tcrmgr restore -port 1111 192.168.1.100 /data/ttserver/ulog/

10)打印更新日志(挂起,一直显示日志)

可能是用于实时查看ttserver有哪些操作,相当于tail –f

tcrmgr repl -port 1111 -ph 192.168.1.100

8.ttservctl

命令ttservctl是服务器的启动脚本。Shell编写可以被操作系统的引导过程rc脚本调用,此命令用于以下格式。

ttservctl start

启动服务器。

ttservctl st
op

停止服务器。

ttservctl restart

重新启动服务器。

ttservctl hup

HUP信号发送到服务器的日志轮换。

默认情况该数据库被放置为“/var/ttserver/casket.tch”。该日志和相关的文件,也放在“/var/ ttserver”目录。该命令返回0成功,其它为失败。

9.ttulmgr

命令ttulmgr是导出和导入的更新日志的实用工具,可以用` grep ‘和’ sed ‘等过滤工具更新日志。此命令用于以下格式,`upath’指定了更新日志目录。

ttulmgr export [-ts num ] [-sid num ] upath

作为TSV格式文本数据导出更新日志到标准输出。

ttulmgr import upath

从标准输入导入TSV格式文本数据到更新日志。

可选项功能如下。

-ts num :指定开始时间戳记。

-sid num :指定本机服务器ID。

该命令返回0成功,另一个失败。

3月 28

nagios 安装调试

[整理人:张子萌 2010-04]

需要准备软件如下:
centos

nagios-3.2.0
nagios-plugin-1.4.14

除了nagios还需要安装以下软件
apache2 安装路径为/usr/local/apache
perl
gcc 编译工作系统默认即可,如果没有安装推荐使用yum安装。
php nagios3.2页面需要php环境
yum install gcc glibc glibc-common
绘制图表需要安装以下包
freetype-2.3.5.tar.gz
libiconv-1.11.tar.gz
libmcrypt-2.5.7.tar.gz
libpng-1.2.10.tar.bz2
jpegsrc.v6b.tar.gz
gd-2.0.35.tar.gz
可以使用yum或者源码安装。
以上绘图包和apache安装可以参照:http://simon-zzm.blog.163.com/blog/static/88809522201028104721790/

1. 建组建帐号nagios

# groupadd nagios
# groupadd apache
# useradd -g nagios -G apache nagios
# useradd -g apache -G nagios apache

2. 编译安装nagios

# tar zxvf nagios-3.2.0.tar.gz
# cd nagios-3.2.0
# ./configure –prefix=/usr/local/nagios
–with-command-group=nagios
–with-httpd-conf=/usr/local/apache/conf/
# make all
# make install
# make install-init
# make install-config
# make install-commandmode
# make install-webconf

3. 装nagios-plugin-1.4.13

# tar zxvf nagios-plugin-1.4.14.tar.gz
# cd nagios-plugin-1.4.14
# ./configure –prefix=/usr/local/nagios –with-nagios-user=nagios –with-nagios-group=nagios
# make
# make install

注:centos4 上安装时
在checking for redhat spopen problem…停住。
需要添加–enable-redhat-pthread-workaround参数

4. 创建web登录nagios账号

# cd /usr/local/apache/bin
# ./htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin ;创建一个登录WEB的帐号

5. 配置nagios和apache整合
本文使用虚拟机配置。
# cd /usr/local/apache/conf/extra/
# vi httpd-vhosts.conf

配置apache的cgi ,在httpd-vhosts.conf后增加配置如下:

ScriptAlias /nagios/cgi-bin /usr/local/nagios/sbin

Options ExecCGI
AllowOverride None
Order allow,deny
Allow from all
AuthName “Nagios Access”
AuthType Basic
AuthUserFile /usr/local/nagios/etc/htpasswd.users
Require valid-user

Alias /nagios /usr/local/nagios/share

Options None
AllowOverride None
Order allow,deny
Allow from all
AuthName “Nagios Access”
AuthType Basic
AuthUserFile /usr/local/nagios/etc/htpasswd.users
Require valid-user

首先测试配置文件是否正确
# /usr/local/apache/bin/apachectl configtest

重启apache
# /usr/local/apache/bin/apachectl stop
# /usr/local/apache/bin/apachectl start

6. 启动nagios

测试nagios配置是否可用
# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

如果可用启动服务
# /etc/init.d/nagios start

现在你可以通过浏览器访问监控的界面了,http://x.x.x.x/nagios

7. 定义监控组

7.1 建立test监控组,监控192.268.1.103服务器。

在/usr/local/nagios/etc/目录下建立test目录,并定义主机.
监控192.168.1.103服务器的配置文件名为test_1_103.cfg.
# mkdir -p /usr/local/nagios/etc/test
# vi /usr/local/nagios/etc/testgroup.cfg
# 定义主机
define host{
use test-host
alias test Linux Server
address test_1_103; 如多个文件可以用逗号分开
}

7.2 建立监控文件
# vi /usr/local/nagios/etc/test_1_103.cfg
# 定义Ping远程Linux主机
define service{
use test-service ; 这个名字要和监控模板中一样,见7.3
host_name test;
service_description PING;
check_command check_ping!100.0,20%!500.0,60% ;check_ping命令在commands.cfg中定义,后跟两个参数,命令及参数间用!分割。
}
# 检查远程Linux主机根分区使用情况,必须安装nrpe并在/usr/local/nagios/etc/objects/commands.cfg中定义,见第8部分。
define service{
use generic-service ; Name of service template to use
host_name sectop
service_description Root Partition
check_command check_nrpe!check_disk_root
}
# 检查远程Linux主机的登录人数
define service{
use generic-service ; Name of service template to use
host_name sectop
service_description Current Users
check_command check_nrpe!check_users
}
# 检查远程Linux的主机的负载
define service{
use generic-service ; Name of service template to use
host_name sectop
service_description Current Load
check_command check_nrpe!check_load
}
# 检查远程Linux主机swap分区使用情况
define service{
&nb
sp; use generic-service ; Name of service template to use
host_name sectop
service_description Swap Usage
check_command check_nrpe!check_swap
}
# 检查远程Linux主机的SSH服务
define service{
use generic-service ; Name of service template to use
host_name sectop
service_description SSH
check_command check_ssh
notifications_enabled 1 ;0为不发送告警信息 1为发送

}
# 检查远程Linux主机的HTTP服务
define service{
use generic-service ; Name of service template to use
host_name sectop
service_description HTTP
check_command check_http
notifications_enabled 1 ;0为不发送告警信息 1为发送
}

7.3 定义监控组的模板
# vi /usr/local/nagios/etc/objects/templates.cfg

define contact{
name test-contact ; The name of this contact template
service_notification_period 24×7 ; service notifications can be sent anytime
host_notification_period 24×7 ; host notifications can be sent anytime
service_notification_options w,u,c,r,f,s ; send notifications for all service states, flapping events, and scheduled downtime events
host_notification_options d,u,r,f,s ; send notifications for all host states, flapping events, and scheduled downtime events
service_notification_commands notify-service-by-email ; send service notifications via email
host_notification_commands notify-host-by-email ; send host notifications via email
register 0 ; DONT REGISTER THIS DEFINITION – ITS NOT A REAL CONTACT, JUST A TEMPLATE!
}

define host{
name test-host ; The name of this host template
notifications_enabled 1 ; Host notifications are enabled
event_handler_enabled 1 ; Host event handler is enabled
flap_detection_enabled 1 ; Flap detection is enabled
failure_prediction_enabled 1 ; Failure prediction is enabled
process_perf_data 1 ; Process performance data
retain_status_information 1 ; Retain status information across program restarts
retain_nonstatus_information 1 ; Retain non-status information across program restarts
notification_period 24×7 ; Send host notifications at any time
register 0 ; DONT REGISTER THIS DEFINITION – ITS NOT A REAL HOST, JUST A TEMPLATE!
}

define host{
name te
st-server ; The name of this host template
use test-host ; This template inherits other values from the generic-host template
check_period 24×7 ; By default, Linux hosts are checked round the clock
check_interval 5 ; Actively check the host every 5 minutes
retry_interval 1 ; Schedule host check retries at 1 minute intervals
max_check_attempts 10 ; Check each Linux host 10 times (max)
check_command check-host-alive ; Default command to check Linux hosts
notification_period workhours ; Linux admins hate to be woken up, so we only notify during the day
notification_interval 120 ; Resend notifications every 2 hours
notification_options d,u,r ; Only send notifications for specific host states
contact_groups admins ; Notifications get sent to the admins by default
register 0 ; DONT REGISTER THIS DEFINITION – ITS NOT A REAL HOST, JUST A TEMPLATE!
}

define service{
name test-service ; The ‘name’ of this service template
active_checks_enabled 1 ; Active service checks are enabled
passive_checks_enabled 1 ; Passive service checks are enabled/accepted
parallelize_check 1 ; Active service checks should be parallelized (disabling this can lead to major performance problems)
obsess_over_service 1 ; We should obsess over this service (if necessary)
check_freshness 0 ; Default is to NOT check service ‘freshness’
notifications_enabled 1 ; Service notifications are enabled
event_handler_enabled 1 ; Service event handler is enabled
flap_detection_enabled 1 ; Flap detection is enabled
failure_prediction_enabled 1 ; Failure prediction is enabled
process_perf_data 1 ; Process performance data
retain_status_information 1 ; Retain status information across program restarts
retain_nonstatus_information 1 ; Retain non-status information across program restarts
is_volatile 0 ; The service is not volatile
check_period 24×7 ; The service can be checked at any time of the day
max_check_attempts 3 ; Re-check the serv
ice up to 3 times in order to determine its final (hard) state
normal_check_interval 10 ; Check the service every 10 minutes under normal conditions
retry_check_interval 2 ; Re-check the service every two minutes until a hard state can be determined
contact_groups admins ; Notifications get sent out to everyone in the ‘admins’ group
notification_options w,u,c,r ; Send notifications about warning, unknown, critical, and recovery events
notification_interval 60 ; Re-notify about service problems every hour
notification_period 24×7 ; Notifications can be sent out at any time
register 0 ; DONT REGISTER THIS DEFINITION – ITS NOT A REAL SERVICE, JUST A TEMPLATE!
}

7.4 修改告警模板
# vi vi /usr/local/nagios/etc/objects/contact.cfg
define contact{
contact_name nagiosadmin ; Short name of user
use test-contact ; Inherit default values from generic-contact template (defined above)
alias Nagios Admin ; Full name of user
email admin@mail.com ; <<***** CHANGE THIS TO YOUR EMAIL ADDRESS ******
}

define contactgroup{
contactgroup_name admins
alias Nagios Administrators
members nagiosadmin
}

7.5 添加加载项

在nagios.cfg配置文件中开启对/usr/local/nagios/etc/test/加载
cfg_dir=/usr/local/nagios/etc/test/testgroups.cfg
cfg_dir=/usr/local/nagios/etc/test/test_1_103.cfg

测试nagios配置是否可用
# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

如果重启服务
# /etc/init.d/nagios restart

8. 安装nrpe
nrpe用于和远程服务器交互使用。
nrpe分为两部分:一部分是运行在client端。一部分运行在客户端

8.1 nagios服务器上安装
#tar xzvf nrpe-2.12.tar.gz
#cd nrpe-2.12
#./configure
#make all
#make install-plugin #服务器端只要安装nrpe监控插件就行

在/usr/local/nagios/etc/objects/commands.cfg中定义check_nrpe命令
#vi /usr/local/nagios/etc/objects/commands.cfg
添加如下
# ‘check_nrpe ‘ command definition
define command{
command_name check_nrpe
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}

8.2 在要监控的客户端上
参照 1 中在客户服务器上建立nagios用户组和nagios用户
# tar xzvf nagios-plugins-1.4.14.tar.gz
# cd nagios-plugins-1.4.14
# ./configure –prefix=/usr/local/nagios
# make
# make install
# chown -R nagios:nagios /usr/local/nagios/

# tar xzvf nrpe-2.12.tar.gz
# cd nrpe-2.12
# ./configure –prefix=/usr/local/nagios
# make all
# make install-plugin
# make install-daemon
# make install-daemon-config
修改配置文件
# vi /usr/local/nagios/etc/nrpe.cfg #修改nrpe配置文件,允许Nagios监控服务器监控本机

allowed_hosts=127.0.0.1,192.168.0.19 #此处IP为监控服务器的地址,如多个地址可以使用逗号分隔

启动客户端
#/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d
查看端口是否已经监听
#netstat -tln #查看端口
tcp 0 0 0.0.0.0:5666 0.0.0.0:*

添加随系统启动,启动nrep客户端
#vi /etc/rc.d/rc.local
/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d

9. 设置被监控的windows服务器。
找了个NSClient++-windows*.msi的安装包,安装完毕修改配置,在nagios服务器也需要配
置,此处不做详解。

附录:
1. 配置nagios及其plugins

/usr/local/nagios/etc下的文件
#控制cgi访问的配置文件
cgi.cfg

#Nagios主配置文件
nagios.cfg

#resource.cfg定义了一些变量,以便被其它文件引用,如$USER1$
resource.cfg

# objects是一个目录,用于定义Nagios对象
objects

/usr/local/nagios/etc/objects下的文件

#命令

3月 24

rsync安装配置

rsync是linux下快速镜像工具。

下载地址:http://samba.anu.edu.au/rsync/

1. 安装

# tar zxvf rsync-3.0.5.tar.gz
# ./configure –prefix=/usr/local/rsync
# make && make install

2. 添加配置文件

添加/etc/rsyncd.conf文件,文件内容如下:

log file = /var/log/rsyncd.log #日志位置
pid file = /var/run/rsyncd.pid #进程号存放位置
lock file = /var/run/rsync.lock #锁文件存放位置

uid = root #守护进程的用户权限
gid = root

#port=873 #rsync使用的端口,默认873

#hosts allow = 192.168.1.2 #全局允许通过的IP地址

max connections = 5 # 客户端最大连接数目

[back] # 要同步的模块名
path = /back #要同步的目录
comment = source #
ignore errors #忽略IO错误
read only = no # no客户端可上传文件,yes只读
write only = no # no客户端可下载文件,yes不能下载
#list = yes #是否提供资源列表
auth users = back_root #登陆系统使用的用户名,没有默认为匿名。
hosts allow = 192.168.1.3 #本模块允许通过的IP地址
hosts deny = 192.168.1.4 #禁止主机IP
secrets file=/etc/rsync.pass #密码文件存放的位置

3. 配置密码文件

密码文件为配置文件中所写的文件/etc/rsync.pass格式为

账户:密码

4. 修改配置文件和密码文件权限为600

# chmod 600 /etc/rsyncd.conf
# chmod 600 /etc/rsync.pass

5. 启动守护进程

# rsync –daemon

可以通过以下两条命令查看进程是否存在
ps -aux |grep rsync
netstat -an |grep 873

6. 服务端程序启动后,在客户端执行第一步操作。

实例演示
cd /usr/local/rsync/bin
下载文件
./rsync -vzrtopg –progress –delete back_root@x.x.x.x::back /tmp/rsync
上传文件
./rsync -vzrtopg –progress –delete /tmp/rsync back_root@x.x.x.x::back

rsync参数的具体解释如下:

-v, –verbose 详细模式输出
-q, –quiet 精简输出模式
-c, –checksum 打开校验开关,强制对文件传输进行校验
-a, –archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
-r, –recursive 对子目录以递归模式处理
-R, –relative 使用相对路径信息
-b, –backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为~filename。可以使用–suffix选项来指定不同的备份文件前缀。
–backup-dir 将备份文件(如~filename)存放在在目录下。
-suffix=SUFFIX 定义备份文件前缀
-u, –update 仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文件。(不覆盖更新的文件)
-l, –links 保留软链结
-L, –copy-links 想对待常规文件一样处理软链结
–copy-unsafe-links 仅仅拷贝指向SRC路径目录树以外的链结
–safe-links 忽略指向SRC路径目录树以外的链结
-H, –hard-links 保留硬链结
-p, –perms 保持文件权限
-o, –owner 保持文件属主信息
-g, –group 保持文件属组信息
-D, –devices 保持设备文件信息
-t, –times 保持文件时间信息
-S, –sparse 对稀疏文件进行特殊处理以节省DST的空间
-n, –dry-run现实哪些文件将被传输
-W, –whole-file 拷贝文件,不进行增量检测
-x, –one-file-system 不要跨越文件系统边界
-B, –block-size=SIZE 检验算法使用的块尺寸,默认是700字节
-e, –rsh=COMMAND 指定使用rsh、ssh方式进行数据同步
–rsync-path=PATH 指定远程服务器上的rsync命令所在路径信息
-C, –cvs-exclude 使用和CVS一样的方法自动忽略文件,用来排除那些不希望传输的文件
–existing 仅仅更新那些已经存在于DST的文件,而不备份那些新创建的文件
–delete 删除那些DST中SRC没有的文件
–delete-excluded 同样删除接收端那些被该选项指定排除的文件
–delete-after 传输结束以后再删除
–ignore-errors 及时出现IO错误也进行删除
–max-delete=NUM 最多删除NUM个文件
–partial 保留那些因故没有完全传输的文件,以是加快随后的再次传输
–force 强制删除目录,即使不为空
–numeric-ids 不将数字的用户和组ID匹配为用户名和组名
–timeout=TIME IP超时时间,单位为秒
-I, –ignore-times 不跳过那些有同样的时间和长度的文件
–size-only 当决定是否要备份文件时,仅仅察看文件大小而不考虑文件时间
–modify-window=NUM 决定文件是否时间相同时使用的时间戳窗口,默认为0
-T –temp-dir=DIR 在DIR中创建临时文件
–compare-dest=DIR 同样比较DIR中的文件来决定是否需要备份
-P 等同于 –partial
–progress 显示备份过程
-z, –compress 对备份的文件在传输时进行压缩处理
–exclude=PATTERN 指定排除不需要传输的文件模式
–include=PATTERN 指定不排除而需要传输的文件模式
–exclude-from=FILE 排除FILE中指定模式的文件
–include-from=FILE 不排除FILE指定模式匹配的文件
–version 打印版本信息
–address 绑定到特定的地址
–config=FILE 指定其他的配置文件,不使用默认的rsyncd.conf文件
–port=PORT 指定其他的rsync服务端口
–blocking-io 对远程shell使用阻塞IO
-stats 给出某些文件的传输状态
–progress 在传输时现实传输过程
–log-format=formAT 指定日志文件格式
–password-file=FILE 从FILE中得到密码
–bwlimit=KBPS 限制I/O带宽,KBytes per second
-h, –help 显示帮助信息

rsync有六种不同的工作模式:

1)拷贝本地文件。当SRC和DES路径信息都不包含有单个冒号”:”分隔符时就启动这种工作模式。如:rsync -a /data /backup

2)使用一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器。当DST路径地址包含单个冒号”:”分隔符时启动该模式。如:rsync -avz *.c foo:src

3)使用一个远程shell程序(如rsh、ssh)来实现将远程机器的内容拷贝到本地机器。当SRC地址路径包含单个冒号”:”分隔符时启动该模式。如:rsync -avz foo:src/bar /data

4)从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含”::”分隔符时启动该模式。如:rsync -av root@172.16.78.192::www /databack

5)从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含”::”分隔符时启动该模式。如:rsync -av /databack root@172.16.78.192::www

6)列远程机的文件列表。这类似于rsync传输,不过只要在命令中省略掉本地机信息即可。如:rsync -v rsync://172.16.78.192/www