感谢支持
我们一直在努力

CentOS6下安装基于Xen的Eucalyptus 2.0.3

Eucalyptus


  • 官网 http://open.eucalyptus.com/downloads
  • 手册 http://open.eucalyptus.com/wiki
  • 服务器角色

    • Cloud controller(CLC),控制调度云的资源,同时提供web界面以及兼容EC2的SOAP服务
    • Walrus,实现了基于桶的存储,同时提供兼容S3的SOAP服务以及REST接口
    • Cluster controller(CC),实现以集群为单位的调度
    • Storage controller(SC),基于块的存储控制器,EBS-style
    • Node controller(NC),虚拟节点,运行xen及虚拟机的机器

版本

  • CentOS 6 Minimal install
  • Xen 4.1.1 NC服务器上面需要完全安装,其余服务器需要几个编译好的rpm,参考 http://www.linuxidc.com/Linux/2012-08/68287.htm
  • Eucalyptus 2.0.3,下载offline源码包, http://eucalyptussoftware.com/downloads/releases/eucalyptus-2.0.3-src-offline.tar.gz , 依赖的库 http://eucalyptussoftware.com/downloads/releases/eucalyptus-2.0.3-src-deps.tar.gz
  • euca2ools 1.3.1, 使用Fedora的,下载 http://eucalyptussoftware.com/downloads/releases/euca2ools-1.3.1-fedora-x86_64.tar.gz
  • dhcpd 3.0.5, CC上需要安装, 使用旧版本rhel5的, eucalyptus 2.0.3对稍微高版本的ISC dhcpd支持有问题, 下载http://ftp.RedHat.com/redhat/linux/enterprise/5Server/en/os/SRPMS/dhcp-3.0.5-29.el5_7.1.src.rpm

准备工作
 1. 下载各个软件包
 2. 除了NC以外的服务器安装CentOS 6 Minimal方式
 3. NC服务器按照参考文档安装配置Xen环境,注意在Xen的内核配置里面添加一项 max_loop=256
 4. 配置好所有机器的NTP,使它们时钟保持同步



