CloudStack
µÄÅäÖᢲ¿ÊðÓë¹ÜÀí£¬ÒÔ¼° API µÄʹÓÃ
CloudStack ÊÇ Ctrix ¹«Ë¾ÔÚ IaaS Êг¡ÉϵÄÖ÷´ò²úÆ·£¬ËüÌṩÁ˶ÔÔÆ¼ÆËã×ÊÔ´µÄÁé»î²¿ÊðÓë¹ÜÀíÄÜÁ¦¡£½ñÄêÉϰëÄê
Ctrix ½«ÆäÔ´´úÂë¹±Ï׸ø Apache ºó£¬CloudStack ³ÉΪһ¸ö¿ªÔ´ÏîÄ¿¡£ÕâÀ࿪ԴÏîÄ¿µÄÎĵµËäÀú¾ÍêÉÆ£¬µ«×÷Ϊһ¸öÔÆ¼ÆËãÁìÓòµÄÐÂÊÖ¿ªÊ¼³¢ÊÔËüµÄ°²×°Ó벿Êðʱ£¬×Ü»¹ÊÇÓöµ½»ò¶à»òÉÙµÄÌôÕ½¡£Õâ±ãÊDZ¾ÎÄÄ¿µÄËùÔÚ£¬¼´ÖÒʵ¼Ç¼²¢³¢ÊÔ×ܽáÕâ¸ö¹ý³ÌÖеÄһЩÎÊÌ⣬Óë´ó¼Ò·ÖÏí¡£
CloudStack ÔÚ IaaS Êг¡µÄ±³¾°ºÍÖ÷Òª¾ºÕù¶ÔÊÖ
Ëæ×ÅÑÇÂíÑ·ÔÚ¹«ÓÐÔÆºÍ VMware ÔÚ˽ÓÐÔÆ·½ÃæµÄ³É¹¦£¬¸÷ÀàÆóÒµ·×·×ÔÚÔÆÊ±´úÂõ³öÁË×Ô¼ºµÄ²½·¥£¬ÕâЩÆóҵϣÍûÔÚ×ÔÉíµÄ¼ÆËã×ÊÔ´£¨Ö÷»ú£¬ÍøÂ磬´æ´¢£©ÐéÄ⻯¹ý³ÌÖÐÄܹ»»ñµÃÇ¿´ó¹¦ÄܵÄͬʱ£¬ÓÖά³ÖÏà¶ÔµÍÁ®µÄ³É±¾¡£ÕâÕýÊÇ
IaaS ¹©Ó¦ÉÌÃÇ·¢Õ¹µÄ¶¯Á¦¡£
IaaS ÌṩÁ˶Ô×ÊÔ´µÄ×Ô¶¯»¯¹ÜÀíÄÜÁ¦¡£ÀýÈçÓýçÃæ¡¢½Å±¾ÉõÖÁ Web Service API ʵÏÖ¶Ô´óÁ¿Ó²¼þ¡¢´óÁ¿ÐéÄâ»úµÄÉúÃüÖÜÆÚ¹ÜÀí¡£IaaS
²úÆ·Ãæ¶ÔµÄÊÇ´ó¹æÄ£¡¢¿ÉÉìËõµÄÔÆ»·¾³£¬ÕâÊÇÓëÓÃÊÖ¹¤¹ÜÀíÓÐÏÞ×ÊÔ´µÄ·½Ê½ÍêÈ«²»Í¬µÄÒ»Ààϵͳ¡£
CloudStack ǰÉíΪ cloud.com µÄÉÌÒµ»¯²úÆ·£¬ËüÔÚ 2011 Äê±» Ctrix ÒÔ³¬¹ý¶þÒÚÃÀ½ð¼Û¸ñÊÕ¹º£¬ËæºóÓÖÔÚ½ñÄê±»¾èÏ׸ø
Apache »ù½ð»á¡£ÕâÏî²úÆ·¿ªÔ´µÄ¾Ù´ë£¬ÒýÆðÁËÊг¡¶Ô IaaS ·¢Õ¹Â·ÏßµÄһЩÕùÒ飬ÀýÈçËüÓëÁíÍâÒ»¸ö¿ªÔ´²úÆ·
OpenStack µÄ¾ºÕùÓëºÏ×÷¹ØÏµ£¿
OpenStack ÊÇÓÉ Rackspace ºÍ NASA Ö÷µ¼¿ª·¢µÄÒ»¸ö IaaS£¬ËüÓµÓиü´óµÄÓû§Èº£¬°üÀ¨
HP£¬IBM£¬Dell ºÍ Redhat µÈ´ó¹«Ë¾¡£±í 1 ÁгöÁË CloudStack Óë OpenStack
µÄһЩ¶Ô±È¡£
±í 1.CloudStack Óë OpenStack µÄ¶Ô±È

