0%

遇到Sphere6.0 (esxi6 )导出的OVF虚拟机模板在Vmware WorkStation 9和VmWare WorkStation11中导入报错的问题,暂改成OVA格式进行数据交换。


阅读全文 »

新购进一台戴尔塔式服务器,机器3*300G的硬盘默认已做RAID5配置,新增硬盘需配置磁盘阵列

RAID容量计算器

配置前,可根据硬盘数和RAID级别,可计算配置后的硬盘实际可用容量
参考计算工具


阅读全文 »

问题描述

Nginx服务器返回大量502Bad Gateway和504 Time-Out,代理服务器Jetty端存在大量CLOSE_WAIT和TIME_WAIT状态的连接
502-504
错误信息查看口令:
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

解决方案

  1. Linux中TCP/IP内核参数 优化
    编辑参数:vi /etc/sysctl.conf

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    net.core.somaxconn = 4096
    net.ipv4.tcp_max_syn_backlog = 8192
    net.ipv4.tcp_syn_retries= 5
    net.ipv4.tcp_synack_retries = 5
    net.ipv4.tcp_abort_on_overflow=0
    net.ipv4.tcp_tw_reuse=1
    net.ipv4.tcp_tw_recycle=1
    net.ipv4.tcp_timestamps=1
    net.ipv4.tcp_syncookies=1
    net.ipv4.tcp_max_tw_buckets=90000
    net.ipv4.tcp_fin_timeout=30
    net.ipv4.ip_local_port_range=10000 65000
    net.ipv4.tcp_keepalive_time=1200

    让参数生效:/sbin/sysctl -p

  2. Nginx配置参数
    主要配置三个proxy_超时控制参数

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    upstream uadb_server{   
    server 192.168.1.81:8080 weight=1 max_fails=2 fail_timeout=0;
    server 192.168.1.82:8080 weight=1 max_fails=2 fail_timeout=0;
    }
    server {
    listen 9090;
    server_name uadb_server;
    access_log /var/log/nginx/uadb_server-access-ssl.log;
    error_log /var/log/nginx/uadb_server-error-ssl.log;
    location /{
    proxy_pass http://uadb_server;
    # time out settings
    proxy_connect_timeout 60;
    proxy_read_timeout 3600;
    proxy_send_timeout 3600;
    proxy_temp_file_write_size 64k;
    proxy_redirect off;
    }
    }

Nginx upstream负载均衡/反向代理

proxy

upstream算法分析

  1. 轮询每个请求按时间顺序分配到不同的后端服务器了,后端服务器down掉,自动切除;
  2. weight:设定服务器权值:如weight=2,服务器性能不均时候使用。weight:默认为1,weight越大,负载的权重越大;
  3. ip_hash :每个请求按访问ip的hash结果分配,每个访客有固定的后端服务器,可以解决session问题;
  4. fair(第三方):按后端服务器的响应时间来分配,响应时间短的优先分配
  5. url_hash (第三方): 按访问的url的hash结果分配,使每个url定向到同一个后端服务器,后端为缓存服务器比较有效。

upstream参数介绍

  1. down:当前的IP server暂时不参与负载,不进行反向代理;
  2. max_fails:允许请求失败的次数默认为1,当超过最大次数时,返回proxy_next_upstream模块定义的错误;
  3. fail_timeout:max_fails次失败后,暂停的时间;
  4. backup:其它所有非backup机器down或者忙时候,请求backup机器,这台机器压力最轻。

netstat参数状态

查看口令:netstat -an
参数说明:

1
2
3
4
5
6
7
8
9
10
11
LISTEN:侦听来自远方的TCP端口的连接请求;
SYN-SENT:在发送连接请求后等待匹配的连接请求;
SYN-RECEIVED:在收到和发送一个连接请求后等待对方对连接请求的确认;
ESTABLISHED:代表一个打开的连接,我们常用此作为并发连接数;
FIN-WAIT-1:等待远程TCP连接中断请求,或先前的连接中断请求的确认;
FIN-WAIT-2:从远程TCP等待连接中断请求;
CLOSE-WAIT:等待从本地用户发来的连接中断请求;
CLOSING:等待远程TCP对连接中断的确认;
LAST-ACK:等待原来发向远程TCP的连接中断的确认;
TIME-WAIT:等待足够的时间以确保远程TCP连接收到中断请求的确认;
CLOSED:没有任何连接状态;

