5月 15

tomcat 日志切割

日志自动切割以前使用cronolog进行,apache为http://www.simonzhang.net/?p=362,tomcat为http://www.simonzhang.net/?p=359。
但是tomcat7 以后启动叫脚本改了,也就不麻烦了,直接自己写个shell解决,此脚本会丢失少量正在切割时产生的日志。

#!/bin/sh
log_dir=("/program/allweb/tomcat_a/logs" "/program/allweb/tomcat/logs")
for (( i=0 ; i<${#log_dir[@]} ; i++ ))
do
    if [ -f ${log_dir[i]}\/catalina.out ]; then
        cd ${log_dir[i]}
        date_dir=`date +%Y-%m-%d`
        /bin/cp catalina.out  catalina_${date_dir}.out
        /bin/echo '' > catalina.out
        /usr/bin/find -ctime +15 -exec rm -rf {} \;
    fi
done
8月 19

MySql日常操作记录

[整理日:2010-08-19]

1)使用innodb引擎独立表空间,在配置文件my.cnf中添加如下,重启数据库。
[mysqld]
innodb_file_per_table

2)Drop table操作自动回收表空间,如果对于统计分析或是日值表,删除大量数据后可以通过:
alter table TableName engine=innodb

OPTIMIZE TABLE TableName;

3)改变现有的表使用的存储引擎,用以下语句:
ALTER TABLE mytable ENGINE = MyISAM

4)设置InnoDB为默认引擎:在配置文件my.cnf中的 [mysqld] 下面加入default-storage-engine=INNODB 一句,保存。重启mysql服务器

5)查看当前进程和执行sql

show processlist ;

6) 清除30天前的 binlog
PURGE MASTER LOGS BEFORE DATE_SUB( NOW( ), INTERVAL 30 DAY);

7)自动清理30天前的binlog

在配置文件中添加expire_logs_days = 30

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

3月 21

Nginx服务使用的脚本

[编写人:张子萌 2010]

Nginx服务器时使用的脚本.

1.在nginx日志出现错误后发送告警邮件,使用该脚本会在nginx的sbin目录下产生last_error_log,错误文件格式

为nginx默认

#!/bin/sh
##############################################
# AUTHOR: simon-zzm
# back log
# Ver : 1.0 For Production
# description:
# 2010-03-12 simon-zzm@163.com
##############################################
######set ip Email base path
IP=172.2.2.2
admin_mail=simon-zzm@163.com
base_path=/usr/local/nginx

###run
cut_error_log=`/bin/cat ${base_path}/sbin/last_error_log`
last_error_log=`/usr/bin/tail -1 ${base_path}/logs/error.log|/bin/cut -c 1-19`
if [ “$cut_error_log” != “$last_error_log” ];then
/usr/bin/tail -5 ${base_path}/logs/error.log>$base_path/sbin/mail1.txt
/bin/mail -s $IP_nginx_error_log $admin_mail<$base_path/sbin/mail1.txt
/bin/rm -rf $base_path/sbin/mail1.txt
echo $last_error_log>${base_path}/sbin/last_error_log
fi

2.nginx日志切割,每个小时切割一个日志,

#!/bin/sh

##############################################

# AUTHOR: simon-zzm

# back log

# Ver : 1.0 For Production

# description:

# 2010-03-12 simon-zzm@163.com

##############################################

###set base path、use every an hour to cut log
log_dir=”/usr/local/nginx/logs”
date_dir=`date +%Y%m%d%H`

###run
/bin/mv ${log_dir}/access.log ${log_dir}/access_${date_dir}.log
/bin/kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`

3.日志备份部分参照通用性日志备份

http://simon-zzm.blog.163.com/blog/static/88809522201021523828112/

3月 15

日志 压缩 备份 定时删除脚本

[编写整理:simonzhang 2010-03-15 2012-04-08修改]

  在linux下有大量日志需要压缩备份,并定期清理长期保存的备份日志。对于多处日志存放使用数组进行循环处理。脚本修改好后,设置定时任务即可。

#!/bin/sh
##############################################
# AUTHOR: simonzhang
# back log
# Ver : 1.1 For Production
# description: 
# 2010-03-12  
##############################################
####### set log patch
log_path=("/usr/local/nginx/logs/" "/usr/local/tomcat6/logs/" )
####### set backup log patch
bak_log_path=("/usr/local/nginx/logs/back" "/usr/local/tomcat6/logs/back")

####### set backup  3 day ago log
backupdays=3

#######clear 180 day ago compress log
deletedays=180

#######  start
for (( i=0 ; i<${#log_path[@]} ; i++ ))
do
        cd ${log_path[i]}
    if [ ! -f ${bak_log_path[i]} ] ; then
            /bin/mkdir -p ${bak_log_path[i]}
    fi
        /usr/bin/find  * -ctime +$backupdays -maxdepth 0 -not -name *.pid -not -name error* -exec zip -m {}.zip  {} \;
        /bin/mv *.zip ${bak_log_path[$i]}
        cd ${bak_log_path[$i]}
        echo /usr/bin/find  * -ctime +$deletedays -maxdepth 0 -exec rm {} \;
done
############  end