服务器和网站类

如何选择合适的DNS解析服务器?

0

最合适的DNS服务器就是最快的DNS服务器。当然安全性也需要考虑一下。本文的写作完全依赖于http://www.manu-j.com/blog/opendns-alternative-google-dns-rocks/403/ 给出的材料。

首先贴出大牛的脚本 by Stevan Bajić

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/sh
isp=$(dig +noall +stats 2>&1 | awk '$2~/^SERVER:$/{split($3,dnsip,"#");print dnsip[1]}');
m="-------------------------------------------------------------------------------";
s="                                                                               ";
h="+${m:0:25}+${m:0:12}+${m:0:12}+${m:0:12}+${m:0:12}+${m:0:12}+";
header=("Domain${s:0:23}" "Your ISP${s:0:10}" "Google${s:0:10}" "4.2.2.2${s:0:10}" "OpenDNS${s:0:10}" "DNS Adv.${s:0:10}");
echo "${h}";
echo "| ${header[0]:0:23} | ${header[1]:0:10} | ${header[2]:0:10} | ${header[3]:0:10} | ${header[4]:0:10} | ${header[5]:0:10} |";
echo "${h}";
for i in "lifehacker.com" "facebook.com" "manu-j.com"  "reddit.com" "tb4.fr" "bbc.co.uk";
do
  ii="${i}${s:23}";
  echo -ne "| ${ii:0:23} |";
  for j in "${isp}"  "8.8.8.8"  "4.2.2.2" "208.67.222.222" "156.154.70.1";
  do
    r="${s:10}$(dig +noall +stats +time=9 @${j} ${i} 2>&1 | awk '$2~/^Query$/{print $4" "$5}')";
    echo -ne " ${r:${#r}-10} |";
  done
  echo -ne "\n${h}\n";
done

保存后chmod 700 ,执行, 然后贴出我的测试结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
zhuwenhao:~ # ./dns-speed-test.sh
+-------------------------+------------+------------+------------+------------+------------+
| Domain                  | Your ISP   | Google     | 4.2.2.2    | OpenDNS    | DNS Adv.   |
+-------------------------+------------+------------+------------+------------+------------+
| lifehacker.com          |   139 msec |    27 msec |     2 msec |     0 msec |     9 msec |
+-------------------------+------------+------------+------------+------------+------------+
| facebook.com            |   140 msec |    27 msec |     1 msec |     0 msec |     9 msec |
+-------------------------+------------+------------+------------+------------+------------+
| manu-j.com              |   240 msec |    27 msec |     1 msec |     0 msec |    10 msec |
+-------------------------+------------+------------+------------+------------+------------+
| reddit.com              |   137 msec |    28 msec |     1 msec |     0 msec |     9 msec |
+-------------------------+------------+------------+------------+------------+------------+
| tb4.fr                  |   177 msec |    27 msec |     2 msec |     0 msec |     9 msec |
+-------------------------+------------+------------+------------+------------+------------+
| bbc.co.uk               |   145 msec |    27 msec |     1 msec |     0 msec |     9 msec |
+-------------------------+------------+------------+------------+------------+------------+

比较之下,看来最合适我的DNS就是OpenDNS了。修改配置脚本

/etc/resolv.conf 即可搞定.

1
2
nameserver 208.67.222.222
nameserver 208.67.220.220

修改服务器的时区

0

cp -f /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

修改前后用 date 命令查看一下,就知道成功了没.

全球路由DNS服务器

0

全球只有13台路由DNS根服务器,在13台路由服务器中,名字分别为“A”至“M”,其中10台设置在美国,另外各有一台设置于英国、瑞典和日本。下表是这些机器的管理单位、设置地点及最新的IP地址。

