nginx variables

#reference
http://openresty.org/download/agentzh-nginx-tutorials-en.html
http://blog.sina.com.cn/s/articlelist_1834459124_0_1.html

#set variables
set a "hello world";  <strong>#Nginx variable creation and assignment happen at completely different phases</strong>  1.Nginx creates all the Nginx variables while loading the configuration file (or in other words, at "configuration time")  2.variable assignment occurs when requests are actually being served  Once an Nginx variable is created, it is visible to the entire configuration, even across different virtual server configuration blocks, regardless of the places it is declared at.  <strong>#internal redirection</strong> when visit /foo , page will redirect to /bar internally.and you can accessa also.
server {
listen 8080;
location /foo {
set a hello; rewrite ^ /bar; } location /bar { echo "a = [a]”;
}
}

#build-in variables
uri  request_uri(include query string)
arg_XXX   [argumets' name based on the url query string (<span style="color: #ff0000;">case insensitive</span>  eg. Name ,NAME ==> arg_name)] <a href="http://nginx.org/en/docs/http/ngx_http_core_module.html#variables">http://nginx.org/en/docs/http/ngx_http_core_module.html#variables</a>  >most build-in variables are <span style="color: #ff0000;">read-only</span>, but there are some exceptionargs(when you change args manually, it will influencesargs in everywhere)

#variables get handlers & set handlers
in order to save memory, not-indexed variables in Nginx only have one copy , with lots of pointer pointing to them. Every time you need to fetch the variables , you need to parse them from the beginning.

#map for caching
use as cache,run get handlers once . read once ,then the value fixs.
(put outside the server configuration block, that is, it is defined directly within the outermost http configuration block)
map args foo {
default     0;
debug       1;
}
when args == default ,foo = 0;when args == debug ,foo = 1

#lazy evaluation of variables value
assign value when it needs

#special value invaild & not found
>invaild: when a variable is created but no assigned yet
>not found: read an arg which is not existed

>use lua to distinguish
if ngx.var.arg_name == nil then
     ngx.say(“name: missing”)
else
     ngx.say(“name:[“,ngx.var.arg_name,”]”)
end

 

 

hadoop2.7.2 basic configuration (Pseudo-Distributed)

想哭

相約在一個適合聊天的下午
分開很多年滿以為沒有包伏
我還打算回顧我們為何結束
還想問你是不是一個人住

當你的笑容給我禮貌的招呼
當我想訴說這些年來的感觸
你卻點了滿桌我最愛的食物
介紹我看一本天文學的書

我想哭 不敢哭 難道這種相處
不像我們夢寐以求的幸福
走下去 這一步是寬容還是痛苦
我想哭 怎麼哭 完成愛情旅途
談天說地是最理想的出路
談音樂 談時事 不說愛
若無其事 原來是最狠的報復

當我想坦白我們的樂多於苦
你說水星它沒有衛星好孤獨
我才明白時間較分手還殘酷
老朋友了再沒資格不滿足

然後怎樣

完成了所謂的理想
放縱了情緒的泛濫
汗都流乾 天都微亮 然後怎樣
擁有了旅行的空檔
卻遺失流浪的背囊
沿著軌道 一直瀏覽 然後怎樣
假期過完 有甚麼打算
走過一個天堂 少一個方向
誰在催我成長  讓我失去迷途的膽量
我怕誰失望 我為誰而忙
我最初只貪玩 為何變負擔
為何我的問題 總得等待別人的答案
我的快樂時代唱爛 才領悟代價多高昂
不能滿足 不敢停站 然後怎樣

mysql replication

MySQL 复制的基本过程如下:
1.Slave 上面的IO线程连接上 Master,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容
2. Master 接收到来自 Slave 的 IO 线程的请求后,通过负责复制的 IO 线程根据请求信息读取指定日志指定位置之后的日志信息,返回给 Slave 端的 IO 线程。返回信息中除了日志所包含的信息之外,还包括本次返回的信息在 Master 端的 Binary Log 文件的名称以及在 Binary Log 中的位置
3. Slave 的 IO 线程接收到信息后,将接收到的日志内容依次写入到 Slave 端的Relay Log文件(mysql-relay-bin.xxxxxx)的最末端,并将读取到的Master端的bin-log的文件名和位置记录到master- info文件中,以便在下一次读取的时候能够清楚的高速Master“我需要从某个bin-log的哪个位置开始往后的日志内容,请发给我”
4. Slave 的 SQL 线程检测到 Relay Log 中新增加了内容后,会马上解析该 Log 文件中的内容成为在 Master 端真实执行时候的那些可执行的 Query 语句,并在自身执行这些 Query。这样,实际上就是在 Master 端和 Slave 端执行了同样的 Query,所以两端的数据是完全一样的

Mysql的半同步模式(Semisynchronous Replication)
我们知道在5.5之前,MySQL的复制其实是异步操作,而不是同步,也就意味着允许主从之间的数据存在一定的延迟,mysql当初这样设计的目的可能也是基于可用性的考虑,为了保证master不受slave的影响,并且异步复制使得master处于一种性能最优的状态:写完binlog后即可提交而不需要等待slave的操作完成。这样存在一个隐患,当你使用slave作为备份时,如果master挂掉,那么会存在部分已提交的事务未能成功传输到slave的可能,这就意味着数据丢失!
在MySQL5.5版本中,引入了半同步复制模式(Semi-synchronous Replication)能够成功(只是相对的)避免上述数据丢失的隐患。在这种模式下:master会等到binlog成功传送并写入至少一个slave的relay log之后才会提交,否则一直等待,直到timeout(默认10s)。当出现timeout的时候,master会自动切换半同步为异步,直到至少有一个slave成功收到并发送Acknowledge,master会再切换回半同步模式。结合这个新功能,我们可以做到,在允许损失一定的事务吞吐量的前提下来保证同步数据的绝对安全,因为当你设置timeout为一个足够大的值的情况下,任何提交的数据都会安全抵达slave。
mysql5.5 版本支持半同步复制功能(Semisynchronous Replication),但还不是原生的支持,是通过plugin来支持的,并且默认是没有安装这个插件的。不论是二进制发布的,还是自己源代码编译的,都会默认生成这个插件,一个是针对master 的一个是针对slave的,在使用之前需要先安装这俩plugins。

Master


#set binary logging (slaves read data from logs)
my.cnf
log-bin=mysql-bin
server-id=1(between 1 and (2^32)−1)

restart mysql

#create a user to replicate
GRANT REPLICATION SLAVE ON *.* TO ‘account’@’ip’ IDENTIFIED BY ‘password’;
FLUSH PRIVILEGES;

#use read lock
FLUSH TABLES WITH READ LOCK;

#fetch master bin log name and position
show master status;
example:
mysql> show master status;
+————-+———-+————–+——————+
| File | Position | Binlog_do_db | Binlog_ignore_db |
+————-+———-+————–+——————+
| bin-log.003 | 4 | adb | mysql |
+————-+———-+————–+——————+

#dump mysql data( small size) or copy the whole database file to slave
/usr/local/mysql-5.6.27/bin/mysqldump -u root -p [-S/tmp/mysql3310.sock] [-P 3310] [ad] > ~/[ad.sql]

#unlock table
UNLOCK TABLES;

Slave


#set relay logging
my.cnf
server-id=2(between 1 and (2^32)−1)
relay-log=mysql-relay-bin
[replicate-wild-ignore-table=db_name.tbl_name] (Patterns can contain the “%” and “_” wildcard characters)

restart mysql

#import data or copy data
/usr/local/mysql-5.6.27/bin/mysql -u root -p [-S/tmp/mysql3310.sock] [-P 3310] [ad] < ~/[ad.sql]

#setup slave’s master
CHANGE MASTER TO MASTER_HOST=’ip’, Master_Port=’port’,MASTER_USER=’account’, MASTER_PASSWORD=’password’, MASTER_LOG_FILE=’bin-log’, MASTER_LOG_POS = position;

#start slave
start slave

#check slave status
show slave status

important index:
Slave_IO_Running: Yes (if connecting ,maybe firewall problem)
Slave_SQL_Running: Yes
Master_Log_File: bin-log.003
Relay_Master_Log_File: bin-log.003
Read_Master_Log_Pos: 4
Exec_master_log_pos: 4
Seconds_Behind_Master: 0

reference:
http://wangwei007.blog.51cto.com/68019/965575

hadoop installation

#install java jdk:
yum install openjdk-7-jdk

#set java environment:
add this in ~./bashrc
export JAVA_HOME=/path/to/java
export PATH=PATH:JAVA_HOME/bin
export HADOOP_HOME=/usr/local/hadoop
export PATH=PATH:HADOOP_HOME/bin
export HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop

source ~/.bashrc

#install hadoop:
1.wget http://apache.mirrors.tds.net/hadoop/common/hadoop-2.7.2/hadoop-2.7.2.tar.gz -P ~/Downloads
2.sudo tar zxvf ~/Downloads/hadoop-* -C /usr/local
3.sudo mv /usr/local/hadoop-* /usr/local/hadoop