¸½£º±È½ÏÊý¾Ý½ØÖ¹ÖÁ2012ÄêÖУ¬¶ÔÓ¦µÄÈí¼þ°æ±¾ÎªCloudStack 3ºÍOpenStack Essex¡£
¿ÉÒÔÈÏΪ£¬ÔÚÊг¡ÉÏ CloudStack ºÍ OpenStack ÕâÁ½¸ö IaaS ƽ̨´æÔÚ²»Í¬µÄ¹¦ÄÜ¡¢¿Í»§ºÍ·¢Õ¹Â·Ïߣ¬Ç°Õß×÷ÎªÔø¾µÄÉÌÒµÈí¼þ£¬ÒѾ±»Ö¤Ã÷Ϊ¿ÉÒÔ¿É¿¿µÄÓÃÓÚÉú²úϵͳ£»¶øºóÕߣ¬ËäÔòĿǰȱÉٹ㷺µÄÕæÊµÓû§£¬È´ÓµÓиü¶àµÄ´ó¹«Ë¾Ö§³Ö¡£ÕâÊÇËüÃÇÏÔÖøµÄ²»Í¬¡£
¾¡¹ÜÈç´Ë£¬µ«´Ó¼¼Êõ¶øÑÔ£¬ËüÃDZ³ºóµÄÔ´´úÂë¹±Ï×Õß²¢²»ÊÇÒ»¶¨²»Í¬µÄ£¬¾³£ÓÐÀ´×Ôͬһ¼Ò¹«Ë¾µÄ¿ª·¢ÈËԱΪÕâÁ½¸ö¿ªÔ´ÏîÄ¿Ìá½»´úÂë¡£´ÓÕâ¸ö½Ç¶È˵£¬Á½¸öƽ̨ÔÚijһÌìµÄºÏ²¢Ò²²»»áÁîÈ˾ªÆæ¡£
»¹´æÔÚÆäËüÖÚ¶àµÄ IaaS ²úÆ·£¨ÀýÈç Eucalyptus£¬Nebula µÈ£©£¬¿ÉÒÔÔÚÎÄÄ©µÄ ²Î¿¼×ÊÔ´ÖÐÕÒµ½Ò»Ð©½éÉÜ¡£×ÜÌå¶øÑÔ£¬ÕâЩ²úÆ·µ±ÖÐ
CloudStack ºÍ OpenStack ÊÇÌØÐÔ×îΪÏà½ü¡¢Ò²ÊÇ×îÒýÆðÕùÂ۵ģ¬²Î¿¼×ÊÔ´ÖеÄһƪÎÄÕÂÌá¼°µ½ÁË×î½ü·¢ÉúµÄÒ»¸öÓÐȤÕùÂÛ¡£
CloudStack ¼Ü¹¹Í¼
CloudStack ²ÉÓÃÁ˵äÐ͵ķֲã½á¹¹£º¿Í»§¶Ë¡¢ºËÐÄÒýÇæ¡¢ÒÔ¼°×ÊÔ´²ã¡£ËüÃæÏò¸÷ÀàÐ͵Ŀͻ§ÌṩÁ˲»Í¬µÄ·ÃÎÊ·½Ê½£ºWeb
Console¡¢Command Shell ºÍ Web Service API¡£Í¨¹ýËüÃÇ£¬Óû§¿ÉÒÔ¹ÜÀíʹÓÃÔÚÆäµ×²ãµÄ¼ÆËã×ÊÔ´£¨ÓÖ·ÖΪÖ÷»ú¡¢ÍøÂçºÍ´æ´¢£©£¬Íê³ÉÖîÈçÔÚÖ÷»úÉÏ·ÖÅäÐéÄâ»ú£¬Å䏸ÐéÄâ´ÅÅ̵ȹ¦ÄÜ¡£¼ûͼ
1¡£

ͼ 1. ϵͳ¼Ü¹¹Í¼
ÐéÄâ»úÈç¹ûʹÓà Xen ºÍ KVM£¬ÐèÒª°²×° CloudStack Agent À´Ö§³ÖÆäÓë¹ÜÀí·þÎñÆ÷µÄ½»»¥¡£¶ø¹ÜÀí·þÎñÆ÷ºÍ
Xen Server ½»»¥ÔòÊÇ¿¿ XAPI£¬ºÍ vCenter¡¢ESX ½»»¥¿¿ HTTP¡£
µ±²¿Êð CloudStack ʱ£¬ÐèÒªÁ˽âËüµÄ²ã´Î½á¹¹ºÍ´æ´¢¹ÜÀí£¬¼ûͼ 2¡£

ͼ 2. ²¿Êðͼ
Zone£ºZone ¶ÔÓ¦ÓÚÏÖʵÖеÄÒ»¸öÊý¾ÝÖÐÐÄ£¬ËüÊÇ CloudStack ÖÐ×î´óµÄÒ»¸öµ¥Ôª¡£
Pod£ºPod ¶ÔÓ¦×ÅÒ»¸ö»ú¼Ü¡£Í¬Ò»¸ö pod ÖеĻúÆ÷ÔÚͬһ¸ö×ÓÍø£¨Íø¶Î£©ÖС£
Cluster£ºCluster ÊǶà¸öÖ÷»ú×é³ÉµÄÒ»¸ö¼¯Èº¡£Í¬Ò»¸ö cluster ÖеÄÖ÷»úÓÐÏàͬµÄÓ²¼þ£¬ÏàͬµÄ
Hypervisor£¬ºÍ¹²ÓÃͬÑùµÄ´æ´¢¡£Í¬Ò»¸ö cluster ÖеÄÐéÄâ»ú£¬¿ÉÒÔʵÏÖÎÞÖжϷþÎñµØ´ÓÒ»¸öÖ÷»úÇ¨ÒÆµ½ÁíÍâÒ»¸öÉÏ¡£
Host£ºHost ¾ÍÊÇÔËÐÐÐéÄâ»ú£¨VM£©µÄÖ÷»ú¡£
¼´´Ó°üº¬¹ØÏµÉÏÀ´Ëµ£¬Ò»¸ö zone °üº¬¶à¸ö pod£¬Ò»¸ö pod °üº¬¶à¸ö cluster£¬Ò»¸ö cluster
°üº¬¶à¸ö host¡£
CloudStack ÖдæÔÚÁ½ÖÖ´æ´¢£º
1¡¢Primary storage£ºÒ»¼¶´æ´¢Óë cluster ¹ØÁª£¬ËüΪ¸Ã cluster ÖеÄÖ÷»úµÄÈ«²¿ÐéÄâ»úÌṩ´ÅÅÌ¾í¡£Ò»¸ö
cluster ÖÁÉÙÓÐÒ»¸öÒ»¼¶´æ´¢£¬ÇÒÔÚ²¿ÊðʱλÖÃÒªÁÙ½üÖ÷»úÒÔÌṩ¸ßÐÔÄÜ¡£
2¡¢Secondary storage£º¶þ¼¶´æ´¢Óë zone ¹ØÁª£¬Ëü´æ´¢Ä£°åÎļþ£¬ISO ¾µÏñºÍ´ÅÅ̾í¿ìÕÕ¡£
1.Ä£°å£º¿ÉÒÔÆô¶¯ÐéÄâ»úµÄ²Ù×÷ϵͳ¾µÏñ£¬Ò²°üÀ¨ÁËÖîÈçÒѰ²×°Ó¦ÓÃµÄÆäÓàÅäÖÃÐÅÏ¢¡£
2.ISO ¾µÏñ£º°üº¬²Ù×÷ϵͳÊý¾Ý»òÆô¶¯Ã½ÖʵĴÅÅ̾µÏñ¡£
3.´ÅÅ̾í¿ìÕÕ£ºÐéÄâ»úÊý¾ÝµÄÒÑ´¢´æ¸±±¾£¬ÄÜÓÃÓÚÊý¾Ý»Ö¸´»òÕß´´½¨ÐÂÄ£°å¡£
°²×° CloudStack
»·¾³×¼±¸
Ò»¸öÍêÕûµÄ CloudStack »·¾³°üÀ¨Á½²¿·Ö£º
1.¹ÜÀí·þÎñÆ÷£¨Management Server£©
2.ÐéÄâ»ú¹ÜÀíÆ÷ (Hypervisor)¸½£ºÍ¨³£¶Ô CloudStack
µÄ hypervisor Ò²ÓÐÁíÍâµÄ³Æºô£¬ÀýÈçÖ÷»ú£¨host£©£¬´úÀí£¨agent£©µÈ¡£±¾ÎÄͳһΪ hypervisor¡£
ÔÚ±¾Îĵݲװ²½ÖèÖУ¬ËùÒªÅäÖõÄΪһ¸ö¼òµ¥ÍøÂ磬¼´ËùÓб»¹ÜÀíµÄÐéÄâ»ú¶¼Î»ÓÚÒ»¸öÍø¶Î¡£ÏàÓ¦µÄÓ²¼þÈçÏ£º
±í 2.ÈíÓ²¼þ»·¾³