名称 管理单位及设置地点 IP地址
A INTERNIC.NET(美国,弗吉尼亚州) 198.41.0.4
B 美国信息科学研究所(美国,加利弗尼亚州) 128.9.0.107
C PSINet公司(美国,弗吉尼亚州) 192.33.4.12
D 马里兰大学(美国马里兰州) 128.8.10.90
E 美国航空航天管理局[NASA](美国加利弗尼亚州) 192.203.230.10
F 因特网软件联盟(美国加利弗尼亚州) 192.5.5.241
G 美国国防部网络信息中心(美国弗吉尼亚州) 192.112.36.4
H 美国陆军研究所(美国马里兰州) 128.63.2.53
I Autonomica公司(瑞典,斯德哥尔摩) 192.36.148.17
J VeriSign公司(美国,弗吉尼亚州) 192.58.128.30
K RIPE NCC(英国,伦敦) 193.0.14.129
L IANA (美国,弗吉尼亚州) 198.32.64.12

 

DNS(Domain Name System)是域名解析服务器的意思,它在互联网的作用是把域名转换成为网络可以识别的IP地址。

监控剩余内存,自动重启Apache和Mysql,使用Crontab和Daemon方法.

0
本文是专题:建站日记中的第8篇,共12篇

写下文本,源于我最近一次失败的尝试。我的VPS是限定最高内存用量的,上限为2G,如果内存用完了,就会出现Cannot allocate memory无法获取可用内存的故障,导致SSH无法远程登录,也网站性能也急剧下降。这个问题可以通过限制Apache和Mysql的配置来预防。可以做保守配置来杜绝这样的问题。但是由于我的配置比较乐观,可能在某些木马攻击或者劣质网站爬虫的骚扰下,前几天出现过一次内存不足问题,导致不得不请求服务商帮我重启了一下运行了60多天的服务器,让我非常伤心。所以我尝试了一下,可否通过建立脚本,监控运行状况来自动重启Apache和Mysql来释放内存,避免重启服务器,好让我的uptime千秋万代地积累下去?

最容易想到的就是采用Crontab来做了,下面是我第一次的尝试。脚本如下

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
#check free memory and decide how to maintain system.
#Albert Zhu 朱文昊 V0.1 http://zhuwenhao.com
MinFreeMem='100000' #only restart apache below this number
BadFreeMem='10000'  #retart apache and mysql below this number
CurrentMem=$(cat /proc/meminfo | grep -i MemFree | cut -d ':' -f2 | cut -d 'k' -f1)
CurrentMem=$(($CurrentMem+0))
#echo "CurrentMem="$CurrentMem
#echo "MinFreeMem="$MinFreeMem
#echo "BadFreeMem="$BadFreeMem
if [ $BadFreeMem -gt $CurrentMem ];
then
        echo `date "+%Y-%m-%d-%H-%M-%S"`
        echo "CurrentMem="$CurrentMem
        echo "restarted two service"
        service apache2 restart;
        service mysql   restart;
else
 
        if [ $MinFreeMem -gt $CurrentMem ];
        then
                echo `date "+%Y-%m-%d-%H-%M-%S"`
                echo "CurrentMem="$CurrentMem
                echo "restarted apache"
                service apache2 restart;
        fi
        echo `date "+%Y-%m-%d-%H-%M-%S"`
        echo "Free Memory is Good!"
fi

然后使用cron job来自动运行 crontab –e 后加入

1
* * * * * ./memmonitor.sh >> ./memmonitor.log

这样我的脚本会每分钟运行一下,怎么样?感觉很爽吧!于是压力测试,Apache在强大的并发连接下,很快内存飙升,2G内存立马没了。结果,当Cron job醒来后,内存不足,自己都运行不起来,崩溃~~~

分析一下,感觉是cron job每分钟运行一次,太慢!造成对内存感觉不灵敏,等到发现,已经晚了。cron设计最快也就是每分钟运行。于是改用死循环来做,也就是做成守护进程Daemon,对内存每秒钟检查一次,够好了吧?

继续压力测试,依然崩溃~~~~~