服务器TCP连接状态

查看口令:netstat -an|awk '/^tcp/{++S[$NF]}END{for (a in S)print a,S[a]}'

CLOSED:没有连接活动或正在进行的;
LISTEN:服务器正在等待的进入呼叫;
SYN_RECV:一个连接请求已经到达,等待确认;
SYN_SENT:应用已经开始,打开一个连接;
ESTABLISHED:正常数据传输状态,也可以近似的理解为当前服务器的并发数;
FIN_WAIT1:应用已经完成;
FIN_WAIT2:另一边同意释放;
ITMED_WAIT:等待所有分组死掉;
CLOSING:两边同时尝试关闭;
TIME_WAIT:另一边已初始化一个释放;
LAST_ACK:等待所有分组死掉;

最近需要对多台Web服务器/Java客户端程序的日志进行分析,比较了一些开源的日志分析产工具,目前在用的有OtrosLogViewer(olv)和LogExpert


阅读全文 »

具体参考LNMP一键安装官网

NMP环境配置

LNMP:Linux+Nginx+Mysql+PHP

LNMP相关软件安装目录

Nginx 目录: /usr/local/nginx/
MySQL 目录 : /usr/local/mysql/
MySQL数据库所在目录:/usr/local/mysql/var/
MariaDB 目录 : /usr/local/mariadb/
MariaDB数据库所在目录:/usr/local/mariadb/var/
PHP目录 : /usr/local/php/
PHPMyAdmin目录 : 0.9版为/home/wwwroot/phpmyadmin/ 1.0版为 /home/wwwroot/default/phpmyadmin/ 强烈建议将此目录重命名为其不容易猜到的名字。phpmyadmin可自己从官网下载新版替换。
默认网站目录 : 0.9版为 /home/wwwroot/ 1.0版为 /home/wwwroot/default/
Nginx日志目录:/home/wwwlogs/
/root/vhost.sh添加的虚拟主机配置文件所在目录:/usr/local/nginx/conf/vhost/
PureFtpd 目录:/usr/local/pureftpd/
PureFtpd web管理目录: 0.9版为/home/wwwroot/default/ftp/ 1.0版为 /home/wwwroot/default/ftp/
Proftpd 目录:/usr/local/proftpd/
Redis 目录:/usr/local/redis/

一键安装

下载
wget --no-check-certificate https://api.sinas3.com/v1/SAE_lnmp/soft/lnmp1.2-full.tar.gz
一键下载安装
wget -c http://soft.vpser.net/lnmp/lnmp1.2-full.tar.gz && tar zxf lnmp1.2-full.tar.gz && cd lnmp1.2-full && ./install.sh lnmp

离线安装
cd /tmp/lnmp && tar zxf lnmp1.2-full.tar.gz && cd lnmp1.2-full && ./install.sh lnmp
网络情况10M带宽耗时:45分钟

hexo环境搭建

1
2
3
4
5
6
7
8
9
10
11
12
npm install -g hexo-cli
hexo init
npm install
npm install hexo-deployer-git --save
npm install hexo-server --save
npm install hexo-generator-sitemap --save
npm install hexo-generator-feed --save
npm install hexo-toc --save
npm install hexo-html-minifier --save
npm install hexo-filter-sequence --save
npm install hexo-filter-flowchart --save
npm install hexo-related-popular-posts --save

可选插件

1
2
npm un hexo-renderer-marked --save
npm i hexo-renderer-markdown-it --save

next主题的数学公式配置

1
2
3
4
5
6
7
# Math Formulas Render Support
math:
per_page: false
mathjax:
enable: true
cdn: //cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML
mhchem: false