安装过程 1. 创建 /etc/yum.repos.d/euca.repo 


  1. [euca]  
  2. name=Eucalyptus  
  3. baseurl=http://www.eucalyptussoftware.com/downloads/repo/eucalyptus/2.0.3/yum/centos/x86_64  
  4. gpgcheck=0  
 2. 通过yum安装必须的软件包 (所有机器上)


  1. yum -y install perl-Convert-ASN1.noarch scsi-target-utils httpd java-1.6.0-openjdk-devel ant ant-nodeps libvirt-devel curl-devel httpd-devel apr-devel openssl-devel libxml2 libxml2-devel gnutls gnutls-devel libgcrypt-devel zlib-devel perl-Convert-ASN1 perl-Crypt-OpenSSL-RSA perl-Crypt-OpenSSL-Random chkfontpath fuse-libs swig gcc make patch compat-expat1 compat-db43 lzo2 vblade m2crypto lvm2 rsync ntp vconfig groff rpm-build  
 3. 安装之前编译好的Xen的rpm包(给控制服务器,节点服务器已经装过xen的就不需要了)


  1. rpm -Uvh xen-licenses-*.x86_64.rpm xen-devel-*.x86_64.rpm xen-libs-*.x86_64.rpm   
 4. 安装dhcpd


  1. wget http://ftp.redhat.com/redhat/linux/enterprise/5Server/en/os/SRPMS/dhcp-3.0.5-29.el5_7.1.src.rpm  
  2.     
  3. rpm -i dhcp-3.0.5-29.el5_7.1.src.rpm  
  4.     
  5. cd ~/rpmbuild/SPECS/  
  6. rpmbuild -bb dhcp.spec  # 如果编译不过去,可能需要手动去掉-Werror编译选项  
  7.     
  8. cd ~/rpmbuild/RPMS/x86_64/  
  9. rpm -Uvh dhcp-3.0.5-29.el6.1.x86_64.rpm # 如果已经装了dhcp,先手动删除掉原来的  
 5. 安装Eucalyptus的依赖软件(eucalyptus-2.0.3-src-deps.tar.gz)


  1. export EUCALYPTUS=/home/public/eucalyptus-2.0.3  
  2. export APACHE_INCLUDES=/usr/include/httpd/  
  3. export APR_INCLUDES=/usr/include/apr-1/  
  4. export AXIS2C_HOME=${EUCALYPTUS}/packages/axis2c-1.6.0  
  5.   
  6. mkdir -p ${EUCALYPTUS}/packages/  
  7.   
  8. tar xzf eucalyptus-2.0.3-src-deps.tar.gz  
  9. cd eucalyptus-src-deps  
  10.   
  11. tar xzf axis2-1.4.tgz -C ${EUCALYPTUS}/packages/  
  12. cd ${EUCALYPTUS}/packages/  
  13. ln -sf axis2-1.4 axis2  
  14. cd –  
  15.   
  16. tar xzf axis2c-src-1.6.0.tar.gz  
  17. cd axis2c-src-1.6.0  
  18. CFLAGS=”-w” ./configure –prefix=${AXIS2C_HOME} -with-apache2=${APACHE_INCLUDES} –with-apr=${APR_INCLUDES} –enable-multi-thread=no  
  19. make  
  20. make install  
  21. cd –  
  22. rm -rf axis2c-src-1.6.0  
  23.   
  24. export LD_LIBRARY_PATH=${AXIS2C_HOME}/lib  
  25. tar xzf rampartc-src-1.3.0-0euca2.tar.gz  
  26. cd rampartc-src-1.3.0  
  27. ./configure –prefix=${AXIS2C_HOME} –enable-static=no –with-axis2=${AXIS2C_HOME}/include/axis2-1.6.0/  
  28. make  
  29. make install  
  30. rm -rf rampartc-src-1.3.0  
  31.   
  32. cd ${EUCALYPTUS}/packages  
  33. ln -sf axis2c-1.6.0 axis2c  
  34. cd –  
  35. sed -i “s;<\!–phase name=\”Security\”/–>;<phase name=\”Security\”/>;g” ${AXIS2C_HOME}/axis2.xml  
  36.   
  37. cd ..  
  38. rm -rf eucalyptus-src-deps  
 6. 安装Eucalyptus (eucalyptus-2.0.3-src-offline.tar.gz)


  1. export EUCALYPTUS=/home/public/eucalyptus-2.0.3  
  2. export AXIS2_HOME=${EUCALYPTUS}/packages/axis2  
  3. export AXIS2C_HOME=${EUCALYPTUS}/packages/axis2c  
  4. export JAVA_HOME=”/usr/lib/jvm/java-openjdk/”  
  5. export JAVA=”$JAVA_HOME/JRE/bin/java”  
  6.   
  7. tar xzf eucalyptus-2.0.3-src-offline.tar.gz  
  8. cd eucalyptus-2.0.3-src-offline  
  9. ./configure –with-axis2=${AXIS2_HOME} –with-axis2c=${AXIS2C_HOME} –enable-debug –prefix=${EUCALYPTUS}  
  10. make  
  11. make install  
  12. cd –  
  13. rm -rf eucalyptus-2.0.3-src-offline  
  14.   
  15. cd /home/public/  
  16. ln -sf eucalyptus-2.0.3 eucalyptus  
  17.   
  18. export EUCALYPTUS=/home/public/eucalyptus  
  19. ln -sf $EUCALYPTUS/etc/init.d/eucalyptus-cloud /etc/init.d/eucalyptus-cloud  
  20. ln -sf $EUCALYPTUS/etc/init.d/eucalyptus-cc /etc/init.d/eucalyptus-cc  
  21. ln -sf $EUCALYPTUS/etc/init.d/eucalyptus-nc /etc/init.d/eucalyptus-nc  
  22.   
  23. chkconfig eucalyptus-cloud off  
  24. chkconfig eucalyptus-cc off  
  25. chkconfig eucalyptus-nc off  
 7. 安装工具(euca2ools-1.3.1-fedora-x86_64.tar.gz)


  1. tar xzf euca2ools-1.3.1-fedora-x86_64.tar.gz  
  2. cd euca2ools-1.3.1-fedora-x86_64  
  3.   
  4. rpm -Uvh euca2ools-1.3.1-1.x86_64.rpm  
  5.   
  6. cd –  
  7. rm -rf euca2ools-1.3.1-fedora-x86_64  