于是review脚本,发现 service apache2 restart这样的语句,本身需要较大的内存,而且貌似要等到apache的子进程把当前服务提供完后,才终止(这点我不是很确定,不要太相信)。如果在DDOS下,哪里有空等服务结束?应当直接kill掉。修改脚本为如下

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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#check free memory and decide how to maintain system.
#Albert Zhu 朱文昊 V0.2 http://zhuwenhao.com
KillAllApacheSon ()
{
ListPIDtoKill=$(ps  -u wwwrun | grep httpd | cut -d ' ' -f1)
echo "List PID to Kill "$ListPIDtoKill
i=1
while [ true ];
do
        GetPIDtoKill=$(echo ${ListPIDtoKill} | cut -d ' ' -f${i})
        GetPIDtoKill=$(($GetPIDtoKill+0))
        if [ $GetPIDtoKill -gt 0 ];
        then
                kill $GetPIDtoKill
                echo "kill "$GetPIDtoKill
                i=$(($i+1))
        else
                break;
        fi
done
echo "Killed Apache Son Num: "$i
}
KillMysql ()
{
GetPIDtoKill=$(ps -u mysql | cut -d ' ' -f1)
GetPIDtoKill=$(($GetPIDtoKill+0))
if [ $GetPIDtoKill -gt 0 ];
then
        kill $GetPIDtoKill
        echo "kill mysql and PID is "$GetPIDtoKill
fi
}
CheckMem ()
{
MinFreeMem='100000' #only restart apache below this number
BadFreeMem='10000'  #retart apache and mysql below this number
CurrentMem=$(cat /proc/meminfo | grep -i MemFree | cut -d ':' -f2 | cut -d 'k' -f1)
CurrentMem=$(($CurrentMem+0))
#echo "CurrentMem="$CurrentMem
#echo "MinFreeMem="$MinFreeMem
#echo "BadFreeMem="$BadFreeMem
if [ $BadFreeMem -gt $CurrentMem ];
then
        echo `date "+%Y-%m-%d-%H-%M-%S"`
        echo "CurrentMem="$CurrentMem
        echo "restarted two service"
        KillAllApacheSon
        KillMysql
        service mysql   restart
else
 
        if [ $MinFreeMem -gt $CurrentMem ];
        then
                echo `date "+%Y-%m-%d-%H-%M-%S"`
                echo "CurrentMem="$CurrentMem
                echo "restarted apache"
                KillAllApacheSon
        fi
        echo `date "+%Y-%m-%d-%H-%M-%S"`
        echo "Free Memory is Good!"
fi
}
renice -15 $$ >> ./second.log
#echo $(nice)
while [ true ];
do
#       sleep 1
        usleep 100
        CheckMem>>./second.log
done

这次修改比较幸苦,感觉一个小脚本写到这份上,对我来说也算得上是高级bash编程了吧?呵呵。拉出来溜溜?惨不忍睹。依然无法实现预期功能。为什么?难道1秒钟也太漫长?

于是请出usleep,每隔100毫秒就检查内存一次。我的cpu 10%都用在这个脚本上了,结果怎么样?没用! 写到这里,我心灰意冷了,彻底放弃。亲爱的朋友,有谁能帮帮我呢?

我写出上面的文字来,除了期待高手来解救我之外,还有一个原因。仔细想想看,我的这些脚本不能在VPS上实现功能,但应该可以在独立服务器或者PC上工作,为什么呢?因为VPS一旦接近耗尽内存,那真的是一点memory都allocate不处理,所以脚本本身就无法继续执行.但是对于独立服务器或者PC, 都有swap机制. 在物理内存耗尽的情况下, 会拿硬盘来充数,虽然速度慢很多,但以上的两个版本的脚本,都有可能正常工作.所以如果你测试以上脚本可用,请告诉我,抚慰一下我受伤的心吧 :)

Cron Job为什么不执行?

0

很多人搜索Cron Job未执行这样的关键字来到我的博客,可能是因为我写了几篇关于Cron Job旁门左道的文字吧.

根据我的经验,Cron Job在添加正确的情况没有执行, 最可能的原因是脚本的权限设置, 要设置为仅供拥有者可执行的,并且脚本有者和组都正确.

比如在我的服务器上,需要设置

1
2
	chmod 700        name-of-your-script
	chown wwwrun:www name-of-your-script

如果还有问题,欢迎讨论.

Go to Top