常用命令

1
2
3
4
5
6
7
8
9
10
11
12
hexo g (generate)
hexo s (server)
hexo clean (clear public)
hexo n [layout] <title >(new post)
eg:hexo n draft title
hexo publish [layout] <title>
eg:hexo publish draft title
hexo d (deploy)
hexo d -g (generate and deploy)

hexo g
hexo s

配置评论插件

多说挂了,换gitment,参考

常见问题

hexo部署错误

错误日志:Error: spawn git ENOENT
解决方案:
方案1)添加环境变量C:\Program Files (x86)\Git\bin;C:\Program Files (x86)\Git\libexec\git-core
方案2)安装github windows>在项目中Open in Gitshell>执行hexo d -g

sequence插件配置

  1. 在 _config.yml 中添加 sequence:相关配置
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    sequence:
    raphael: https://cdn.bootcss.com/raphael/2.2.8/raphael.min.js
    webfont: https://cdn.bootcss.com/webfont/1.6.28/webfontloader.js
    snap: https://cdn.bootcss.com/snap.svg/0.5.1/snap.svg-min.js
    underscore: https://cdn.bootcss.com/underscore.js/1.9.1/underscore-min.js
    sequence: https://cdn.bootcss.com/js-sequence-diagrams/1.0.6/sequence-diagram-min.js
    # css: # optional, the url for css, such as hand drawn theme
    options:
    theme:
    css_class:
  2. 修改 node_modules/hexo-filter-sequence/index.js文件,将其彻底清空,然后将以下内容copy进去
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    // index.js
    var assign = require('deep-assign');
    var renderer = require('./lib/renderer');

    hexo.config.sequence = assign({
    webfont: 'https://cdnjs.cloudflare.com/ajax/libs/webfont/1.6.27/webfontloader.js',
    // sequence-diagram 1.x 版本依赖 raphael, 2.x版本依赖 snap
    raphael: 'https://cdnjs.cloudflare.com/ajax/libs/raphael/2.2.7/raphael.min.js',
    snap: 'https://cdnjs.cloudflare.com/ajax/libs/snap.svg/0.4.1/snap.svg-min.js',
    underscore: 'https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js',
    sequence: 'https://cdnjs.cloudflare.com/ajax/libs/js-sequence-diagrams/1.0.6/sequence-diagram-min.js',
    css: '',
    options: {
    theme: 'simple'
    }
    }, hexo.config.sequence);

    hexo.extend.filter.register('before_post_render', renderer.render, 9);
  3. 修改 node_modules/hexo-filter-sequence/lib/renderer.js文件,将 26 - 31 行,var config = this.config.flowchart; 及以下的 data.content 等行做如下修改。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    if (sequences.length) {
    var config = this.config.sequence;
    // resources
    data.content += '<script src="' + config.webfont + '"></script>';
    // sequence-diagram 1.x 版本依赖 raphael, 2.x版本依赖 snap
    data.content += '<script src="' + config.raphael + '"></script>';
    data.content += '<script src="' + config.snap + '"></script>';
    data.content += '<script src="' + config.underscore + '"></script>';
    data.content += '<script src="' + config.sequence + '"></script>';
    ......
    }
  4. 修改完毕后执行 hexo clean,hexo g,hexo s
  5. 时序图可以正常显示了

关于zabbix

  • zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案,能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统工程师快速定位/解决存在的各种问题。zabbix由2部分构成,zabbix server与可选组件zabbix agent。
  • zabbix server可以通过SNMP,zabbix agent,ping,端口监视等方法提供对远程服务器/网络状态的监视,数据收集等功能。
  • zabbix agent需要安装在被监视的目标服务器上,它主要完成对硬件信息或与操作系统有关的内存,CPU等信息的收集。

阅读全文 »

zabbix

准备内容

  1. zabbix安装包(官网版本:zabbix-2.2.9.tar.gz)
  2. yum groupinstall “Development tools”
  3. zabbix安装脚本

cd /tmp && tar -zxf zabbix.gz