配置 1. 创建一个专属用户 


  1. adduser eucalyptus  
 2. 初始化


  1. export EUCALYPTUS=/home/public/eucalyptus  
  2. $EUCALYPTUS/usr/sbin/euca_conf \  
  3.  -d $EUCALYPTUS \  
  4.  –hypervisor xen \  
  5.  –instances /home/eucalyptus/instances \  
  6.  –user eucalyptus \  
  7.  –setup  
  8. # -d: Eucalyptus路径  
  9. # –hypervisor: 使用的hypervisor类型,可以是kvm或xen  
  10. # –instances: instance存储路径  
  11. # –user: 服务使用的用户  
  12. # –setup: 初始化  
  13.   
  14. service eucalyptus-nc start  
  15. chkconfig eucalyptus-nc on  
 3. 编辑 /home/public/eucalyptus/etc/eucalyptus/eucalyptus.conf,按自己的需求修改,其中 VNET_BRIDGE 是xen要使用的bridge名字,其余的VNET_MODE等请参考配置文件的说明,里面写的很详细。
 4. 复制eucalyptus安装目录到所有机器上,建立init.d的链接,添加service的服务,然后还需要运行一次初始化
 5. 启动NC


  1. service eucalyptus-nc start # NC的Web service默认端口8775  
  2. chkconfig eucalyptus-nc on  
 6. 启动CC


  1. service eucalyptus-cc start # CC的Web service默认端口8774  
  2. chkconfig eucalyptus-cc on  
 7. 启动相关服务,不同的服务可以部署在不同机器上面


  1. export EUCALYPTUS=/home/public/eucalyptus  
  2. $EUCALYPTUS/usr/sbin/euca_conf -d $EUCALYPTUS –enable cloud  
  3. $EUCALYPTUS/usr/sbin/euca_conf -d $EUCALYPTUS –enable walrus  
  4. $EUCALYPTUS/usr/sbin/euca_conf -d $EUCALYPTUS –enable sc  
  5.   
  6. service eucalyptus-cloud start # 三个服务都通过这个脚本启动,http端口8080,https端口8443,Web service端口8773  
  7. chkconfig eucalyptus-cloud on  
 8. 注册服务


  1. $EUCALYPTUS/usr/sbin/euca_conf –register-walrus $IP  
  2. $EUCALYPTUS/usr/sbin/euca_conf –register-cluster OurCloud $IP # 注册一个Cluster,名字叫OurCloud,默认端口8774  
  3. $EUCALYPTUS/usr/sbin/euca_conf –register-sc OurCloud $IP # 给Cluster添加一个SC  
 9. 注册节点


  1. $EUCALYPTUS/usr/sbin/euca_conf –register-nodes $IP  

 10. 访问Cloud(CLC)所在IP的https://$IP:8443,用户名admin,密码admin,第一次登陆成功后会要求马上修改密码
 11. 在管理界面的导航栏找到Credentials,进入,点击按钮”Download Credentials”,会下载一个zip文件
 12. 把zip文件传到安装了euca2ools的服务器上,建一个目录解压进去,以后每次使用euca2ools前需要执行一次下面的命令


  1. source eucarc  
     

 13. 安装完成