Hypervisor Ϊ KVM¡£
¹ÜÀí·þÎñÆ÷ÐèÒª¸ü¶àµÄ´æ´¢¿Õ¼äÊÇÒòΪ NFS Ò²½¨ÔڸûúÉÏ¡£¸ü¶àµÄÏêϸ°²×°ÐèÇó¿ÉÒÔ²ÎÔÄ CloudStack
¹ÙÍøµÄÖ¸ÄÏ¡£ÕâÀïÐèÒª×ÅÖØÁгöµÄÎÊÌâΪ£º
Q1£º¹ÙÍøµÄ°²×°ÒªÇóÖÐÄÄЩÈíÓ²¼þÒòËØÈÝÒ×µ¼Ö CloudStack µÄ°²×°Ê§°Ü£¿
1.Hypervisor ËùÔÚµÄÖ÷»ú£¬ÒªÇó CPU ºÍÖ÷°åÖ§³ÖÓ²¼þÐéÄ⻯£¨±¾È˵ĻúÆ÷ÊÇ
DELL ̨ʽ»ú£¬ÐèÒªÔÚÖ÷°åµÄ BIOS ÖÐÉèÖà Intel-VT Ϊ enable£©¡£
2.²Ù×÷ϵͳ±ØÐëÊÇ 64 λµÄ£¬ÍƼö centos 6.2£¨µ±Ç°×îеÄ
CloudStack 3 Ö§³Ö 6.2£©¡£Èç¹ûʹÓà 5.5 »òÕß 6.0 °æ±¾£¬Ò»¶¨ÒªÑ¡ÔñÆ¥ÅäµÄ CloudStack
°²×°°ü¡£Ubuntu ĿǰֻÓÐÔËÐÐÔÚ 10.04 ƽ̨Éϵķ¢Ðа棬ÇҸà release ²»ÊÇ×îÐ嵀 CloudStack¡£´Ë´¦Ç¿ÁÒ½¨ÒéÐÂÓû§¸ø
Managment Server ºÍ Hypervisor ËùÔÚµÄÁ½Ì¨Ö÷»úÑ¡ÔñÒ»ÑùµÄ²Ù×÷ϵͳ£¨ÍƼö centos/redhat£©ºÍÒ»Ñù°æ±¾µÄ
CloudStack Èí¼þ£¬Í¬Ê±×¢Òâ OS Ò»¶¨ÊÇÒª±»¹Ù·½ release Ðû³ÆÖ§³Ö£¬ÕâÑùÄܱÜÃâ×ß²»ÉÙÍä·¡£ÀýÈçȷʵҲ´æÔÚÓÐÈËÄܳɹ¦ÔÚ
Ubuntu 12.04 »ò centos 6.3£¨¹Ù·½ 2012 Äê 9 ÔÂÉÐδÐû³ÆÖ§³Ö£©Éϲ¿Êð CloudStack£¬µ«¸¶³ö¾«Á¦½Ï´ó¡£
3.Hypervisor µÄÖ÷»ú²»ÄÜÓÐÈκÎÕýÔÚÔËÐеÄÐéÄâ»ú£¬·ñÔòÔÚºóÐøµÄ
add host ²Ù×÷ÖлáÓöµ½Ê§°Ü¡£×î¼ÑµÄ½¨ÒéÊÇ hypervisor Ö÷»úÉϵIJÙ×÷ϵͳΪȫа²×°£¬ÇÒûÓв¿ÊðÈÎºÎÆäÓàÐéÄâ»ú¡£
4.ÎÞÂÛÊǹÜÀí·þÎñÆ÷»¹ÊÇ hypervisor ËùÔÚÖ÷»ú£¬¶¼ÐèÒªÒÔ root
µÇ¼½øÐÐ CloudStack °²×°¡£
5.Management Server ºÍ Hypervisor Ö÷»ú±ØÐëÊÇÓжÀÁ¢¾²Ì¬
IP µÄÖ÷»ú¡£·ñÔòºóÐø°²×°ÒòΪ IP µØÖ·±ä»¯»áµ¼Ö service ״̬Òì³£¡£CentOS °²×°ºóµÄĬÈÏÍøÂçÅäÖÃΪ
DHCP£¬ÐèÐÞ¸ÄΪÊÖ¹¤·ÖÅä IP£¬Õâ²½²Ù×÷ÒªÔÚ cloud-server ºÍ cloud-agent Á½Ì¨»úÆ÷¶¼½øÐУº
µã»÷×ÀÃæÓÒÉϽǵÄÍøÂçͼ±ê£¬±à¼ÍøÂ磺

ͼ 3
Method ÔÀ´Îª¡°DHCP¡±£¬¸Ä³ÉÉèÖÃΪ¡°Manual¡±£¬È»ºóÊäÈ뾲̬ IP µØÖ·¡¢ÑÚÂë¡¢Íø¹Ø¡¢DNS
·þÎñÆ÷ÐÅÏ¢¡£

