公告

每一篇博客,都要用心去写!

博客统计信息

51cto推荐博客
用户名:yuangang_love
文章数:55
评论数:35
访问量:55994
无忧币:637
博客积分:1038
博客等级:4
注册日期:2011-03-12

我最近发表的评论

nginx+keepalived.. 回复
域名是要解析到vip上
rsync+inotify实.. 回复
85560064加我qq讨论一下!
rsync+inotify实.. 回复
85560064加我qq讨论一下!
nginx+keepalived.. 回复
不好意思,谢谢提醒!
rsync+inotify实.. 回复
可以把ssh隧道打通。批量重启每一台..
rsync服务配置 回复
Thank you!
zabbix监控80端口 回复
zabbbix是个开源的监控软件,可以自..
51cto博客积分/无.. 回复
正在加油中...

订阅我的博客


google reader 鲜果 QQ邮箱 有道 抓虾
        在lnmp架构中,通常一台装有nginx服务器做反向代理服务器,又做内网的路由。在这台服务器上绑有一个公网ip和一个内网ip.我们把域名解析到这个公网ip上,让nginx代理到后端的web服务器上,这样我们就可以访问到我们的站点,与此同时必须让内网访问外网。这台反向代理服务器又需要做内网的路由。这台服务器,在整个应用架构中相当重要。下面我来阐述一下nginx+keepalived双机实现nginx反向代理服务的高可用。也就是说在当一台nginx挂掉之后不影响应用也不影响内网访问外网。
一、架构图

 二、部署
1、在0.205和0.207上安装keepalived(略请参考http://linux008.blog.51cto.com/2837805/665390)

2、keepalived配置

      192.168.0.205

# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id yuangnag.com
}
vrrp_script check_run {
script "/root/bin/nginx_check.sh"
interval 5
}
vrrp_sync_group VG1 {
group {
VI_1
}
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 88
priority 100
advert_int 1
nopreempt
authentication {
auth_type PASS
auth_pass yuangang.net
}
track_script {
check_run
}
virtual_ipaddress {
192.168.0.206/24 dev eth0
110.110.110.25/25 dev eth1
}
}
启动脚本写入到/etc/rc.local里
#echo "/etc/init.d/keepalived start" >> /etc/rc.local

     192.168.0.207

# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id yuangang.com
}
vrrp_script check_run {
script "/root/bin/nginx_check.sh"
interval 5
}
vrrp_sync_group VG1 {
group {
VI_1
}
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 88
priority 80
advert_int 1
authentication {
auth_type PASS
auth_pass yuangang.com
}
track_script {
check_run
}
virtual_ipaddress {
192.168.0.206/24 dev eth0
110.110.110.25/25 dev eth1
}
}
启动脚本写入到/etc/rc.local里
#echo "/etc/init.d/keepalived start" >> /etc/rc.local

 分别在192.168.0.205和192.168.0.207编写检测nginx服务是否正常。脚本如下:

# cat /root/bin/nginx_check.sh
#!/bin/bash
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ]
then
/usr/local/nginx/sbin/nginx
sleep 1
if [ `ps -C nginx --no-header |wc -l` -eq 0 ]
then
killall keepalived
fi
fi
 3、iptables配置



       192.168.0.205和192.168.0.207iptables都做如下设置

# cat /etc/sysconfig/iptables
# Firewall configuration written by system-config-securitylevel
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp -j ACCEPT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p 50 -j ACCEPT
-A RH-Firewall-1-INPUT -p 51 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 53 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 53 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 7080 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 6080 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 8081 -j ACCEPT
COMMIT
*nat
:PREROUTING ACCEPT [12001:793841]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to-source 110.110.110.25
COMMIT
 4、验证

       当192.168.0.205nginx服务宕机或重启,vip会飘移到192.168.0.207上;当192.168.0.205,正常后vip会再次绑定到192.168.0.205上。[/img]..
类别:nginx|阅读(616)|回复(2)|(3)阅读全文>>
说明做路由机器需要一个外网地址(191.192.187.45)和一个网网地址(192.168.0.206)
配置
做路由的机器配置
1、打开内核ip转发

    #vim  /etc/sysctl.conf
     net.ipv4.ip_forward = 1
     #sysctl -p