实例1: 使用官网提供的Ubuntu image 1. 下载地址 http://open.eucalyptus.com/wiki/EucalyptuSUSErImageCreatorGuide 2. 添加 (euca-ubuntu-9.04-x86_64.tar.gz) 


  1. tar xzf euca-ubuntu-9.04-x86_64.tar.gz  
  2. cd euca-ubuntu-9.04-x86_64  
  3.   
  4. # 进入运行环境  
  5. source ~/.euca/eucarc  
  6.   
  7. # 上传内核,得到一个eki-XXXXXXXX  
  8. euca-bundle-image -d ./tmp/ -i xen-kernel/vmlinuz-2.6.27.21-0.1-xen –kernel true  
  9. euca-upload-bundle -b ubuntu9-bucket -m ./tmp/vmlinuz-2.6.27.21-0.1-xen.manifest.xml  
  10. euca-register ubuntu9-bucket/vmlinuz-2.6.27.21-0.1-xen.manifest.xml  
  11.   
  12. # 上传ramdisk,得到一个eri-XXXXXXXX  
  13. euca-bundle-image -d ./tmp/ -i xen-kernel/initrd-2.6.27.21-0.1-xen –ramdisk true  
  14. euca-upload-bundle -b ubuntu9-bucket -m ./tmp/initrd-2.6.27.21-0.1-xen.manifest.xml  
  15. euca-register ubuntu9-bucket/initrd-2.6.27.21-0.1-xen.manifest.xml  
  16.   
  17. # 上传根分区,用上面两个命令得到的数字执行  
  18. euca-bundle-image -d ./tmp/ -i ubuntu.9-04.x86-64.img –kernel eki-XXXXXXXX –ramdisk eri-XXXXXXXX  
  19. euca-upload-bundle -b ubuntu9-bucket -m ./tmp/ubuntu.9-04.x86-64.img.manifest.xml  
  20. euca-register ubuntu9-bucket/ubuntu.9-04.x86-64.img.manifest.xml  
 3. 创建一个登录虚拟机用的key


  1. euca-add-keypair euca-key > ~/euca-key.private  
  2. chmod 0600 ~/euca-key.private  
 4. 使用刚才上传虚拟机时候得到的emi值启动一个虚拟机实例


  1. euca-run-instances -k euca-key -n 1 emi-XXXXXXXX  
 5. 查看运行状态,没有dhcpd的话,这时拿不到IP


  1. >euca-describe-instances  
  2.   
  3. RESERVATION r-4F030A57 admin default  
  4. INSTANCE i-35C505C3 emi-XXXXXXXX 0.0.0.0 0.0.0.0 running euca-key 0 m1.small 2011-11-01T10:48:56.831Z OurCloud eki-XXXXXXXX eri-XXXXXXXX  

实例2: 使用dhcpd分配IP 0. CC服务器, IP eth3 192.168.11.3/24; NC服务器, IP eth3 192.168.11.4/24, Xen的bridge xenbr0; 实现从NC上面运行的虚拟机可以通过CC访问到外面的网络
 1. 配置CC的/home/public/eucalyptus/etc/eucalyptus/eucalyptus.conf


  1. VNET_PUBINTERFACE=”eth3″  
  2. VNET_PRIVINTERFACE=”eth3″  
  3.   
  4. VNET_DHCPDAEMON=”/usr/sbin/dhcpd”  
  5. VNET_DHCPUSER=”eucalyptus”  
  6.   
  7. VNET_MODE=”MANAGED-NOVLAN”  
  8. VNET_SUBNET=”192.168.101.0″  
  9. VNET_NETMASK=”255.255.255.0″  
  10. VNET_DNS=”192.168.11.2″  
  11. VNET_ADDRSPERNET=”16″   # 这个数字如果太大会无法创建虚拟机  
  12. VNET_PUBLICIPS=”192.168.11.80-192.168.11.120″  
  13. VNET_CLOUDIP=”192.168.11.3″  
  14. #VNET_MODE=”SYSTEM”  
 2. 配置NC的/home/public/eucalyptus/etc/eucalyptus/eucalyptus.conf


  1. VNET_PUBINTERFACE=”xenbr0″  
  2. VNET_PRIVINTERFACE=”xenbr0″  
  3. VNET_BRIDGE=”xenbr0″  
  4. VNET_MODE=”MANAGED_NOVLAN”  
  5. #VNET_MODE=”SYSTEM”  
 3. 重新启动CC


  1. service eucalyptus-cc cleanrestart  
 4. 创建一个虚拟机看看 


  1. >euca-run-instances -k euca-key -n 1 emi-XXXXXXXX   
  2. RESERVATION r-502007DA admin admin-default  
  3. INSTANCE i-440907AE emi-XXXXXXXX 0.0.0.0 0.0.0.0 pending euca-key 2011-11-04T11:01:17.656Z eki-XXXXXXXX eri-XXXXXXXX  
  4.   
  5. >euca-describe-instances   
  6. RESERVATION r-502007DA admin default  
  7. INSTANCE i-440907AE emi-XXXXXXXX 192.168.11.101 192.168.101.131 running euca-key 0 m1.small 2011-11-04T11:01:17.656Z OurCloud eki-XXXXXXXX eri-XXXXXXXX  
  8.   
  9. >ssh -i ~/euca-key.private 192.168.11.101  
  10. root@ubuntu:~#  
  11.   
  12. >ip addr show eth0  
  13. UNKNOWN qlen 1000  
  14.     link/ether d0:0d:44:09:07:ae brd ff:ff:ff:ff:ff:ff  
  15.     inet 192.168.101.131/28 brd 192.168.101.143 scope global eth0  
  16.     inet6 fe80::d20d:44ff:fe09:7ae/64 scope link   
  17.        valid_lft forever preferred_lft forever  
  18.   
  19. >ping -c 1 192.168.11.2   
  20. PING 192.168.11.2 (192.168.11.2) 56(84) bytes of data.  
  21. 64 bytes from 192.168.11.2: icmp_seq=1 ttl=63 time=1.26 ms  
  22.   
  23. — 192.168.11.2 ping statistics —  
  24. 1 packets transmitted, 1 received, 0% packet loss, time 0ms  
  25. rtt min/avg/max/mdev = 1.264/1.264/1.264/0.000 ms  
