Nginx 502 Bad Gateway错误触发条件与解决方法
一些运行在Nginx上的网站有时候会出现“502 Bad Gateway”错误,有些时候甚至频繁的出现。以下是从Google搜集整理的一些Nginx 502错误的排查方法,供参考: 继续阅读
Nginx 502 Bad Gateway错误触发条件与解决方法
一些运行在Nginx上的网站有时候会出现“502 Bad Gateway”错误,有些时候甚至频繁的出现。以下是从Google搜集整理的一些Nginx 502错误的排查方法,供参考: 继续阅读
php-fpm目前主要又两个分支,分别对应于php-5.2.x的版本和php-5.3.x的版本。在5.2.x的版本中,php-fpm.conf使用的是xml格式,而在新的5.3.x版本中,则是和php.ini一样的配置风格。 继续阅读
1. dd if=/dev/zero of=test bs=64k count=16k
这个很不准确的,因为命令结束的时候数据还没有真正写到磁盘上去
2. dd if=/dev/zero of=test bs=64k count=16k conv=fsync
这个还算准确,数据已经写入磁盘
3. dd if=/dev/zero of=test bs=64k count=4k oflag=dsync
这个可以当成是模拟数据库插入操作,所以很慢
接着让我们来看看buyvm的磁盘性能
dd if=/dev/zero of=test bs=64k count=16k
1073741824 bytes (1.1 GB) copied, 2.99687 seconds, 358 MB/s
第一种方式得到的结果貌似很快
dd if=/dev/zero of=test bs=64k count=16k conv=fsync
1073741824 bytes (1.1 GB) copied, 13.9241 seconds, 77.1 MB/s
这次慢了很多,这个数据才有参考价值
dd if=/dev/zero of=test bs=64k count=2k oflag=dsync
134217728 bytes (134 MB) copied, 177.813 seconds, 755 kB/s
SSV-ID: 30070
SSV-AppDir: Linux
发布时间: 2012-01-23
漏洞版本:
Linux kernel 2.6.x
漏洞描述:
BUGTRAQ ID: 51625
CVE ID: CVE-2012-0056
Linux是自由电脑操作系统内核。
Linux Kernel在SUID /proc/pid/mem write的实现上存在本地权限提升漏洞,攻击者可利用此漏洞获取提升的权限,以内核级别执行任意代码 继续阅读
一.NUMA设置
单机单实例,建议关闭NUMA,关闭的方法有三种:
1.硬件层,在BIOS中设置关闭;
2.OS内核,启动时设置numa=off;
3.可以用numactl命令将内存分配策略修改为interleave(交叉)(–interleave=all 这是使用交叉分配模式启动一个程序,也就是说程序可以随意跨节点用其他节点的内存,传说中这是效率最高的关闭NUMA特性的方法) 继续阅读
主要实现的是一个高可用负载均衡web服务器集群,适合lamp架构。
前端使用两台服务器做lvs+keepalived负载调度器,中间可以用N台做apache+php应用服务器,后面使用两台做mysql高可用双机,最后面用了一台虚拟机做文件服务器。
一共开了7个虚拟机。
系统环境:RHEL6.0 kvm虚拟机
lvs调度服务器:192.168.0.1 192.168.0.2
apache服务器:192.168.0.3 192.168.0.4
mysql服务器:192.168.0.7 192.168.0.8
文件服务器:192.168.0.10
———————————————————————————————————–
一、lvs调度服务器
———————————————————————————————————–
Keepalived+lvs
服务器环境:
系统均是:RHEL6.0 内核:2.6.32-71.el6.i686)
Virtual IP:192.168.0.50
Load Balancer:192.168.0.1
Backup:192.168.0.2
Real Server 1:192.168.0.3
Real Server 2:192.168.0.4
主备机上的软件包安装与配置
yum install ipvsadm kernel–devel -y
wget http://www.keepalived.org/software/keepalived-1.1.20.tar.gz
tar zxf keepalived-1.1.20.tar.gz
cd keepalived-1.1.20
./configure –prefix=/usr/local/keepalived –with-kernel-dir=/usr/src/kernels/2.6.32-71.el6.i686/
86/
Keepalived configuration
———————-Keepalived version : 1.1.17
Compiler: gcc
Compiler flags: -g -O2
Extra Lib: -lpopt -lssl -lcrypto
Use IPVS Framework: Yes;注意编译时一定要支持 lvs
IPVS sync daemon support: Yes
Use VRRP Framework: Yes
Use LinkWatch: No
Use Debug flags: No
make
make install
mkdir /etc/keepalived
ln –s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
ln –s /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
ln –s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/keepalived/bin/* /bin/
ln -s /usr/local/keepalived/sbin/* /sbin/
vi /etc/rc.local
modprobe ip_vs
vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
root@example.com#接收警报的 email 地址,可以添加多个
}
notification_email_from root@localhost
smtp_server 127.0.0.1#使用本机转发 email
smtp_connect_timeout 30
router_id LVS_DEVEL#load balancer 的标识 ID,用于 email 警报
}
vrrp_instance VI_1 {
state MASTER#备机改为 BACKUP,此状态是由 priority 的值来决定的,当前
priority 的值小于备机的值,那么将会失去 MASTER 状态
interface eth0#HA 监测网络接口
virtual_router_id 50#主、备机的 virtual_router_id 必须相同
priority 150#主机的优先级,备份机改为 50
advert_int 1#主备之间的通告间隔秒数
authentication {
auth_type PASS#主备切换时的验证
auth_pass 1111
}
virtual_ipaddress {
192.168.0.111#HA 虚拟 ip,可加多个
}
}
virtual_server 192.168.0.111 80 {
delay_loop 6#每隔 6 秒查询 realserver状态
lb_algo rr#lvs 调度算法,这里使用轮叫
lb_kind DR#lvs 负载均衡机制,这里使用直连路由
# persistence_timeout 50 #同一 IP 的连接 60 秒内被分配到同一台 realserver
protocol TCP #用 TCP 协议检查 realserver 状态
real_server 192.168.0.1 80 {
weight 1
TCP_CHECK {
connect_timeout 3 #故障重试秒数
nb_get_retry 3 #重试延迟
delay_before_retry 3
}
}
real_server 192.168.0.2 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
分别在 realserver 上执行以下命令
vi /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2
sysctl -p
ifconfig eth0:0 192.168.0.200 netmask 255.255.255.255 up
route add -host 192.168.0.200 dev eth0:0
vi /etc/rc.local
ifconfig eth0:0 192.168.0.200 netmask 255.255.255.255 up
route add -host 192.168.0.200 dev eth0:0
echo `hostname` > /var/www/html/index.html
service httpd start
测试:
访问 http://192.168.0.50,看到页面在两个 realserver 上切换表示成功!
你也可以通过 ipvsadm -Lnc 查看详细连接情况!
——————————————————————————————————————-
二、mysql服务器
——————————————————————————————————————-
mysql双主高可用
————————————-
系统环境:
RHEL6.0_I386
VIP 192.168.0.51
real server1 192.167.0.7
real server2 192.168.0.8
————————————-
1.server1和server2安装好mysql并修改配置文件:
yum install mysql-server
vi /etc/my.cnf:
[mysqld]
log-bin=MySQL-bin
server-id=1 ##在server2上配置为server-id=2
————————————-
2.server1和server2相互设置为主从同步,(双主).
server1:
mysql> grant replication slave on *.* to ‘cluster’@’%’ identified by ‘cluster’;
mysql> show master status;
————————-
MySQL-bin.000001 236
————————-
————————————
server2:
mysql> change master to
-> master_host=’192.168.0.7′,
-> master_user=’cluster’,
-> master_password=’cluster’,
-> master_log_file=’MySQL-bin.000001′,
-> master_log_pos=236;
mysql> start slave;
mysql> show slave status;
在server2和server1上执行相反的操作,使其互为主从.
————————————–
3.安装软件包
yum install gcc popt-devel kernel-devel openssl-devel ipvsadm make
tar xf keepalived-***.tar.gz
cd keepalived-*
./configure –prefix=/usr/local/keepalived –with-kernel-dir=/usr/src/kernels/2.6.32-71.el6.i686
make && make install
modprobe ip_vs #此处如果系统没有自动加载此模块将导致keepalived启动后无法找到lvs负载均衡协议
mkdir /etc/keepalived/
ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
ln -s /usr/local/keepalived/bin/* /bin/
ln -s /usr/local/keepalived/sbin/* /sbin/
—————————————————
4.修改server1/server2配置文件
server1:
vi /etc/keepalived/keepalived.conf:
! Configuration File for keepalived
global_defs {
notification_email {
root@example.com
}
notification_email_from root@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id MYSQL-HA ##确保和server2相同
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51 ##确保和server2相同,同网内不同集群此项必须不同,否则发生冲突
priority 100 ##此处server2上设置为50
advert_int 1
nopreempt ##不抢占,只在priority高的server1上设置,server2上此项注释掉
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.0.51
}
}
virtual_server 192.168.0.51 3306 {
delay_loop 2
lb_algo wrr
lb_kind DR
persistence_timeout 60
protocol TCP
real_server 192.168.0.7 3306 {
##server2上此处改为192.168.0.8(即server2本机ip)
weight 3
notify_down /usr/local/keepalived/bin/mysql.sh
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 3306
}
}
}
——————————–
server1和server2上都添加此检测脚本,作用是当mysql停止工作时自动关闭本机的keepalived
从而实现将故障机器踢出(因每台机器上keepalived只添加了本机为realserver).
vi /usr/local/keepalived/bin/mysql.sh:
#!/bin/sh
pkill keepalived
——————————–
vi /etc/rc.local:
modprobe ip_vs ##此模块如果无法自动加载则需手动加载
——————————–
server1和server2启动keepalived守护进程.
/etc/init.d/keepalived start
————————————————————————————————————
三、文件服务器
————————————————————————————————————
data server:192.168.0.10
data client1:192.168.0.3
data client2:192.168.0.4
—————————–
data server:
yum install luci -y
/etc/init.d/luci start
访问https://192.168.0.10/:8084/ 使用系统帐号密码登录进入创建一个集群并将client1/2加为节点
然后添加一个虚拟fence设备并加入client1 client2
yum install scsi-target-utils -y
chkconfig tgtd on
/etc/init.d/tgtd start
tgtadm –lld iscsi –op new –mode target –tid 1 -T webdata
tgtadm –lld iscsi –op new –mode logicalunit –tid 1 –lun 1 -b /dev/sda
tgtadm –lld iscsi –op bind –mode target –tid 1 -I ALL
tgtadm –lld iscsi –op show –mode target #验证是否ok
vi /etc/rc.local 将上面的配置命令写入rc.local
tgtadm –lld iscsi –op new –mode target –tid 1 -T webdata
tgtadm –lld iscsi –op new –mode logicalunit –tid 1 –lun 1 -b /dev/sda
tgtadm –lld iscsi –op bind –mode target –tid 1 -I ALL
data client:
yum install ricci -y
/etc/init.d/ricci start
lvmconf –enable-cluster
yum install iscsi-initiator-utils -y
iscsiadm -m discovery -t sendtargets -p 192.168.0.10
iscsiadm -m node -T webdata -p 192.168.0.10 -l
信息自动保存至配置文件/var/lib/iscsi/nodes/webdata/192.168.0.10,3260,1/default
fdisk -l 查看可看到多了一块/dev/sda硬盘
pvcreate /dev/sda
vgcreate datavg /dev/sda
lvcreate -L 1020M -n lv1 datavg
cman_tool status|grep Name #查看cluster name
Cluster Name: web_cluster
创建gfs文件系统
mkfs.gfs2 -p lock_dlm -t web_cluster:gfs -j 2 /dev/datavg/lv1
#此处-j 2 提供两台client主机连接
mount -t gfs2 /dev/datavg/lv1 /mnt
vi /etc/fstab
/dev/datavg/lv1 /mnt gfs2 defaults 0 0
/etc/init.d/gfs2 start #文件系统自动挂在到/mnt
chkconfig cman on
chkconfig rgmanager on
chkconfig ricci on
chkconfig modclusterd on
chkconfig clvmd on
chkconfig gfs2 on
如果gfs开机时无法识别到而lvscan命令又遇到lv状态为inactive:
lvchange -ay /dev/gfsvg/gfs
tomcat环境部署
1.jdk部署
2.apache的tomcat部署
3.配置文件路径
4.tomcat临时路径清理
一、jdk部署
wget http://download.oracle.com/otn-pub/java/jdk/6u31-b04/jdk-6u31-linux-x64.bin
./jdk-6u31-linux-x64.bin 解压得到jdk1.6.xxx目录
mv jdk1.6.xx /opt/jdk16
配置环境/etc/profile
export JAVA_HOME=/opt/jdk16
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOMR/bin
exit退出ssh终端,让环境参数生效
java -version
得到jdk版本号
二、tomcat部署
下载最新的tomcat6.x
wget http://mirror.bit.edu.cn/apache/tomcat/tomcat-6/v6.0.35/bin/apache-tomcat-6.0.35.tar.gz
tar xzf apache-tomcat-6.0.35.tar.gz 得到apache-tomcat.xx目录
mv apache-tomcat.xx /opt/tomcat
配置环境/etc/profile
export TOMCAT_HOME=/opt/tomcat
export CATALINA_HOME=/opt/tomcat
export CLASSPATH=$CLASSPATH:$CATALINA_HOME/common/lib
exit退出ssh终端,让环境参数生效
/opt/tomcat/bin/startup.sh 启动tomcat 将监听在8080端口,访问即可!
三、配置文件路径
/opt/tomcat/conf
主要配置文件:
server.xml 关键参数配置文件,配置新的webApp项目,配置tomcat支持URL中文参数、启用支持gzip压缩、虚拟主机、配置SSL等
web.xml 指定web默认首页、以及顺序、命名与定制URL、定制初始化参数、错误处理页面、过滤器、监听器、Session过期时间等.
四、临时目录
/opt/tomcat/work/Catalina/localhost
清除该目录下所有文件,重启tomcat即可。
在Linux的世界中最不能缺少的就是Linux命令行的应用。Linux命令行可以帮助我们十分迅速的找的想要的、完成想做的、批量完成各种繁琐的事情。是一个不折不扣的系统管理与应用的利器。本文主要向大家介绍最常见的几个Linux命令,进行一次大型的Linux命令扫盲。 继续阅读
最近在使用nginx的时候,遇到了一个问题,在nginx的配置文件中直接添加中文域名的时候,域名虽然能找到服务器ip地址,但是并不能正确的读取虚拟主机的配置文件。
在网上查询相关资料后,发现中文域名需要进行转义后才能被识别。
例如www.尚可乐.com这个域名。首先我们登录
http://www.cnnic.net.cn/html/Dir/2003/10/29/1112.htm
直接转码即可!
一:nginx.conf
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
其实这个proxy.conf里面默认都有,在nginx.conf使用include proxy.conf就可以
二:apache第三方的mod
主页:http://stderr.net/apache/rpaf/
下载:http://stderr.net/apache/rpaf/download/
安装:
# wget http://stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz 下载
# tar zxvf mod_rpaf-0.6.tar.gz 解压
# cd mod_rpaf-0.6
#/usr/local/apache2/bin/apxs -i -a -c mod_rpaf.c Apache 1.3.x 的安装方式
#/usr/local/apache2/bin/apxs -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c Apache 2.x 的安装方式
httpd.conf配置:
LoadModule rpaf_module modules/mod_rpaf-2.0.so
RPAFenable On
RPAFsethostname On
RPAFproxy_ips 127.0.0.1 # 填写Nginx的来访IP
RPAFheader X-Forwarded-For