ͼ 4
°²×° Management Server
1.ÒÔ root Éí·ÝµÇ¼ cloud-server.squirrel.org¡£
2.ÔËÐС°hostname ¨C fqdn¡±£¬¼ì²éÆä·µ»ØµÄ¸ñʽ±ØÐëÊǰüÀ¨ÓòÃûµÄÈ«³Æ£¨ÀýÈç
cloud-server.squirrel.org£©¡£Hostname ×îºÃÊÇÔÚ°²×° centos ʱ¼´ÉèÖú㬷ñÔòÐèÒªÔÚ
/etc/hosts ºÍ /etc/sysconfig/network Á½´¦ÎļþÖÐͬʱÐ޸IJſÉÒÔÓÀ¾ÃÉúЧ¡£
3.ÉèÖà SELinux¡£ÔÚ /etc/selinux/config ÖÐÐ޸ġ°SELINUX=enforcing¡±Îª¡°SELINUX=permissive
¡±£¬²¢ÔÚ shell ÖÐÔËÐС°setenforce permissive ¡±ÁîÆäÁ¢¼´ÉúЧ¡£
4.½øÈëÏÂÔØ²¢½âѹºÃµÄ CloudStack °²×°Ä¿Â¼ ( ÎÒÕâÀïÊÇ /home/squirrel/mybox/cloud/CloudStack-oss-3.0.2-1-rhel6.2)£¬ÔËÐÐÃüÁî¡°./install.sh¡±£¬Ñ¡Ôñ¡°M¡±°²×°
Management Server Èí¼þ¡£
5.ÔËÐÐÏÂÃæÃüÁîÆô¶¯ NFS ºÍ rpcbind ·þÎñ£¬²¢ÉèÖÃΪ¿ª»úÔËÐУº
# service rpcbind start # service nfs start # chkconfig nfs on # chkconfig rpcbind on |
6.ÔÙ´ÎÔËÐÐÃüÁî¡°./install.sh¡±£¬Ñ¡Ôñ¡°D¡±°²×°Êý¾Ý¿â mysql¡£
7.±à¼ /etc/my.cnf£¬ÔÚ [mysqld] ÏÂÃæ¼ÓÈëÄÚÈÝ£º
innodb_rollback_on_timeout=1 innodb_lock_wait_timeout=600 max_connections=350 log-bin=mysql-bin binlog-format = 'ROW' |
8.ÖØÆôÊý¾Ý¿âºó£¬ÉèÖà root Óû§ÃÜÂë¡£
# service mysqld restart # mysql -u root mysql> SET PASSWORD = PASSWORD('<password>'); mysql> exit |
9.ÔËÐÐ CloudStack ½Å±¾ÈÃÆä×Ô¶¯ÅäÖÃÊý¾Ý¿â£º
#cloud-setup-databases cloud:<dbpassword>@localhost \ --deploy-as=root:<password> |
¼´±íʾÒÔ root Óû§Éí·ÝÀ´Éú³ÉÊý¾Ý¿â£¬¸ÃÊý¾Ý¿âÊôÓÚн¨µÄ cloud Óû§£¨ÃÜÂë dbpassword
¿ÉÒÔÁô¿Õ£©¡£
10.×îºó£¬ÏÂÃæµÄÃüÁÍê³É¶Ô²Ù×÷ϵͳ iptables¡¢sudoers
µÄÉèÖã¨CloudStack ±¾ÉíÓа²È«ÐÔ·½ÃæµÄÒªÇ󣬲»ÊÇÎÞÏÞ±©Â¶¸øÍøÂ磬ͬʱÓÖÐèҪһЩ¹ÜÀíȨÏÞÀ´ÔËÐÐ×ÔÉí·þÎñ£¬Òò´ËÒª×öÕâÁ½ÏîµÄÉèÖã©£¬²¢Æô¶¯¹ÜÀí·þÎñÆ÷£º
ʹÓá°service cloud-management status¡±²é¿´ÔËÐÐ״̬¡£
Q2£ºµÚ 2 ²½ÖÐÔËÐС°hostname ¨C fqdn¡±ÃüÁîʱ£¬Òª±£Ö¤»úÆ÷ÊÇÁªÍø×´Ì¬£¬²ÅÄÜ·µ»ØÕýÈ·µÄÖ÷»úÃû³Æ¡£
Q3£ºÈç¹ûºóÐø´òËã°Ñ hypervisor Ò²°²×°ÔÚ management server µÄͬһ̨Ö÷»úÉÏ£¬ÐèÒªÔÚ
/etc/sysconfig/network-scripts/ifcfg-<yourPhysicalDeviceName>
ÖÐÅäÖóö¶ÔÓ¦µÄÐÅÏ¢¡£
ͬʱ£¬Èç¹û¸Ã hypervisor Ϊ KVM£¬ÐèÒªÐÞ¸Ä /etc/sudoers £¬¼ÓÈëÈçÏÂÐУº
Defaults:cloud !requiretty |
ÅäÖÃ NFS
Ç°Ãæ½²¹ý£¬CloudStack ÐèÒªÁ½Àà´æ´¢£¨primary storage ºÍ secondary
storage£©À´Ö§³ÖËüµÄ cluster ºÍ host£¬±¾½ÚÖÐÓÉ NFS À´ÌṩÕâÁ½¸ö´æ´¢£¬Òò´ËǰÊö²½ÖèÖÐÒªÆô¶¯
NFS ·þÎñ¡£Í¬Ê±ÎªÁË·½±ãÆð¼û£¬NFS Server Ò²ÓÉ cloud-server.squirrel.org
³äµ±¡£
1.ÒÔ root Éí·ÝµÇ¼ cloud-server.squirrel.org¡£
2.´´½¨Á½¸öĿ¼£¬·Ö±ð×÷Ϊһ¼¶ºÍ¶þ¼¶´æ´¢£º
# mkdir -p /export/primary # mkdir -p /export/secondary |
3.±à¼Îļþ /etc/exports £¬¼ÓÈ룺
/export *(rw,async,no_root_squash) |
È»ºóµ¼³ö /export Ŀ¼£º
4.±à¼ /etc/sysconfig/nfs Îļþ£¬È¡ÏûÈçÏÂÐеÄ×¢ÊÍ·ûºÅ£¨»òÕßÔÚÎļþĩβֱ½ÓÌí¼ÓÏÂÁÐÐУ©£º
LOCKD_TCPPORT=32803 LOCKD_UDPPORT=32769 MOUNTD_PORT=892 RQUOTAD_PORT=875 STATD_PORT=662 STATD_OUTGOING_PORT=2020 |
5.±à¼·À»ðǽÉèÖÃÎļþ /etc/sysconfig/iptables£¬ÔÚ
input ²¿·Ö×îÉÏÃæ¼ÓÈëÈçÏµĹæÔò£º
-A INPUT -m state --state NEW -p udp --dport 111 -j ACCEPT -A INPUT -m state --state NEW -p tcp --dport 111 -j ACCEPT -A INPUT -m state --state NEW -p tcp --dport 2049 -j ACCEPT -A INPUT -m state --state NEW -p tcp --dport 32803 -j ACCEPT -A INPUT -m state --state NEW -p udp --dport 32769 -j ACCEPT -A INPUT -m state --state NEW -p tcp --dport 892 -j ACCEPT -A INPUT -m state --state NEW -p udp --dport 892 -j ACCEPT -A INPUT -m state --state NEW -p tcp --dport 875 -j ACCEPT -A INPUT -m state --state NEW -p udp --dport 875 -j ACCEPT -A INPUT -m state --state NEW -p tcp --dport 662 -j ACCEPT -A INPUT -m state --state NEW -p udp --dport 662 -j |
6.ÖØÆô·À»ðǽ£¬²¢±£´æÐ޸ģº
# service iptables restart # service iptables save |
7.ÔÚ¹ÜÀí·þÎñÆ÷£¨cloud-server.squirrel.org£©ºÍ
hypervisor Ö÷»ú£¨cloud-agent.squirrel.org£©ÉÏ£¬ÐÞ¸ÄÎļþ /etc/idmapd.conf£¬¼ÓÈëÈçÏÂÄÚÈÝ£º
8.ÖØÆô¹ÜÀí·þÎñÆ÷µÄÖ÷»ú£¬È»ºó²âÊÔ²¢¹ÒÔØ NFS¡£ÔÚ cloud-agent.squirrel.org
»úÆ÷½¨Á¢Ä¿Â¼ /primarymount£¬ÔËÐÐÈçÏÂÃüÁȷÈÏÆäÊÇ·ñ³É¹¦£º
mount -t nfs 192.168.1.4:/export/primary /primarymount |
Q4£ºÔÚ KVM hypervisor »úÆ÷ÔËÐÐ showmount ÃüÁîʱ£¬Èç¹û²ÉÓõÄÊÇ hostname£¬ÀýÈç¡°showmount
-e cloud-server.squirrel.org¡±£¬²¢ÇÒʧ°Ü£¬±¨´í¡°clnt_create: RPC:
Program not registered¡±£¬ÄÇô¿ÉÒÔ³¢ÊÔÓà IP ´úÌæ£º¡°showmount -e
192.168.1.4¡±¡£»òÕ߱༱¾»úµÄ /etc/hosts£¬¼ÓÈë¶Ô·½ server µÄ IP- Ö÷»úÃûÓ³É䣨µ«ÕâÑùʧȥÁËÁé»îÐÔ£©£º
192.168.1.4 cloud-server.squirrel.org
Q5£ºµÚ 5 ²½ÖÐмÓÈë¹æÔòÔÚ·À»ðǽÅäÖÃÎļþÖеĴÎÐò¶Ô NFS share ³É¹¦ºÜÖØÒª£¬Ò»¶¨Òª¼ÓÈë INPUT
ÇøµÄ×ʼ²¿·Ö£¬¼´ÏµÍ³ÖÐÔÓÐµÄ input Ïî±ØÐëÔÚмÓÈëÐеĺóÃæ£¬·ñÔò¿ÉÄÜÔÚÔËÐÐ showmount
-e 192.168.1.4 ʱ»á³öÏÖ
clnt_create: RPC: Port mapper failure - Unable to receive:
errno 113 (No route to host) µÄ´íÎó¡£
Q6£º³öÏÖ´íÎó mount.nfs: access denied by server while mounting
192.168.1.4:/export/primary µÄ´¦Àí£¿
ÓÐʱµ±ÔËÐС°showmount -e cloud-server.squirrel.org¡±ÓС°clnt_create:
RPC: Port mapper failure - Unable to receive: errno
111 (Connection refused)¡±´íÎóÌáʾ£¬È»ºó mount nfs ʧ°Ü£¬»á³öÏÖ±êÌâÉϵĴíÎóÐÅÏ¢£¬Õâ¿ÉÄܸú
NFS µÄ½¨Á¢·½Ê½Óйأ¬ÓÐʱҲ¸ú·À»ðǽÓйء£ÐèÒª¼ì²é log£º
tail -200 /var/log/messages
refused mount request from 192.168.1.5 for /export/primary (/export): illegal port 1024 |
ÄÇô¿¼Âdz¢ÊÔÈçÏ·½·¨£º
ÔÚÔÀ´µÄÄÇÒ»ÐÐÉÏÐÞ¸ÄÈçÏ£º
/export *(rw,async,insecure,no_root_squash) |
È»ºó£º
exportfs -rv
service nfs restart |
ÔÚ cloud-agent.squirrel.org ÉÏÖØÐÂÔËÐÐÃüÁ
mount -t nfs 192.168.1.4:/export/primary /primarymount |
ûÓÐÌáʾ£¬Ó¦¸Ã³É¹¦ÁË£¬¿ÉÒÔÈ·ÈÏ£º
OK £¡
×¼±¸ÏµÍ³ÐéÄâ»úÄ£°å
ϵͳÐéÄâ»úÄ£°å£¨System VM Template£©±£´æÔÚ¶þ¼¶´æ´¢ÉÏ£¬ÊÇÓÃÓÚ´´½¨ÔÆÆ½Ì¨ÉϵÄϵͳÐéÄâ»úµÄ¡£
ÒÔ root Éí·ÝµÇ¼ cloud-server.squirrel.org¡£
ÕâÀïÏÂÔØµÄÊÇ KVM Ä£°å£¬ÔËÐÐÈçÏÂÃüÁî°²×°£º
# /usr/lib64/cloud/agent/scripts/storage/secondary/cloud-install-sys-tmplt -m /export/secondary -u http://download.cloud.com/templates/acton/acton-systemvm-02062012.qcow2.bz2 -h kvm -F |
ÒÀÀµÓÚÍøÂçËÙ¶È£¬Õâ¸ö¹ý³ÌËùÐèʱ¼äÔÚ¼¸·ÖÖÓµ½ÊýСʱ£¨±ÊÕßµÄÏÂÔØËÙ¶ÈÏÔʾÔÚ 2M~3M/s£¬Èý·ÖÖÓ×óÓÒÍê³ÉÈ«²¿ÏÂÔØºÍ°²×°£©¡£
Q7£ºÕâÀïÓÐÁ½µãÐèҪעÒ⣺
´ÅÅÌ·ÖÇø±ØÐë¹»´ó¡£ÐéÄâ»úÄ£°åµÄÏÂÔØ°²×°Õâ²½²»¿ÉÊ¡ÂÔ£¬·ñÔòºóÃæÔÚ¿ØÖÆÌ¨Ìí¼Ó¶þ¼¶´æ´¢Ê±»áʧ°Ü¡£ÏµÍ³ÐéÄâ»ú²»Í¬ÓÚÆÕͨµÄ
hypervisor host ÉϵÄÐéÄâ»ú£¬ËüÊÇ CloudStack ×Ô´øµÄÓÃÓÚÍê³É×ÔÉíϵͳÏà¹ØµÄһЩÈÎÎñµÄ
vm¡£ËüÓÐÁ½ÖÖ£º
¶þ¼¶´æ´¢ÐéÄâ»ú£¨Secondary Storage VM£©£ºÏÂÔØÉÏ´«Ä£°å¡¢ÏÂÔØ¾µÏñ£¬µÚÒ»´Î´´½¨ÐéÄâ»úʱ´Ó¶þ¼¶´æ´¢¿½±´Ä£°åµ½Ò»¼¶´æ´¢²¢ÇÒ×Ô¶¯´´½¨¿ìÕյȡ£¿ØÖÆÌ¨´úÀíÐéÄâ»ú£¨Console
Proxy VM£©£ºÓÃÓÚÔÚ web ½çÃæÉÏչʾ¿ØÖÆÌ¨¡£ÐèҪעÒâµÄÊÇ£¬ÏµÍ³Ðé»úΪ Debian 32 λ²Ù×÷ϵͳ£¬CloudStack
¹ÜÀíÔ±¿ÉÒÔÓà SSH µÇ¼¡£Í¬Ê±£¬ÄÜÔÚÖ÷»úµÄ /var/lib/libvirt/images ²é¿´µ½ËüÃÇ£¬Èçͼ
5£º