安装步骤

  1. 修改zabbix_server程序的磁盘路径
    修改zabbix_server主程序路径

    1
    2
    # vim /usr/local/zabbix/misc/init.d/tru64/zabbix_server
    DAEMON=/usr/local/zabbix/sbin/zabbix_server

    添加下面两句到#!/bin/bash之后,解决service myservicedoes not support chkconfig问题

    1
    2
    # chkconfig: 2345 10 90 
    # description:zabbix....
  2. 编辑zabbix_agentd配置文件
    vim /usr/local/zabbix/etc/zabbix_agentd.conf

    1
    2
    3
    4
    5
    6
    7
    8
    LogFile=/tmp/zabbix_agentd.log 
    #服务端IP
    Server=192.168.1.80
    #服务端IP
    ServerActive= 192.168.1.80
    #客户端IP与zabbix-web配置上的hostName一致
    Hostname=localhost
    UnsafeUserParameters=1
  3. 执行安装脚本

    1
    2
    3
    cd /usr/local/zabbix/script/install-zabbix_agentd.sh
    chmod +x install-zabbix_agentd.sh
    sudo ./install-zabbix_agentd.sh

相关操作

  1. 若zabbix的host无法访问,考虑防火墙是否需要关闭/加入信任端口

    #查看防火墙状态
    service iptables status 
    #关闭防火墙 
    service iptables stop  
    #永久关闭防火墙 
    chkconfig   iptables off
    
  2. 查看zabbix服务是否已启动

    netstat -utlnp | grep zabbix
    
  3. 配置文件更新后,需重启客户端服务

    service zabbix_agentd restart
    

nosql

准备事项

下载安装包文件(二进制编译版)

1
2
3
4
mkdir -p /usr/local/mongodb
cd /usr/local/mongodb
wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.6.3.tgz
tar -zvxf mongodb-linux-x86_64-2.6.3.tgz

重命名>新建数据/日志目录

1
2
3
mv mongodb-linux-x86_64-2.6.3 mongodb
mkdir data
mkdir log

配置环境变量

CentOs中配置path环境变量,确保mongodb的bin目录包含在path环境变量中。

配置PATH

1
2
3
4
vim /etc/profile
  #set for mongodb
  export MONGODB_HOME=/usr/local/mongodb
  export PATH=$MONGODB_HOME/bin:$PATH

查看当前PATH

1
echo $PATH

让环境变量生效

1
2
3
4
5
6
7
source /etc/profile
//验证环境变量是否生效
mongod -version
echo $PATH
```

## 添加CentOS开机启动项

vim /etc/rc.d/rc.local
//将mongodb启动命令手动追加到本文件中:
/usr/local/mongodb/bin/mongod —dbpath /usr/local/mongodb/data —logpath /usr/local/mongodb/log/mongodb.log —maxConns=2000 —fork —smallfiles

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

# 启动MongoDB
## 配置文件形式
``` bash
vim /usr/local/mongodb/mongodb.conf
dbpath=/usr/local/mongodb/data
logpath=/usr/local/mongodb/log/mongodb.log
logappend=true
port=27017
fork=true
noauth=true
journal=true
smallfiles=true
```

## 命令行形式
``` Bash
/usr/local/mongodb/bin/mongod --dbpath /usr/local/mongodb/data --logpath /usr/local/mongodb/log/mongodb.log --fork --smallfiles
//可选:--auth

增加用户

1
useradd mongodb -M -s /sbin/nologin

启动服务/测试服务状态

1
2
3
4
5
6
7
8
service mongod start
service mongod status
shutdown -r now
service mongod status
mongo admin
show dbs;
db.test.find();
exit

部署问题记录

MongoVUE不能连接

将27017端口加入信任列表;局域网测试直接关闭防火墙

1
2
3
4
5
6
7
8
9
10
11
//关闭防火墙
service iptables stop
//开启
chkconfig iptables on
//关闭
chkconfig iptables off
//查询TCP连接情况
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
//查询端口占用情况:
netstat -anp | grep portno
//(例如:netstat –apn | grep 80)

