logo
¡¤ÍøÕ¾¹«¸æ ¡¤FAQ ¡¤ÔÚÏß·þÎñ ¡¤ ÉêÇë¼ÓÃË ¡¤ ¼ÓÃ˰¸Àý
ÁªÃËÊ×Ò³ | CDN½éÉÜ | CDN¼¼Êõ | ÁªÃ˶¯Ì¬ | ÒµÄÚ×ÊѶ | CDNÂÛ̳ | ¹ÜÀíÖÐÐÄ
 
LVS¼¯ÈºÏµÍ³ÍøÂçºËÐÄÔ­Àí·ÖÎö--CDNÁªÃË-ÖÂÁ¦ÓÚÖйúCDNµÄ·¢Õ¹£¬ÆÕ¼°CDN£¡i join i enjoy ! ¹²½¨ÂÌÉ«ÁªÃË£¡
 
 
 Ïà¹ØÄÚÈÝ£º
· ´ó¹æÄ£ÍøÕ¾ÐÔÄÜÓÅ»¯·½·¨...
· SQUID refresh_patternÏ....
· Á÷ýÌåÓëCDN³ÐÔØ¼¼Êõ
· Ó¦ÓÃÔÚIPTVÖеÄCDN¼¼Êõ
· ÓÎÏ·ÍøÕ¾CDN½â¾ö·½°¸
· LVS¼¯ÈºÏµÍ³ÍøÂçºËÐÄÔ­À....
· °²×°squidÏêϸ½Ì³Ì(wind...
· squid 2.6Ö®Web·´Ïò´úÀí...
· linux ÖÐÎÄÏÔʾÂÒÂë½â¾ö...
· squid-2.5ËÄÄêʱ¼ä³öµ½S...
 
LVS¼¯ÈºÏµÍ³ÍøÂçºËÐÄÔ­Àí·ÖÎö
  ¸üÐÂÈÕÆÚ£º2006-07-31

£ InternetµÄ¿ìËÙÔö³¤Ê¹¶àýÌåÍøÂç·þÎñÆ÷Ãæ¶ÔµÄ·ÃÎÊÊýÁ¿¿ìËÙÔö¼Ó£¬·þÎñÆ÷ÐèÒª¾ß±¸Ìṩ´óÁ¿²¢·¢·ÃÎÊ·þÎñµÄÄÜÁ¦£¬Òò´Ë¶ÔÓÚ´ó¸ºÔصķþÎñÆ÷À´½²£¬CPU¡¢I/O´¦ÀíÄÜÁ¦ºÜ¿ì»á³ÉΪƿ¾±¡£ÓÉÓÚµ¥Ì¨·þÎñÆ÷µÄÐÔÄÜ×ÜÊÇÓÐÏ޵쬼òµ¥µÄÌá¸ßÓ²¼þÐÔÄܲ¢²»ÄÜÕæÕý½â¾öÕâ¸öÎÊÌ⡣Ϊ´Ë£¬±ØÐë²ÉÓöà·þÎñÆ÷ºÍ¸ºÔؾùºâ¼¼Êõ²ÅÄÜÂú×ã´óÁ¿²¢·¢·ÃÎʵÄÐèÒª¡£Linux ÐéÄâ·þÎñÆ÷(Linux Virtual Servers,LVS) ʹÓøºÔؾùºâ¼¼Êõ½«¶ą̀·þÎñÆ÷×é³ÉÒ»¸öÐéÄâ·þÎñÆ÷¡£ËüΪÊÊÓ¦¿ìËÙÔö³¤µÄÍøÂç·ÃÎÊÐèÇóÌṩÁËÒ»¸ö¸ºÔØÄÜÁ¦Ò×ÓÚÀ©Õ¹£¬¶ø¼Û¸ñµÍÁ®µÄ½â¾ö·½°¸¡£
¡¡¡¡
¡¡¡¡1.LVS½á¹¹Ó빤×÷Ô­Àí
¡¡¡¡
¡¡¡¡£ £ LVSµÄ½á¹¹Èçͼ1Ëùʾ£¬ËüÓÉǰ¶ËµÄ¸ºÔؾùºâÆ÷(Load Balancer£¬LB)ºÍºó¶ËµÄÕæÊµ·þÎñÆ÷(Real Server£¬RS)Ⱥ×é³É¡£RS¼ä¿Éͨ¹ý¾ÖÓòÍø»ò¹ãÓòÍøÁ¬½Ó¡£LVSµÄÕâÖֽṹ¶ÔÓû§ÊÇ͸Ã÷µÄ£¬Óû§Ö»ÄÜ¿´¼ûһ̨×÷ΪLBµÄÐéÄâ·þÎñÆ÷(Virtual Server)£¬¶ø¿´²»µ½Ìṩ·þÎñµÄRSȺ¡£
¡¡¡¡
¡¡¡¡Èçͼ1Ëùʾ
¡¡¡¡£ £ µ±Óû§µÄÇëÇó·¢ÍùÐéÄâ·þÎñÆ÷£¬LB¸ù¾ÝÉ趨µÄ°üת·¢²ßÂԺ͸ºÔؾùºâµ÷¶ÈËã·¨½«Óû§ÇëÇóת·¢¸øRS¡£RSÔÙ½«Óû§ÇëÇó½á¹û·µ»Ø¸øÓû§¡£Í¬ÇëÇó°üÒ»Ñù£¬Ó¦´ð°üµÄ·µ»Ø·½Ê½Ò²Óë°üת·¢²ßÂÔÓйء£
¡¡¡¡
¡¡¡¡£ £ LVSµÄ°üת·¢²ßÂÔÓÐÈýÖÖ£º
¡¡¡¡
¡¡¡¡NAT (Network Address Translation)ģʽ¡£LBÊÕµ½Óû§ÇëÇó°üºó£¬LB½«ÇëÇó°üÖÐÐéÄâ·þÎñÆ÷µÄIPµØÖ·×ª»»ÎªÄ³¸öÑ¡¶¨RSµÄIPµØÖ·£¬×ª·¢¸øRS£»RS½«Ó¦´ð°ü·¢¸øLB£¬LB½«Ó¦´ð°üÖÐRSµÄIPתΪÐéÄâ·þÎñÆ÷µÄIPµØÖ·£¬»ØË͸øÓû§¡£
¡¡¡¡IPËíµÀ (IP Tunneling)ģʽ¡£LBÊÕµ½Óû§ÇëÇó°üºó£¬¸ù¾ÝIPËíµÀЭÒé·â×°¸Ã°ü£¬È»ºó´«¸øÄ³¸öÑ¡¶¨µÄRS£»RS½â³öÇëÇóÐÅÏ¢£¬Ö±½Ó½«Ó¦´ðÄÚÈÝ´«¸øÓû§¡£´ËʱҪÇóRSºÍLB¶¼ÒªÖ§³ÖIPËíµÀЭÒé¡£
¡¡¡¡DR(Direct Routing)ģʽ¡£LBÊÕµ½ÇëÇó°üºó£¬½«ÇëÇó°üÖÐÄ¿±êMACµØÖ·×ª»»ÎªÄ³¸öÑ¡¶¨RSµÄMACµØÖ·ºó½«°üת·¢³öÈ¥£¬RSÊÕµ½ÇëÇó°üºó ,¿ÉÖ±½Ó½«Ó¦´ðÄÚÈÝ´«¸øÓû§¡£´ËʱҪÇóLBºÍËùÓÐRS¶¼±ØÐëÔÚÒ»¸öÎïÀí¶ÎÄÚ,ÇÒLBÓëRSȺ¹²ÏíÒ»¸öÐéÄâIP¡£
¡¡¡¡2¡¢IPVSÈí¼þ½á¹¹ÓëʵÏÖ
¡¡¡¡
¡¡¡¡£ £ LVSÈí¼þµÄºËÐÄÊÇÔËÐÐÔÚLBÉϵÄIPVS£¬ËüʹÓûùÓÚIP²ãµÄ¸ºÔؾùºâ·½·¨¡£IPVSµÄ×ÜÌå½á¹¹Èçͼ2Ëùʾ£¬ËüÖ÷ÒªÓÉIP°ü´¦Àí¡¢¸ºÔؾùºâËã·¨¡¢ÏµÍ³ÅäÖÃÓë¹ÜÀíÈý¸öÄ£¿é¼°ÐéÄâ·þÎñÆ÷ÓëÕæÊµ·þÎñÆ÷Á´±í×é³É¡£
¡¡¡¡
¡¡¡¡Èçͼ2Ëùʾ
¡¡¡¡£ £ 2.1 LVS¶Ô IP°üµÄ´¦Àíģʽ
¡¡¡¡
¡¡¡¡£ £ IP°ü´¦ÀíÓÃLinux 2.4Äں˵ÄNetfilter¿ò¼ÜÍê³É¡£Ò»¸öÊý¾Ý°üͨ¹ýNetfilter¿ò¼ÜµÄ¹ý³ÌÈçͼËùʾ£º
¡¡¡¡
¡¡¡¡£ £ Í¨Ë×µÄ˵£¬netfilterµÄ¼Ü¹¹¾ÍÊÇÔÚÕû¸öÍøÂçÁ÷³ÌµÄÈô¸ÉλÖ÷ÅÖÃÁËһЩ¼ì²âµã£¨HOOK£©£¬¶øÔÚÿ¸ö¼ì²âµãÉÏÉϵǼÇÁËһЩ´¦Àíº¯Êý½øÐд¦Àí£¨Èç°ü¹ýÂË£¬NATµÈ£¬ÉõÖÁ¿ÉÒÔÊÇÓû§×Ô¶¨ÒåµÄ¹¦ÄÜ£©¡£
¡¡¡¡
¡¡¡¡£ £ IP²ãµÄÎå¸öHOOKµãµÄλÖÃÈçÏÂͼËùʾ£¨copy from £© £º
¡¡¡¡
¡¡¡¡Èçͼ3Ëùʾ
¡¡¡¡
¡¡¡¡NF_IP_PRE_ROUTING£º¸Õ¸Õ½øÈëÍøÂç²ãµÄÊý¾Ý°üͨ¹ý´Ëµã£¨¸Õ¸Õ½øÐÐÍê°æ±¾ºÅ£¬Ð£ÑéºÍµÈ¼ì²â£©£¬Ô´µØÖ·×ª»»ÔÚ´Ëµã½øÐУ»
¡¡¡¡NF_IP_LOCAL_IN£º¾­Â·ÓɲéÕÒºó£¬ËÍÍù±¾»úµÄͨ¹ý´Ë¼ì²éµã,INPUT°ü¹ýÂËÔÚ´Ëµã½øÐУ»
¡¡¡¡NF_IP_FORWARD£ºÒª×ª·¢µÄ°üͨ¹ý´Ë¼ì²âµã,FORWORD°ü¹ýÂËÔÚ´Ëµã½øÐУ»
¡¡¡¡NF_IP_LOCAL_OUT£º±¾»ú½ø³Ì·¢³öµÄ°üͨ¹ý´Ë¼ì²âµã£¬OUTPUT°ü¹ýÂËÔÚ´Ëµã½øÐУ»
¡¡¡¡NF_IP_POST_ROUTING£ºËùÓÐÂíÉϱãҪͨ¹ýÍøÂçÉ豸³öÈ¥µÄ°üͨ¹ý´Ë¼ì²âµã£¬ÄÚÖõÄÄ¿µÄµØÖ·×ª»»¹¦ÄÜ£¨°üÀ¨µØÖ·Î±×°£©ÔÚ´Ëµã½øÐС£
¡¡¡¡
¡¡¡¡£ £ ÔÚIP²ã´úÂëÖУ¬ÓÐһЩ´øÓÐNF_HOOKºêµÄÓï¾ä£¬ÈçIPµÄת·¢º¯ÊýÖÐÓУº
¡¡¡¡
¡¡¡¡
¡¡¡¡<-ipforward.c ip_forward()->
¡¡¡¡NF_HOOK(PF_INET, NF_IP_FORWARD, skb, skb->dev, dev2,ip_forward_finish);
¡¡¡¡//ÆäÖÐNF_HOOKºêµÄ¶¨Òå»ù±¾ÈçÏ£º
¡¡¡¡
¡¡¡¡<-/include/linux/netfilter.h->
¡¡¡¡
¡¡¡¡#ifdef CONFIG_NETFILTER
¡¡¡¡#define NF_HOOK(pf, hook, skb, indev, outdev, okfn)
¡¡¡¡(list_empty(&nf_hooks[(pf)][(hook)])
¡¡¡¡? (okfn)(skb)
¡¡¡¡: nf_hook_slow((pf), (hook), (skb), (indev), (outdev), (okfn)))
¡¡¡¡#else /* !CONFIG_NETFILTER */
¡¡¡¡#define NF_HOOK(pf, hook, skb, indev, outdev, okfn) (okfn)(skb)
¡¡¡¡#endif /*CONFIG_NETFILTER*/
¡¡¡¡
¡¡¡¡
¡¡¡¡
¡¡¡¡£ £ Èç¹ûÔÚ±àÒëÄÚºËʱûÓÐÅäÖÃnetfilterʱ£¬¾ÍÏ൱ÓÚµ÷ÓÃ×îºóÒ»¸ö²ÎÊý£¬´ËÀýÖм´Ö´ÐÐip_forward_finishº¯Êý£»·ñÔò½øÈëHOOKµã£¬Ö´ÐÐͨ¹ýnf_register_hook£¨£©µÇ¼ÇµÄ¹¦ÄÜ£¨Õâ¾ä»°±í´ïµÄ¿ÉÄܱȽϺ¬ºý£¬Êµ¼ÊÊǽøÈënf_hook_slow£¨£©º¯Êý£¬ÔÙÓÉËüÖ´ÐеǼǵĺ¯Êý£©¡£
¡¡¡¡
¡¡¡¡£ £ NF_HOOKºêµÄ²ÎÊý·Ö±ðΪ£º
¡¡¡¡
¡¡¡¡
¡¡¡¡pf£ºÐ­Òé×åÃû£¬netfilter¼Ü¹¹Í¬Ñù¿ÉÒÔÓÃÓÚIP²ãÖ®Í⣬Òò´ËÕâ¸ö±äÁ¿»¹¿ÉÒÔÓÐÖîÈçPF_INET6£¬PF_DECnetµÈÃû×Ö¡£
¡¡¡¡hook£ºHOOKµãµÄÃû×Ö£¬¶ÔÓÚIP²ã£¬¾ÍÊÇÈ¡ÉÏÃæµÄÎå¸öÖµ£»
¡¡¡¡skb£º¹ËÃû˼Òå
¡¡¡¡indev£º½øÀ´µÄÉ豸£¬ÒÔstruct net_device½á¹¹±íʾ£»
¡¡¡¡outdev£º³öÈ¥µÄÉ豸£¬ÒÔstruct net_device½á¹¹±íʾ£»
¡¡¡¡okfn:ÊǸöº¯ÊýÖ¸Õ룬µ±ËùÓеĸÃHOOKµãµÄËùÓеǼǺ¯Êýµ÷ÓÃÍêºó£¬×ª¶ø×ß´ËÁ÷³Ì¡£
¡¡¡¡
¡¡¡¡£ £ ÕâЩµãÊÇÒѾ­ÔÚÄÚºËÖж¨ÒåºÃµÄ£¬³ý·ÇÄãÊÇÕⲿ·ÖÄں˴úÂëµÄά»¤Õߣ¬·ñÔòÎÞȨÔö¼Ó»òÐ޸쬶øÔڴ˼ì²âµã½øÐеĴ¦Àí£¬Ôò¿ÉÓÉÓû§Ö¸¶¨¡£Ïñpacket filter,NAT,connection trackÕâЩ¹¦ÄÜ£¬Ò²ÊÇÒÔÕâÖÖ·½Ê½ÌṩµÄ¡£ÕýÈçnetfilterµÄµ±³õµÄÉè¼ÆÄ¿±ê£­£­Ìṩһ¸öÍêÉÆÁé»îµÄ¿ò¼Ü£¬ÎªÀ©Õ¹¹¦ÄÜÌṩ·½±ã¡£
¡¡¡¡
¡¡¡¡£ £ Èç¹ûÎÒÃÇÏë¼ÓÈë×Ô¼ºµÄ´úÂë,±ãÒªÓÃnf_register_hookº¯Êý£¬Æäº¯ÊýÔ­ÐÍΪ£º
¡¡¡¡
¡¡¡¡
¡¡¡¡int nf_register_hook(struct nf_hook_ops *reg)
¡¡¡¡struct nf_hook_ops£º//½á¹¹
¡¡¡¡struct nf_hook_ops
¡¡¡¡{
¡¡¡¡struct list_head list;
¡¡¡¡/* User fills in from here down. */
¡¡¡¡nf_hookfn *hook;
¡¡¡¡int pf;
¡¡¡¡int hooknum;
¡¡¡¡/* Hooks are ordered in ascending priority. */
¡¡¡¡int priority;
¡¡¡¡};
¡¡¡¡
¡¡¡¡
¡¡¡¡
¡¡¡¡£ £ Æäʵ£¬ÀàËÆLVSµÄ×ö·¨¾ÍÊÇÉú³ÉÒ»¸östruct nf_hook_ops½á¹¹µÄʵÀý£¬²¢ÓÃnf_register_hook½«ÆäHOOKÉÏ¡£ÆäÖÐlistÏîÒª³õʼ»¯Îª{NULL,NULL}£»ÓÉÓÚÒ»°ãÔÚIP²ã¹¤×÷£¬pf×ÜÊÇPF_INET£»hooknum¾ÍÊÇHOOKµã;Ò»¸öHOOKµã¿ÉÄܹҶà¸ö´¦Àíº¯Êý£¬Ë­ÏÈË­ºó£¬±ãÒª¿´ÓÅÏȼ¶£¬¼´priorityµÄÖ¸¶¨ÁË¡£netfilter_ipv4.hÖÐÓÃÒ»¸öö¾ÙÀàÐÍÖ¸¶¨ÁËÄÚÖõĴ¦Àíº¯ÊýµÄÓÅÏȼ¶£º
¡¡¡¡
¡¡¡¡
¡¡¡¡enum nf_ip_hook_priorities {
¡¡¡¡NF_IP_PRI_FIRST = INT_MIN,
¡¡¡¡NF_IP_PRI_CONNTRACK = -200,
¡¡¡¡NF_IP_PRI_MANGLE = -150,
¡¡¡¡NF_IP_PRI_NAT_DST = -100,
¡¡¡¡NF_IP_PRI_FILTER = 0,
¡¡¡¡NF_IP_PRI_NAT_SRC = 100,
¡¡¡¡NF_IP_PRI_LAST = INT_MAX,
¡¡¡¡};
¡¡¡¡
¡¡¡¡
¡¡¡¡
¡¡¡¡£ £ hookÊÇÌṩµÄ´¦Àíº¯Êý£¬Ò²¾ÍÊÇÎÒÃǵÄÖ÷Òª¹¤×÷£¬ÆäÔ­ÐÍΪ£º
¡¡¡¡
¡¡¡¡
¡¡¡¡unsigned int nf_hookfn(unsigned int hooknum,
¡¡¡¡struct sk_buff **skb,
¡¡¡¡const struct net_device *in,
¡¡¡¡const struct net_device *out,
¡¡¡¡int (*okfn)(struct sk_buff *));
¡¡¡¡
¡¡¡¡
¡¡¡¡
¡¡¡¡£ £ ËüµÄÎå¸ö²ÎÊý½«ÓÉNFHOOKºê´«½øÈ¥¡£
¡¡¡¡
¡¡¡¡£ £ ÒÔÉÏÊÇNetFillter±àд×Ô¼ºÄ£¿éʱµÄһЩ»ù±¾Ó÷¨£¬½ÓÏÂÀ´£¬ÎÒÃÇÀ´¿´Ò»ÏÂLVSÖÐÊÇÈçºÎʵÏֵġ£
¡¡¡¡
¡¡¡¡3.LVSÖÐNetfilerµÄʵÏÖ
¡¡¡¡
¡¡¡¡£ £ ÀûÓÃNetfilter£¬LVS´¦ÀíÊý¾Ý±¨´Ó×ó±ß½øÈëϵͳ£¬½øÐÐIPУÑéÒÔºó£¬Êý¾Ý±¨¾­¹ýµÚÒ»¸ö¹³×Óº¯ÊýNF_IP_PRE_ROUTING[HOOK1]½øÐд¦Àí£»È»ºó½øÐзÓÉÑ¡Ôñ£¬¾ö¶¨¸ÃÊý¾Ý±¨ÊÇÐèҪת·¢»¹ÊÇ·¢¸ø±¾»ú£»Èô¸ÃÊý¾Ý±¨ÊÇ·¢±»±¾»úµÄ£¬Ôò¸ÃÊý¾Ý¾­¹ý¹³×Óº¯ÊýNF_IP_LOCAL_IN[HOOK2]´¦Àíºó´«µÝ¸øÉϲãЭÒ飻Èô¸ÃÊý¾Ý±¨Ó¦¸Ã±»×ª·¢£¬ÔòËü±»NF_IP_FORWARD[HOOK3]´¦Àí£»¾­¹ýת·¢µÄÊý¾Ý±¨¾­¹ý×îºóÒ»¸ö¹³×Óº¯ÊýNF_IP_POST_ROUTING[HOOK4]´¦ÀíÒÔºó£¬ÔÙ´«Êäµ½ÍøÂçÉÏ¡£±¾µØ²úÉúµÄÊý¾Ý¾­¹ý¹³×Óº¯ÊýNF_IP_LOCAL_OUT[HOOK5]´¦Àíºó£¬½øÐзÓÉÑ¡Ôñ´¦Àí£¬È»ºó¾­¹ýNF_IP_POST_ROUTING[HOOK4]´¦Àíºó·¢Ë͵½ÍøÂçÉÏ¡£
¡¡¡¡
¡¡¡¡£ £ µ±Æô¶¯IPVS¼ÓÔØip_vsÄ£¿éʱ£¬Ä£¿éµÄ³õʼ»¯º¯Êýip_vs_init( )×¢²áÁËNF_IP_LOCAL_IN[HOOK2]¡¢NF_IP_FORWARD[HOOK3]¡¢NF_IP_POST_ROUTING[HOOK4] ¹³×Óº¯ÊýÓÃÓÚ´¦Àí½ø³öµÄÊý¾Ý±¨¡£
¡¡¡¡
¡¡¡¡3.1 NF_IP_LOCAL_IN´¦Àí¹ý³Ì
¡¡¡¡
¡¡¡¡£ £ Óû§ÏòÐéÄâ·þÎñÆ÷·¢ÆðÇëÇó£¬Êý¾Ý±¨¾­¹ýNF_IP_LOCAL_IN[HOOK2],½øÈëip_vs_in( )½øÐд¦Àí¡£Èç¹û´«ÈëµÄÊÇicmpÊý¾Ý±¨£¬Ôòµ÷ÓÃip_vs_in_icmp( )£»·ñÔò¼ÌÐøÅжÏÊÇ·ñΪtcp/udpÊý¾Ý±¨£¬Èç¹û²»ÊÇtcp/udpÊý¾Ý±¨£¬Ôòº¯Êý·µ»ØNF_ACCEPT(ÈÃÄں˼ÌÐø´¦Àí¸ÃÊý¾Ý±¨)£»ÓàÏÂÇé¿ö±ãÊÇ´¦Àítcp/udpÊý¾Ý±¨¡£Ê×ÏÈ£¬µ÷ÓÃip_vs_header_check( )¼ì²é±¨Í·£¬Èç¹ûÒì³££¬Ôòº¯Êý·µ»ØNF_DROP(¶ªÆú¸ÃÊý¾Ý±¨)¡£½Ó×Å£¬µ÷ÓÃip_vs_conn_in_get( )È¥ip_vs_conn_tab±íÖвéÕÒÊÇ·ñ´æÔÚÕâÑùµÄÁ¬½Ó£ºËüµÄ¿Í»§»úºÍÐéÄâ·þÎñÆ÷µÄipµØÖ·ºÍ¶Ë¿ÚºÅÒÔ¼°Ð­ÒéÀàÐ;ùÓëÊý¾Ý±¨ÖеÄÏàÓ¦ÐÅÏ¢Ò»Ö¡£Èç¹û²»´æÔÚÏàÓ¦Á¬½Ó£¬ÔòÒâζ×ÅÁ¬½ÓÉÐ佨Á¢£¬´ËʱÈç¹ûÊý¾Ý±¨ÎªtcpµÄsync±¨ÎÄ»òudpÊý¾Ý±¨Ôò²éÕÒÏàÓ¦µÄÐéÄâ·þÎñÆ÷£»Èç¹ûÏàÓ¦ÐéÄâ·þÎñÆ÷´æÔÚµ«ÊÇÒѾ­Âú¸ººÉ£¬Ôò·µ»ØNF_DROP£»Èç¹ûÏàÓ¦ÐéÄâ·þÎñÆ÷´æÔÚ²¢ÇÒδÂú¸ººÉ£¬ÄÇôµ÷ÓÃip_vs_schedule( )µ÷¶ÈÒ»¸öRS²¢´´½¨Ò»¸öеÄÁ¬½Ó£¬Èç¹ûµ÷¶Èʧ°ÜÔòµ÷ÓÃip_vs_leave( )¼ÌÐø´«µÝ»òÕß¶ªÆúÊý¾Ý±¨¡£Èç¹û´æÔÚÏàÓ¦Á¬½Ó£¬Ê×ÏÈÅжÏÁ¬½ÓÉϵÄRSÊÇ·ñ¿ÉÓã¬Èç¹û²»¿ÉÓÃÔò´¦ÀíÏà¹ØÐÅÏ¢ºó·µ»ØNF_DROP¡£ÕÒµ½ÒÑ´æÔÚµÄÁ¬½Ó»ò½¨Á¢ÐµÄÁ¬½Óºó£¬ÐÞ¸Äϵͳ¼Ç¼µÄÏà¹ØÐÅÏ¢Èç´«ÈëµÄÊý¾Ý±¨µÄ