实例3: 自己建立CentOS6虚拟机
 1. 使用virtinst以minimal模式安装一个CentOS6虚拟机,硬盘弄一个分区就行了,其他分区都可省,在虚拟机里面安装配置好需要的软件,关掉虚拟机(安装参数可参考 http://www.linuxidc.com/Linux/2012-08/68287.htm )
 2. 提取虚拟机 / 分区,假设硬盘文件名为sda.img,2GB


  1. > parted sda.img  
  2. GNU Parted 2.1  
  3. Using /home/vms/centos6/sda.img  
  4. Welcome to GNU Parted! Type ‘help’ to view a list of commands.  
  5. (parted) U  
  6. Unit?  [compact]? <SPAN style=”COLOR: #ff0000″>b</SPAN>                                                         
  7. (parted) p  
  8. Model:  (file)  
  9. Disk /home/vms/centos6/sda.img: 2147483648B  
  10. Sector size (logical/physical): 512B/512B  
  11. Partition Table: msdos  
  12.   
  13. Number  Start     End          Size         Type     File system  Flags  
  14.  1      1048576B  2147483647B  2146435072B  primary  ext3         boot  
  15.   
  16. (parted) quit  
  17. > dd if=sda.img of=rootfs.img bs=1M skip=1 count=2047  
  18. 2047+0 records in  
  19. 2047+0 records out  
  20. 2146435072 bytes (2.1 GB) copied, 37.3425 s, 57.5 MB/s  
 3. 配置根分区文件


  1. # 加载根分区  
  2. mkdir /mnt/rootfs  
  3. mount -o loop rootfs.img /mnt/rootfs/  
  4.   
  5. # 复制出来kernel和initramfs  
  6. cp /mnt/rootfs/boot/vmlinuz-* ./kernel  
  7. cp /mnt/rootfs/boot/initramfs-* ./ramdisk  
  8.   
  9. # 配置网卡  
  10. rm udev/rules.d/70-persistent-net.rules  
  11. vi /mnt/rootfs/etc/udev/rules.d/60-net.rules  
  12. ACTION==”add”, SUBSYSTEM==”net”, IMPORT{program}=”/lib/udev/rename_device”  
  13. SUBSYSTEM==”net”, RUN+=”/etc/sysconfig/network-scripts/net.hotplug”  
  14.   
  15. vi /mnt/rootfs/etc/sysconfig/network-scripts/ifcfg-eth0  
  16. DEVICE=eth0  
  17. BOOTPROTO=dhcp  
  18. ONBOOT=yes  
  19. TYPE=Ethernet  
  20.   
  21. # 关闭selinux  
  22. vi /mnt/rootfs/etc/sysconfig/selinux   
  23. SELINUX=disabled  
  24.   
  25. # 修改fstab,去掉所有的UUID方式  
  26. vi /mnt/rootfs/etc/fstab  
  27. /dev/xvda1         /             ext3     defaults,errors=remount-ro 0 0  
  28. /dev/xvda2         /mnt          ext3     defaults                   0 0  
  29. /dev/xvda3         swap          swap     defaults                   0 0  
  30. tmpfs                   /dev/shm                tmpfs   defaults        0 0  
  31. devpts                  /dev/pts                devpts  gid=5,mode=620  0 0  
  32. sysfs                   /sys                    sysfs   defaults        0 0  
  33. proc                    /proc                   proc    defaults        0 0  
  34.   
  35. vi /mnt/rootfs/etc/mtab  
  36. /dev/sda1 / ext3 rw,errors=remount-ro 0 0  
  37. proc /proc proc rw 0 0  
  38. sysfs /sys sysfs rw 0 0  
  39.   
  40. # 启动时自动下载可登录的ssh-rsa的public key  
  41. vi /mnt/rootfs/etc/rc.local   
  42. # simple attempt to get the user ssh key using the meta-data service  
  43. mkdir -p /root/.ssh  
  44. echo >> /root/.ssh/authorized_keys  
  45. curl -m 10 -s http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key | grep ‘ssh-rsa’ >> /root/.ssh/authorized_keys  
  46. echo “AUTHORIZED_KEYS:”  
  47. echo “************************”  
  48. cat /root/.ssh/authorized_keys  
  49. echo “************************”  
  50.   
  51. # 删除密码  
  52. vi /mnt/rootfs/etc/shadow  
  53. root:!:15280:0:99999:7:::  
  54.   
  55. # 卸载  
  56. umount /mnt/rootfs  
 4. 修改NC上面的 /home/public/eucalyptus/usr/share/eucalyptus/gen_libvirt_xml, 把所有的sda改为xvda, 这个修改后,目前官网提供的image将不能使用
 5. 最后, 上传


  1. source ~/.euca/eucarc  
  2. # 上传内核,得到一个eki-KKKKKKKK  
  3. euca-bundle-image -d ./tmp/ -i ./kernel –kernel true  
  4. euca-upload-bundle -b centos6-bucket -m ./tmp/kernel.manifest.xml   
  5. euca-register centos6-bucket/kernel.manifest.xml  
  6. # 上传ramdisk,得到一个eri-RRRRRRRR  
  7. euca-bundle-image -d ./tmp/ -i ./ramdisk –ramdisk true  
  8. euca-upload-bundle -b centos6-bucket -m ./tmp/ramdisk.manifest.xml  
  9. euca-register centos6-bucket/ramdisk.manifest.xml  
  10. # 上传根分区  
  11. euca-bundle-image -d ./tmp/ -i ./rootfs.img –kernel  eki-KKKKKKKK –ramdisk eri-RRRRRRRR  
  12. euca-upload-bundle -b centos6-bucket -m ./tmp/rootfs.img.manifest.xml   
  13. euca-register centos6-bucket/rootfs.img.manifest.xml  
 6. 现在可以试试了,需要注意的即将创建的虚拟机的磁盘,不能小于根分区文件的字节数,否则不能建立虚拟机;而且设定的虚拟机的内存,不能小于内核的最低需要;这两个参数可以在管理界面里面调整。

赞(0) 打赏
转载请注明出处:服务器评测 » CentOS6下安装基于Xen的Eucalyptus 2.0.3
分享到: 更多 (0)

听说打赏我的人,都进福布斯排行榜啦!

支付宝扫一扫打赏

微信扫一扫打赏