ͼ 5£º²é¿´ÒѾ°²×°µÄ VMs
°²×° KVM Hypervisor
1.ÒÔ root Éí·ÝµÇ¼ hypervisor Ö÷»ú cloud-agent.squirrel.org¡£
2.È·±£ hostname ÊÇÍêÕû´øÓòÃûµÄ£¬Ð޸ķ½·¨Í¬¹ÜÀí·þÎñÆ÷²½Öè 1¡£
3.ÔËÐС°yum erase qemu-kvm¡±É¾³ý OS ×Ô´øµÄ qemu-kvm¡£
4.½øÈëÏÂÔØ²¢½âѹºÃµÄ CloudStack °²×°Ä¿Â¼£¬ÔËÐÐÃüÁî¡°./install.sh¡±£¬Ñ¡Ôñ¡°A¡±°²×°
agent¡£
5.°²×°Íê±Ïºó£¬ÔËÐÐÏÂÃæÃüÁîÆô¶¯ nfs ºÍ rpcbind ·þÎñ£¬²¢ÉèÖÃΪ¿ª»úÔËÐУº
# service rpcbind start # service nfs start # chkconfig nfs on # chkconfig rpcbind on |
Q8£ºÈçºÎ´¦ÀíÒòΪûÓÐ enable VT ¶øµ¼Ö CloudStack Agent Æô¶¯²»³É¹¦£¿
×¢Òâ¼ì²é log£º/var/log/cloud/agent/¡£Èç¹ûÊÇÒòΪ
BIOS µÄ VT ûÓдò¿ª¶øÒýÆðµÄÆô¶¯Ê§°Ü£¬ÔòÐèÒªÔÚ´ò¿ª VT Ö§³ÖºóÖØÐ°²×° agent¡£ÔËÐÐÃüÁ
# service cloud-agent status ÈôÏÔʾ£º cloud-agent (pid 4188) is running... |
Ôò˵Ã÷ÒѾ³É¹¦ÔËÐÐÁË¡£
°²×° NTP£¬Ê±¼äͬ²½
1.ÔËÐС°yum install ntp¡±°²×° NTP ·þÎñ¡£
2.±à¼ÅäÖÃÎļþ /etc/ntp.conf£¬¼ÓÈëÈçÏ·þÎñÆ÷£º
server 0.xenserver.pool.ntp.org server 1.xenserver.pool.ntp.org server 2.xenserver.pool.ntp.org server 3.xenserver.pool.ntp.org |
3.ÖØÆô NTP ²¢ÉèÖÃΪ¿ª»ú×Ô¶¯ÔËÐУº
# service ntpd restart # chkconfig ntpd on |
ÔÚ Management Console ÖÐÅäÖÃÐéÄ⻯×ÊÔ´
µ±ÉÏÃæµÄ¹ÜÀí·þÎñÆ÷Óë hypervisor °²×°ºÃºó£¬¿ÉÒԵǼ½ø CloudStack
µÄ UI console ½øÐÐ×ÊÔ´µÄÅäÖÃÓ벿Êð¡£
ºÍ¼¸¸ö¾ºÕù¶ÔÊÖ¡ª¡ªÀýÈç Eucalyptus ´ÓÒ»¿ªÊ¼¾Í¶Ô AWS µÄ¼æÈÝ£¬OpenStack ¶ÔËÉñîºÏ×é¼þµÄϵͳ½á¹¹Éè¼Æ¡ª¡ªÏà±È£¬CloudStack
µÄÌØµãÖ®Ò»¾ÍÊÇÓÐ×îÓѺõÄÓû§½çÃæ£¬¼´¿ØÖƹÜÀį́¡£
Ê×ÏÈ´ò¿ªä¯ÀÀÆ÷£¬µÇ¼ URL£º
http://192.168.1.4:8080/client
Óû§Ãû / ÃÜÂ룺admin/password
Ñ¡Ôñ¡°Continue with basic installation¡±£¬½Ó×ÅÐÞ¸Ä CloudStack
¹ÜÀíÔ±ÃÜÂë¡£

