blob: a98c2700a5153f4472ac0d67be78dcf22b027e7c [file] [log] [blame]
Dean Troyer0986a7b2014-10-29 22:08:13 -05001==============
2Multi-Node Lab
3==============
Sean M. Collins09e550c2014-10-21 11:40:08 -04004
5Here is OpenStack in a realistic test configuration with multiple
6physical servers.
7
8Prerequisites Linux & Network
Sean Dague32930462014-11-18 06:51:16 -05009=============================
Sean M. Collins09e550c2014-10-21 11:40:08 -040010
11Minimal Install
Sean Dague32930462014-11-18 06:51:16 -050012---------------
Sean M. Collins09e550c2014-10-21 11:40:08 -040013
14You need to have a system with a fresh install of Linux. You can
15download the `Minimal
16CD <https://help.ubuntu.com/community/Installation/MinimalCD>`__ for
17Ubuntu releases since DevStack will download & install all the
18additional dependencies. The netinstall ISO is available for
Dean Troyerea3cdfa2014-11-08 08:29:16 -060019`Fedora <http://mirrors.kernel.org/fedora/releases/>`__
Sean M. Collins09e550c2014-10-21 11:40:08 -040020and
Dean Troyerea3cdfa2014-11-08 08:29:16 -060021`CentOS/RHEL <http://mirrors.kernel.org/centos/>`__.
Sean M. Collins09e550c2014-10-21 11:40:08 -040022
23Install a couple of packages to bootstrap configuration:
24
25::
26
27 apt-get install -y git sudo || yum install -y git sudo
28
29Network Configuration
Sean Dague32930462014-11-18 06:51:16 -050030---------------------
Sean M. Collins09e550c2014-10-21 11:40:08 -040031
32The first iteration of the lab uses OpenStack's FlatDHCP network
33controller so only a single network will be required. It should be on
34its own subnet without DHCP; the host IPs and floating IP pool(s) will
35come out of this block. This example uses the following:
36
37- Gateway: 192.168.42.1
38- Physical nodes: 192.168.42.11-192.168.42.99
39- Floating IPs: 192.168.42.128-192.168.42.254
40
41Configure each node with a static IP. For Ubuntu edit
42``/etc/network/interfaces``:
43
44::
45
46 auto eth0
47 iface eth0 inet static
48 address 192.168.42.11
49 netmask 255.255.255.0
50 gateway 192.168.42.1
51
52For Fedora and CentOS/RHEL edit
53``/etc/sysconfig/network-scripts/ifcfg-eth0``:
54
55::
56
57 BOOTPROTO=static
58 IPADDR=192.168.42.11
59 NETMASK=255.255.255.0
60 GATEWAY=192.168.42.1
61
62Installation shake and bake
Sean Dague32930462014-11-18 06:51:16 -050063===========================
Sean M. Collins09e550c2014-10-21 11:40:08 -040064
65Add the DevStack User
Sean Dague32930462014-11-18 06:51:16 -050066---------------------
Sean M. Collins09e550c2014-10-21 11:40:08 -040067
68OpenStack runs as a non-root user that has sudo access to root. There is
69nothing special about the name, we'll use ``stack`` here. Every node
70must use the same name and preferably uid. If you created a user during
71the OS install you can use it and give it sudo privileges below.
72Otherwise create the stack user:
73
74::
75
76 groupadd stack
77 useradd -g stack -s /bin/bash -d /opt/stack -m stack
78
79This user will be making many changes to your system during installation
80and operation so it needs to have sudo privileges to root without a
81password:
82
83::
84
85 echo "stack ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
86
87From here on use the ``stack`` user. **Logout** and **login** as the
88``stack`` user.
89
90Set Up Ssh
Sean Dague32930462014-11-18 06:51:16 -050091----------
Sean M. Collins09e550c2014-10-21 11:40:08 -040092
93Set up the stack user on each node with an ssh key for access:
94
95::
96
97 mkdir ~/.ssh; chmod 700 ~/.ssh
98 echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCyYjfgyPazTvGpd8OaAvtU2utL8W6gWC4JdRS1J95GhNNfQd657yO6s1AH5KYQWktcE6FO/xNUC2reEXSGC7ezy+sGO1kj9Limv5vrvNHvF1+wts0Cmyx61D2nQw35/Qz8BvpdJANL7VwP/cFI/p3yhvx2lsnjFE3hN8xRB2LtLUopUSVdBwACOVUmH2G+2BWMJDjVINd2DPqRIA4Zhy09KJ3O1Joabr0XpQL0yt/I9x8BVHdAx6l9U0tMg9dj5+tAjZvMAFfye3PJcYwwsfJoFxC8w/SLtqlFX7Ehw++8RtvomvuipLdmWCy+T9hIkl+gHYE4cS3OIqXH7f49jdJf jesse@spacey.local" > ~/.ssh/authorized_keys
99
100Download DevStack
Sean Dague32930462014-11-18 06:51:16 -0500101-----------------
Sean M. Collins09e550c2014-10-21 11:40:08 -0400102
103Grab the latest version of DevStack:
104
105::
106
107 git clone https://git.openstack.org/openstack-dev/devstack
108 cd devstack
109
110Up to this point all of the steps apply to each node in the cluster.
111From here on there are some differences between the cluster controller
112(aka 'head node') and the compute nodes.
113
114Configure Cluster Controller
Sean Dague32930462014-11-18 06:51:16 -0500115----------------------------
Sean M. Collins09e550c2014-10-21 11:40:08 -0400116
117The cluster controller runs all OpenStack services. Configure the
118cluster controller's DevStack in ``local.conf``:
119
120::
121
122 [[local|localrc]]
123 HOST_IP=192.168.42.11
124 FLAT_INTERFACE=eth0
125 FIXED_RANGE=10.4.128.0/20
126 FIXED_NETWORK_SIZE=4096
127 FLOATING_RANGE=192.168.42.128/25
128 MULTI_HOST=1
129 LOGFILE=/opt/stack/logs/stack.sh.log
130 ADMIN_PASSWORD=labstack
Swapnil (coolsvap) Kulkarnic988bf62015-10-08 13:10:43 +0530131 DATABASE_PASSWORD=supersecret
Balagopal7ed812c2016-03-01 04:43:31 +0000132 RABBIT_PASSWORD=supersecret
133 SERVICE_PASSWORD=supersecret
Sean M. Collins09e550c2014-10-21 11:40:08 -0400134
135In the multi-node configuration the first 10 or so IPs in the private
136subnet are usually reserved. Add this to ``local.sh`` to have it run
137after every ``stack.sh`` run:
138
139::
140
141 for i in `seq 2 10`; do /opt/stack/nova/bin/nova-manage fixed reserve 10.4.128.$i; done
142
143Fire up OpenStack:
144
145::
146
147 ./stack.sh
148
149A stream of activity ensues. When complete you will see a summary of
150``stack.sh``'s work, including the relevant URLs, accounts and passwords
151to poke at your shiny new OpenStack. The most recent log file is
152available in ``stack.sh.log``.
153
154Configure Compute Nodes
Sean Dague32930462014-11-18 06:51:16 -0500155-----------------------
Sean M. Collins09e550c2014-10-21 11:40:08 -0400156
157The compute nodes only run the OpenStack worker services. For additional
158machines, create a ``local.conf`` with:
159
160::
161
Kashyap Kopparamcd1c3c72014-10-31 17:32:57 +0530162 [[local|localrc]]
Sean M. Collins09e550c2014-10-21 11:40:08 -0400163 HOST_IP=192.168.42.12 # change this per compute node
164 FLAT_INTERFACE=eth0
165 FIXED_RANGE=10.4.128.0/20
166 FIXED_NETWORK_SIZE=4096
167 FLOATING_RANGE=192.168.42.128/25
168 MULTI_HOST=1
169 LOGFILE=/opt/stack/logs/stack.sh.log
170 ADMIN_PASSWORD=labstack
Swapnil (coolsvap) Kulkarnic988bf62015-10-08 13:10:43 +0530171 DATABASE_PASSWORD=supersecret
Balagopal7ed812c2016-03-01 04:43:31 +0000172 RABBIT_PASSWORD=supersecret
173 SERVICE_PASSWORD=supersecret
Sean M. Collins09e550c2014-10-21 11:40:08 -0400174 DATABASE_TYPE=mysql
175 SERVICE_HOST=192.168.42.11
Masaki Matsushita597c9022015-08-15 11:35:20 +0900176 MYSQL_HOST=$SERVICE_HOST
177 RABBIT_HOST=$SERVICE_HOST
178 GLANCE_HOSTPORT=$SERVICE_HOST:9292
Sean Daguea6db5e32015-08-04 06:23:28 -0400179 ENABLED_SERVICES=n-cpu,n-net,n-api-meta,c-vol
Sean M. Collins09e550c2014-10-21 11:40:08 -0400180 NOVA_VNC_ENABLED=True
Masaki Matsushita597c9022015-08-15 11:35:20 +0900181 NOVNCPROXY_URL="http://$SERVICE_HOST:6080/vnc_auto.html"
Sean M. Collins09e550c2014-10-21 11:40:08 -0400182 VNCSERVER_LISTEN=$HOST_IP
183 VNCSERVER_PROXYCLIENT_ADDRESS=$VNCSERVER_LISTEN
184
Sean Daguea6db5e32015-08-04 06:23:28 -0400185**Note:** the ``n-api-meta`` service is a version of the api server
186that only serves the metadata service. It's needed because the
187computes created won't have a routing path to the metadata service on
188the controller.
189
Sean M. Collins09e550c2014-10-21 11:40:08 -0400190Fire up OpenStack:
191
192::
193
194 ./stack.sh
195
196A stream of activity ensues. When complete you will see a summary of
197``stack.sh``'s work, including the relevant URLs, accounts and passwords
198to poke at your shiny new OpenStack. The most recent log file is
199available in ``stack.sh.log``.
200
201Cleaning Up After DevStack
Sean Dague32930462014-11-18 06:51:16 -0500202--------------------------
Sean M. Collins09e550c2014-10-21 11:40:08 -0400203
204Shutting down OpenStack is now as simple as running the included
205``unstack.sh`` script:
206
207::
208
209 ./unstack.sh
210
211A more aggressive cleanup can be performed using ``clean.sh``. It
212removes certain troublesome packages and attempts to leave the system in
213a state where changing the database or queue manager can be reliably
214performed.
215
216::
217
218 ./clean.sh
219
220Sometimes running instances are not cleaned up. DevStack attempts to do
221this when it runs but there are times it needs to still be done by hand:
222
223::
224
225 sudo rm -rf /etc/libvirt/qemu/inst*
226 sudo virsh list | grep inst | awk '{print $1}' | xargs -n1 virsh destroy
227
228Options pimp your stack
Sean Dague32930462014-11-18 06:51:16 -0500229=======================
Sean M. Collins09e550c2014-10-21 11:40:08 -0400230
231Additional Users
Sean Dague32930462014-11-18 06:51:16 -0500232----------------
Sean M. Collins09e550c2014-10-21 11:40:08 -0400233
234DevStack creates two OpenStack users (``admin`` and ``demo``) and two
Peter Stachowski9a808922015-04-08 19:48:09 +0000235projects (also ``admin`` and ``demo``). ``admin`` is exactly what it
Sean M. Collins09e550c2014-10-21 11:40:08 -0400236sounds like, a privileged administrative account that is a member of
Peter Stachowski9a808922015-04-08 19:48:09 +0000237both the ``admin`` and ``demo`` projects. ``demo`` is a normal user
238account that is only a member of the ``demo`` project. Creating
Sean M. Collins09e550c2014-10-21 11:40:08 -0400239additional OpenStack users can be done through the dashboard, sometimes
240it is easier to do them in bulk from a script, especially since they get
241blown away every time ``stack.sh`` runs. The following steps are ripe
242for scripting:
243
244::
245
246 # Get admin creds
247 . openrc admin admin
Sean Dague32930462014-11-18 06:51:16 -0500248
Peter Stachowski9a808922015-04-08 19:48:09 +0000249 # List existing projects
250 openstack project list
Sean M. Collins09e550c2014-10-21 11:40:08 -0400251
252 # List existing users
Peter Stachowski9a808922015-04-08 19:48:09 +0000253 openstack user list
Sean M. Collins09e550c2014-10-21 11:40:08 -0400254
Peter Stachowski9a808922015-04-08 19:48:09 +0000255 # Add a user and project
Sean M. Collins09e550c2014-10-21 11:40:08 -0400256 NAME=bob
Balagopal7ed812c2016-03-01 04:43:31 +0000257 PASSWORD=BigSecret
Peter Stachowski9a808922015-04-08 19:48:09 +0000258 PROJECT=$NAME
259 openstack project create $PROJECT
260 openstack user create $NAME --password=$PASSWORD --project $PROJECT
261 openstack role add Member --user $NAME --project $PROJECT
262 # The Member role is created by stack.sh
Mike Perezc271b3e2016-10-03 16:00:33 -0700263 # openstack role assignment list
Sean M. Collins09e550c2014-10-21 11:40:08 -0400264
265Swift
Sean Dague32930462014-11-18 06:51:16 -0500266-----
Sean M. Collins09e550c2014-10-21 11:40:08 -0400267
Shilla Saebi2ed09d82015-04-21 15:02:13 -0400268Swift, OpenStack Object Storage, requires a significant amount of resources
Sean Daguea6db5e32015-08-04 06:23:28 -0400269and is disabled by default in DevStack. The support in DevStack is geared
Shilla Saebi2ed09d82015-04-21 15:02:13 -0400270toward a minimal installation but can be used for testing. To implement a
271true multi-node test of swift, additional steps will be required. Enabling it is as
Sean M. Collins09e550c2014-10-21 11:40:08 -0400272simple as enabling the ``swift`` service in ``local.conf``:
273
274::
275
276 enable_service s-proxy s-object s-container s-account
277
Shilla Saebi2ed09d82015-04-21 15:02:13 -0400278Swift, OpenStack Object Storage, will put its data files in ``SWIFT_DATA_DIR`` (default
Sean M. Collins09e550c2014-10-21 11:40:08 -0400279``/opt/stack/data/swift``). The size of the data 'partition' created
280(really a loop-mounted file) is set by ``SWIFT_LOOPBACK_DISK_SIZE``. The
JordanPa6dfe812014-11-20 18:06:23 +0100281Swift config files are located in ``SWIFT_CONF_DIR`` (default
Sean M. Collins09e550c2014-10-21 11:40:08 -0400282``/etc/swift``). All of these settings can be overridden in (wait for
283it...) ``local.conf``.
284
285Volumes
Sean Dague32930462014-11-18 06:51:16 -0500286-------
Sean M. Collins09e550c2014-10-21 11:40:08 -0400287
288DevStack will automatically use an existing LVM volume group named
289``stack-volumes`` to store cloud-created volumes. If ``stack-volumes``
Dean Troyerea3cdfa2014-11-08 08:29:16 -0600290doesn't exist, DevStack will set up a 10Gb loop-mounted file to contain
Sean M. Collins09e550c2014-10-21 11:40:08 -0400291it. This obviously limits the number and size of volumes that can be
292created inside OpenStack. The size can be overridden by setting
293``VOLUME_BACKING_FILE_SIZE`` in ``local.conf``.
294
295``stack-volumes`` can be pre-created on any physical volume supported by
296Linux's LVM. The name of the volume group can be changed by setting
297``VOLUME_GROUP`` in ``localrc``. ``stack.sh`` deletes all logical
298volumes in ``VOLUME_GROUP`` that begin with ``VOLUME_NAME_PREFIX`` as
299part of cleaning up from previous runs. It is recommended to not use the
300root volume group as ``VOLUME_GROUP``.
301
302The details of creating the volume group depends on the server hardware
303involved but looks something like this:
304
305::
306
307 pvcreate /dev/sdc
308 vgcreate stack-volumes /dev/sdc
309
310Syslog
Sean Dague32930462014-11-18 06:51:16 -0500311------
Sean M. Collins09e550c2014-10-21 11:40:08 -0400312
313DevStack is capable of using ``rsyslog`` to aggregate logging across the
314cluster. It is off by default; to turn it on set ``SYSLOG=True`` in
315``local.conf``. ``SYSLOG_HOST`` defaults to ``HOST_IP``; on the compute
316nodes it must be set to the IP of the cluster controller to send syslog
317output there. In the example above, add this to the compute node
318``local.conf``:
319
320::
321
322 SYSLOG_HOST=192.168.42.11
323
324Using Alternate Repositories/Branches
Sean Dague32930462014-11-18 06:51:16 -0500325-------------------------------------
Sean M. Collins09e550c2014-10-21 11:40:08 -0400326
327The git repositories for all of the OpenStack services are defined in
328``stackrc``. Since this file is a part of the DevStack package changes
329to it will probably be overwritten as updates are applied. Every setting
330in ``stackrc`` can be redefined in ``local.conf``.
331
332To change the repository or branch that a particular OpenStack service
333is created from, simply change the value of ``*_REPO`` or ``*_BRANCH``
334corresponding to that service.
335
336After making changes to the repository or branch, if ``RECLONE`` is not
337set in ``localrc`` it may be necessary to remove the corresponding
338directory from ``/opt/stack`` to force git to re-clone the repository.
339
Shilla Saebi2ed09d82015-04-21 15:02:13 -0400340For example, to pull nova, OpenStack Compute, from a proposed release candidate
341in the primary nova repository:
Sean M. Collins09e550c2014-10-21 11:40:08 -0400342
343::
344
345 NOVA_BRANCH=rc-proposed
346
Shilla Saebi2ed09d82015-04-21 15:02:13 -0400347To pull glance, OpenStack Image service, from an experimental fork:
Sean M. Collins09e550c2014-10-21 11:40:08 -0400348
349::
350
351 GLANCE_BRANCH=try-something-big
352 GLANCE_REPO=https://github.com/mcuser/glance.git
353
354Notes stuff you might need to know
Sean Dague32930462014-11-18 06:51:16 -0500355==================================
Sean M. Collins09e550c2014-10-21 11:40:08 -0400356
357Reset the Bridge
Sean Dague32930462014-11-18 06:51:16 -0500358----------------
Sean M. Collins09e550c2014-10-21 11:40:08 -0400359
360How to reset the bridge configuration:
361
362::
363
364 sudo brctl delif br100 eth0.926
365 sudo ip link set dev br100 down
366 sudo brctl delbr br100
367
368Set MySQL Password
Sean Dague32930462014-11-18 06:51:16 -0500369------------------
Sean M. Collins09e550c2014-10-21 11:40:08 -0400370
371If you forgot to set the root password you can do this:
372
373::
374
375 mysqladmin -u root -pnova password 'supersecret'
Zhenzan Zhoue1f87962015-09-08 16:49:52 +0800376
377Live Migration
378--------------
379
380In order for live migration to work with the default live migration URI::
381
382 [libvirt]
383 live_migration_uri = qemu+ssh://stack@%s/system
384
385SSH keys need to be exchanged between each compute node:
386
3871. The SOURCE root user's public RSA key (likely in /root/.ssh/id_rsa.pub)
388 needs to be in the DESTINATION stack user's authorized_keys file
389 (~stack/.ssh/authorized_keys). This can be accomplished by manually
390 copying the contents from the file on the SOURCE to the DESTINATION. If
391 you have a password configured for the stack user, then you can use the
392 following command to accomplish the same thing::
393
394 ssh-copy-id -i /root/.ssh/id_rsa.pub stack@DESTINATION
395
3962. The DESTINATION host's public ECDSA key (/etc/ssh/ssh_host_ecdsa_key.pub)
397 needs to be in the SOURCE root user's known_hosts file
398 (/root/.ssh/known_hosts). This can be accomplished by running the
399 following on the SOURCE machine (hostname must be used)::
400
401 ssh-keyscan -H DEST_HOSTNAME | sudo tee -a /root/.ssh/known_hosts
402
Hidekazu Nakamura541617b2016-11-09 15:27:19 +09004033. Verify that login via ssh works without a password::
404
405 ssh -i /root/.ssh/id_rsa.pub stack@DESTINATION
406
Zhenzan Zhoue1f87962015-09-08 16:49:52 +0800407In essence, this means that every compute node's root user's public RSA key
408must exist in every other compute node's stack user's authorized_keys file and
409every compute node's public ECDSA key needs to be in every other compute
410node's root user's known_hosts file. Please note that if the root or stack
411user does not have a SSH key, one can be generated using::
412
413 ssh-keygen -t rsa
414
415The above steps are necessary because libvirtd runs as root when the
416live_migration_uri uses the "qemu:///system" family of URIs. For more
417information, see the `libvirt documentation`_.
418
419.. _libvirt documentation: https://libvirt.org/drvqemu.html#securitydriver