Xenserver 的初始化

现在形成的习惯是,每个新的dedicated server 都会去安装xenserver,这样能够尽量充分利用这个服务器. 大部分时候都习惯自己去安装xenserver,顺便让xenserver自己初始化local storage repo. 可是如果xenserver 是由IDC 安装的话,那么80%的可能性是只会给你安装xenserver的程序,xenserver程序所在的硬盘的剩余空间,不会给你初始化成local storage repo,那么这个时候就需要我们自己来首先创建/dev/sda3, 然后把sda3初始化为local storage repo.

首先我们需要看下xenserver的基本架构. 假设我们xenserver安装在你sda上, 那么在sda上默认会有两个区, 分别是/dev/sda1, /dev/sda2. sda1变式xenserver程序所在的分区, sda2  和 sda1大小相等,都是5GB大小,是sda1 的备份镜像区.  假设这个sda 的大小为500GB, 那么刨除sda1和 sda2 以后,还有490GB 的空间,我们需要把这490GB 的空间创建为sda3,然后在sda3上创建local SR.

xenserver 从6.0 开始,默认使用GPT分区,也就是说单个分区可以达到2TB 以上. fdisk 命令是专门用于MBR分区的,对GPT分区不适用. 也就是说我们需要使用GPT分区的程序. 通过搜索,你会发现,大部分教程都是教你使用parted, 但是parted 程序较为复杂,而且xenserver 这个linux 发行版上默认没有安装parted. 那是因为xenserver 使用的是另外一个GPT分区的工具, gdisk.

 

gdisk 和 fdisk 的使用方式,命令参数一模一样,不同的是一个用于GPT分区,一个用于MBR 分区.

话不多说,通过gdisk 很快就创建/dev/sda3, 这里要注意的是, sda3需要创建成的文件格式是linux

LVM. 这里还需要说一句的是,既然fdisk 无用识别GPT,也因为无法使用fdisk 来查看磁盘分区。解决的办法有两个,一个是cat /proc/partitions;  另外一个就是sgdisk命令,类似于fdisk, 来查看分区情况。

创建好/dev/sda3以后,剩下的就简单多了,可以直接参见我写的这篇文章

http://www.webmasterschina.com/2014/10/19/116/

 

给squid 添加 monit 自动监控功能

 

advertcn 在国内的电信节点本来是使用的nginx 的,可惜貌似实在有点问题,时断时续,可能是配置有点问题,无奈换回了squid

squid呢,0.1% 的可能性会因为这样或者那样的原因死机,于是就想加上一个monit 做自动监控

首先安装squid,十分的简单,直接yum install squid

其次,编辑/etc/monit.conf, 加入下面的命令

check process squid with pidfile /var/run/squid.pid
start program = “/etc/init.d/squid start”
stop program = “/etc/init.d/squid stop”

 

保存,然后monit -t 检查语法错误,如果没有问题了,就直接service monit start

debian 上安装monit 来监控 Mr9SM

因为目前V6 稍微有点小bug,会造成程序无规律的宕机,因此考虑安装monit 来监控mr9sm 主程序

安装

apt-get install monit

安装完毕,配置文件是

/etc/monit/monitrc

你可以在monitrc 上修改你的监测频率以及web 端口

在最下面添加(如果你用的是debian):

check process mr9sm with pidfile /var/run/mr9sm.pid
start program = “/usr/sbin/service mr9sm start”
stop program = “/usr/sbin/service mr9sm stop”

保存后运行monit -t 检查语法,如果没有问题,直接monit restart既可以

online.net 的服务器安装xenserver,并且给VM 配置多IP

online.net 的服务器比较便宜,我也入手了一个做开发

但是他们使用的是failover IP,比较烦人。对于failover 的IP的配置,应该是这样

IPADDR: 你的failover IP

NETMASK: 255.255.255.255

GATEWAY: 把你的主IP 的最后一位改为1 即可

这是在centos 上的设置,用netinstall 可能会有问题。 这个时候再netinstall 的时候, 选用255.255.0.0 位netmask,主IP的最后一位改成1的IP为gateway 的IP

这样就让failover IP 和 gateway IP 在同一个IP段,这样就可以进行安装了。

等安装完毕以后,再改回原来上面的样子,然后在按照下面所说来添加IP route

 

 

但是安装完重启就不行了,这是因为ipaddr 和你的gateway 的IP 不在一个subnet上,你需要手工添加一条静态路由

假如说你用的是eth0,那么你就需要给eth0 添加一条静态路由:

File : /etc/sysconfig/network-scripts/route-eth0

GATEWAY_VM dev eth0
default via GATEWAY_VM dev eth0

然后重启

service network restart,这样你的IP 就可以被外界所访问了.

这是在你的 VM 上只有一个IP的,如果你有多个IP的时候,这个和普通的centos 一样,添加多个IP,但是当你在重启network 的时候,会发现centos 总是说:

Bringing up interface eth0: SIOCADDRT: No such process

这是因为系统在强制给你的 ip aliase 添加默认路由,其实这是不需要的了,因为已经添加在你的VM 的主 IP 上

这个时候你可以在ifcfg-eth0 上禁止向ip aliase 添加路由:

NO_ALIASROUTING=yes

 

如果你安装的是debian,那么就更简单了,编辑/etc/network/interfaces

修改如下即可:

auto eth0
iface eth0 inet static
address IP-Failover
netmask 255.255.255.255
broadcast IP-Failover
gateway MAIN-SERVER-IP.1
pointopoint MAIN-SERVER-IP.1

 