ͼ 6.Ìí¼Ó zone
ͼ 7£ºÌí¼Ó pod

ͼ 8£ºÌí¼Ó¿Í»§»úÍøÂç

ͼ 9£ºÌí¼Ó cluster

ͼ 10£ºÌí¼Ó host

ͼ 11£ºÌí¼ÓÒ»¼¶´æ´¢

ͼ 12£ºÌí¼Ó¶þ¼¶´æ´¢
ºóµã»÷¡°Launch¡±Æô¶¯ CloudStack ÔÆÆ½Ì¨£¬¿ªÊ¼³õʼ»¯¡£

ͼ 13.³õʼ»¯ÖÐ
Ö±µ½³öÏֳɹ¦ÐÅÏ¢¡£ÕâÑùÒ»¸ö¼òµ¥µÄÔÆ»·¾³¾Í´î½¨Íê±Ï£¬ÎÒÃÇËæºó¿ÉÒÔÔÚÕâ¸ö¿ØÖÆÌ¨Ö´ÐмÆËã×ÊÔ´µÄ¹ÜÀíÈÎÎñÁË¡£ÏÂÃæÁ½Í¼Îª¿ØÖÆÌ¨ÏÔʾ½çÃæ¡£

ͼ 14.Overview

ͼ 15.Infrastructure
Q9£ºÓÐʱÒòΪ¸÷ÖÖÔÒò£¬ÀýÈçÔÚ¿ØÖÆÌ¨´íÎóµÄÅäÖÃÁËһЩÊý¾Ý£¬ÐèÒªÖØÐ³õʼ»¯Ê±£¬¿ÉÒÔɾ³ý
CloudStack µÄÊý¾Ý¿â£¬²½ÖèÈçÏ£º
ÔÚÃüÁîÐÐÏ£º
mysql ¨Cu root <password> mysql> drop database cloud; drop database cloud_usage; #cloud-setup-databases cloud:<dbpassword>@localhost --deploy-as=root:<password> #cloud-setup-management |
È»ºóÖØ¸´±¾½ÚµÄ²Ù×÷¡£
¸½£ºCloudStack µÄ Web Console ½çÃæÊÇ¿ÉÒÔ¶¨ÖÆ»¯µÄ¡£
ʹÓà CloudStack API
Èçͬ AWS API Ò»Ñù£¬CloudStack API Ò²ÊÇ»ùÓÚ Web
Service£¬¿ÉÒÔʹÓÃÈκÎÒ»ÖÖÖ§³Ö HTTP µ÷ÓõÄÓïÑÔ£¨ÀýÈç Java£¬PHP£©±àд´úÂë¡£
µ÷ÓôúÂ루caller£©Ê×ÏÈÐèÒªÔÚ¹ÜÀí·þÎñÆ÷½øÐÐÈÏÖ¤¡£Ä¿Ç° CloudStack ²ÉÓÃÁ½ÖÖÈÏÖ¤·½Ê½£º
1.Session ÈÏÖ¤£ºÍ¨¹ý login API£¬»ñµÃÒ»¸ö JSESSIONID
cookie ºÍÒ»¸ö SESSIONKEY token¡£
2.API Key ÈÏÖ¤¡£
±¾ÎÄ´úÂëʾÀý²ÉÓà API Key ½øÐÐÈÏÖ¤¡£Æä¹ý³ÌÈçÏ£º
1.¹ÜÀíÔ±¸øµ÷ÓÃÕß·ÖÅä API Key ºÍ Security Key£¨ÓÉ
Admin ͨ¹ý web console »òÕßÓà registerUserKeysÔÚ³ÌÐòÖÐÉú³É£©¡£
2.µ÷ÓÃÕßÓà Security Key ÒÔ HMAC SHA-1 ¹þÏ£Ëã·¨¶Ô
API Key + Command String Éú³ÉÇ©Ãû¡£
3.×îºóµÄ API Request=Base URL+API Path+Command
String+Signature¡£
ÏÂÃæ¾ßÌåΪ admin Óû§Éú³ÉÁ½¸ö key£º
Ê×Ïȵǽ¹ÜÀį́£ºhttp://192.168.1.4:8080/client¡£
µã»÷ accounts£¬Ñ¡Ôñ admin£¬µã»÷ users tab£¬ÕÒµ½ admin¡£
¿ÉÒÔ¿´µ½ API Key ºÍ Security Key£¬Èç¹ûÁ½¸ö¿òûÓÐÖµ£¬µã»÷¹¤¾ßÀ¸µÄÔ¿³×Сͼ±ê£¬¡°Generate
Keys¡±£¬Èçͼ 16¡£