2、iptables配置

     #vim /etc/sysconfig/iptables
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p 50 -j ACCEPT
-A RH-Firewall-1-INPUT -p 51 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 53 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dpor..
1、架构

      vip 192.168..45.244

      mysql-1:192.168.45.238

      mysql-2:192.168.45.239



2、mysql双主设置

      192.168.45.238

#vim /etc/my.cnf
[client]
port = 3306
socket = /tmp/mysql.sock

[mysqld]
port = 3306
socket = /tmp/mysql.sock
datadir=/usr/local/mysql/var/
skip-locking
skip-name-resolve
key_buffer = 64M
max_allowed_packet = 64M
table_cache = 2048
sort_buffer_size = 4M
net_buffer_length = 256K
read_buffer_size = 10M
read_rnd_buffer_size = 10M
myisam_sort_buffer_size = 16M
interactive_timeout = 240
wait_timeout = 240
max_connections = 800
connect_timeout=30
open_files_limit=8192
query_cache_size = 1024M
thread_cache_size=16
thread_concurrency = 8
long_query_time = 1
log-slow-queries = slow.log

innodb_additional_mem_pool_size = 8M
innodb_buffer_pool_size = 32M
innodb_log_buffer_size=8M
..
类别:mysql|阅读(743)|回复(2)|(4)阅读全文>>
如何统计日志里面访问次数最多的IP
    今天在论坛上看见有人在问这个问题,后面很多SHELL的高手在讨论,真的让我再一次深切的感受到了SHELL的博大精深,为之震撼。
   先看看我要处理的文件内容




[root@server2 ~]# netstat -ntu
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.0.1:8652 127.0.0.1:40193 TIME_WAIT
tcp 0 0 127.0.0.1:8652 127.0.0.1:40192 TIME_WAIT
tcp 0 0 127.0.0.1:8652 127.0.0.1:40196 TIME_WAIT
tcp 0 0 127.0.0.1:8652 127.0.0.1:40199 TIME_WAIT
tcp 0 0 127.0.0.1:8652 127.0.0.1:40201 TIME_WAIT
tcp 0 0 127.0.0.1:8652 127.0.0.1:40204 TIME_WAIT
tcp 0 0 127.0.0.1:8652 127.0.0.1:40207 TIME_WAIT
tcp 0 0 127.0.0.1:8652 127.0.0.1:40210 TIME_WAIT
tcp 0 0 192.168.32.62:41682 192.168.47.207:5432 TIME_WAIT
tcp 0 0..
类别:shell|阅读(142)|回复(0)|(0)阅读全文>>
1、安装perl扩展

      shell> perl -MCPAN -e shell
      cpan> install DBI
      cpan> install DBD::mysql

2、备份表myisam

      #mysqlhotcopy -h localhost -u root -p 123456 demo /data/back/
-h 数据库主机
-u 数据库用户名
-p 数据库密码
‘demo’数据库名称
类别:mysql|阅读(15)|回复(1)|(1)阅读全文>>
2011-09-11 11:48:18
1、关闭mysql

      /etc/init.d/mysqld stop
2、启动mysql不加载授权表

      /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf --skip-grant-tables &
      这时进入mysql不需要密码

      #mysql -uroot
      mysql>use mysql;
      mysql>update user set Password=password('!@#,abc354') where User='root';
      把mysql密码修改为!@#,bac354
3、重启mysql

      /etc/init.d/mysqld restart
      用新密码进入mysql
      #mysql -uroot -p!@#,abc354
类别:mysql|阅读(13)|回复(0)|(0)阅读全文>>

CFLAGS="-O3" CXX=gcc CXXFLAGS="-O3 -felide-constructors -fno-exceptions -fno-rtti -fomit-frame-pointer -ffixed-ebp"
export CFLAGS CXX CXXFLAGS
./configure --prefix=/usr/local/mysql --enable-assembler --with-mysqld-ldflags=-all-static --with-client-ldflags=-all-static --with-unix-socket-path=/tmp/mysql3306.sock --with-charset=utf8 --with-collation=utf8_general_ci --with-extra-charsets=all --with-plugins=max
1、当你用-static链接时,可以得到最快的可执行文件

