为防火墙增加开放端口

/sbin/iptables -I INPUT -p tcp –dport 80 -j ACCEPT
/etc/rc.d/init.d/iptables save
/etc/init.d/iptables restart

–centos 强制释放系统内存

# sysctl -w vm.drop_caches=3

2014-08-31 | | 技术

评论关闭

rsync服务的安装和使用

服务器端配置:
# yum -y install xinetd

# vi /etc/xinetd.d/rsync
将如下代码

service rsync
{
disable = yes
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = –daemon
log_on_failure += USERID
}
中的 disable = yes 改成 disable = no

然后启动 xinetd
# /etc/init.d/xinetd start 或 service xinetd restart
注意:如果服务器上装有防火墙记得要打开端口,默认端口是873

# vi /etc/rsyncd.conf
[download]
path=/data/download
read only=yes
uid=nobody
gid=nobody
hosts allow=*

rsync同步发送给目标服务:

rsync -vzrtopg –progress –delete /test/aaa rsync://192.168.1.1:873/data/test

其中 data 是 目标机器 rsync 服务的模块

其他不想关的命令:

查看分隔符文件指定列的值(列编号从1开始):

awk -F ^A ‘{if ($2!=0 && $3==81065 && $5==207817) print }’ xxxx.log.20140828* | wc -l

其中的 ^A 是 unicode \u0001 ,可使用 ctrl + v + a 打出来。

tcp 抓包:

