<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[空空之博]]></title> 
<link>http://www.kkong.net/index.php</link> 
<description><![CDATA[本人linux技术及个人源码收藏与心情历程]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[空空之博]]></copyright>
<item>
<link>http://www.kkong.net/post/317/</link>
<title><![CDATA[自制接地线方法]]></title> 
<author>admin &lt;admin@kkong.net&gt;</author>
<category><![CDATA[【工程日记】]]></category>
<pubDate>Wed, 05 Aug 2009 09:18:03 +0000</pubDate> 
<guid>http://www.kkong.net/post/317/</guid> 
<description>
<![CDATA[ 
	一。气象站接地线&防雷：<br/>&nbsp;&nbsp; 我在公司当电工/气象站安装的时候，操做规程上有一条是关于地线的，要求是一根半米长，1公分直径的铜棒，埋入地下至少1米。然后用铜线引接出地线(我的就是接到HOBO气象站里面)，如果有需要可以照做。<br/><br/>二。一个机房做地线工程：<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我们用了8根3米的镀锌角钢，挖3米深&nbsp;&nbsp;4.5米宽，钢碳1000多公斤，工业盐200多公斤。。。耗时10多天，2工人在技术员指导下施工。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;完工后，测试 地线 <3Ω。OK<br/>Tags - <a href="http://www.kkong.net/tags/%25E8%2587%25AA%25E5%2588%25B6%25E6%258E%25A5%25E5%259C%25B0%25E7%25BA%25BF%25E6%2596%25B9%25E6%25B3%2595/" rel="tag">自制接地线方法</a>
]]>
</description>
</item><item>
<link>http://www.kkong.net/post/304/</link>
<title><![CDATA[Nginx+PHP+MySQL双机互备、全自动切换方案]]></title> 
<author>admin &lt;admin@kkong.net&gt;</author>
<category><![CDATA[【工程日记】]]></category>
<pubDate>Mon, 22 Jun 2009 14:42:19 +0000</pubDate> 
<guid>http://www.kkong.net/post/304/</guid> 
<description>
<![CDATA[ 
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在生产应用中，某台“Nginx+PHP+MySQL”接口数据服务器，扮演的角色十分重要，如果服务器硬件或Nginx、MySQL发生故障，而短时间内无法恢复，后果将非常严重。为了避免单点故障，我设计了此套方案，编写了failover.sh脚本，实现了双机互备、全自动切换，故障转移时间只需几十秒。<br/><br/>　　一、双机互备、全自动切换方案：<br/>　　1、拓扑图：<br/><a href="http://www.kkong.net/attachment.php?fid=158" class="highslide" onclick="return hs.expand(this)"><img src="http://www.kkong.net/attachment.php?fid=158" class="insertimage" alt="Highslide JS" title="点击图片放大 www.kkong.net" border="0" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>2、解释：<br/>　　(1)、假设外网域名blog.s135.com解析到外网虚拟IP 72.249.146.214上，内网hosts设置db10对应内网虚拟IP 192.168.146.214<br/><br/>　　(2)、默认情况下，由主机绑定内、外网虚拟IP，备机作为备份，当主机的MySQL、Nginx或服务器出现故障无法访问时，备机会自动接管内、外网虚拟IP。两台服务器都启动负责监控、自动切换虚拟IP的守护进程/usr/bin/nohup /bin/sh /usr/local/webserver/failover/failover.sh 2>&1 > /dev/null &<br/><br/>　　(3)、主机和备机上的MySQL服务器互为主从，互相同步。在主机处于活动状态（即由主机绑定虚拟IP）时，读写主机的MySQL，写到主机的数据会同步到备机；在备机处于活动状态时，读写备机的MySQL，写到备机的数据会同步到主机（如果主机上的MySQL死掉暂时无法同步，主机上的MySQL恢复后，数据会自动从备机上同步过来，反之亦然）。<br/><br/>　　(4)、主机处于活动状态时，每20秒会把/data0/htdocs/（网页、程序、图片存放目录）、/usr/local/webserver/php/etc/（php.ini等配置文件目录）、/usr/local/webserver/nginx/conf/（Nginx配置文件目录）三个目录下的文件通过rsync推送到备机服务器上的对应目录（增量推送，两台服务器上一样的文件不会重复推送），反之如果备机处于活动状态时，每20秒会尝试把文件推送到主机。rsync的配置文件见两台服务器的/etc/rsyncd.conf，rsync守护进程的启动命令为rsync --daemon<br/><br/>　　3、自动切换流程<br/>　　(1)、主机默认绑定内、外网虚拟IP，当主机的MySQL、Nginx无法访问或服务器宕机，主机上的failover.sh守护进程会自动摘除自己绑定的内、外网虚拟IP（如果主机上的failover.sh死掉，无法摘除自己绑定的虚拟IP也没关系），备机上的failover.sh守护进程会自动接管备机原来绑定的内、外网虚拟IP，并发送ARPing包给内、外网网关更新MAC，强行接管。<br/><br/>　　(2)、备机绑定虚拟IP后，会发送ARPing包给内、外网网关，通知网关更新虚拟IP的MAC地址为备机的MAC地址，从而保证了切换后能够通过虚拟IP及时访问到备机。<br/><br/>　　(3)、如果主机的MySQL、Nginx启动起来，全部恢复正常访问，主机上的failover.sh守护进程会检测主机上的MySQL数据是否已经完全从备机上同步过来。如果同步延迟时间为0，主机会自动接管内、外网虚拟IP，并发送ARPing包给内、外网网关，而备机也会自动摘除内、外网虚拟IP。<br/><br/>　　(4)、整个切换流程均由failover.sh自动完成，无需人工处理。 <br/><br/>　　4、注意事项（很重要）：<br/>　　(1)、crontab里的文件没有做自动同步，如果修改，需要手工在两台服务器上都做修改。<br/><br/>　　(2)、/data0/htdocs/目录内任何用ln -s建立的软连接，rsync不会自动同步，如果在一台服务器上建了软连接，需要手工在另外一台服务器上也建相同的软连接。<br/><br/>　　(3)、如果要删除/data0/htdocs/目录内的某些文件或目录，需要先删除处于活动状态（即绑定了虚拟IP）服务器上的文件或目录，再删除处于备用状态服务器上的文件或目录。<br/><br/>　　(4)、除了/data0/htdocs/（网页、程序、图片存放目录）、/usr/local/webserver/php/etc/（php.ini等配置文件目录）、/usr/local/webserver/nginx/conf/（Nginx配置文件目录）三个目录之外的其他配置修改，需要在两台服务器上都做修改。<br/><hr/><br/>二、配置文档与脚本：<br/>　　1、主机、备机两台服务器的rsync配置（配置相同）<br/>　　(1)、rsync配置文件<br/><br/>vi /etc/rsyncd.conf<br/><br/>　　输入一些内容并保存：<br/><div class="code">uid = root<br/>gid = root<br/>use chroot = no<br/>max connections = 20<br/>pid file = /var/run/rsyncd.pid<br/>lock file = /var/run/rsync.lock<br/>log file = /var/log/rsyncd.log<br/><br/>&#91;data0_htdocs&#93;<br/>path = /data0/htdocs/<br/>ignore errors<br/>read only = no<br/>hosts allow = 192.168.146.0/24<br/>hosts deny = 0.0.0.0/32<br/><br/>&#91;php_etc&#93;<br/>path = /usr/local/webserver/php/etc/<br/>ignore errors<br/>read only = no<br/>hosts allow = 192.168.146.0/24<br/>hosts deny = 0.0.0.0/32<br/><br/>&#91;nginx_conf&#93;<br/>path = /usr/local/webserver/nginx/conf/<br/>ignore errors<br/>read only = no<br/>hosts allow = 192.168.146.0/24<br/>hosts deny = 0.0.0.0/32<br/></div><br/>(2)、启动rsync守护进程<br/><br/>/usr/bin/rsync --daemon<br/>2、两台MySQL互为主从的配置<br/>　　这里就不详细写出互为主从的配置过程了，如果不懂的朋友可以在Google上搜一下。有一点需要指出，my.cnf配置文件中请加上skip-name-resolve参数，使用IP来进行MySQL帐号验证。<br/><br/>　　3、主机、备机两台服务器负载监控、虚拟IP自动切换的failover.sh守护进程<br/>　　(1)、启动failover.sh守护进程（为了开机能够自动运行，请将以下语句添加到/etc/rc.local文件中）：<br/><br/>/usr/bin/nohup /bin/sh /usr/local/webserver/failover/failover.sh 2>&1 > /dev/null &<br/>　　(2)、停止failover.sh守护进程：<br/><br/>ps -ef &#124; grep failover.sh<br/>会显示以下信息：<br/><span style="color: #008000;">　　root&nbsp;&nbsp;&nbsp;&nbsp; 15428&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;0 Nov17 ?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00:00:03 /bin/sh /usr/local/webserver/failover/failover.sh<br/>　　root&nbsp;&nbsp;&nbsp;&nbsp; 20123&nbsp;&nbsp;6878&nbsp;&nbsp;0 16:16 pts/2&nbsp;&nbsp;&nbsp;&nbsp;00:00:00 grep failover.sh</span>　　<br/>然后杀死failover.sh的进程：<br/><br/>kill -9 15428<br/><br/>(3)、failover.sh代码内容（<span style="color: #FF0000;">请注意其中的type设置，主机设为master，备机设为slave</span>）：<br/><div class="code"><br/>#!/bin/sh<br/>LANG=C<br/>date=$(date -d &quot;today&quot; +&quot;%Y-%m-%d %H:%M:%S&quot;)<br/><br/>#---------------配置信息(开始)---------------<br/>#类型：主机设为master，备机设为slave<br/>type=&quot;master&quot;<br/><br/>#主机、备机切换日志路径<br/>logfile=&quot;/var/log/failover.log&quot;<br/><br/>#MySQL可执行文件地址，例如/usr/local/mysql/bin/mysql；MySQL用户名；密码；端口<br/>mysql_bin=&quot;/usr/local/webserver/mysql/bin/mysql&quot;<br/>mysql_username=&quot;root&quot;<br/>mysql_password=&quot;123456&quot;<br/>mysql_port=&quot;3306&quot;<br/><br/>#内网网关<br/>gateway_eth0=&quot;192.168.146.1&quot;<br/><br/>#主机内网真实IP<br/>rip_eth0_master=&quot;192.168.146.213&quot;<br/><br/>#备机内网真实IP<br/>rip_eth0_slave=&quot;192.168.146.215&quot;<br/><br/>#主机、备机内网共用的虚拟IP<br/>vip_eth0_share=&quot;192.168.113.214&quot;<br/><br/>#外网网关<br/>gateway_eth1=&quot;72.249.146.193&quot;<br/><br/>#主机外网真实IP<br/>rip_eth1_master=&quot;72.249.146.213&quot;<br/><br/>#备机外网真实IP<br/>rip_eth1_slave=&quot;72.249.146.215&quot;<br/><br/>#主机、备机外网共用的虚拟IP<br/>vip_eth1_share=&quot;72.249.146.214&quot;<br/>#---------------配置信息(结束)---------------<br/><br/>#绑定内、外网虚拟IP<br/>function_bind_vip()<br/>&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;/sbin/ifconfig eth0:vip $&#123;vip_eth0_share&#125; broadcast $&#123;vip_eth0_share&#125; netmask 255.255.255.255 up<br/>&nbsp;&nbsp;&nbsp;&nbsp;/sbin/route add -host $&#123;vip_eth0_share&#125; dev eth0:vip<br/>&nbsp;&nbsp;&nbsp;&nbsp;/sbin/ifconfig eth1:vip $&#123;vip_eth1_share&#125; broadcast $&#123;vip_eth1_share&#125; netmask 255.255.255.255 up<br/>&nbsp;&nbsp;&nbsp;&nbsp;/sbin/route add -host $&#123;vip_eth1_share&#125; dev eth1:vip<br/>&nbsp;&nbsp;&nbsp;&nbsp;/usr/local/webserver/php/sbin/php-fpm reload<br/>&nbsp;&nbsp;&nbsp;&nbsp;kill -USR1 `cat /usr/local/webserver/nginx/logs/nginx.pid`<br/>&nbsp;&nbsp;&nbsp;&nbsp;/sbin/service crond start<br/>&#125;<br/><br/>#解除内、外网虚拟IP<br/>function_remove_vip()<br/>&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;/sbin/ifconfig eth0:vip $&#123;vip_eth0_share&#125; broadcast $&#123;vip_eth0_share&#125; netmask 255.255.255.255 down<br/>&nbsp;&nbsp;&nbsp;&nbsp;/sbin/ifconfig eth1:vip $&#123;vip_eth1_share&#125; broadcast $&#123;vip_eth1_share&#125; netmask 255.255.255.255 down<br/>&nbsp;&nbsp;&nbsp;&nbsp;/sbin/service crond stop<br/>&#125;<br/><br/>#主机向备机推送文件的函数<br/>function_rsync_master_to_slave()<br/>&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;/usr/bin/rsync -zrtuog /data0/htdocs/ $&#123;rip_eth0_slave&#125;::data0_htdocs/ &gt; /dev/null 2&gt;&amp;1<br/>&nbsp;&nbsp;&nbsp;&nbsp;/usr/bin/rsync -zrtuog /usr/local/webserver/php/etc/ $&#123;rip_eth0_slave&#125;::php_etc/ &gt; /dev/null 2&gt;&amp;1<br/>&nbsp;&nbsp;&nbsp;&nbsp;/usr/bin/rsync -zrtuog /usr/local/webserver/nginx/conf/ $&#123;rip_eth0_slave&#125;::nginx_conf/ &gt; /dev/null 2&gt;&amp;1<br/>&#125;<br/><br/>#备机向主机推送文件的函数<br/>function_rsync_slave_to_master()<br/>&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;/usr/bin/rsync -zrtuog /data0/htdocs/ $&#123;rip_eth0_master&#125;::data0_htdocs/ &gt; /dev/null 2&gt;&amp;1<br/>&nbsp;&nbsp;&nbsp;&nbsp;/usr/bin/rsync -zrtuog /usr/local/webserver/php/etc/ $&#123;rip_eth0_master&#125;::php_etc/ &gt; /dev/null 2&gt;&amp;1<br/>&nbsp;&nbsp;&nbsp;&nbsp;/usr/bin/rsync -zrtuog /usr/local/webserver/nginx/conf/ $&#123;rip_eth0_master&#125;::nginx_conf/ &gt; /dev/null 2&gt;&amp;1<br/>&#125;<br/><br/>#虚拟IP ARPing<br/>function_vip_arping()<br/>&#123;<br/>&nbsp;&nbsp;/sbin/arping -I eth0 -c 3 -s $&#123;vip_eth0_share&#125; $&#123;gateway_eth0&#125; &gt; /dev/null 2&gt;&amp;1<br/>&nbsp;&nbsp;/sbin/arping -I eth1 -c 3 -s $&#123;vip_eth1_share&#125; $&#123;gateway_eth1&#125; &gt; /dev/null 2&gt;&amp;1&nbsp;&nbsp;<br/>&#125;<br/><br/>while true<br/>do<br/>&nbsp;&nbsp;&nbsp;&nbsp;#用HTTP协议检查虚拟IP<br/>&nbsp;&nbsp;&nbsp;&nbsp;if (curl -m 30 -G http://$&#123;vip_eth1_share&#125;/ &gt; /dev/null 2&gt;&amp;1) &amp;&amp; ($&#123;mysql_bin&#125; -u&quot;$&#123;mysql_username&#125;&quot; -p&quot;$&#123;mysql_password&#125;&quot; -P&quot;$&#123;mysql_port&#125;&quot; -h&quot;$&#123;vip_eth0_share&#125;&quot; -e&quot;show slave status&#92;G&quot; &gt; /dev/null 2&gt;&amp;1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;then<br/>&nbsp;&nbsp;&nbsp;&nbsp;#取得与内网VIP绑定的服务器内网IP<br/>&nbsp;&nbsp;&nbsp;&nbsp;eth0_active_server=$($&#123;mysql_bin&#125; -u&quot;$&#123;mysql_username&#125;&quot; -p&quot;$&#123;mysql_password&#125;&quot; -P&quot;$&#123;mysql_port&#125;&quot; -h&quot;$&#123;vip_eth0_share&#125;&quot; -e&quot;show slave status&#92;G&quot; &amp;#124; grep &quot;Master_Host&quot; &amp;#124; awk -F &#039;: &#039; &#039;&#123;printf $2&#125;&#039;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;#如果内网VIP=主机内网IP（主机MySQL中的Master_Host显示的是备机的域名或IP），且本机为主机<br/>&nbsp;&nbsp;&nbsp;&nbsp;if &#91; &quot;$&#123;eth0_active_server&#125;&quot; = &quot;$&#123;rip_eth0_slave&#125;&quot; &#93; &amp;&amp; &#91; &quot;$&#123;type&#125;&quot; = &quot;master&quot; &#93;<br/>&nbsp;&nbsp;&nbsp;&nbsp;then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function_rsync_master_to_slave<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function_vip_arping&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;#如果内网VIP=备机内网IP（备机MySQL中的Master_Host显示的是主机的域名或IP）<br/>&nbsp;&nbsp;&nbsp;&nbsp;elif &#91; &quot;$&#123;eth0_active_server&#125;&quot; = &quot;$&#123;rip_eth0_master&#125;&quot; &#93;<br/>&nbsp;&nbsp;&nbsp;&nbsp;then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (curl -m 30 -G http://$&#123;rip_eth1_master&#125;/ &gt; /dev/null 2&gt;&amp;1) &amp;&amp; ($&#123;mysql_bin&#125; -u&quot;$&#123;mysql_username&#125;&quot; -p&quot;$&#123;mysql_password&#125;&quot; -P&quot;$&#123;mysql_port&#125;&quot; -h&quot;$&#123;rip_eth0_master&#125;&quot; -e&quot;show slave status&#92;G&quot; &amp;#124; grep &quot;Seconds_Behind_Master: 0&quot; &gt; /dev/null 2&gt;&amp;1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#如果主机能够访问，数据库同步无延迟，且本机就是主机，那么由本机绑定虚拟IP<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if &#91; &quot;$&#123;type&#125;&quot; = &quot;master&quot; &#93;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#如果本机为主机<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; function_bind_vip<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function_vip_arping<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo &quot;$&#123;date&#125; 主机已绑定虚拟IP!(Type:1)&quot; &gt;&gt; $&#123;logfile&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#如果本机为备机<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; function_remove_vip<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo &quot;$&#123;date&#125; 备机已去除虚拟IP!(Type:2)&quot; &gt;&gt; $&#123;logfile&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if &#91; &quot;$&#123;type&#125;&quot; = &quot;slave&quot; &#93;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#如果本机为备机<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; function_rsync_slave_to_master&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function_vip_arping<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi<br/>&nbsp;&nbsp;&nbsp;&nbsp;fi<br/>&nbsp;&nbsp;&nbsp;&nbsp;else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#虚拟IP无法访问时，判断主机能否访问<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (curl -m 30 -G http://$&#123;rip_eth1_master&#125;/ &gt; /dev/null 2&gt;&amp;1) &amp;&amp; ($&#123;mysql_bin&#125; -u&quot;$&#123;mysql_username&#125;&quot; -p&quot;$&#123;mysql_password&#125;&quot; -P&quot;$&#123;mysql_port&#125;&quot; -h&quot;$&#123;rip_eth0_master&#125;&quot; -e&quot;show slave status&#92;G&quot; &gt; /dev/null 2&gt;&amp;1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#如果主机能够访问，且本机就是主机，那么由本机绑定虚拟IP<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if &#91; &quot;$&#123;type&#125;&quot; = &quot;master&quot; &#93;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function_bind_vip<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function_vip_arping<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo &quot;$&#123;date&#125; 主机已绑定虚拟IP!(Type:3)&quot; &gt;&gt; $&#123;logfile&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function_remove_vip<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo &quot;$&#123;date&#125; 备机已去除虚拟IP!(Type:4)&quot; &gt;&gt; $&#123;logfile&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi<br/>&nbsp;&nbsp;&nbsp;&nbsp;elif (curl -m 30 -G http://$&#123;rip_eth1_slave&#125;/ &gt; /dev/null 2&gt;&amp;1) &amp;&amp; ($&#123;mysql_bin&#125; -u&quot;$&#123;mysql_username&#125;&quot; -p&quot;$&#123;mysql_password&#125;&quot; -P&quot;$&#123;mysql_port&#125;&quot; -h&quot;$&#123;rip_eth0_slave&#125;&quot; -e&quot;show slave status&#92;G&quot; &gt; /dev/null 2&gt;&amp;1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#如果主机不能访问而备机能够访问，且本机就是备机，那么由备机绑定虚拟IP<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if &#91; &quot;$&#123;type&#125;&quot; = &quot;slave&quot; &#93;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function_bind_vip<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function_vip_arping<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo &quot;$&#123;date&#125; 备机已绑定虚拟IP!(Type:5)&quot; &gt;&gt; $&#123;logfile&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function_remove_vip<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo &quot;$&#123;date&#125; 主机已去除虚拟IP!(Type:6)&quot; &gt;&gt; $&#123;logfile&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo &quot;$&#123;date&#125; 主机、备机全部无法访问!(Type:7)&quot; &gt;&gt; $&#123;logfile&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi<br/>&nbsp;&nbsp;&nbsp;&nbsp;fi<br/>&nbsp;&nbsp;&nbsp;&nbsp;#每次循环暂停20秒(即间隔20秒检测一次)<br/>&nbsp;&nbsp;&nbsp;&nbsp;sleep 20<br/>done</div><br/><br/>　[文章作者：张宴 本文版本：v1.0 最后修改：2008.11.19 转载请注明原文链接：http://blog.s135.com/post/379/]<br/>Tags - <a href="http://www.kkong.net/tags/nginx/" rel="tag">nginx</a> , <a href="http://www.kkong.net/tags/php/" rel="tag">php</a> , <a href="http://www.kkong.net/tags/mysql/" rel="tag">mysql</a> , <a href="http://www.kkong.net/tags/%25E5%258F%258C%25E6%259C%25BA%25E4%25BA%2592%25E5%25A4%2587/" rel="tag">双机互备</a> , <a href="http://www.kkong.net/tags/%25E5%2585%25A8%25E8%2587%25AA%25E5%258A%25A8%25E5%2588%2587%25E6%258D%25A2%25E6%2596%25B9%25E6%25A1%2588/" rel="tag">全自动切换方案</a>
]]>
</description>
</item><item>
<link>http://www.kkong.net/post/243/</link>
<title><![CDATA[CSS布局口诀]]></title> 
<author>admin &lt;admin@kkong.net&gt;</author>
<category><![CDATA[【工程日记】]]></category>
<pubDate>Fri, 15 May 2009 03:57:53 +0000</pubDate> 
<guid>http://www.kkong.net/post/243/</guid> 
<description>
<![CDATA[ 
	如果在用CSS设计布局时遇到BUG，请认真阅读以下内容，非常容易记忆的，不知道哪位高人把CSS BUG编成了顺口溜了！看看好不好记住呢？<br/><br/>一、IE边框若显若无，须注意，定是高度设置已忘记；<br/><br/>二、浮动产生有缘故，若要父层包含住，紧跟浮动要清除，容器自然显其中；<br/><br/>三、三像素文本慢移不必慌，高度设置帮你忙；<br/>四、兼容各个浏览须注意，默认设置行高可能是杀手；<br/><br/>五、独立清除浮动须铭记，行高设无，高设零，设计效果兼浏览；<br/><br/>六、学布局须思路，路随布局原理自然直，轻松驾驭html，流水布局少hack，代码清爽，兼容好，友好引擎喜欢迎。<br/><br/>七、所有标签皆有源，只是默认各不同，span是无极，无极生两仪—内联和块级，img较特殊，但也遵法理，其他只是改造各不同，一个*号全归原，层叠样式理须多练习，万物皆规律。<br/><br/>八、图片链接排版须小心，图片链接文字链接若对齐，padding和vertical-align:middle要设定，虽差微细倒无妨。<br/><br/>九、IE浮动双边距，请用display：inline拘。<br/><br/>十、列表横向排版，列表代码须紧靠，空隙自消须铭记。<br/><br/>Tags - <a href="http://www.kkong.net/tags/css%25E5%25B8%2583%25E5%25B1%2580%25E5%258F%25A3%25E8%25AF%2580/" rel="tag">css布局口诀</a>
]]>
</description>
</item><item>
<link>http://www.kkong.net/post/208/</link>
<title><![CDATA[使用Zend Debugger 5.2.10 + Zend Studio 5.5.0调试web]]></title> 
<author>admin &lt;admin@kkong.net&gt;</author>
<category><![CDATA[【工程日记】]]></category>
<pubDate>Sat, 14 Mar 2009 01:24:15 +0000</pubDate> 
<guid>http://www.kkong.net/post/208/</guid> 
<description>
<![CDATA[ 
	使用Zend Debugger 5.2.10 + Zend Studio 5.5.0调试web<br/>安装php 5.2.0，apache等，以便可以web解析php文件。这个网上多的是，就不细说了。因为我的工作平台是windows，所以我下载的是为windows编译的dll。<br/><br/>Zend Debugger 5.2.10下载地址：http://downloads.zend.com/pdt/server-debugger/ZendDebugger-5.2.10-cygwin_nt-i386.tar.gz<br/><br/>解压下载的ZendDebugger-5.2.10，目录结构如下：<br/><br/><div class="code">&lt;DIR&gt; 4_3_x_comp<br/>&lt;DIR&gt; 4_4_x_comp<br/>&lt;DIR&gt; 5_0_x_comp<br/>&lt;DIR&gt; 5_1_x_comp<br/>&lt;DIR&gt; 5_2_x_comp<br/>&lt;DIR&gt; 5_2_x_nts_comp<br/>321 dummy.php<br/>6,934 Inventory.xml<br/>376 md5<br/>832 README.txt</div>根据你安装的php版本，选择相应的文件。5.2.x有2个编译好的dll，其中5_2_x_nts_comp是“non-tread safe”的，因此我使用5_2_x_comp内的dll。<br/><br/>下面是具体的操作步骤。<br/>1、请将ZendDebugger.dll复制到您的php安装目录下，比如：d:&#92;php&#92;。<br/>2、然后将下面的4行内容加到您的php.ini：<br/>[Zend]<br/>zend_extension_ts=D:/php/ZendDebugger.dll<br/>zend_debugger.allow_hosts=192.168.1.25<br/>zend_debugger.expose_remotely=always<br/>其中，192.168.1.25是远程调试的文件所在机器的IP；我是本地web调试，我机器的IP是192.168.1.25。<br/>3、将dummy.php复制到apache的document root目录。<br/>4、重启apache。<br/>打开浏览器运行：http://192.168.1.25/phpinfo.php，您会看到了<br/>ok，Zend Debugger配置完毕。下面配置Zend Studio 5.5.0。<br/>1、行Zend Studio 5.5.0，菜单：Tools > Preferences，然后选择“debug”项，“Debug Mode”选择“Server”，然后将“Debug Server URL”中的“Server_Address/”替换为：192.168.1.25。<br/><br/>2、菜单：Debug >> Debug URL，然后输入要调试的url。<br/><br/>OK，可以调试了吧？<br/><br/>文章转载自：PHPChina开源社区门户<br/>Tags - <a href="http://www.kkong.net/tags/%25E4%25BD%25BF%25E7%2594%25A8zend/" rel="tag">使用zend</a> , <a href="http://www.kkong.net/tags/debugger/" rel="tag">debugger</a> , <a href="http://www.kkong.net/tags/5.2.10/" rel="tag">5.2.10</a> , <a href="http://www.kkong.net/tags/%252B/" rel="tag">+</a> , <a href="http://www.kkong.net/tags/zend/" rel="tag">zend</a> , <a href="http://www.kkong.net/tags/studio/" rel="tag">studio</a> , <a href="http://www.kkong.net/tags/5.5.0%25E8%25B0%2583%25E8%25AF%2595web/" rel="tag">5.5.0调试web</a>
]]>
</description>
</item><item>
<link>http://www.kkong.net/post/82/</link>
<title><![CDATA[三峡大学的网络布线]]></title> 
<author>admin &lt;admin@kkong.net&gt;</author>
<category><![CDATA[【工程日记】]]></category>
<pubDate>Sat, 20 Sep 2008 09:08:35 +0000</pubDate> 
<guid>http://www.kkong.net/post/82/</guid> 
<description>
<![CDATA[ 
	&nbsp;&nbsp; 今天在网上找到的一幅图。是关于网络布线及拓扑结构。看起来还不错的传统结构。抄下来，留着学习也好。不过看了一下，既然是数据据服务器独立出来，不知道为什么数据库的不用千兆连接。<br/><a href="http://www.kkong.net/attachment.php?fid=59" class="highslide" onclick="return hs.expand(this)"><img src="http://www.kkong.net/attachment.php?fid=59" class="insertimage" alt="Highslide JS" title="点击图片放大 www.kkong.net" border="0" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>Tags - <a href="http://www.kkong.net/tags/%25E7%25BD%2591%25E7%25BB%259C%25E5%25B8%2583%25E7%25BA%25BF/" rel="tag">网络布线</a> , <a href="http://www.kkong.net/tags/%25E6%258B%2593%25E6%2589%2591%25E7%25BB%2593%25E6%259E%2584/" rel="tag">拓扑结构</a> , <a href="http://www.kkong.net/tags/%25E4%25B8%2589%25E5%25B3%25A1%25E5%25A4%25A7%25E5%25AD%25A6/" rel="tag">三峡大学</a>
]]>
</description>
</item><item>
<link>http://www.kkong.net/post/81/</link>
<title><![CDATA[如何关闭端口]]></title> 
<author>admin &lt;admin@kkong.net&gt;</author>
<category><![CDATA[【工程日记】]]></category>
<pubDate>Sat, 20 Sep 2008 03:48:17 +0000</pubDate> 
<guid>http://www.kkong.net/post/81/</guid> 
<description>
<![CDATA[ 
	为了让你的系统变为铜墙铁壁，应该封闭这些端口，主要有：TCP 135、139、445、593、1025 端口和 UDP 135、137、138、445 端口，一些流行病毒的后门端口（如 TCP 2745、3127、6129 端口），以及远程服务访问端口3389。下面介绍如何在WinXP/2000/2003下关闭这些网络端口： <br/><br/>第一步，点击“开始”菜单/设置/控制面板/管理工具，双击打开“本地安全策略”，选中“IP 安全策略，在本地计算机”，在右边窗格的空白位置右击鼠标，弹出快捷菜单，选择“创建 IP 安全策略”（如右图），于是弹出一个向导。在向导中点击“下一步”按钮，为新的安全策略命名；再按“下一步”，则显示“安全通信请求”画面，在画面上把“激活默认相应规则”左边的钩去掉，点击“完成”按钮就创建了一个新的IP 安全策略。 <br/><a href="http://www.kkong.net/attachment.php?fid=58" class="highslide" onclick="return hs.expand(this)"><img src="http://www.kkong.net/attachment.php?fid=58" class="insertimage" alt="Highslide JS" title="点击图片放大 www.kkong.net" border="0" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>第二步，右击该IP安全策略，在“属性”对话框中，把“使用添加向导”左边的钩去掉，然后单击“添加”按钮添加新的规则，随后弹出“新规则属性”对话框，在画面上点击“添加”按钮，弹出IP筛选器列表窗口；在列表中，首先把“使用添加向导”左边的钩去掉，然后再点击右边的“添加”按钮添加新的筛选器。 <br/><br/>第三步，进入“筛选器属性”对话框，首先看到的是寻址，源地址选“任何 IP 地址”，目标地址选“我的 IP 地址”；点击“协议”选项卡，在“选择协议类型”的下拉列表中选择“TCP”，然后在“到此端口”下的文本框中输入“135”，点击“确定”按钮（如左图），这样就添加了一个屏蔽 TCP 135（RPC）端口的筛选器，它可以防止外界通过135端口连上你的电脑。 <br/><br/>点击“确定”后回到筛选器列表的对话框，可以看到已经添加了一条策略，重复以上步骤继续添加 TCP 137、139、445、593 端口和 UDP 135、139、445 端口，为它们建立相应的筛选器。 <br/><br/>重复以上步骤添加TCP 1025、2745、3127、6129、3389 端口的屏蔽策略，建立好上述端口的筛选器，最后点击“确定”按钮。 <br/><br/>第四步，在“新规则属性”对话框中，选择“新 IP 筛选器列表”，然后点击其左边的圆圈上加一个点，表示已经激活，最后点击“筛选器操作”选项卡。在“筛选器操作”选项卡中，把“使用添加向导”左边的钩去掉，点击“添加”按钮，添加“阻止”操作（右图）：在“新筛选器操作属性”的“安全措施”选项卡中，选择“阻止”，然后点击“确定”按钮。 <br/><br/>第五步、进入“新规则属性”对话框，点击“新筛选器操作”，其左边的圆圈会加了一个点，表示已经激活，点击“关闭”按钮，关闭对话框；最后回到“新IP安全策略属性”对话框，在“新的IP筛选器列表”左边打钩，按“确定”按钮关闭对话框。在“本地安全策略”窗口，用鼠标右击新添加的 IP 安全策略，然后选择“指派”。 <br/><br/>于是重新启动后，电脑中上述网络端口就被关闭了，病毒和黑客再也不能连上这些端口，从而保护了你的电脑。 <br/>Tags - <a href="http://www.kkong.net/tags/%25E5%2585%25B3%25E9%2597%25AD%25E7%25AB%25AF%25E5%258F%25A3/" rel="tag">关闭端口</a> , <a href="http://www.kkong.net/tags/%25E8%25AE%25BE%25E7%25BD%25AE/" rel="tag">设置</a>
]]>
</description>
</item><item>
<link>http://www.kkong.net/post/80/</link>
<title><![CDATA[轻松构建网络负载平衡群集(组图)]]></title> 
<author>admin &lt;admin@kkong.net&gt;</author>
<category><![CDATA[【工程日记】]]></category>
<pubDate>Fri, 19 Sep 2008 12:53:24 +0000</pubDate> 
<guid>http://www.kkong.net/post/80/</guid> 
<description>
<![CDATA[ 
	今天看到07年下半年下午网工的试卷里面有一题关于这个负载平衡。所以上网恶补一下。呵呵。所以找了这篇有实战性的收藏起来以备日后用。。。呵呵<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NLB群集允许用户把两台或更多的服务器结合起来使用，在客户端看起来就像是一台服务器。进入NLB群集的连接请求可以分解传送给两个或更多的NLB群集成员，这样用户可以添加越来越多的服务器(最多32台)，形成一个功能非常强大的FTP站点或Web站点<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;当把一台服务器(包括Web服务器、FTP服务器或者流媒体服务器等等)放入网络中之后，随着客户端数量的不断增加，人们往往需要功能更强大、处理速度更快的服务器。为了解决这个问题，如果将原有的服务器替换成功能更强大、处理速度更快的服务器显然并不是值得称道的办法。但是如果能把新服务器添加到原有服务器的处理能力基础上而不是替换它，这种方案毫无疑问更容易被用户接受。网络负载平衡(Network Load Balancing，NLB)群集的出现正好实现了这一目的。<br/><br/>　　一、网络负载平衡介绍<br/><br/>　　NLB群集最早出现在Windows 2000 Server的Advanced Server系统中，在Windows Server 2003的各个版本中均提供了此项功能。NLB群集允许用户把两台或更多的服务器结合起来使用，在客户端看起来就像是一台服务器。进入NLB群集的连接请求可以分解传送给两个或更多的NLB群集成员，这样用户可以添加越来越多的服务器(最多32台)，形成一个功能非常强大的FTP站点或Web站点。<br/><br/>　　在NLB群集中，每台服务器都会有一个属于自己的静态IP地址，但NLB群集中的所有服务器还有一个共同的IP地址—NLB群集地址。客户端可以通过这个IP地址连接到NLB群集，就像连接到其它IP地址一样。当有客户端请求连接到这个共享的IP地址时，NLB群集会将每个访问请求指派一个具体的群集成员。<br/><br/>　　尽管NLB群集是一种非常简洁的工具，但安装配置NLB群集必须满足很严格的要求，譬如首先要保证群集中服务器必须能够正常的单独运行。以安装配置两节点的NLB群集为例，这些条件简述如下：<br/><br/>　　(1)每个节点服务器必须拥有一个静态IP地址，另外还应该为NLB群集准备一个静态IP地址。<br/><br/>　　(2)NLB群集需要拥有一个DNS名称，且该DNS记录项应该与区群集IP地址建立了映射关系。<br/><br/>　　(3)每个节点服务器上应该安装完全相同的服务器软件(如IIS、终端服务器等网络服务)，以构成一个两节点的NLB群集。<br/><br/>　　在接下来的内容中将介绍如何安装配置一个较为简单的NLB群集—拥有两个节点的Web服务器群集。所要安装配置的服务器群集环境为：两台运行Windows Server 2003 Enterprise Edition的服务器，可以将其称为节点1和节点2。由于所有的NLB群集成员必须使用属于相同子网的静态IP地址，因此准备为节点1分配的静态IP地址为“10.115.223.1”，准备为节点2分配的静态IP地址为“10.1115.223.2”，为NLB群集分配的IP地址是10.115.223.10。对NLB和配置环境了解之后，现在就可以进行详细的操作了。二、设置静态IP地址与组件安装<br/><br/>　　NLB群集中的每一个节点拥有一个静态IP地址是安装配置NLB群集的首要且必要条件。我们首先为节点1进行配置。<br/><br/>　　在节点1服务器的桌面上右击“网上邻居”，打开“网络连接”窗口。然后右键单击“本地连接”图标，执行“属性”快捷命令，打开“本地连接 属性”对话框。<br/><br/>　　在“本地连接 属性”对话框中双击“Internet 协议(TCP/IP)”选项，打开“Internet 协议(TCP/IP) 属性”对话框。在常规选项卡中点选“使用下面的IP地址”单选框，并指定静态IP地址。本例使用IP地址为“10.115.223.1”，子网掩码为“255.255.254.0”，默认网关为“10.115.223.254”，DNS服务器地址为“10.115.223.1”(如图1)。<br/><br/><a href="http://www.kkong.net/attachment.php?fid=48" class="highslide" onclick="return hs.expand(this)"><img src="http://www.kkong.net/attachment.php?fid=48" class="insertimage" alt="Highslide JS" title="点击图片放大 www.kkong.net" border="0" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>　图1<br/>在Windows Server 2003中安装部署Web服务需要IIS 6.0的支持，但是在默认情况下IIS 6.0组件并没有被安装，因此手动安装IIS 6.0组件。<br/><br/>　　在“控制面板”中双击“添加或删除程序”图标，在打开的“添加或删除程序”对话框中单击“添加/删除Windows组件”按钮，打开“Windows组件向导”对话框。<br/><br/>　　在“组件”列表中找到并双击“应用程序服务器”复选框，在打开的“应用程序服务器”对话框中双击“Internet信息服务(IIS)”选项，打开“Internet信息服务(IIS)”对话框。在子组件列表中找到并勾选“万维网服务”复选框，依次单击“确定/确定/下一步”按钮开始安装。最后单击“完成”按钮结束安装过程(如图2)。<br/><a href="http://www.kkong.net/attachment.php?fid=49" class="highslide" onclick="return hs.expand(this)"><img src="http://www.kkong.net/attachment.php?fid=49" class="insertimage" alt="Highslide JS" title="点击图片放大 www.kkong.net" border="0" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>　图2<br/>　用同样的方法为节点2安装Web服务器组件。<br/>三、创建群集主机记录<br/><br/>　　在安装NLB群集之前建议先把DNS准备好，在本例中节点1同时也是网络中的DNS服务器。可以在节点1上为群集指派一个DNS名称，依次单击“开始/所有程序/管理工具/DNS”，打开“dnsmagt”窗口。<br/><br/>　　在左窗格中依次展开“ServerName/正向查找区域”目录。然后右击域名“cpcw.com”区域，执行“新建主机”快捷命令(如图3)。<br/><a href="http://www.kkong.net/attachment.php?fid=50" class="highslide" onclick="return hs.expand(this)"><img src="http://www.kkong.net/attachment.php?fid=50" class="insertimage" alt="Highslide JS" title="点击图片放大 www.kkong.net" border="0" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/>　　图3<br/><br/>　　在打开“新建主机”对话框 “名称”编辑框中键入一个自定义的群集名称(本例键入“Cluster”);在“IP地址”编辑框中键入准备该群集指派的静态IP地址(本例为“10.115.223.10”)。单击“添加主机”按钮，很快就会提示已经成功创建了主机记录(如图4)。<br/><br/>　　<a href="http://www.kkong.net/attachment.php?fid=51" class="highslide" onclick="return hs.expand(this)"><img src="http://www.kkong.net/attachment.php?fid=51" class="insertimage" alt="Highslide JS" title="点击图片放大 www.kkong.net" border="0" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/>　　图4<br/>四、在节点1上安装配置NLB<br/><br/>　　完成各项准备准备工作以后，就可以安装配置NLB群集了。对于两个节点而言，先在哪一个节点上安装配置NLB群集都是可以的。下面我们将在节点1上进行安装配置。<br/><br/>　　在节点1的桌面上右击“网上邻居”图标，打开“网络连接”窗口。然后右键单击“本地连接”图标，执行“属性”快捷命令，打开“本地连接 属性”对话框。<br/><br/>　　观察“此连接使用下列项目”列表可以发现，默认情况下并没有选中“网络负载平衡”复选框。勾选该复选框(如图5)，然后单击“属性”按钮，打开“网络负载平衡 属性”对话框。在“群集IP地址”区域，设置NLB群集IP地址为“10.115.223.10”，该地址供群集所有成员共享;子网掩码为“255.255.254.0”，该掩码应当跟所有节点的子网掩码保持一致;“完整Internet名”键入完整的NLB群集名称，该名称已经事先跟群集IP地址建立DNS映射关系。另外对于“群集操作模式”中提供的“单播”和“多播”模式，建议保持“单播”模式的选中状态。因为根据实际经验，“多播”模式并没有多大的用处，而且该模式常常会使一些路由器出现问题。另外如果用户比较倾向于使用远程控制的方式管理NLB群集，还可以选取“允许远程控制”复选框(如图6)。<br/><br/><a href="http://www.kkong.net/attachment.php?fid=52" class="highslide" onclick="return hs.expand(this)"><img src="http://www.kkong.net/attachment.php?fid=52" class="insertimage" alt="Highslide JS" title="点击图片放大 www.kkong.net" border="0" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>图5<br/><a href="http://www.kkong.net/attachment.php?fid=53" class="highslide" onclick="return hs.expand(this)"><img src="http://www.kkong.net/attachment.php?fid=53" class="insertimage" alt="Highslide JS" title="点击图片放大 www.kkong.net" border="0" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>图6<br/>小提示：用户应当在每个群集节点的“网络负载平衡 属性”对话框中设置完全相同的参数。<br/><br/>　　单击“主机参数”标签，在“主机参数”选项卡中可以为群集中的每个成员配置相同的群集参数。在“专用IP配置”中，需要填写本地服务器拥有的IP地址和子网掩码，而不能填写群集IP地址。另外还需要调整优先级的设置(各个节点的优先级应当各不相同)。设置完毕后依次单击“确定/确定”按钮返回“本地连接 属性”对话框。<br/><br/>五、将群集IP地址添加到节点1<br/><br/>　　设置完成网络负载平衡的属性，还需要将群集IP地址添加到节点1。在“本地连接 属性”对话框中双击“Internet协议(TCP/IP)”选项，打开“Internet协议(TCP/IP) 属性”对话框。然后单击“高级”按钮，打开“高级TCP/IP设置”对话框。<br/><br/>　　“IP设置”选项卡中单击“添加”按钮，为节点1添加第二个IP地址，该地址应该是群集IP地址，子网掩码应该跟事先的设置保持一致，本例为“255.255.254.0”。设置完毕依次单击“确定”按钮，并关闭“本地连接 属性”对话框(如图7)。<br/><a href="http://www.kkong.net/attachment.php?fid=54" class="highslide" onclick="return hs.expand(this)"><img src="http://www.kkong.net/attachment.php?fid=54" class="insertimage" alt="Highslide JS" title="点击图片放大 www.kkong.net" border="0" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>为了验证设置的正确性，建议执行“ipconfig /all”命令进行检查。在“命令提示符”窗口键入命令行“ipconfig /all”并回车，如果能够返回两组IP地址信息，则说明配置正确(如图8)。<br/><a href="http://www.kkong.net/attachment.php?fid=55" class="highslide" onclick="return hs.expand(this)"><img src="http://www.kkong.net/attachment.php?fid=55" class="insertimage" alt="Highslide JS" title="点击图片放大 www.kkong.net" border="0" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>图8<br/><br/>　　小提示：如果返回的信息包含诸如“0.0.0.0”之类的IP地址，则建议用户等待5分钟左右的时间再试一次，因为NLB群集需要大约5分钟左右的时间进行配置。<br/>六、配置节点2<br/><br/>　　在节点1上完成安装配置NLB群集的操作后，接着需要配置节点2。对于节点2的配置步骤跟节点1上的操作基本相同，综合而言，主要包括如下几个方面：<br/><br/>　　(1)为节点2设置静态IP地址，本例中为节点2分配的静态IP地址为“10.115.223.2”，子网掩码为“255.255.254.0”，默认网关为“10.115.223.254”，DNS服务器地址为“10.115.223.1”。<br/><br/>　　(2)安装Web服务组件，并配置Web服务。<br/><br/>　　(3)选取“网络负载平衡”选项，在“群集参数”对话框中设置跟节点1完全相同的参数，然后在“主机参数”选项卡中设置IP地址为“10.115.223.2”，子网掩码为“255.255.254.0”(如图9)。<br/><a href="http://www.kkong.net/attachment.php?fid=56" class="highslide" onclick="return hs.expand(this)"><img src="http://www.kkong.net/attachment.php?fid=56" class="insertimage" alt="Highslide JS" title="点击图片放大 www.kkong.net" border="0" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>图9<br/>(4)进入“高级TCP/IP设置”对话框，将群集IP地址作为第二个IP地址添加到节点2中。<br/><br/>　　小提示：关闭所有的对话框和属性页之后，NLB大约需要几分钟方可完成配置过程。通常情况下，在配置节点2的过程中可能会出现各种错误报告，譬如“TCP/IP配置错误”等信息，遇到这种情况不需要进行干预，系统会自行处理。<br/>、NLB群集验证管理及修复<br/><br/>　　现在可以在跟NLB群集处于同一个网段的任意计算机上进行群集的验证工作。打开IE浏览器，在地址栏分别键入每个节点的静态IP地址(也就是两个Web服务器的IP地址)并回车，这时用户会看到每台服务器的主页。键入群集IP地址并回车，用户会看到两台服务器的其中一份主页。这说明NLB群集配置成功，已经可以实现网络负载平衡了。<br/><br/>　　小提示：不要试图从一个NLB群集节点去ping另外的节点，因为NLB群集带来的负面效应就是虽然所有的群集成员都可以接受来自客户端的访问请求，但群集节点之间却不能彼此通信。<br/><br/>　　当NLB开始工作时，用户可以通过三个独立的工具对NLB进行管理，这三个工具分别是：“网络负载平衡 属性”对话框、“网络负载平衡管理器”和位于文件夹%SystemRoot%&#92;System32中的NLB.exe命令行工具。<br/><br/>　　其中通过“网络负载平衡 属性”对话框对NLB群集进行配置管理的操作在前文中关于安装配置NLB的内容已有相关讨论。使用“网络负载平衡管理器”可以在同一个界面使用多个群集(通过在“群集”菜单中执行“连接到现存的”命令来添加)，因此使用该工具进行管理是首选的方法。<br/><br/>　　依次单击“开始/所有程序/管理工具/网络负载平衡管理器”，可以打开“网络负载平衡管理器”窗口。遗憾的是，用户所连接到的群集和主机的名称不能在会话之间保留，因此每次启动“网络负载平衡管理器”时，左窗格中的群集列表均为空。不过用户可以将列表保存到一个文本文件中，并在以后启动该工具时加载这个文本文件。在“网络负载平衡管理器”窗口中依次执行“文件/保存主机列表/加载主机列表”命令来实现(如图10)。<br/><br/><a href="http://www.kkong.net/attachment.php?fid=57" class="highslide" onclick="return hs.expand(this)"><img src="http://www.kkong.net/attachment.php?fid=57" class="insertimage" alt="Highslide JS" title="点击图片放大 www.kkong.net" border="0" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>图10<br/>　另外与NLB群集的操作有关的事件被记录在“系统事件日志”中，当NLB发生故障以后，用户应当首先检查“系统事件日志”以确定是哪一个环节发生了故障。<br/><br/>　　其实网络负载平衡是企业网络中非常普遍的一项应用，合理应用可以不仅可以拿企业的网络设备重新焕发活力，更能够通过组合使原本性能较低的产品达到更高的性能，从而为用户提供科学称职的服务。<br/><br/><br/>Tags - <a href="http://www.kkong.net/tags/nlb%25E7%25BE%25A4%25E9%259B%2586/" rel="tag">nlb群集</a> , <a href="http://www.kkong.net/tags/%25E8%25B4%259F%25E8%25BD%25BD%25E5%25B9%25B3%25E8%25A1%25A12003%25E8%25AE%25BE%25E7%25BD%25AE/" rel="tag">负载平衡2003设置</a>
]]>
</description>
</item><item>
<link>http://www.kkong.net/post/79/</link>
<title><![CDATA[今天下载了个电子版网络工程师教程！]]></title> 
<author>admin &lt;admin@kkong.net&gt;</author>
<category><![CDATA[【工程日记】]]></category>
<pubDate>Fri, 19 Sep 2008 09:27:12 +0000</pubDate> 
<guid>http://www.kkong.net/post/79/</guid> 
<description>
<![CDATA[ 
	软考中级：<br/>以下文件要下载请用迅雷下载才行。这个是使用说明，请一起下载<a href="attachment.php?fid=47">点击这里下载文件</a><br/>网络工程师教程(第2版) 2007版 软考指定用书 高清PDF版<br/><a href="thunder://QUFmdHA6Ly8yMTAuNTEuMTgwLjI1Mi9iYnMvY29tcHV0ZXIvJUU3JUJEJTkxJUU3JUJCJTlDJUU1JUI3JUE1JUU3JUE4JThCJUU1JUI4JTg4JUU2JTk1JTk5JUU3JUE4JThCJTI4JUU3JUFDJUFDMiVFNyU4OSU4OCUyOTIwMDclRTclODklODglNUJ3d3cuVG9wU2FnZS5jb20lNUQuemlwWlo=">点击这里下载文件</a><br/>网络工程师教程 软考指定用书 高清PDF版<br/><a href="thunder://QUFmdHA6Ly8yMTAuNTEuMTgwLjI1Mi9iYnMvY29tcHV0ZXIvzfjC57mks8zKpr3Ms8xbd3d3LlRvcFNhZ2UuY29tXS56aXBaWg==">点击这里下载文件</a><br/>网络工程师考试同步辅导：计算机与网络知识篇 软考指定用书<br/><a href="thunder://QUFmdHA6Ly8yMTAuNTEuMTgwLjI1Mi9iYnMvY29tcHV0ZXIvJUU3JUJEJTkxJUU3JUJCJTlDJUU1JUI3JUE1JUU3JUE4JThCJUU1JUI4JTg4JUU4JTgwJTgzJUU4JUFGJTk1JUU1JTkwJThDJUU2JUFEJUE1JUU4JUJFJTg1JUU1JUFGJUJDJTI4JUU4JUFFJUExJUU3JUFFJTk3JUU2JTlDJUJBJUU0JUI4JThFJUU3JUJEJTkxJUU3JUJCJTlDJUU3JTlGJUE1JUU4JUFGJTg2JUU3JUFGJTg3JTI5JTVCd3d3LlRvcFNhZ2UuY29tJTVELnppcFpa">点击这里下载文件</a><br/>网络工程师考试同步辅导(网络系统设计与管理篇) 软考指定辅导用书(08.03.25添加)<br/><a href="thunder://QUFmdHA6Ly82MS4xMzUuMjAzLjExL3VwbG9hZC9jb21wdXRlci8lRTclQkQlOTElRTclQkIlOUMlRTUlQjclQTUlRTclQTglOEIlRTUlQjglODglRTglODAlODMlRTglQUYlOTUlRTUlOTAlOEMlRTYlQUQlQTUlRTglQkUlODUlRTUlQUYlQkMlMjglRTclQkQlOTElRTclQkIlOUMlRTclQjMlQkIlRTclQkIlOUYlRTglQUUlQkUlRTglQUUlQTElRTQlQjglOEUlRTclQUUlQTElRTclOTAlODYlRTclQUYlODclMjklNUJ3d3cuVG9wU2FnZS5jb20lNUQuemlwWlo=">点击这里下载文件</a><br/>Tags - <a href="http://www.kkong.net/tags/%25E7%25BD%2591%25E7%25BB%259C%25E5%25B7%25A5%25E7%25A8%258B%25E5%25B8%2588%25E7%2594%25B5%25E5%25AD%2590%25E7%2589%2588/" rel="tag">网络工程师电子版</a> , <a href="http://www.kkong.net/tags/%25E8%25BD%25AF%25E8%2580%2583%25E6%258C%2587%25E5%25AE%259A%25E7%2594%25A8%25E4%25B9%25A6/" rel="tag">软考指定用书</a> , <a href="http://www.kkong.net/tags/%25E9%25AB%2598%25E6%25B8%2585pdf%25E7%2589%2588/" rel="tag">高清pdf版</a>
]]>
</description>
</item><item>
<link>http://www.kkong.net/post/78/</link>
<title><![CDATA[Windows 2003网络负载平衡全攻略 ]]></title> 
<author>admin &lt;admin@kkong.net&gt;</author>
<category><![CDATA[【工程日记】]]></category>
<pubDate>Fri, 19 Sep 2008 05:37:33 +0000</pubDate> 
<guid>http://www.kkong.net/post/78/</guid> 
<description>
<![CDATA[ 
	第一页<br/>　Windows的负载平衡主要是依靠组建网络负载平衡群集来实现的，支持WEB、FTP、Proxy、VPN、Windows Media、Telnet等服务器的负载平衡。<br/><br/>　　负载平衡的原理<br/>　　NLB其实就是提供相同服务的一系列服务器同时监听服务请求，并允许在同一时间运行多个应用程序实例。NLB的核心是位于网络适配器驱动和网络层之间的WLBS.SYS的筛选器驱动。NLB把每个IP数据包分发到所有群集节点，并根据数据包的源地址、目标地址、传输层协议、端口、群集的配置参数以及算法做出由某个节点处理而其他节点丢弃此数据包的统一决定。<br/><br/>　　负载平衡的概念<br/>　　配置负载平衡之前，需要理解几个重点概念。<br/>　　群集IP 地址和子网掩码:群集的虚拟IP地址，是表现在客户面前的“外部”地址。<br/>　　专用IP 配置和子网掩码:群集各节点的本地IP地址，唯一标识群集的各节点。<br/>　　完整Internet名:能够访问此群集的DNS名称，比如cluster.it.com.cn。<br/>　　群集操作模式:在方案的选择中详细讲述。<br/>　　端口规则:windows2003中新加的功能，细化了控制微粒，可以阻止某节点特定应用程序的流量，而在windows2000中这是不能实现的。<br/>　　优先级(单一主机标识符):范围在1-32之间(32是一个群集的最大节点数)。此值决定如何处理没有包含在任何为群集定义的端口规则中的传入网络通讯。具有最高优先级的主机(优先值最小)将处理所有这种通讯。<br/><br/>第二页<br/><br/> Windows2003负载平衡的设计要求<br/>　操作系统的要求 在Windows2003的所有版本系统中，NLB都是可用的。群集可以兼容以前的windows服务器操作系统(比如2000,NT4.0)。<br/>　　网络结构的要求<br/>　　NLB可以在连接到FDDI(光纤分布式数据接口)，以太网，吉比特以太网的服务器上运行，但不能在Token Ring(令牌环)网络上运行。<br/>　　网卡的要求<br/>　　所有的网络适配器必须在Windows2003的硬件兼容列表中。一般情况下，服务器的网卡都会符合要求。<br/>　　交换机和路由器的要求<br/>　　当计划使用VLAN来防止交换数据洪水时，必须确保交换机支持VLAN设置;当使用多播时，部分路由器不支持把单播IP地址映射为一个多播MAC地址，需要手工设置。<br/>&nbsp;&nbsp;　通讯协议的要求<br/>　　绑定到群集的网络适配器只能安装TCP/IP协议，可以必须静态分配，不支持DHCP。<br/>　　应用程序的要求<br/>　　首先必须是TCP或UDP通讯，而且确定当前应用程序或服务必须支持NLB。<br/>　　负载平衡的设计<br/>　　由于网络负载平衡不能根据CPU和内存利用率来分配流量，而且性能并不是随着节点数量的增加而线性变化的(因为随着规模的增大，由此产生的网络开销，CPU开销也随着增大)，，所以正确的设计和规划负载平衡是至关重要的。<br/><br/>　　群集的实现需要群集内部的通讯(比如心跳信息和聚合通讯)以及管理和内容复制的数据传输。这部分通讯占用了网络的可用带宽。为了克服单网卡的局限性，可以使用双网卡，一个用于负载客户端的通讯，另一个用于传输内部通讯，管理和内容的数据。<br/>　　群集操作模式的选择是设计的重要一步。单播模式是指各节点的网络适配器被重新指定了一个虚拟MAC(由02-bf和群集IP地址组成确保此MAC的唯一性)。由于所有绑定群集的网络适配器的MAC都相同，所以在单网卡的情况下，各节点之间是不能通讯的，这也是推荐双网卡配置的原因之一。为了避免交换机的数据洪水，应该结合VLAN使用。<br/>　　多播模式下，网络适配器在保留原有的MAC地址不变的同时，还分配了一个各节点共享的多播MAC地址。所以，即使单网卡的节点之间也可以正常通讯。但单网卡的带宽占用、竞争网络适配器等缺点仍然存在。<br/>　　此外，部分路由器(特别是Cisco产品)还不支持单播IP地址和多播MAC的ARP映射的自动创建，需要手工配置。IGMP多播(只有在选中多播时，才可以选择此项)，在继承多播的优点之外，NLB每隔60秒发送一次IGMP信息，使多播数据包只能发送到这个正确的交换机端口，避免了交换机数据洪水的产生。<br/>　　端口规则是windows2003的新特性。NLB提供3种筛选模式，可以针对端口规则采取禁止、多主机负载平衡和单主机的特殊处理。其中，多主机筛选模式提供了真正意义上的负载平衡，并且可以根据节点的实际处理能力进行负载量的分配。<br/>　　单个群集的最大节点数为32，如果还不能满足需要，可以使用Round-Robin Domain Name Service把请求映射到多个群集上(但也因此引入了单点故障DNS，除非DNS冗余)。<br/>第三页<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;负载平衡的安装与配置<br/>　　Windows2003引入了网络负载平衡管理器(控制面板->管理工具)，使负载平衡的安装和配置更加简单。管理器可以容易的实现群集的建立、删除，节点的添加、 删除、修改以及故障的检测。<br/>　　运行网络负载平衡管理器，选择 群集 -> 新建 ，弹出“群集参数”对话框，按需要配置。<br/>　　下一步，系统会提示添加附加群集IP，如果不需要可直接按“下一步”进行端口配置。以web群集配置为例，其典型端口配置如下图所示：如果会话状态不保存在该群集上，则相似性选择无，否则选择单一或者类C。<br/>　　之后，指定一台主机连接，并选择一个可用的网络接口，进行主机参数的设置：<br/>　　点击“完成”，管理器会自动连接到主机上进行相关配置来创建一个新的群集。可以双击日志项目，了解NLB管理器都进行了什么配置。<br/>　　虽然，使用NLB管理器是一个微软推荐的方法，但使用NLB.EXE命令行仍然有它独特的优点：反应快，便于批处理。因此，掌握NLB命令也是快速部署的需要。<br/><br/>　　负载平衡的安全考虑<br/>　　群集的远程管理特性允许管理员在远程计算机上使用NLB.EXE管理群集。但启用此功能后，会带来安全风险，比如密码泄露和DOS (拒绝服务攻击)。如果启用，请确保密码足够复杂，并且根据需要在防火墙上进行访问策略的配置(比如封锁UDP端口1717和2504)。<br/><br/>　　总结<br/>　　负载平衡负载平衡是一项综合的技术，在实施过程中往往伴随着其他技术的应用。比如网络负载平衡群集和服务器群集的结合，甚至与存储区域网络或网络附加存储相关联都是一个不错的主意。<br/><br/>Tags - <a href="http://www.kkong.net/tags/%25E8%25B4%259F%25E8%25BD%25BD%25E5%25B9%25B3%25E8%25A1%25A1/" rel="tag">负载平衡</a> , <a href="http://www.kkong.net/tags/2003/" rel="tag">2003</a>
]]>
</description>
</item><item>
<link>http://www.kkong.net/post/67/</link>
<title><![CDATA[原码、反码和补码的知识转]]></title> 
<author>admin &lt;admin@kkong.net&gt;</author>
<category><![CDATA[【工程日记】]]></category>
<pubDate>Sat, 13 Sep 2008 13:16:24 +0000</pubDate> 
<guid>http://www.kkong.net/post/67/</guid> 
<description>
<![CDATA[ 
	大家都知道数据在计算机中都是按字节来储存了，1个字节等于8位（1Byte=8bit），而计算机只能识别0和1这两个数，所以根据排列，1个字节能代表256种不同的信息，即28（0和1两种可能，8位排列），比如定义一个字节大小的无符号整数（unsigned char），那么它能表示的是0～255（0~28-1）这些数，一共是256个数，因为，前面说了，一个字节只能表示256种不同的信息。别停下，还是一个字节的无符号整数，我们来进一步剖析它，0是这些数中最小的一个，我们先假设它在计算机内部就用8位二进制表示为00000000（从理论上来说也可以表示成其他不同的二进制码，只要这256个数每个数对应的二进制码都不相同就可以了），再假设1表示为00000001，2表示为00000010，3表示为00000011，依次类推，那么最大的那个数255在8位二进制中就表示为最大的数11111111，然后，我们把这些二进制码换算成十进制看看，会发现刚好和我们假设的数是相同的，而事实上，在计算机中，无符号的整数就是按这个原理来储存的，所以告诉你一个无符号的整数的二进制码，你就可以知道这个数是多少，而且知道在计算机中，这个数本身就是以这个二进制码来储存的。比如我给你一个2个字节大小的二进制码，首先声明它表示的是无符号的整数：00000000 00000010，我们把前面的0省略，换算一下，它表示的也是数值2，和前面不同的是，它占了2个字节的内存。不同的类型占的内存空间不同，如在我的电脑中char是1个字节，int是4个字节，long是8个字节（你的可能不同，这取决于不同的计算机设置），它们的不同之处仅仅是内存大的能表示的不同的信息多些，也就是能表示的数范围更大些（unsigned int能表示的范围是0~28*4-1），至于怎么算，其实都是一样的，直接把二进制与十进制相互转换，二进制就是它在计算机中的样子，十进制就是我们所表示的数。啊哈，原来这些都是可以计算的呀，我曾经还以为不同的计算机储存的原理是不同的，取决于商家的喜好呢，呵呵。说了这么多怎么还没有提到原码、反码和补码呀，别急别急，心急吃不了热豆腐，呵呵，因为无符号的整数根本就没有原码、反码和补码。（啊，那不是被欺骗了，5555````我告诉妈妈去，哥哥欺负我）都说了别急嘛，你就不想想我说了这么半天的无符号整数，那么有符号的整数怎么办啊？<br/><br/>　　呵呵，对，只有有符号的整数才有原码、反码和补码的！其他的类型一概没有。虽然我们也可以用二进制中最小的数去对应最小的负数，最大的也相对应，但是那样不科学，下面来说说科学的方法。还是说一个字节的整数，不过这次是有符号的啦，1个字节它不管怎么样还是只能表示256个数，因为有符号所以我们就把它表示成范围：-128-127。它在计算机中是怎么储存的呢？可以这样理解，用最高位表示符号位，如果是0表示正数，如果是1表示负数，剩下的7位用来储存数的绝对值的话，能表示27个数的绝对值，再考虑正负两种情况，27*2还是256个数。首先定义0在计算机中储存为00000000，对于正数我们依然可以像无符号数那样换算，从00000001到01111111依次表示1到127。那么这些数对应的二进制码就是这些数的原码。到这里很多人就会想，那负数是不是从10000001到11111111依次表示-1到-127，那你发现没有，如果这样的话那么一共就只有255个数了，因为10000000的情况没有考虑在内。实际上，10000000在计算机中表示最小的负整数，就是这里的-128，而且实际上并不是从10000001到11111111依次表示-1到-127，而是刚好相反的，从10000001到11111111依次表示-127到-1。负整数在计算机中是以补码形式储存的，补码是怎么样表示的呢，这里还要引入另一个概念——反码，所谓反码就是把负数的原码除符号位（负数的原码除符号位和它的绝对值所对应的原码相同，简单的说就是绝对值相同的数原码相同）各个位按位取反，是1就换成0，是0就换成1，如-1的原码是0000001（注意这里只有7位，不看符号位，我这里所说的负数符号位都是1），和1的原码相同，那么-1的反码就是1111110（这也是7位，后面加上了符号位都是8位了），而补码就是在反码的基础上加1，即-1的补码是11111110+1=11111111，因此我们可以算出-1在计算机中是按11111111储存的。总结一下，计算机储存有符号的整数时，是用该整数的补码进行储存的，0的原码、补码都是0，正数的原码、补码可以特殊理解为相同，负数的补码是它的反码加1。下面再多举几个例子，来帮助大家理解！<br/><br/>//--- 2008年6月23日补充：<br/>很久没有来这里了，如果不是看到有人给我私人留言被转发到我以前的老邮箱去了，我可能还不知道什么时候才发现那个“-1的反码就是11111110”的问题，看了N多批评后，觉得实在对不起各位，我已经在上面更正了，改成了7位，其实当时也是这么想的，为什么我要把符号位单独拿出来先不考虑，因为。。-128。。呵呵，自己想想为什么吧。。这个帖子好像改过几次了吧，而且当时是边想边写，如果有语言组织好的（我看到很多大学生来到了这里），归纳一下吧，只希望也和我一样，就像对一个完全不懂的人讲解，因为我深知很多想学技术通常就是被拦在了最初的门槛，其实起步了后面都不是大事，谢谢了，也算是为后来人服务吧。<br/>//---<br/><br/>十进制　→　二进制　　（怎么算？要是不知道看计算机基础的书去）<br/>47　　　→　101111<br/><br/>有符号的整数　　　　原码　　　　反码　　　　补码<br/>　　47　　　　　　00101111　　00101111　　00101111（正数补码和原码、反码相同，不能从字面理解）<br/>　－47　　　　　　10101111　　11010000　　11010001（负数补码是在反码上加1）<br/>http://www.cnitblog.com/mantou/archive/2008/09/12/1239.html <br/>Tags - <a href="http://www.kkong.net/tags/%25E5%258E%259F%25E7%25A0%2581%25E5%258F%258D%25E7%25A0%2581/" rel="tag">原码反码</a> , <a href="http://www.kkong.net/tags/%25E8%25A1%25A5%25E7%25A0%2581/" rel="tag">补码</a> , <a href="http://www.kkong.net/tags/%25E7%259F%25A5%25E8%25AF%2586/" rel="tag">知识</a>
]]>
</description>
</item>
</channel>
</rss>