2、在Linux上,最好用pgcc和-O3编译服务器
类别:mysql|阅读(18)|回复(0)|(0)阅读全文>>
    这种报错是说无法分配共享内存,解决方法,需要改变内核参数。
vim /etc/sysctl.conf

修改下面参数

kernel.shmmax = 536870912

sysctl -p     使修改生效。

重启zabbix,就可以正常工作了!

 
2011-07-24 18:04:18
1、安装

1、先安装sphinxclient
#cd /usr/local/src
#wget http://sphinxsearch.com/files/sphinx-0.9.9.tar.gz
#tar xzvf sphinx-0.9.9.tar.gz
#cd sphinx-0.9.9/api/libsphinxclient
#vim sphinxclient.c
找到
void sock_close ( int sock );
改为
static void sock_close ( int sock );
#./configure --prefix=/usr/local/sphinxclient
#make
#make install
2、安装sphinx扩展
#wget http://pecl.php.net/get/sphinx-1.0.4.tgz
#tar xvzf sphinx-1.0.4.tgz
#cd sphinx-1.0.4
#/usr/local/php/bin/phpize
#./configure --with-php-config=/usr/local/php/bin/php-config --with-sphinx=/usr/local/sphinxclient
#make
#make install
修改php.ini
extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/"
[sphinx]
extension=sphinx.so

2、测试

   1、安装sphinx

      请参照文档http://linux008.blog.51cto.com/2837805/622088

   2、编写测试..
类别:php|阅读(939)|回复(0)|(1)阅读全文>>
1、架构:ip192.168.0.200 redhat5.4(64位)

2、安装

   #cd /usr/local/src
   #yum -y install mysql-devel #安装mysql头文件支持mysql
   #wget http://sphinxsearch.com/files/sphinx-0.9.9.tar.gz
#tar -xvzf sphinx-0.9.9.tar.gz
   #cd sphinx-0.9.9
#./configure --prefix=/usr/local/sphinx --with-mysql --with-iconv --enable-id64
#make
#make install

3、配置