然后退出,运行service networking restart 即可

 

Linux GRE 中使用source based routing

现在很多米国的机房都在使用cisco 的路由,禁止流量从不属于自己的ip space 中流出自己的network,这就给GRE tunnel 造成了很大的不变。

但是也不是没有解决办法,这就是source based routing。

分为三步:

1) 加个路由表

2) 让tunnel 过来的 IP 使用新家的路由表

3) 给新加的路由表添加一个默认的gateway就可以了,这样通过tunnel 过来的IP 就可以按照原路返回

code:

1) echo ‘100 GRE’ >> /etc/iproute2/rt_tables

2) ip rule add from 198.255.255.0/24 table GRE

这里认为你把整个c段198.255.255.0/24 tunnel 到你现在的这台机器上

3) ip route add default via 192.168.1.1 table GRE

让这个新的IP 段使用192.168.1.1的 gateway,按照原来返回

megacli 命令的用法

最近买的一些server,自身的主板上都带有 LSI RAID card,我们可以使用megacli command 来检查一些参数的状态

首先我们必须安装LSI Logic 提供的megacli 工具

可以直接使用已编译好的源: http://hwraid.le-vert.net/

crontab:

可以直接使用这个crontab file 来自动检测LSI RAID 的状态: http://it.bmc.uu.se/andlov/docs/linux/raid/files/megacli.cron

这篇post 的主要目的是megacli 命令:

显示raid adapter 的所有信息:

megacli -AdpAllinfo -aALL

显示物理硬盘的信息:

megacli -PDList -aALL

显示逻辑硬盘的信息:

megacli -LDGetProp -LALL -aALL

检查 raid rebuild 的状态:

megacli -AdpAllinfo -aALL | grep -i rebuild

更多的信息参见这里: http://hwraid.le-vert.net/wiki/LSIMegaRAIDSAS

 

Xenserver 上安装 centos 和 debian

以前很傻呼呼的,都是直接用的minimal cd 安装的,现在知道了原来还可以用URL 的方式安装

对于centos来说,可以使用这些URL:

http://mirrors.sonic.net/centos/6/os/x86_64/

http://less.cogeco.net/centos/6/os/x86_64/

http://centos.mirror.constant.com/6/os/x86_64/

http://centos.mirror.root.lu/centos/6/os/x86_64/

http://mirror.nl.leaseweb.net/centos/6/os/x86_64/

http://repos.lax.quadranet.com/centos/6/os/x86_64/

亚洲的可选:

http://centos.mirror.cdnetworks.com/6/os/x86_64/

安装完以后安装 xentools:

mount /dev/cdrom /media
cd /media/Linux/

./install.sh

 

在 xenserver上安装debian,可以使用一下URL:

ftp://ftp.us.debian.org/debian

安装xen tools:

mount /dev/cdrom /media
cd /media/Linux/

./install.sh

Javascript 中需要转义的字符

最近需要coding的程序跨越了太多了语言。。。总是弄混了,今天把 javascript 中需要转义的字符列出来,做个记录,以后也方便了。

注释 $ 匹配输入字符串结尾的位置。如果设置了 RegExp 对象的 Multiline 属性,那么 $ 还匹配 \n 或 \r 前面的位置。若要匹配 $ 字符本身,请使用 \$。

( ) 标记子表达式的开始和结束。可以捕获子表达式以供以后使用。若要匹配这两个字符,请使用 \( 和 \)。

* 零次或多次匹配前面的字符或子表达式。若要匹配 * 字符,请使用 \*。

+ 一次或多次匹配前面的字符或子表达式。若要匹配 + 字符,请使用 \+。

. 匹配除换行符 \n 之外的任何单个字符。若要匹配 .,请使用 \。 [ ] 标记中括号表达式的开始。若要匹配这些字符,请使用 \[ 和 \]。

? 零次或一次匹配前面的字符或子表达式,或指示“非贪心”限定符。若要匹配 ? 字符,请使用 \?。

\ 将下一字符标记为特殊字符、文本、反向引用或八进制转义符。例如,字符 n 匹配字符 n。\n 匹配换行符。序列 \\ 匹配 \,序列 \( 匹配 (。

/ 表示文本正则表达式的开始或结束。若要匹配 / 字符,请使用 \/。

^ 匹配输入字符串开始处的位置,但在中括号表达式中使用的情况除外,在那种情况下它对字符集求反。若要匹配 ^ 字符本身,请使用 \^。

{ } 标记限定符表达式的开始。若要匹配这些字符,请使用 \{ 和 \}。

| 指出在两个项之间进行选择。若要匹配 | ,请使用 \|

用google DFP 来 serve 第三方的popunder tag

一个网站只放一个popunder 的 tag 有点太吃亏了,但是如果用收费的ad server 去 rotate ad tag的话,那有太贵了。因为pop under 的 ad tag 并不是每个call 都会创建pop under 的ad的,李米娜有一个frequency 的限制,一般为1/24.

Google DFP 在这上面是免费的,可以很好的解决这个问题。但是如何用google DFP来循环serve 第三方的pop under tag 呢?

首先需要创建ad unit,popup 和 pop under 都属于out of page 的广告,所以ad unit 的size要设置为1X1.

然后去创建order,在line 里面的ad size 选择为1X1, 然后广告选择为3rd party,就可以了。

关键的地方在于如何获得ad unit 的 tag code

我在这个地方花费了好几个小时才发现:

1) tag 要是用sync的, async 的不听

2) 取消 single request

3)添加out of page 的属性

 

完成这几步,你的pop under 就会开始delivery 啦