ͼ 16. Éú³É API Key ºÍ Security
Key
Á½¸ö Key µÄÉú³É½á¹ûÈçÏ£º
±í 3.Admin Óû§µÄ API Key ºÍ Security Key

½ÓÏÂÀ´Óà CloudStack µÄ Restful API Éú³ÉÒ»¸öÐéÄâ»ú¡£Æäµ÷Óà URL ÈçÏ£º
http://192.168.1.4:8080/client/api?command=deployVirtualMachine&\ serviceofferingid=1&templateid=4&zoneid=1 |
command ²ÎÊýÖеÄÄÚÈÝ¿ÉÒÔ²ÎÔÄ API Reference: CloudStack£¬´Ë´¦²»×¸Êö¡£ÐèҪעÒâµÄÊÇ£¬URL
µ±ÖÐÿ¸ö²ÎÊýÊǰ´ÕÕ×Öĸ˳ÐòÅÅÁеģ¬ÕâÊÇÉú³ÉÇ©Ãû±ØÒªµÄ¡£
ÏÂÃæÑÝʾÈçºÎÉú³ÉÇ©Ãû²¢×é×°Ò»¸öÍêÕûµÄ URL¡£
Ê×ÏÈÔÚ´Ë´¦ÏÂÔØÒ»¶Î perl ½Å±¾£¬ÎÒÃÇÒªÀûÓÃËüÀ´°ïÖúÉú³ÉÇ©Ãû¡£½«Ëü·ÅÈëºÏÊʵÄĿ¼£¬È»ºóÔÚÃüÁîÐÐϼüÈ룺
$ ./generate-url.pl ¨Cf 1 -u "command=deployvirtualmachine&serviceofferingid=1&templateid=4\ &zoneid=1" -a TEBBqfXkV-9blsxpkjFLAxNUmnvMsFEq7WKwPOMT_nuce69bmcElXz1\ izsN1qJFK58ye5U5hWWN2ckscsysodg ¨C s 7VJx0QfxvJQZBYZbLdct2QFck8lV6hwLMvo9\ YCJ97pVou8f_aDSHdhEqBaY2CtFI6_MULP0eYqr_Z7D2Jon8nQ |
-f ºóÃæÊý×Ö 1 ÊÇÉú³É url µÄÒâ˼£¬-a ºóÃæÊÇ API Key£¬-s ºóÃæÊÇ Security
Key¡£-u ºóÃæµÄ command ²ÎÊý¶¼ÒѾÐÞ¸ÄΪСд×Öĸ£¨´Ë²½²»¿ÉÊ¡ÂÔ£©¡£ÃüÁîÔËÐÐÍê±ÏÉú³ÉÒ»¶Î×Ö·û´®£º
http://*.*.*.*/client/api?command=deployvirtualmachine&serviceofferingid=1\ &zoneid=1&templateid=4&apikey=Kn7rrPjdXDWTrcjCTLs7hZM22o0X6aKSZ4Cy4\ GDUHD1TmoVw3e-oNxjRTCBXchffju5OFTqW4zPIik-HKxH7-w&signature=%2BQMXTBOoicZJG\ 6EosCcRGvO7OWU%3D
|
È»ºó°Ñ IP Ìæ»»ÈëÉÏÃæ url£¬²¢°Ñ command ÖеÄСд×Öĸ»¹Ô³ÉÔÀ´ÕýÈ·µÄ API Ãû×Ö£¬½á¹ûÈçÏ£º
http://192.168.1.4:8080/client/api?command=listVirtualMachines&account=\ admin&domainId=1&apikey=Kn7rrPjdXDWTrcjCTLs7hZM22o0X6aKSZ4Cy4GDUHD1TmoVw3e-o\ NxjRTCBXchffju5OFTqW4zPIik-HKxH7-w&signature=i5%2FQxBf7FIGc6GvAfNcpFnVKpEw%3D |
°Ñ¸Ã URL ¼üÈëä¯ÀÀÆ÷£¬¿ÉÒÔÖ´Ðгɹ¦£¬·µ»ØÒ»¶Î XML response£º
<deployvirtualmachineresponse cloud-stack-version="3.0.2.20120506223416"> <id>d29a98f2-610c-4e4e-9331-18c133c5bdb3</id> <jobid>a5c9f26d-98be-4a81-9883-da9dd8dfda47</jobid> </deployvirtualmachineresponse> |
Èç¹û»Øµ½¿ØÖÆÌ¨½çÃæµÄ instance tab£¬¿ÉÒÔ¿´µ½Ò»¸öÐ嵀 vm instance ±»´´½¨¡£
ÓÃͬÑùµÄ·½·¨£¬Ê¹ÓÃÈçÏÂÃüÁÁоٳö Admin Óû§ÏµÄÈ«²¿ÐéÄâ»ú¡£
http://192.168.1.4:8080/client/api?command=listVirtualMachines&account= admin&domainId=1&apikey=Kn7rrPjdXDWTrcjCTLs7hZM22o0X6aKSZ4Cy4GDUHD1TmoVw3e-\ oNxjRTCBXchffju5OFTqW4zPIik-HKxH7-w&signature=%2BQMXTBOoicZJG6EosCcRGvO7OWU%3D |
Q10£ºCentOS ÐèÒª°²×° perl ¿ª·¢»·¾³²ÅÄÜÔËÐÐÉÏÃæµÄ½Å±¾¡£Èç¹ûÔÚÃüÁîÖ´Ðйý³ÌÖгöÏÖÀàËÆ
cannot locate WWW/Mechanize ÀàµÄ´íÎó£¬ÐèÒªÏȰ²×° cpan£º
È»ºóÓà cpan °²×°È±ÉÙµÄ module£º
cpan install WWW::Mechanize |
ºóÃæÈ±ÉÙÄĸö module£¬¾ÍÓà cpan °²×°¸Ã module£¬Ö±µ½ËùʹÓõİü¶¼±»×°Èë¡£
×ÜÌå¶øÑÔ£¬CloudStack µÄ API ÌṩÁ˺ÜÁé»îºÍÇ¿´óµÄ¹¦ÄÜ£¬¶øÇÒͨ¹ý CloudBridge£¬¸üÊÇʵÏÖÁËÓëÑÇÂíÑ·
EC2 API µÄ¼æÈÝ¡£
ÏÖ×´ÓëÕ¹Íû
CloudStack ĿǰÔÚ Apache Õ¾µãµÄ¸üÐÂÒ²ºÜ¿ì£¬×îÐ嵀 4.0 Ò²ÒѾ·¢²¼£¬ËüÌṩÁË VLAN
¼ä·ÓÉ£¨VPC£©ÄÜÁ¦¡¢¸ø¹ÜÀí×ÊÔ´±£´æÔªÊý¾Ý¡¢Ôö¼ÓÐÂÀàÐÍ´æ´¢¡¢ºÍÖ§³Ö Ubuntu 12.04 ºÍ REHL6.3
µÈй¦ÄÜ¡£
ÔÚ¹úÄÚ£¬ÏñÖйúµçÐÅÕâÀà´óÐÍÆóÒµ£¬»¹ÓÐһЩÖÐСÐÍÆóÒµ£¬¶¼ÔÚѸËÙµÄʹÓà CloudStack À´¹¹½¨ËüÃǵĹ«¹²ÔÆ»ò˽ÓÐÔÆ¡¢»ìºÏÔÆÆ½Ì¨¡£ÔÚÕâЩÓû§µÄʵ¼ùÖУ¬CloudStack
¶Ô·á¸»ÖÖÀàµÄ Hypervisor¡¢´æ´¢ÀàÐ͵ÄÖ§³Ö¡¢Ç¿´óµÄÉìËõÄÜÁ¦ºÍÍøÂ繦ÄÜ¡¢Á¼ºÃµÄ°²È«Éè¼Æ¡¢Áé»îµÄ API
µ÷Óö¼ÁîÈËÁôÏÂÉî¿ÌÓ¡Ïó¡£
Óë OpenStack µÄ¾ºÕù»áÊǽÓÏÂÀ´¼¸Äê CloudStack ÎÞ·¨»Ø±ÜµÄÎÊÌ⣬Ïà¶ÔÓÚ¶ÔÊֵĺó·¢ÓÅÊÆ£¬CloudStack
¸üÇ¿µ÷³ÉÊìµÄ²úÆ·Ó¦Óᣵ«Ëæ×Å×ÔÉíµÄ¿ªÔ´£¬½«À´µÄ IaaS Êг¡Ò²Ðí»áÔÚÇóͬ·½Ãæ×ߵĸüÔ¶¡£
|