tcpdump -Avvnns 0 -i any ‘host xxx.com and (((ip[2:2] – ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)’

命令返回和域名 xxx.com 交互的 tcp 数据包

2014-08-31 | | 技术

评论关闭

redis安装和sentinel集群模式

install:

mkdir /data/download -p
cd /data/download

///You need tcl 8.5 or newer in order to run the Redis test

wget http://sourceforge.net/projects/tcl/files/Tcl/8.5.15/tcl8.5.15-src.tar.gz/download
tar xzvf tcl8.5.15-src.tar.gz -C tcl8.5.15-src
cd tcl8.5.15-src/unix/
./configure –prefix=/data/lib/tcl8.5.15
make
make install
ln -s tcl8.5.15 tcl

export PATH=/data/lib/tcl/bin:$PATH
#export LD_LIBRARY_PATH=/data/lib/tcl/lib:$LD_LIBRARY_PATH

wget wget http://download.redis.io/releases/redis-2.8.13.tar.gz
tar -xf redis-2.8.13.tar.gz
cd redis-2.8.13
make
#make test
#make PREFIX=/data/lib/redis install

make PREFIX=/data/lib/bin/redis-2.8.13 install

cd /data/lib/redis
mkdir conf
mkdir logs
mkdir var
cp /data/lib/redis-stable/redis.conf /data/lib/redis/conf

——————————————————-
$ pwd
——————————————————-

/home/redis/app/redis

——————————————————-
$ ll bin
——————————————————-

-rwxr-xr-x 1 redis redis 4580235 Jul 28 16:16 redis-benchmark
-rwxr-xr-x 1 redis redis 22233 Jul 28 16:16 redis-check-aof
-rwxr-xr-x 1 redis redis 45467 Jul 28 16:16 redis-check-dump
-rwxr-xr-x 1 redis redis 4675985 Jul 28 16:16 redis-cli
-rwxr-xr-x 1 redis redis 6201291 Jul 28 16:17 redis-sentinel
-rwxr-xr-x 1 redis redis 6201291 Jul 28 16:16 redis-server

——————————————————-
$ ll
——————————————————-

drwxrwxr-x 2 redis redis 4096 Jul 28 16:17 bin
drwxrwxr-x 2 redis redis 4096 Jul 28 20:13 conf
drwxrwxr-x 2 redis redis 4096 Jul 30 17:55 data
drwxrwxr-x 2 redis redis 4096 Jul 28 19:44 logs
-rwxr-xr-x 1 redis redis 108 Jul 28 16:15 shutdown.sh
-rwxr-xr-x 1 redis redis 106 Jul 28 16:40 startup.sh
-rwxr-xr-x 1 redis redis 79 Jul 28 20:12 stn-shutdown.sh
-rwxr-xr-x 1 redis redis 138 Jul 28 17:03 stn-startup.sh
drwxrwxr-x 2 redis redis 4096 Jul 28 15:00 temp
drwxrwxr-x 2 redis redis 4096 Jul 28 20:19 var

——————————————————-
$ cat stn.conf
——————————————————-
port 26379
dir “/data/redis/app/redis-2.8.13/temp”
sentinel monitor mymaster 172.16.16.156 6379 2
sentinel down-after-milliseconds mymaster 10000
sentinel auth-pass mymaster password
sentinel config-epoch mymaster 1
sentinel leader-epoch mymaster 1

# Generated by CONFIG REWRITE
sentinel known-slave mymaster 172.16.16.155 6379
sentinel known-slave mymaster 172.16.16.157 6379
sentinel known-sentinel mymaster 172.16.16.156 26379 89348644a66ba88bf7dec6d67a6e210080576051
sentinel known-sentinel mymaster 172.16.16.157 26379 e4104de666d036dbbb3c47926b1b9a3177ec1549

sentinel current-epoch 1

——————————————————-
cat startup.sh
——————————————————-

# start redis in sentinel mode
export pwd=`dirname “$0″`
$pwd/bin/redis-server $pwd/conf/redis.conf

——————————————————-
cat shutdown.sh
——————————————————-

# shutdown redis
export pwd=`dirname “$0″`
$pwd/bin/redis-cli -h 127.0.0.1 -p 6379 -a password shutdown

——————————————————-
cat stn-startup.sh
——————————————————-

# start redis in sentinel mode
export pwd=`dirname “$0″`
$pwd/bin/redis-server $pwd/conf/stn.conf –sentinel >> $pwd/logs/stn.log &

——————————————————-
cat stn-shutdown.sh
——————————————————-

kill -9 `ps -ef | grep -v grep | grep redis | grep 26379 | awk ‘{print $2}’`

——————————————————-

2014-08-31 | | 技术

评论关闭

system hosts config

Windows 打开 :\Windows\System32\drivers\etc\hosts
Linux 打开 /etc/hosts

文件增加如下内容:

# 优酷去广告
127.0.0.1 pro.letv.com
127.0.0.1 vid.atm.youku.com
127.0.0.1 valo.atm.youku.com
127.0.0.1 valf.atm.youku.com
127.0.0.1 walp.atm.youku.com
127.0.0.1 static.atm.youku.com

# android sdk package 下载
203.208.46.146 dl.google.com
203.208.46.146 dl-ssl.google.com

2014-06-08 | | 技术

评论关闭

Hadoop2.0安装部署、MapReduce编程实践

Hadoop2.0安装部署、MapReduce编程实践 视频

2014-06-07 | | 技术

评论关闭

几条命令快速从 ubuntu 12.04 升级到 14.04

几条命令 ubuntu 12.04 升级到 14.04
首先,按 Ctrl+Alt+T 快捷键调出terminal

1. sudo apt-get update
2. sudo apt-get dist-upgrade
3. update-manager -d 等待出现可用更新即可。

——————————————————————————————

显示Ubuntu文件浏览器的地址栏
Ubuntu默认使用nautilus作为其可视化的文件浏览器,其默认值不显示地址栏,而是显示一些地址的按钮,你可以直接点这些按钮切换目录。这样的设计有的时候很方便,但是另一些时候就很不方便了,特别是当我们想要复制某个某个地址的时候。那么怎么让Ubuntu想Windows资源管理器一样显示地址栏呢?

首先,nautilus有一个快捷键——ctrl+L,可以用来显示当前所在的目录的地址。

其次,如果你希望地址栏一直显示,那么在命令行窗口中输入“gconf-editor”,这时候会出现有一点点像Windows注册表编辑器的窗口,找到“/apps/nautilus/preferences/”,然后勾选“always_use_location_entry”。这样nautilus就会一直显示地址栏。

2014-06-07 | | 技术

评论关闭

使用wget下载不了jdk问题的解决办法

jdk download page:

http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html

download link:

http://download.oracle.com/otn-pub/java/jdk/7u60-b19/jdk-7u60-linux-x64.tar.gz

wget command:


wget --no-cookies --no-check-certificate --header "Cookie:gpw_e24=http%3a%2f%2fwww.oracle.com%2ftechnetwork%2fjava%2fjavase%2fdownloads%2fjdk7-downloads-1880260.html;oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/7u60-b19/jdk-7u60-linux-x64.tar.gz

正在解析主机 download.oracle.com (download.oracle.com)… 23.61.194.112, 23.61.194.90
正在连接 download.oracle.com (download.oracle.com)|23.61.194.112|:80… 已连接。
已发出 HTTP 请求,正在等待回应… 302 Moved Temporarily
位置:https://edelivery.oracle.com/otn-pub/java/jdk/7u60-b19/jdk-7u60-linux-x64.tar.gz [跟随至新的 URL]
–2014-06-07 00:27:38– https://edelivery.oracle.com/otn-pub/java/jdk/7u60-b19/jdk-7u60-linux-x64.tar.gz
正在解析主机 edelivery.oracle.com (edelivery.oracle.com)… 23.77.214.140
正在连接 edelivery.oracle.com (edelivery.oracle.com)|23.77.214.140|:443… 已连接。
已发出 HTTP 请求,正在等待回应… 302 Moved Temporarily
位置:http://download.oracle.com/otn-pub/java/jdk/7u60-b19/jdk-7u60-linux-x64.tar.gz?AuthParam=1402072184_0d46f1e391f64cc002aaa6209d112c9d [跟随至新的 URL]
–2014-06-07 00:27:44– http://download.oracle.com/otn-pub/java/jdk/7u60-b19/jdk-7u60-linux-x64.tar.gz?AuthParam=1402072184_0d46f1e391f64cc002aaa6209d112c9d
正在连接 download.oracle.com (download.oracle.com)|23.61.194.112|:80… 已连接。
已发出 HTTP 请求,正在等待回应… 200 OK
长度: 142362384 (136M) [application/x-gzip]
正在保存至: “jdk-7u60-linux-x64.tar.gz”

43% [===============================================>

等待下载完成即可。

JDK 8:


wget --no-cookies --no-check-certificate --header "Cookie:gpw_e24=http%3a%2f%2fwww.oracle.com%2ftechnetwork%2fjava%2fjavase%2fdownloads%2fjdk8-downloads-2133151.html;oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u11-b12/jdk-8u11-linux-x64.tar.gz

2014-06-07 | | 技术

评论关闭

虚拟机VMWare环境维护之虚拟磁盘VMDK瘦身

虚拟机VMWare环境维护之虚拟磁盘VMDK瘦身

VMDK文件之所以大,是因为guest系统总是占用空间而不释放,它自己不释放空间。

在guest的终端下,以 root 用户命令:

cat /dev/zero > zero.fill , 一直执行到这条命令执行不下去,guest系统提示说没有足够空间为止,
这时 du -sh 看这个zero.fill文件,很大,再看 df -h 分区可用空间为0,开心的删掉它,然后关掉guest系统,
再用host安装的vmware目录的vmware-vdiskmanager 这条命令就可以很快瘦下去了,比如:

D:\Program Files\VMware>vmware-vdiskmanager.exe -k F:\vm\vm-u14\disk1.vmdk

目前没有发现出错的情况,但是在执行这个瘦身指令前做一个备份是良好的习惯。

如果你的guest系统不是以single disk方式建立的,而是以分散文件建立的,虚拟机目录下会有很多VMDK文件,你应该找第一个,
比如虚拟机叫centos,你就
vmware-vdiskmanager -k centos.vmdk
另外,要瘦身,必须得删除之前所有的snapshot,
同样的,如果之前的snapshot比较重要,就备份吧。

2014-06-07 | | 技术

评论关闭

mysql 死锁分析

表结构:

CREATE TABLE `se_exclude_keyword` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT,
`se_code` VARCHAR(200) NOT NULL COMMENT 'SE编码' COLLATE 'utf8_bin',
`se_account_id` BIGINT(20) NOT NULL COMMENT 'SE账户ID',
`campaign_id` BIGINT(20) NULL DEFAULT NULL COMMENT '活动主键ID',
`adgroup_id` BIGINT(20) NULL DEFAULT NULL COMMENT '广告组主键ID',
`keyword_name` VARCHAR(300) NULL DEFAULT NULL COMMENT '关键词' COLLATE 'utf8_bin',
`exclude_type` BIGINT(20) NULL DEFAULT NULL COMMENT '否定类型:0非精确,1广泛、2短语、3精确',
`exclude_range` VARCHAR(200) NULL DEFAULT NULL COMMENT '否定范围: campaign 活动、adgroup 单元' COLLATE 'utf8_bin',
`create_time` DATETIME NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NULL DEFAULT NULL COMMENT '更新时间',
`create_user` VARCHAR(300) NULL DEFAULT NULL COMMENT '创建人' COLLATE 'utf8_bin',
`update_user` VARCHAR(300) NULL DEFAULT NULL COMMENT '更新人' COLLATE 'utf8_bin',
`del` INT(11) NULL DEFAULT NULL COMMENT '逻辑删除标记 1 已删除 0 正常',
`operate_code` BIGINT(20) NOT NULL COMMENT '操作类型:   1 update 2 create 3 delete',
`submited` INT(11) NULL DEFAULT NULL COMMENT '操作是否提交 1 是 0 否',
`project_id` BIGINT(20) NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_sek_se_account_id` (`se_account_id`),
INDEX `idx_sek_campaign_id` (`campaign_id`),
INDEX `idx_sek_project_id` (`project_id`),
INDEX `idx_sek_adgroup_id` (`adgroup_id`)
)
COMMENT=' 活动、单元的否定关键词;同一条记录活动ID和广告组ID不能同时存在'
COLLATE='utf8_bin'
ENGINE=InnoDB

出现死锁的情况应该属于以下情况:
相同索引键来访问即使是不同行记录,出现锁冲突。

————————
LATEST DETECTED DEADLOCK
————————
2014-04-25 06:30:06 7efd9f7af700
*** (1) TRANSACTION:
TRANSACTION 659049795, ACTIVE 0 sec starting index read
mysql tables in use 4, locked 4
LOCK WAIT 5 lock struct(s), heap size 1248, 4 row lock(s)
MySQL thread id 887239, OS thread handle 0x7efd9fc41700, query id 749922319 192.168.4.195 ttt Sending data
delete sek from se_exclude_keyword sek where se_code = ‘baidu’ and se_account_id = 1343 and project_id = 277 and exists (select 1 from se_campaign where id = sek.campaign_id and se_campaign_id=14726849) and sek.exclude_range = ‘campaign’ and sek.submited = 1
*** (1) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 348 page no 7849 n bits 280 index `idx_sek_project_id` of table `sem3_prd_new`.`se_exclude_keyword` trx id 659049795 lock_mode X waiting
Record lock, heap no 2 PHYSICAL RECORD: n_fields 2; compact format; info bits 0
0: len 8; hex 8000000000000115; asc ;;
1: len 8; hex 8000000000001018; asc ;;

*** (2) TRANSACTION:
TRANSACTION 659049793, ACTIVE 0 sec fetching rows, thread declared inside InnoDB 2043
mysql tables in use 4, locked 4
147 lock struct(s), heap size 31160, 15940 row lock(s)
MySQL thread id 887225, OS thread handle 0x7efd9f7af700, query id 749922318 192.168.4.195 ttt Sending data
delete sek from se_exclude_keyword sek where se_code = ‘baidu’ and se_account_id = 20463 and project_id = 277 and exists (select 1 from se_campaign where id = sek.campaign_id and se_campaign_id=13824923) and sek.exclude_range = ‘campaign’ and sek.submited = 1
*** (2) HOLDS THE LOCK(S):
RECORD LOCKS space id 348 page no 7849 n bits 280 index `idx_sek_project_id` of table `sem3_prd_new`.`se_exclude_keyword` trx id 659049793 lock_mode X
Record lock, heap no 1 PHYSICAL RECORD: n_fields 1; compact format; info bits 0
0: len 8; hex 73757072656d756d; asc supremum;;

Record lock, heap no 2 PHYSICAL RECORD: n_fields 2; compact format; info bits 0
0: len 8; hex 8000000000000115; asc ;;
1: len 8; hex 8000000000001018; asc ;;

*** (2) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 348 page no 3156 n bits 192 index `PRIMARY` of table `se_exclude_keyword` trx id 659049793 lock_mode X locks rec but not gap waiting
Record lock, heap no 39 PHYSICAL RECORD: n_fields 18; compact format; info bits 0
0: len 8; hex 800000000002b69a; asc ;;
1: len 6; hex 0000256ba525; asc %k %;;
2: len 7; hex ad000002f80110; asc ;;
3: len 5; hex 6261696475; asc baidu;;
4: len 8; hex 800000000000053f; asc ?;;
5: len 8; hex 8000000000ce1d63; asc c;;
6: SQL NULL;
7: len 6; hex e9a291e98193; asc ;;
8: len 8; hex 8000000000000000; asc ;;
9: len 8; hex 63616d706169676e; asc campaign;;
10: len 8; hex 800012514ec325ee; asc QN % ;;
11: len 8; hex 800012514ec325ee; asc QN % ;;
12: len 5; hex 5345415049; asc SEAPI;;
13: len 5; hex 5345415049; asc SEAPI;;
14: len 4; hex 80000000; asc ;;
15: len 8; hex 8000000000000000; asc ;;
16: len 4; hex 80000001; asc ;;
17: len 8; hex 8000000000000115; asc ;;

*** WE ROLL BACK TRANSACTION (1)

 

Innodb的行锁是根据检索的索引项进行加锁(注意不要理解成对索引加锁),具体的说是对所有根据索引检索到的记录进行加锁(由于Innodb使用主键为聚簇索引的方式,也可以理解为对主键进行加锁,Innodb总会有聚簇索引的,即使没有也会隐式生成一个),这样就决定了Innodb的行锁会有下面一些性质:

  • 只有通过索引检索,才能使用行锁,否则使用表锁
  • 使用相同索引键来访问即使是不同行记录,也会出现锁冲突。(这里指的是需要锁的情况下。在非一致性锁定读情况下,即使读取的行已经被使用Select … For Update,也是可以读的(因为读的是快照))
  • 间隙锁,范围检索以及对不存在记录相等条件的检索都会使用,所以应该在设计上尽量避免,避免导致严重的锁等待

以下情况会使用表锁:

  • 没有使用索引进行检索
  • 判断不同执行计划的代价,如果全表扫描效率更高,也会使用表锁
  • 数据类型转化而导致表锁。

OpenSSL 版本 CVE-2014-0160 心血漏洞 对 https 服务nginx的影响和修复

关于 OpenSSL1.0.1版本 CVE-2014-0160 心血漏洞 对 https 服务的影响和修复

漏洞描述:

http://www.techweb.com.cn/ucweb/news/id/2025856

漏洞检查:

http://wangzhan.360.cn/heartbleed

漏洞解决:

我们使用的主要是 nginx 的 https 服务,因此需要针对 nginx进行处理,
对操作系统 比如 centos 打补丁只能解决系统本身的ssl相关问题
使用 OpenSSL 1.0.1g (不受影响) 重新编译 nginx 即可。

wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.35.tar.gz
wget http://zlib.net/zlib-1.2.8.tar.gz
wget ftp://ftp.openssl.org/source/openssl-1.0.1g.tar.gz
tar -xf pcre-8.35.tar.gz
tar -xf zlib-1.2.8.tar.gz
tar -xf openssl-1.0.1g.tar.gz
tar -xf nginx-1.4.7.tar.gz

cd nginx-1.4.7

# 编译依赖的lib需要源代码目录
./configure –prefix=/data/lib/nginx-1.4.7 –sbin-path=/data/lib/nginx-1.4.7/sbin/nginx –conf-path=/data/lib/nginx-1.4.7/conf/nginx.conf –error-log-path=/data/lib/nginx-1.4.7/logs/error.log –pid-path=/data/lib/nginx-1.4.7/var/nginx.pid –lock-path=/data/lib/nginx-1.4.7/var/nginx.lock –http-log-path=/data/lib/nginx-1.4.7/logs/access.log –http-client-body-temp-path=/data/lib/nginx-1.4.7/temp/client_body_temp –http-proxy-temp-path=/data/lib/nginx-1.4.7/temp/proxy_temp –http-fastcgi-temp-path=/data/lib/nginx-1.4.7/temp/fastcgi_temp –http-uwsgi-temp-path=/data/lib/nginx-1.4.7/temp/uwsgi_temp –http-scgi-temp-path=/data/lib/nginx-1.4.7/temp/scgi_temp –with-ipv6 –with-pcre=/data/lib/src/pcre-8.35 –with-openssl=/data/lib/src/openssl-1.0.1g –with-zlib=/data/lib/src/zlib-1.2.8 –with-http_ssl_module –with-http_realip_module –with-http_addition_module –with-http_sub_module –with-http_dav_module –with-http_flv_module –with-http_gzip_static_module –with-http_random_index_module –with-http_secure_link_module –with-http_degradation_module –with-http_stub_status_module
make
make install

mkdir /data/lib/nginx-1.4.7/temp -p

# 复制旧版本配置文件
cp -R /data/lib/nginx/conf/nginx.conf /data/lib/nginx-1.4.7/conf/
cp -R /data/lib/nginx/conf/ssl /data/lib/nginx-1.4.7/conf/

# 更新软连接并重启
./nginx/sbin/nginx -s stop
rm -f nginx
ln -s nginx-1.4.7 nginx
./nginx/sbin/nginx

重启后使用

http://wangzhan.360.cn/heartbleed

再次检测

2014-04-18 | | 技术

评论关闭