准备内容

  1. jdk7 X64安装包(官网版本:jdk-7u80-linux-x64.tar.gz)
    下载后并重命名为jetty.tar.gz
  2. jdk安装脚本

安装步骤

将文件复制到CentOS后进行安装

  1. CentOS路径:/tmp/jdk
  2. 执行
1
2
3
4

cd /tmp/jdk
chmod +x install-jdk.sh
sudo ./install-jdk.sh
  1. 一路回车即可

附件 install-jdk.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53

#!/bin/sh
BASEDIR=$(cd `dirname $0`; pwd)

#jdk-7u80-linux-x64
read -p "Please select java tar package full path path[/tmp/jdk.tar.gz] " INSTALL_FILE
if [ ! -f "$INSTALL_FILE" ]; then
trueINSTALL_FILE="/tmp/jdk.tar.gz"
fi

# Set install path
read -p "Please select java install path path[/usr/local/java]: " INSTALL_PATH
if [ "$INSTALL_PATH" = "" ]; then
trueINSTALL_PATH="/usr/local/java"
fi
if [ ! -d $INSTALL_PATH ]; then
echo "mkdir $INSTALL_PATH"
mkdir -p $INSTALL_PATH
fi

echo "uncompress $INSTALL_FILE to $INSTALL_PATH"
if [ -w $INSTALL_PATH ]; then
tar -zxvf $INSTALL_FILE -C $INSTALL_PATH --strip-components=1
else
sudo tar -zxvf $INSTALL_FILE -C $INSTALL_PATH --strip-components=1
fi


echo "Setting java environment..."
echo "export JAVA_HOME=$INSTALL_PATH" | sudo tee -a /etc/profile

JAVA_HOME=$INSTALL_PATH
#FIXME
echo "export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar" | sudo tee -a /etc/profile
echo 'export PATH=$JAVA_HOME/bin:$PATH' | sudo tee -a /etc/profile

echo "refresh java environment..."
#TODO what does "." do? the same as "source" command?
. /etc/profile
source /etc/profile

java -version
if [ "$?" = "0" ]; then
echo -e "\033[32m Installed, please source /etc/profile or relogin. \033[0m"
else
echo -e "\033[31m Install failed. \033[0m"
fi

unset BASEDIR
unset INSTALL_PATH
unset INSTALL_FILE

exit 0
  1. 卸载JDK
1
2
3
4
5
6
7
#查看系统已安装的jdk
rpm -qa|grep jdk
java-1.7.0-openjdk-1.7.0.45-2.4.3.3.el6.x86_64
#卸载指定版本的jdk
rpm -e --nodeps java-1.7.0-openjdk-1.7.0.45-2.4.3.3.el6.x86_64
# 删除JAVA_HOME,CLASSPATH等相关环境变量
vim /etc/profile

安装步骤

将文件复制到CentOS后进行安装

下载解压Jetty

1
2
3
4
cd /tmp
wget http://eclipse.org/downloads/download.php?file=/jetty/stable-9/dist/jetty-distribution-9.3.0.v20150612.tar.gz&r=1
tar -xzvf jetty-distribution-9.3.0.v20150612.tar.gz
mv jetty-distribution-9.1.1.v20140108 /usr/local/jetty

新建用户>配置jetty所属权限

1
2
useradd -m jetty
chown -R jetty:jetty /usr/local/jetty/

安装到系统服务

1
2
3
ln -s /usr/local/jetty/bin/jetty.sh /etc/init.d/jetty
chkconfig --add jetty
chkconfig --level 345 jetty on

编辑启动脚本

1
2
3
4
5
vim /etc/default/jetty
JETTY_HOME=/usr/local/jetty
JETTY_USER=jetty
JETTY_PORT=8080
JETTY_LOGS=/usr/local/jetty/logs/

启动服务>测试

service jetty start
curl localhost:8080

常用操作指令

jetty [-d] {start|stop|run|restart|check|supervise} [ CONFIGS ... ]