上次devops.webres.wang已经详细介绍如何安装cacti了,这次我们来学习如何简单地配置cacti来监控服务器流量。
下面是cacti的工作流程图:

1、登录cacti,点击“Devices”,然后点击”Add”创建设备,如图:

2、然后输入Description,Hostname,Host Template选择“Generic SNMP-enabled Host”,SNMP Version一般选择“Version 1”(当然得根据你具体的snmp如何配置)。完成后点击”create”创建设备,如图:

3、接着在顶部点击“Create Graphs for this Host”创建图表,如图:

4、在“SNMP – Interface Statistics”下面会显示你的网卡,选择其中一个监控即可,我们这里选”eth0″,之后单击“create”。

5、现在已经成功创建图表,我们点击左侧的“Graph Management”查看图表列表,此时已经可以看到刚才创建的图表,点击相应的图表标题进去查看。

6、现在可能图表还没开始生成,最多等待5分钟,5分钟后图表是创建了,但图表没有数据,需要等待一段时间程序收集数据。

作者:Specs
Linux源码编译安装rrdtool
1、定义变量
- BUILD_DIR=/tmp/rrdbuild
- INSTALL_DIR=/usr/local/rrdtool
- mkdir -p $BUILD_DIR
- cd $BUILD_DIR
2、安装rrdtool。
- wget http://oss.oetiker.ch/rrdtool/pub/rrdtool.tar.gz
- gunzip -c rrdtool-x.y.z.tar.gz | tar xf –
- cd rrdtool-x.y.z
- ./configure –prefix=$INSTALL_DIR && make && make install
如果安装失败,请继续第三步安装所需依赖。
3、安装依赖
定义变量
- export LDFLAGS="-Wl,–rpath -Wl,${INSTALL_DIR}/lib"
- export PKG_CONFIG_PATH=${INSTALL_DIR}/lib/pkgconfig
- export PATH=$INSTALL_DIR/bin:$PATH
3.1、安装pkgconfig
- cd $BUILD_DIR
- wget http://pkgconfig.freedesktop.org/releases/pkg-config-0.26.tar.gz
- gunzip -c pkg-config-0.26.tar.gz | tar xf –
- cd pkg-config-0.26
- ./configure –prefix=$INSTALL_DIR CFLAGS="-O3 -fPIC"
- make
- make install
- export PKG_CONFIG=$INSTALL_DIR/bin/pkg-config
3.2、安装zlib
- cd $BUILD_DIR
- wget http://oss.oetiker.ch/rrdtool/pub/libs/zlib-1.2.3.tar.gz
- gunzip -c zlib-1.2.3.tar.gz | tar xf –
- cd zlib-1.2.3
- ./configure –prefix=$INSTALL_DIR –shared
- make
- make install
3.3、安装libpng
- cd $BUILD_DIR
- wget http://oss.oetiker.ch/rrdtool/pub/libs/libpng-1.2.18.tar.gz
- gunzip -c libpng-1.2.18.tar.gz | tar xf –
- cd libpng-1.2.18
- env CFLAGS="-O3 -fPIC" ./configure –prefix=$INSTALL_DIR
- make
- make install
3.4、安装freetype
- cd $BUILD_DIR
- wget http://oss.oetiker.ch/rrdtool/pub/libs/freetype-2.3.5.tar.gz
- gunzip -c freetype-2.3.5.tar.gz | tar xf –
- cd freetype-2.3.5
- ./configure –prefix=$INSTALL_DIR CFLAGS="-O3 -fPIC"
- make
- make install
3.5、安装LibXML2
- cd $BUILD_DIR
- wget http://oss.oetiker.ch/rrdtool/pub/libs/libxml2-2.6.32.tar.gz
- gunzip -c libxml2-2.6.32.tar.gz | tar xf –
- cd libxml2-2.6.32
- ./configure –prefix=$INSTALL_DIR CFLAGS="-O3 -fPIC"
- make
- make install
3.6、安装fontconfig
- cd $BUILD_DIR
- wget http://oss.oetiker.ch/rrdtool/pub/libs/fontconfig-2.4.2.tar.gz
- gunzip -c fontconfig-2.4.2.tar.gz | tar xf –
- cd fontconfig-2.4.2
- ./configure –prefix=$INSTALL_DIR CFLAGS="-O3 -fPIC" –with-freetype-config=$INSTALL_DIR/bin/freetype-config
- make
- make install
3.7、安装Pixman
- cd $BUILD_DIR
- wget http://oss.oetiker.ch/rrdtool/pub/libs/pixman-0.10.0.tar.gz
- gunzip -c pixman-0.10.0.tar.gz | tar xf –
- cd pixman-0.10.0
- ./configure –prefix=$INSTALL_DIR CFLAGS="-O3 -fPIC"
- make
- make install
3.8、安装Cairo
- cd $BUILD_DIR
- wget http://oss.oetiker.ch/rrdtool/pub/libs/cairo-1.6.4.tar.gz
- gunzip -c cairo-1.6.4.tar.gz | tar xf –
- cd cairo-1.6.4
- ./configure –prefix=$INSTALL_DIR
- –enable-xlib=no
- –enable-xlib-render=no
- –enable-win32=no
- CFLAGS="-O3 -fPIC"
- make
- make install
3.9、安装Glib
- cd $BUILD_DIR
- wget http://oss.oetiker.ch/rrdtool/pub/libs/glib-2.15.4.tar.gz
- gunzip -c glib-2.15.4.tar.gz | tar xf –
- cd glib-2.15.4
- ./configure –prefix=$INSTALL_DIR CFLAGS="-O3 -fPIC"
- make
- make install
3.10、安装Pango
- cd $BUILD_DIR
- wget http://oss.oetiker.ch/rrdtool/pub/libs/pango-1.21.1.tar.bz2
- bunzip2 -c pango-1.21.1.tar.bz2 | tar xf –
- cd pango-1.21.1
- ./configure –prefix=$INSTALL_DIR CFLAGS="-O3 -fPIC" –without-x
- make
- make install
3.11、重新安装rrdtool
- cd $BUILD_DIR/rrdtool-1.4.6
- ./configure –prefix=$INSTALL_DIR
- make clean
- make
- make install
- ln -s /usr/local/rrdtool/bin/* /usr/local/bin/
彻底关闭并删除mysql二进制日志
1、删除mysql二进制日志
- # mysql -uroot -ppassword -e"reset master;"
2、关闭二进制日志
- vi /etc/my.cnf
注释如下代码:
- log-bin=mysql-bin
- binlog_format=mixed
3、重启mysql服务器
- service mysqld restart
CentOS-5 yum安装nginx php53 mysql55 lnmp环境
对于lnmp的使用,devops.webres.wang已经提供有lnmp安装包,但如果想快速配置环境,则推荐yum安装了。
1、导入外部软件库
centos-5 32位:
- rpm -Uvh http://dl.iuscommunity.org/pub/ius/stable/Redhat/5/i386/epel-release-5-4.noarch.rpm
- rpm -Uvh http://dl.iuscommunity.org/pub/ius/stable/Redhat/5/i386/ius-release-1.0-10.ius.el5.noarch.rpm
- rpm -Uvh http://nginx.org/packages/centos/5/noarch/RPMS/nginx-release-centos-5-0.el5.ngx.noarch.rpm
centos-5 64位:
- rpm -Uvh http://dl.iuscommunity.org/pub/ius/stable/Redhat/5/x86_64/epel-release-5-4.noarch.rpm
- rpm -Uvh http://dl.iuscommunity.org/pub/ius/stable/Redhat/5/x86_64/ius-release-1.0-10.ius.el5.noarch.rpm
- rpm -Uvh http://nginx.org/packages/centos/5/noarch/RPMS/nginx-release-centos-5-0.el5.ngx.noarch.rpm
2、yum安装lnmp
- yum install mysql55-server mysql55 php53u-fpm php53u-mysql php53u-gd php53u-mbstring php53u-mcrypt nginx
3、配置lnmp
- vi /etc/nginx/conf.d/default.conf
修改为:
- location ~ .php$ {
- root html;
- fastcgi_pass 127.0.0.1:9000;
- fastcgi_index index.php;
- fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name;
- include fastcgi_params;
- }
4、启动lnmp
- chkconfig php-fpm on
- chkconfig nginx on
- chkconfig mysqld on
- service php-fpm start
- service nginx start
- service mysqld start
使用Amoeba for mysql实现mysql读写分离
Amoeba for MySQL致力于MySQL的分布式数据库前端代理层,它主要在应用层访问MySQL的时候充当query 路由功能,专注 分布式数据库 proxy 开发。座落与Client、DB Server(s)之间。对客户端透明。具有负载均衡、高可用性、Query过滤、读写分离、可路由相关的query到目标数据库、可并发请求多台数据库合并结果。 在Amoeba上面你能够完成多数据源的高可用、负载均衡、数据切片的功能。目前在很多企业的生产线上面使用。
devops.webres.wang这里使用Amoeba for mysql来实现mysql的读写分离,起到缓解主数据库服务器的压力,下面是实现这一方案的架构图:

mysql主从复制配置
因为读写分离,所以一台负责mysql的写操作,另一台负责mysql的读操作,所以我们这里使用mysql的主从复制再合适不过了。关于这一配置,请移步:
http://devops.webres.wang/2011/07/linux-mysql-replication-sync-configure/
java环境配置
Amoeba框架是基于Java SE1.5开发的,建议使用Java SE 1.5版本。目前Amoeba经验证在JavaTM SE 1.5和Java SE 1.6能正常运行,(可能包括其他未经验证的版本)。
Java SE 1.6下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk-6u32-downloads-1594644.html
我这里下载jdk-6u32-linux-i586-rpm.bin。
下载完成后执行sh jdk-6u32-linux-i586-rpm.bin开始安装,将会安装到/usr/java/jdk1.6.0_32目录。
Amoeba的安装
Amoeba下载地址:http://sourceforge.net/projects/amoeba/
下面是安装步骤:
- cd /tmp
- mkdir /usr/local/amoeba
- wget http://softlayer.dl.sourceforge.net/project/amoeba/Amoeba%20for%20mysql/2.x/amoeba-mysql-binary-2.1.0-RC5.tar.gz
- tar xzf amoeba-mysql-binary-2.1.0-RC5.tar.gz -C /usr/local/amoeba
配置用户环境变量
- vi ~/.bash_profile
设置为:
- PATH=$PATH:$HOME/bin:/usr/local/amoeba/bin
- JAVA_HOME=/usr/java/jdk1.6.0_32
- export JAVA_HOME
- export PATH
立即生效:
- source ~/.bash_profile
Amoeba for mysql配置
配置Amoeba for mysql的读写分离主要涉及两个文件:
1、/usr/local/amoeba/conf/dbServers.xml
此文件定义由Amoeba代理的数据库如何连接,比如最基础的:主机IP、端口、Amoeba使用的用户名和密码等等。
2、/usr/local/amoeba/conf/amoeba.xml
此文件定义了Amoeba代理的相关配置。
dbServers.xml文件配置
abstractServer配置:
- <dbServer name="abstractServer" abstractive="true">
- <factoryConfig class="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory">
- <property name="manager">${defaultManager}</property>
- <property name="sendBufferSize">64</property>
- <property name="receiveBufferSize">128</property>
- <!– mysql port –>
- <property name="port">3306</property>
- <!– mysql schema –>
- <property name="schema">dbname</property>
- <!– mysql user –>
- <property name="user">root</property>
- <!– mysql password –>
- <property name="password">root</property>
- </factoryConfig>
- <poolConfig class="com.meidusa.amoeba.net.poolable.PoolableObjectPool">
- <property name="maxActive">500</property>
- <property name="maxIdle">500</property>
- <property name="minIdle">10</property>
- <property name="minEvictableIdleTimeMillis">600000</property>
- <property name="timeBetweenEvictionRunsMillis">600000</property>
- <property name="testOnBorrow">true</property>
- <property name="testWhileIdle">true</property>
- </poolConfig>
- </dbServer>
此部分定义真实mysql服务器的端口,数据库名称,mysql用户及密码。
主从数据库定义:
- <dbServer name="Master" parent="abstractServer">
- <factoryConfig>
- <!– mysql ip –>
- <property name="ipAddress">192.168.0.1</property>
- </factoryConfig>
- </dbServer>
- <dbServer name="Slave1" parent="abstractServer">
- <factoryConfig>
- <!– mysql ip –>
- <property name="ipAddress">192.168.0.2</property>
- </factoryConfig>
- </dbServer>
- <dbServer name="Slave2" parent="abstractServer">
- <factoryConfig>
- <!– mysql ip –>
- <property name="ipAddress">192.168.0.3</property>
- </factoryConfig>
- </dbServer>
- <dbServer name="virtualSlave" virtual="true">
- <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
- <!– Load balancing strategy: 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA–>
- <property name="loadbalance">1</property>
- <!– Separated by commas,such as: server1,server2,server1 –>
- <property name="poolNames">Slave1,Slave2</property>
- </poolConfig>
- </dbServer>
此部分定义主服务器,从服务器,及从服务器连接池。这里只定义数据库地址,它们的用户及密码就是上面的abstractServer里的设置。注意用来连接真实mysql服务器的用户必须拥有远程连接权限。
amoeba.xml配置
amoeba连接验证配置:
- <property name="authenticator">
- <bean class="com.meidusa.amoeba.mysql.server.MysqlClientAuthenticator">
- <property name="user">root</property>
- <property name="password">root</property>
- <property name="filter">
- <bean class="com.meidusa.amoeba.server.IPAccessController">
- <property name="ipFile">${amoeba.home}/conf/access_list.conf</property>
- </bean>
- </property>
- </bean>
- </property>
这里定义连接amoeba时用来验证的用户及密码。
读写分离配置:
- <property name="defaultPool">Master</property>
- <property name="writePool">Master</property>
- <property name="readPool">virtualSlave</property>
defaultPool:配置了默认的数据库节点,一些除了SELECTUPDATEINSERTDELETE的语句都会在defaultPool执行。
writePool :配置了数据库写库,通常配为Master,如这里就配置为之前定义的Master数据库。
readPool :配置了数据库读库,通常配为Slave或者Slave组成的数据库池,如这里就配置之前的virtualSlave数据库池。
amoeba启动
启动命令:
- amoeba start
此命令以前台的方式启动,会输出启动时的信息,检查没有错误信息后,中断,并后台运行:
- amoeba start &
FAQ
1、无法正常连接?
首先根据执行amoeba start输出的信息排除配置文件没有问题,之后确认mysql用户是否有远程连接的权限,然后检查网站的数据库配置文件是否设置正确。
2、如何配置网站数据库连接文件?
默认的端口应该为8066,用户及密码在amoeba.xml里设置。
参考:http://docs.hexnova.com/amoeba/single-dbserver.html
http://docs.hexnova.com/amoeba/rw-splitting.html
CentOS-5 yum安装mysql-5.5/5.1
centos-5的源默认提供mysql-5.0的rpm包,这有点旧了,下面由devops.webres.wang提供yum安装mysql-5.5/5.1的方法
1、导入第三方源webtatic
- rpm -Uvh http://repo.webtatic.com/yum/centos/5/latest.rpm
2、安装MySQL client
- yum install libmysqlclient15 –enablerepo=webtatic
3、删除存在的mysql
- yum remove mysql mysql-*
4、安装mysql
mysql-5.5:
- yum install mysql55 mysql55-server –enablerepo=webtatic
mysql-5.1:
- yum install mysql51 mysql51-server –enablerepo=webtatic
5、启动并升级mysql
- service mysqld start
- mysql_upgrade
WARNING: Unable to find a corresponding IP address for xxx
在之前开始使用fail2ban防止vsftpd或ssh暴力破解之后,有一定的效果,但在查看fail2ban.log日志时,发现一个问题:
- fail2ban.filter : WARNING Unable to find a corresponding IP address for ns.rs996.com
我们再查看secure日志:
- vsftpd: pam_unix(vsftpd:auth): authentication failure; logname= uid=0 euid=0 tty=ftp ruser=devops.webres.wang rhost=ns.rs996.com
fail2ban是根据rhost取得客户端的ip,并使用iptables禁止它,但我们发现ns.rs996.com无法解析出ip地址,那它的ip去哪了呢?
经过分析得出结论:vsftpd默认对客户端ip进行反向解析,如果查询有结果,则把ip解析出来的域名记录secure日志中的rhost中,但是此反向解析出来的域名,本身又没有作A记录的解析,所以fail2ban再进行此域名的解析时,当然就无法获取到IP地址,也就无法禁止此客户端的暴力破解行为。
解决方法:
在vsftpd.conf中添加下面的代码禁止反向解析:
- reverse_lookup_enable=NO
之后重启vsftpd即可。生效之后不仅解决了这个问题,也使得登录vsftpd不再停顿几秒了。
但是/var/log/secure里记录ftp登录失败有一个缺点,就是用相同的用户名,不同的密码登录多次,只是记录首次失败的信息,而之后的就只显示:last message repeated x times这样的信息,无法满足登录失败三次的条件,所以就不能阻止此暴力破解,下面是解决这个问题的方法:
1、打开vsftpd.conf,添加如下代码:
- dual_log_enable=YES
- use_localtime=YES
2、打开/etc/fail2ban/jail.local,修改以下内容:
- [vsftpd-iptables]
- …
- logpath = /var/log/vsftpd.log
- …
mysql实时监控工具mytop使用介绍
devops.webres.wang这里推荐可以实时监控mysql服务器的性能信息的工具-mytop,mytop类似于linux top工具,。
安装方法
1、安装依赖
- # cpan
- # cpan > install DBI
- # cpan > install Term::ReadKey
- # cpan > install DBD::mysql
- # cpan > exit
2、下载安装mytop
- cd /tmp
- wget http://jeremy.zawodny.com/mysql/mytop/mytop-1.6.tar.gz
- tar xzf mytop-1.6.tar.gz
- cd mytop-1.6
- perl Makefile.PL
- make
- make install
使用方法
语法:
- mytop -u <REMOTE_USERNAME> -p <PASSWORD> -h <MYSQL_SERVER_IP> -d <DATABASE>
REMOTE_USERNAME:mysql用户名
PASSWORD: mysql密码
MYSQL_SERVER_IP :mysql服务器ip
DATABASE :需要监控的数据库名称
例子:
- # mytop -u root -p password -h 192.168.0.2 -d centos
还可以把这些参数写入文件~/.mytop,格式如下:
- user=你的mysql用户
- pass=你的mysql密码
- host=localhost
- db=你要监控的数据库名
- delay=5
- port=3306
- socket=/var/lib/mysql/mysql.sock
- batchmode=0
- header=1
- color=1
- idle=1
详细的使用说明可以执行man mytop获得。
bind nsupdate动态dns更新工具介绍
nsupdate是一个动态DNS更新工具.可以向DNS服务器提交更新记录的请求.它可以从区文件中添加或删除资源记录,而不需要手动进行编辑区文件.
下面是使用方法:
nsupdate [ -d ] [ [ -y keyname:secret ] [ -k keyfile ] ] [ -v ]
[ filename ]
-d 调试模式.
-k 从keyfile文件中读取密钥信息.
-y keyname是密钥的名称,secret是以base64编码的密钥.
-v 使用TCP协议进行nsupdate.默认是使用UDP协议.
输入格式:
nsupdate可以从终端或文件中读取命令.每个命令一行.一个空行或一个”send”命令,则会将先前
输入的命令发送到DNS服务器上.
命令格式:
server servername [ port ]
发送请求到servername服务器的port端口.如果不指定servername,nsupdate将把请求发送给
当前去的主DNS服务器.
如:
> server 192.168.0.1 53
local address [ port ]
发送nsupdate请求时,使用的本地地址和端口.
zone zonename
指定需要更新的区名.
class classname
指定默认类别.默认的类别是IN.
key name secret
指定所有更新使用的密钥.
prereq nxdomain domain-name
要求domain-name中不存在任何资源记录.
prereq yxdomain domain-name
要求domain-name存在,并且至少包含有一条记录.
prereq nxrrset domain-name [ class ] type
要求domain-name中没有指定类别的资源记录.
prereq yxrrset domain-name [ class ] type
要求存在一条指定的资源记录.类别和domain-name必须存在.
update delete domain-name [ ttl ] [ class ] [ type [ data… ] ]
删除domain-name的资源记录.如果指定了type和data,仅删除匹配的记录.
update add domain-name ttl [ class ] type data…
添加一条资源记录.
show
显示自send命令后,所有的要求信息和更新请求.
send
将要求信息和更新请求发送到DNS服务器.等同于输入一个空行.
nsupdate示例:
# nsupdate
> server 127.0.0.1
> update delete devops.webres.wang A
>
> update add devops.webres.wang 80000 IN A 192.168.0.2
> update add 2.0.168.192.in-addr.arpa 80000 PTR A devops.webres.wang
> send
> quit
转自:http://hi.baidu.com/onewoyo/blog/item/c4f418a048d9c8a7cbefd01a.html
bind dns 宕机检测 故障切换shell脚本
devops.webres.wang解析有多个A记录,下面是实现故障切换的脚本:
通过检测网站的返回状态码来确定服务器的健康状况,如果不返回或返回的状态非200,则开始记录一次故障,连续三次故障后开始删除此域名的故障ip A记录,如果之后的检测发现服务器已经恢复,则重新添加此ip的A记录。
- #!/bin/bash
- #===============================================================================
- #Description: this script is to automactic update dns record when website is down.
- #Author : devops.webres.wang
- #文件说明:
- # /tmp/domain_list.txt 需要监控的域名列表,每行一个域名
- # /tmp/${domain}_online_ip.txt 记录在线的服务器ip,需要提前写入IP,每行一个IP
- # /tmp/${domain}_down_ip.txt 记录有故障的服务器ip
- # /tmp/curl.txt 记录curl获取的http状态码
- # /tmp/${domain}_${server_ip}_cur_time.txt 记录服务器出现故障的次数
- #===============================================================================
- #设置一些必要的变量
- keyname=rndc-key
- keysecret=gAnBYq6xSv7FKTZFmzAD0Q==
- #用来检测本机网络是否正常
- function network_detect(){
- ping -c1 8.8.8.8 >/dev/null 2>&1 && echo connect || exit 1
- }
- #用来删除DNS记录
- function del_record(){
- /usr/local/bind/bin/nsupdate <<EOF
- key $keyname $keysecret
- update delete $domain A $1
- send
- quit
- EOF
- }
- #用来增加DNS记录
- function add_record(){
- /usr/local/bind/bin/nsupdate <<EOF
- key $keyname $keysecret
- update add $domain 3600 A $1
- send
- quit
- EOF
- }
- #用来检测在线ip列表健康状态
- function online_detect(){
- if [ -s /tmp/${domain}_online_ip.txt ] ;then
- for server_ip in `cat /tmp/${domain}_online_ip.txt` ;
- do
- curl -I -l -H "Host:$domain" $server_ip -o "/tmp/curl.txt" >/dev/null 2>&1
- ###判断状态码是否为200
- if [ -s /tmp/curl.txt ] && grep ‘200 OK’ /tmp/curl.txt >/dev/null 2>&1;then
- echo "OK"
- ###清空故障次数
- rm -f /tmp/${domain}_${server_ip}_cur_time.txt
- ###状态码非200时
- else
- ###开始计算故障次数
- cur_time=0
- [ -s /tmp/${domain}_${server_ip}_cur_time.txt ] && cur_time=`cat /tmp/${domain}_${server_ip}_cur_time.txt `
- cur_time=`expr $cur_time + 1`
- ###当故障次数大于等于3时
- if [ $cur_time -gt 3 ];then
- ###删除故障ip记录
- del_record $server_ip
- ###从在线ip列表中删除故障ip
- sed -i "/$server_ip/d" /tmp/${domain}_online_ip.txt
- ###记录故障ip到文件
- echo $server_ip >> /tmp/${domain}_down_ip.txt
- ###删除记录此ip的故障文件
- rm -f /tmp/${domain}_${server_ip}_cur_time.txt
- else
- ###记录故障次数
- echo $cur_time > /tmp/${domain}_${server_ip}_cur_time.txt
- fi
- fi
- rm -f /tmp/curl.txt
- done
- fi
- }
- #用来检测故障ip列表健康状态
- function down_detect(){
- if [ -s /tmp/${domain}_down_ip.txt ];then
- for server_ip in `cat /tmp/${domain}_down_ip.txt` ;
- do
- curl -I -l -H "Host:$domain" $server_ip -o "/tmp/curl.txt" >/dev/null 2>&1
- if [ -s /tmp/curl.txt ] && grep ‘200 OK’ /tmp/curl.txt >/dev/null 2>&1;then
- ###添加A记录
- add_record $server_ip
- ###从${domain}_down_ip.txt删除故障ip
- sed -i "/$server_ip/d" /tmp/${domain}_down_ip.txt
- ###重新添加此ip到${domain}_online_ip.txt
- echo $server_ip >> /tmp/${domain}_online_ip.txt
- fi
- rm -f /tmp/curl.txt
- done
- fi
- }
- network_detect
- if [ -s /tmp/domain_list.txt ];then
- for domain in `cat /tmp/domain_list.txt` ;
- do
- online_detect
- down_detect
- done
- else
- echo "/tmp/domain_list.txt not found!"
- exit 1
- fi
要正常使用以上脚本,需要注意以下事项:
1、 /tmp/domain_list.txt 填写需要监控的域名,/tmp/${domain}_online_ip.txt填写对应域名的所有A记录。
2、根据bind设置修改脚本中的三个变量
- domain=devops.webres.wang
- keyname=rndc-key
- keysecret=gAnBYq6xSv7FKTZFmzAD0Q==
3、在named.conf文件中的zone添加如下代码:
- allow-update {key rndc-key;};
rndc-key修改为自己的。