#cd /usr/local/sphinx
#cp etc/sphinx.conf.dist etc/sphinx.conf
#vim etc/sphinx.conf #修改配置文件
source goods_src
{
type = mysql
sql_host = localhost
sql_user = ecshop
sql_pass = ecshop
sql_db = ecshop
sql_port = 3306
sql_sock = /tmp/mysql.so..
类别:sphinx|阅读(625)|回复(0)|(0)阅读全文>>
1、目的

   使用squid加速图片的访问

2、架构

   squid:192.168.0.200

   web(www.gangpao.com):192.168.0.201   图片服务器

   web(shop.gangpao.com):192.168.0.201  图片服务器

3、安装

   #wget wget http://www.squid-cache.org/Versions/v3/3.0/squid-3.0.STABLE15.tar.gz
#tar xzvf squid-3.0.STABLE15.tar.gz
#cd squid-3.0.STABLE15
#./configure --prefix=/usr/local/squid --enable-dlmalloc --enable-debug-cbdata --enable-async-io=100 --with-pthreads --enable-storeio="aufs,diskd,ufs" --enable-removal-policies="heap,lru" --enable-icmp --enable-delay-pools --enable-useragent-log --enable-referer-log --disable-wccp --disable-wccpv2 --enable-kill-parent-hack --enable-arp-acl --enable-snmp --enable-default-err-language=Simplify_Chinese --enable-err-languages="Simplify_Chinese English" --disable-poll --enable-epoll --disable-ident-lookups --disable-internal-dns --enable-truncate --enable..
类别:squid|阅读(359)|回复(0)|(1)阅读全文>>
2011-07-14 22:46:03
1、vsftpd安装ip:192.168.0.200 (redhat 5.3系统)

   #yum -y install vsftpd     #vsftpd软件
   #yum -y install db4-utils  #生成虚拟用户认证数据文件命令

2、配置vsftp

   #vim /etc/vsftpd/vsftpd.conf
   listen=YES                          #独立运行vsftpd
   anonymous_enable=NO                 #限制匿名用户登录
   dirmessage_enable=YES         
   xferlog_enable=YES
   xferlog_file=/var/log/vsftpd.log
   xferlog_std_format=YES
   chroot_list_enable=YES #限制虚拟用户切换目录

   chroot_list_file=/etc/vsftpd/chroot_list #限制切换目录的用户列表
   chroot_local_..
类别:vsftpd|阅读(100)|回复(0)|(0)阅读全文>>
用puppet管理cron,可以为N台服务器批量添加cron作业。如定时同步时间服务器的脚本。

1、架构
   192.168.0.200(redhat) 主机名master.gangpao.com

   192.168.0.201(redhat) 主机名agent01.gangpao.com


2、目录结构
   /etc/puppet
        |                

        |-->manifests                

        |   |-->modules.pp                

        |   |-->nodes.pp                

        |   |-->site.pp                

  &nb..
类别:puppet|阅读(855)|回复(2)|(2)阅读全文>>
2011-07-10 03:58:49
puppet是一款开源自动化部署工具,下面介绍puppet安装和配置。

1、操作系统:redhat5.3 (64位系统)

2、系统架构:
   192.168.0.200  服务器

   192.168.0.201  客户端

   192.168.0.202  客户端



3、安装ruby.(安装puppet先决条件服务端和客户端都要安装)
   #rpm –Uvh http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm

   #yum -y install mysql* ruby-mysql ruby ruby-devel ruby-irb ruby-rdoc ruby-ri



安装ruby 1.8.2以上版本,但不要安装1.87以上版本。还不支持。

4、服务端安装

   (1)安装Facter  用来获取客户端系统信息(如hostname,ip,OS-version,fqdn等)采用源码安装
   #cd /usr/local/src

   #wget http://puppetlabs.com/downloads/facter/facter-1.6.0.tar.gz下载最新稳定版facter

   #tar -xvzf facter-1.6.0.tar.gz

   #cd facter-1.6.0

   #ruby install.rb   安装

   #cd ../
  

   (2..
类别:puppet|阅读(570)|回复(3)|(3)阅读全文>>
2011-07-01 16:30:16
1、在nginx.conf中加入以下配置
 server{

      listen 80 default;

      server_name _;

      return 403;

 }
 
2、重启nginx
   #/usr/local/nginx/sbin/nginx -t

   #/usr/local/nginx/sbin/nginx -s reload
 
类别:nginx|阅读(55)|回复(0)|(0)阅读全文>>
1、说明

   实验操作系统:CentOS release 5.6

   服务器端(代码更新服务器):192.168.0.5

   客户端(web服务器):192.168.0.6   192.168.0.7  192.168.0.8

   web目录:/data/httpd/wwwroot/

   原理:由192.168.0.5上inotify服务监测文件是否有更新,如果有更新(修改,删除,新建)inotify就会通过rsync命令将更新的文件推向三台web服务器

   架构图如下:

2、在三台web上配置rsync服务
   #mkdir -p /data/httpd/wwwroot       #创建web目录
 
   #vim /etc/rsyncd.conf               #配置文件

   uid = root

   gid = root

   use chroot = no

   max connections = 5

   pid file = /var/run/rsyncd.pid

   lock file = /var/run/rsync.lock

   log file = /var/log/rsyncd.log



   [www]

   path=/data/httpd/wwwroot/

   comment = update

   ignore errors

   read only = no

   list = no

   hosts allow = 192.168.0.0/255.255.255.0

   auth users = root

   uid = root

   gid = root

   secrets file = /etc/rsyncd.secrets

  

   #vim /etc/rsyncd.secrets                   #创建rsync证文件

   123456

   root:123456



   #chmod 0600 /etc/rsyncd.secrets            #设置权限

   #rsync --daemon                            #启动服务

   #echo "rsync --daemon"  >> /etc/rc.local   #开机自启动

  


   关于rsync详细配置请参考http://linux008.blog.51cto.com/2837805/570936

3、配置服务端(rsync+inotify)

   #mkdir -p /data/httpd/wwwroot   #创建目录存放代码

   (1)、安装inotify


   #cd /usr/local/src/

   #wget http://cloud.github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz

   #tar xzvf inotify-tools-3.14.tar.gz

   #cd inotify-tools-3.14

   #./configure

   #make

   #make install




   (2)、编写同步更新脚本




   #mkdir /root/bin

   #cd /root/bin

   #vim rsync.sh

  

   #!/bin/bash

   src=/data/httpd/wwwroot/

   des=www

   host="192.168.0.6 192.168.0.7 192.168.0.8"

   /usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e modify,delete,create,attrib $src | while read files

   do

     for hostip in $host

     do

        rsync -vzrtopg --delete --progress --password-file=/etc/rsyncd.secrets $src root@$hostip::$des

     done

     echo "${files} was rsynced" >>/tmp/rsync.log 2>&1

   done




   (3)、创建rsync认证文件

  


   #vim /etc/rsyncd.secrets                 


   123456


   root:123456

   #chmod u+x /etc/rsyncd.secrets




   (4)、启动


   #nohup /bin/bash /root/bin/rsync.sh &


  

   (5)、开机自启动


   #echo "nohup /bin/bash /root/bin/rsync.sh &" >> /etc/rc.local


  

   (6)、测试

   在192.168.0.5上进入目录/data/httpd/wwwroot/

   #touch a.txt

   在三台web机上/data/httpd/wwwroot/目录可以立马看a.txt。


 [/img]..
类别:rsync|阅读(890)|回复(5)|(5)阅读全文>>
2011-06-24 22:34:52
备份目录:/data/mysqlbackup/

脚本目录:/data/mysqlbackup/


#vim mysql_backup

#!/bin/bash

DBUser=backup

DBPasswd="123456"

DBHost=192.168.0.250

DBName=`echo "select SCHEMA_NAME from information_schema.SCHEMATA where schema_name not in ('information_schema','test');" | mysql -h$DBHost -u$DBUser -p$DBPasswd --skip-column-names --silent`

BackupPath=/data/mysqlbackup

LogFile=/data/mysqlbackup/log/mysql_backup.log

NewFile=$(date +%Y%m%d).tgz

OldFile=$(date +%Y%m%d --date='7 days ago').tgz



pushd $BackupPath >> $LogFile

echo $OldFile

echo "-------------------------------------------" >> $LogFile

echo $(date +"%Y-%m-%d %H:%M:%S") >> $LogFile

echo "--------------------------" >> $LogFile

#Delete Old File

if [ -f $OldFile ]

then

     rm -f $OldFile >> $LogFile 2>&1

     echo "[$OldFile]Delete Old File Success!" >&..
类别:mysql|阅读(49)|回复(0)|(0)阅读全文>>
2011-06-24 16:57:15
1、配置文件

   #vim /usr/local/nginx/conf/nginx.conf

   log_format  access  '$remote_addr - $remote_user [$time_local] "$request" '

           '$status $body_bytes_sent "$http_referer" '

           '"$http_user_agent" $http_x_forwarded_for';

   include /usr/local/nginx/conf/vhost/*.conf;

2、vhost中配置

   #vim /usr/local/nginx/conf/vhost/www.abc.com.conf

   server

{

        listen       80 default;

        server_name  www.bac.com;

        index index.html index.htm index.php;

        root  /data/httpd/csm.shopex.cn;     

       

   &..
类别:nginx|阅读(1803)|回复(0)|(0)阅读全文>>
1、说明

   主服务器:192.168.0.17  

   从服务器:192.168.0.68   新建的一个从服务器,需要同步主服务器数据。

2、配置

   (1)、主服务器配置192.168.0.17

       #vim /etc/my.cnf      加入以下几行。

       server-id = 1105161846

       log-bin=mysql-bin

       log_bin_index = mysql-bin.index

       binlog_do_db = test_db

       sync_binlog = 1

      

       重启mysql服务

       #/etc/init.d/mysqld restart

       #mysql -uroot -p

       mysql>show master status;

       +------------------+----------+--------------+-------------..
类别:mysql|阅读(53)|回复(1)|(1)阅读全文>>
 <<   1   2   3   >>   页数 ( 1/3 )