| Welcome to Apache Tashi! |
| |
| This text will show you how to get set up quickly, and then will touch |
| on how to configure additional functionality. |
| |
| The audience for this document is someone with skills in the following areas: |
| * Creating disk images for mass installation |
| * Networking, bridging and bonding |
| |
| You must be able to properly create and maintain disk images that newly |
| created virtual machines can boot from. This includes handling |
| installations of hardware drivers necessary to run in the virtualized |
| environment provided by Tashi. |
| |
| You must be able to properly handle connections to an existing network. |
| If you do not operate the network the virtual machines are to be |
| connected to, you must make arrangements with your network |
| administrators for permission to connect to their network, IP address |
| blocks, name service, DHCP and any other services necessary. The |
| instructions here reflect an environment commonly available within a |
| home network, i.e. a home router providing access to name service, NAT |
| to access the internet and a DHCP service that will hand out private |
| addresses without the need for prior reservations. |
| |
| The hardware demands for an installation of Tashi are extremely modest, |
| but a Tashi cluster can grow to a large size. This installation document |
| will first demonstrate a Tashi setup in a virtual machine on a 2007 era |
| Macbook Pro. |
| |
| If you already have an existing set of physical machines, you can choose |
| one now to host the cluster manager and the scheduler. You can follow |
| the instructions on how to install Tashi on a single machine, then |
| continue on with suggestions on how to deploy additional nodes. |
| |
| ---+ Installation on a single host |
| |
| An installation on a single host will run the cluster manager, the |
| primitive scheduler agent and a node manager. Install Linux on this |
| machine, add the KVM virtualization packages and prepare the networking |
| on the host to connect virtual machines. |
| |
| ---++ Sample fulfillment of prerequisites |
| |
| For example, once you have logged into the machine as root, do the |
| following to create the bridge your newly created virtual machines will |
| connect to. You should be connected via console because you may lose |
| your network connection if you aren't very careful here. Refer to your |
| distribution's instructions on how to make this configuration permanent. |
| |
| # BEGIN SAMPLE PREPARATION |
| # create a network bridge for the default network |
| brctl addbr br0 |
| |
| # set the bridge's hello and forward delay to 1 second |
| brctl setfd br0 1 |
| brctl sethello br0 1 |
| |
| # disconnect eth0 from the network, attach it to the bridge and |
| # obtain an address for the bridge |
| ifdown eth0;ifconfig eth0 0.0.0.0;brctl addif br0 eth0;dhclient br0 |
| |
| # create a script /etc/qemu-ifup.0 which will allow virtual machines |
| # to be attached to the default network (0). |
| |
| cat /etc/qemu-ifup.0 |
| #!/bin/sh |
| |
| /sbin/ifconfig $1 0.0.0.0 up |
| /sbin/brctl addif br0 $1 |
| exit 0 |
| |
| # Ensure the script has execute permissions |
| chmod 700 /etc/qemu-ifup.0 |
| |
| # END SAMPLE PREPARATION |
| |
| If you don't have RPyC version 3.1 installed, download a copy from |
| http://sourceforge.net/projects/rpyc/files/main/ and install it. |
| |
| Prepare a virtual machine image in qcow2 format for Tashi to deploy. You |
| can create this with practically any consumer or professional |
| virtualization system, by converting the resulting disk image via |
| qemu-img. Note that operating systems from Redmond only tend to install |
| a minimal amount of hardware drivers, and deployment could fail because |
| the necessary drivers aren't on the disk image. Search online for a |
| virtual driver diskette providing virtio drivers for qemu, or other |
| drivers for the virtualization layer you select. Linux and BSD VMs |
| should be fine. For this installation, the default Tashi configuration |
| will look for images in /tmp/images |
| |
| ---++ Installation of Tashi code |
| |
| If you are reading this, you will already have obtained a distribution |
| of the code. Go to the top level directory of Tashi and create a |
| destination directory for the code base: |
| |
| ls |
| DISCLAIMER doc/ etc/ LICENSE Makefile NOTICE README src/ |
| |
| mkdir /usr/local/tashi |
| |
| Move the Tashi code to the directory you created |
| mv * /usr/local/tashi |
| |
| Create Tashi executables in /usr/local/tashi/bin |
| cd /usr/local/tashi |
| root@grml:/usr/local/tashi# make |
| Symlinking in clustermanager... |
| Symlinking in nodemanager... |
| Symlinking in tashi-client... |
| Symlinking in primitive... |
| Symlinking in zoni-cli... |
| Symlinking in Accounting server... |
| Done |
| |
| If /usr/local/tashi/src is not included in the system's default path for |
| searching for python modules, ensure the environment variable PYTHONPATH |
| is set before using any Tashi executables. |
| |
| export PYTHONPATH=/usr/local/tashi/src |
| |
| Start the cluster manager and populate the hosts and networks databases. |
| When defining the host, you must provide the name the host has been |
| given by the hostname command. If you plan on eventually having several |
| hosts and networks, feel free to add them now. |
| |
| root@grml:/usr/local/tashi/bin# DEBUG=1 ./clustermanager |
| 2012-01-26 23:12:33,972 [./clustermanager:INFO] Using configuration file(s) ['/usr/local/tashi/etc/TashiDefaults.cfg'] |
| 2012-01-26 23:12:33,972 [./clustermanager:INFO] Starting cluster manager |
| ********************************************************************** |
| Welcome to IPython. I will try to create a personal configuration directory |
| where you can customize many aspects of IPython's functionality in: |
| |
| /root/.ipython |
| Initializing from configuration: /usr/lib/python2.6/dist-packages/IPython/UserConfig |
| |
| Successful installation! |
| |
| Please read the sections 'Initial Configuration' and 'Quick Tips' in the |
| IPython manual (there are both HTML and PDF versions supplied with the |
| distribution) to make sure that your system environment is properly configured |
| to take advantage of IPython's features. |
| |
| Important note: the configuration system has changed! The old system is |
| still in place, but its setting may be partly overridden by the settings in |
| "~/.ipython/ipy_user_conf.py" config file. Please take a look at the file |
| if some of the new settings bother you. |
| |
| |
| Please press <RETURN> to start IPython. |
| ********************************************************************** |
| |
| In [1]: from tashi.rpycservices.rpyctypes import Host, HostState, Network |
| |
| In [2]: data.baseDataObject.hosts[1] = Host(d={'id':1,'name':'grml','state': HostState.Normal,'up':False}) |
| |
| In [3]: data.baseDataObject.networks[1]=Network(d={'id':0,'name':'default'}) |
| |
| In [4]: data.baseDataObject.save() |
| |
| In [5]: import os |
| |
| In [6]: os.kill(os.getpid(), 9) |
| |
| Run the cluster manager in the background: |
| root@grml:/usr/local/tashi/bin# ./clustermanager & |
| [1] 4289 |
| root@grml:/usr/local/tashi/bin# 2012-01-25 07:53:43,177 [./clustermanager:INFO] Using configuration file(s) ['/usr/local/tashi/etc/TashiDefaults.cfg'] |
| 2012-01-25 07:53:43,177 [./clustermanager:INFO] Starting cluster manager |
| |
| Run the node manager in the background. Note that the hostname must be |
| registered with the cluster manager, as shown above. |
| |
| root@grml:/usr/local/tashi/bin# ./nodemanager & |
| [2] 4293 |
| root@grml:/usr/local/tashi/bin# 2012-01-25 07:53:59,348 [__main__:INFO] Using configuration file(s) ['/usr/local/tashi/etc/TashiDefaults.cfg', '/usr/local/tashi/etc/NodeManager.cfg'] |
| 2012-01-25 07:53:59,392 [/usr/local/tashi/src/tashi/nodemanager/vmcontrol/qemu.py:INFO] No VM information found in /var/tmp/VmControlQemu/ |
| 2012-01-25 07:53:59,404 [/usr/local/tashi/src/tashi/nodemanager/vmcontrol/qemu.py:INFO] Waiting for NM initialization |
| |
| Verify that the node is shown as being "Up". |
| |
| root@grml:/usr/local/tashi/bin# ./tashi-client gethosts |
| id reserved name decayed up state version memory cores notes |
| ---------------------------------------------------------------- |
| 1 [] grml True True Normal HEAD 233 1 None |
| |
| Start the primitive scheduling agent: |
| root@grml:/usr/local/tashi/bin# ./primitive & |
| [3] 4312 |
| |
| Verify that the cluster manager has full communication with the host. |
| When this has happened, decayed is False. |
| |
| root@grml:/usr/local/tashi/bin# tashi-client gethosts |
| id reserved name decayed up state version memory cores notes |
| ---------------------------------------------------------------- |
| 1 [] grml False True Normal HEAD 233 1 None |
| |
| Check the presence of a disk image: |
| |
| root@grml:/usr/local/tashi/bin# ls /tmp/images/ |
| debian-wheezy-amd64.qcow2 |
| root@grml:/usr/local/tashi/bin# ./tashi-client getimages |
| id imageName imageSize |
| --------------------------------------- |
| 0 debian-wheezy-amd64.qcow2 1.74G |
| |
| Create a VM with 1 core and 128 MB of memory using our disk image in |
| non-persistent mode: |
| |
| root@grml:/usr/local/tashi/bin# ./tashi-client createVm --cores 1 |
| --memory 128 --name wheezy --disks debian-wheezy-amd64.qcow2 |
| |
| id hostId name user state disk memory cores |
| --------------------------------------------------------------------- |
| 1 None wheezy root Pending debian-wheezy-amd64.qcow2 128 1 |
| |
| 2012-02-02 22:09:58,392 [./primitive:INFO] Scheduling instance wheezy (128 mem, 1 cores, 0 uid) on host grml |
| 2012-02-02 22:09:58,398 [/usr/local/tashi/src/tashi/nodemanager/vmcontrol/qemu.pyc:INFO] Executing command: /usr/bin/kvm -clock dynticks -drive file=/tmp/images/debian-wheezy-amd64.qcow2,if=ide,index=0,cache=off,snapshot=on -net nic,macaddr=52:54:00:90:2a:9d,model=virtio,vlan=0 -net tap,ifname=tashi1.0,vlan=0,script=/etc/qemu-ifup.0 -m 128 -smp 1 -serial null -vnc none -monitor pty |
| 2012-02-02 22:09:58,412 [/usr/local/tashi/src/tashi/nodemanager/vmcontrol/qemu.pyc:INFO] Adding vmId 5472 |
| |
| Verify the machine is running: |
| |
| root@grml:/usr/local/tashi/bin# ./tashi-client getinstances |
| id hostId name user state disk memory cores |
| --------------------------------------------------------------------- |
| 1 1 wheezy root Running debian-wheezy-amd64.qcow2 128 1 |
| |
| After the machine had a chance to boot, find out what address it got. If |
| you have a DHCP server on your network, search the pool of addresses: |
| |
| root@grml:/usr/local/tashi/bin# ifconfig br0 |
| br0 Link encap:Ethernet HWaddr 00:0c:29:62:b3:76 |
| inet addr:192.168.244.131 Bcast:192.168.244.255 Mask:255.255.255.0 |
| inet6 addr: fe80::20c:29ff:fe62:b376/64 Scope:Link |
| UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 |
| RX packets:2622 errors:0 dropped:0 overruns:0 frame:0 |
| TX packets:1598 errors:0 dropped:0 overruns:0 carrier:0 |
| collisions:0 txqueuelen:0 |
| RX bytes:730925 (713.7 KiB) TX bytes:226530 (221.2 KiB) |
| |
| Find the MAC address given to the VM |
| |
| root@grml:/usr/local/tashi/bin# ./tashi-client getmyinstances |
| --show-nics --hide-disk |
| id hostId name user state memory cores nics |
| ---------------------------------------------------------------------------------------------------- |
| 1 1 wheezy root Running 128 1 [{'ip': None, 'mac': '52:54:00:90:2a:9d', 'network': 0}] |
| |
| Look for that MAC address on the local network |
| root@grml:/usr/local/tashi/bin# arp-scan -I br0 192.168.244.0/24|grep 90:2a:9d |
| Interface: br0, datalink type: EN10MB (Ethernet) |
| Starting arp-scan 1.6 with 256 hosts (http://www.nta-monitor.com/tools/arp-scan/) |
| 192.168.244.136 52:54:00:90:2a:9d QEMU |
| |
| Log into the VM: |
| root@grml:/usr/local/tashi/bin# ssh root@192.168.244.136 |
| The authenticity of host '192.168.244.136 (192.168.244.136)' can't be established. |
| RSA key fingerprint is af:f2:1a:3a:2b:7c:c3:3b:6a:04:4f:37:bb:75:16:58. |
| Are you sure you want to continue connecting (yes/no)? yes |
| Warning: Permanently added '192.168.244.136' (RSA) to the list of known hosts. |
| root@192.168.244.136's password: |
| Linux debian 3.1.0-1-amd64 #1 SMP Tue Jan 10 05:01:58 UTC 2012 x86_64 |
| |
| The programs included with the Debian GNU/Linux system are free software; |
| the exact distribution terms for each program are described in the |
| individual files in /usr/share/doc/*/copyright. |
| |
| Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent |
| permitted by applicable law. |
| Last login: Thu Jan 19 15:06:22 2012 from login.cirrus.pdl.cmu.local |
| debian:~# |
| debian:~# uname -a |
| Linux debian 3.1.0-1-amd64 #1 SMP Tue Jan 10 05:01:58 UTC 2012 x86_64 GNU/Linux |
| debian:~# cat /proc/cpuinfo |
| processor : 0 |
| vendor_id : AuthenticAMD |
| cpu family : 6 |
| model : 2 |
| model name : QEMU Virtual CPU version 0.14.0 |
| stepping : 3 |
| cpu MHz : 2193.593 |
| cache size : 512 KB |
| fpu : yes |
| fpu_exception : yes |
| cpuid level : 4 |
| wp : yes |
| flags : fpu pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx lm up nopl pni cx16 popcnt hypervisor lahf_lm svm abm sse4a |
| bogomips : 4387.18 |
| TLB size : 1024 4K pages |
| clflush size : 64 |
| cache_alignment : 64 |
| address sizes : 40 bits physical, 48 bits virtual |
| power management: |
| |
| debian:~# perl -e 'print "My new VM!\n";' |
| My new VM! |
| debian:~# halt |
| |
| Broadcast message from root@debian (pts/0) (Wed Jan 25 02:01:43 2012): |
| |
| The system is going down for system halt NOW! |
| debian:~# Connection to 192.168.244.136 closed by remote host. |
| Connection to 192.168.244.136 closed. |
| |
| 2012-02-02 22:18:35,662 [/usr/local/tashi/src/tashi/nodemanager/vmcontrol/qemu.pyc:INFO] Removing vmId 5472 because it is no longer running |
| 2012-02-02 22:18:35,662 [/usr/local/tashi/src/tashi/nodemanager/vmcontrol/qemu.pyc:INFO] Removing any scratch for wheezy |
| 2012-02-02 22:18:36,461 [./primitive:INFO] VM exited: wheezy |
| |
| Verify the VM is no longer running: |
| |
| root@grml:/usr/local/tashi/bin# ./tashi-client getinstances |
| id hostId name user state disk memory cores |
| -------------------------------------------- |
| |
| You have now completed the simplest form of a Tashi install: a single |
| machine providing hosting, scheduling and management services. For |
| additional information on what you can do, please view the documentation |
| in the doc/ directory. |