blob: 15f02a0e5ee29a9d57c96358b42b73fd50eaf37e [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
David Rabel530d90c2017-03-22 08:25:26 +010076 useradd -s /bin/bash -d /opt/stack -m stack
Sean M. Collins09e550c2014-10-21 11:40:08 -040077
78This user will be making many changes to your system during installation
79and operation so it needs to have sudo privileges to root without a
80password:
81
82::
83
84 echo "stack ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
85
86From here on use the ``stack`` user. **Logout** and **login** as the
87``stack`` user.
88
89Set Up Ssh
Sean Dague32930462014-11-18 06:51:16 -050090----------
Sean M. Collins09e550c2014-10-21 11:40:08 -040091
92Set up the stack user on each node with an ssh key for access:
93
94::
95
96 mkdir ~/.ssh; chmod 700 ~/.ssh
97 echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCyYjfgyPazTvGpd8OaAvtU2utL8W6gWC4JdRS1J95GhNNfQd657yO6s1AH5KYQWktcE6FO/xNUC2reEXSGC7ezy+sGO1kj9Limv5vrvNHvF1+wts0Cmyx61D2nQw35/Qz8BvpdJANL7VwP/cFI/p3yhvx2lsnjFE3hN8xRB2LtLUopUSVdBwACOVUmH2G+2BWMJDjVINd2DPqRIA4Zhy09KJ3O1Joabr0XpQL0yt/I9x8BVHdAx6l9U0tMg9dj5+tAjZvMAFfye3PJcYwwsfJoFxC8w/SLtqlFX7Ehw++8RtvomvuipLdmWCy+T9hIkl+gHYE4cS3OIqXH7f49jdJf jesse@spacey.local" > ~/.ssh/authorized_keys
98
99Download DevStack
Sean Dague32930462014-11-18 06:51:16 -0500100-----------------
Sean M. Collins09e550c2014-10-21 11:40:08 -0400101
102Grab the latest version of DevStack:
103
104::
105
Matt Riedemann9b6d2f22019-06-18 10:43:16 -0400106 git clone https://opendev.org/openstack/devstack
Sean M. Collins09e550c2014-10-21 11:40:08 -0400107 cd devstack
108
109Up to this point all of the steps apply to each node in the cluster.
110From here on there are some differences between the cluster controller
111(aka 'head node') and the compute nodes.
112
113Configure Cluster Controller
Sean Dague32930462014-11-18 06:51:16 -0500114----------------------------
Sean M. Collins09e550c2014-10-21 11:40:08 -0400115
116The cluster controller runs all OpenStack services. Configure the
117cluster controller's DevStack in ``local.conf``:
118
119::
120
121 [[local|localrc]]
122 HOST_IP=192.168.42.11
Sean M. Collins09e550c2014-10-21 11:40:08 -0400123 FIXED_RANGE=10.4.128.0/20
Sean M. Collins09e550c2014-10-21 11:40:08 -0400124 FLOATING_RANGE=192.168.42.128/25
Sean M. Collins09e550c2014-10-21 11:40:08 -0400125 LOGFILE=/opt/stack/logs/stack.sh.log
126 ADMIN_PASSWORD=labstack
Swapnil (coolsvap) Kulkarnic988bf62015-10-08 13:10:43 +0530127 DATABASE_PASSWORD=supersecret
Balagopal7ed812c2016-03-01 04:43:31 +0000128 RABBIT_PASSWORD=supersecret
129 SERVICE_PASSWORD=supersecret
Sean M. Collins09e550c2014-10-21 11:40:08 -0400130
131In the multi-node configuration the first 10 or so IPs in the private
132subnet are usually reserved. Add this to ``local.sh`` to have it run
133after every ``stack.sh`` run:
134
135::
136
137 for i in `seq 2 10`; do /opt/stack/nova/bin/nova-manage fixed reserve 10.4.128.$i; done
138
139Fire up OpenStack:
140
141::
142
143 ./stack.sh
144
145A stream of activity ensues. When complete you will see a summary of
146``stack.sh``'s work, including the relevant URLs, accounts and passwords
147to poke at your shiny new OpenStack. The most recent log file is
148available in ``stack.sh.log``.
149
150Configure Compute Nodes
Sean Dague32930462014-11-18 06:51:16 -0500151-----------------------
Sean M. Collins09e550c2014-10-21 11:40:08 -0400152
153The compute nodes only run the OpenStack worker services. For additional
154machines, create a ``local.conf`` with:
155
156::
157
Kashyap Kopparamcd1c3c72014-10-31 17:32:57 +0530158 [[local|localrc]]
Sean M. Collins09e550c2014-10-21 11:40:08 -0400159 HOST_IP=192.168.42.12 # change this per compute node
Sean M. Collins09e550c2014-10-21 11:40:08 -0400160 FIXED_RANGE=10.4.128.0/20
Sean M. Collins09e550c2014-10-21 11:40:08 -0400161 FLOATING_RANGE=192.168.42.128/25
Sean M. Collins09e550c2014-10-21 11:40:08 -0400162 LOGFILE=/opt/stack/logs/stack.sh.log
163 ADMIN_PASSWORD=labstack
Swapnil (coolsvap) Kulkarnic988bf62015-10-08 13:10:43 +0530164 DATABASE_PASSWORD=supersecret
Balagopal7ed812c2016-03-01 04:43:31 +0000165 RABBIT_PASSWORD=supersecret
166 SERVICE_PASSWORD=supersecret
Sean M. Collins09e550c2014-10-21 11:40:08 -0400167 DATABASE_TYPE=mysql
168 SERVICE_HOST=192.168.42.11
Masaki Matsushita597c9022015-08-15 11:35:20 +0900169 MYSQL_HOST=$SERVICE_HOST
170 RABBIT_HOST=$SERVICE_HOST
171 GLANCE_HOSTPORT=$SERVICE_HOST:9292
Prabhuraj Kamaraj921da262017-04-18 05:11:52 +0000172 ENABLED_SERVICES=n-cpu,q-agt,n-api-meta,c-vol,placement-client
Sean M. Collins09e550c2014-10-21 11:40:08 -0400173 NOVA_VNC_ENABLED=True
Stephen Finucane8c548692018-05-11 16:12:17 +0530174 NOVNCPROXY_URL="http://$SERVICE_HOST:6080/vnc_lite.html"
Sean M. Collins09e550c2014-10-21 11:40:08 -0400175 VNCSERVER_LISTEN=$HOST_IP
176 VNCSERVER_PROXYCLIENT_ADDRESS=$VNCSERVER_LISTEN
177
Sean Daguea6db5e32015-08-04 06:23:28 -0400178**Note:** the ``n-api-meta`` service is a version of the api server
179that only serves the metadata service. It's needed because the
180computes created won't have a routing path to the metadata service on
181the controller.
182
Sean M. Collins09e550c2014-10-21 11:40:08 -0400183Fire up OpenStack:
184
185::
186
187 ./stack.sh
188
189A stream of activity ensues. When complete you will see a summary of
190``stack.sh``'s work, including the relevant URLs, accounts and passwords
191to poke at your shiny new OpenStack. The most recent log file is
192available in ``stack.sh.log``.
193
Matt Riedemannc63ecad2017-07-25 17:08:50 -0400194Starting in the Ocata release, Nova requires a `Cells v2`_ deployment. Compute
195node services must be mapped to a cell before they can be used.
196
197After each compute node is stacked, verify it shows up in the
198``nova service-list --binary nova-compute`` output. The compute service is
199registered in the cell database asynchronously so this may require polling.
200
201Once the compute node services shows up, run the ``./tools/discover_hosts.sh``
202script from the control node to map compute hosts to the single cell.
203
204The compute service running on the primary control node will be
205discovered automatically when the control node is stacked so this really
206only needs to be performed for subnodes.
207
208.. _Cells v2: https://docs.openstack.org/nova/latest/user/cells.html
209
Sean M. Collins09e550c2014-10-21 11:40:08 -0400210Cleaning Up After DevStack
Sean Dague32930462014-11-18 06:51:16 -0500211--------------------------
Sean M. Collins09e550c2014-10-21 11:40:08 -0400212
213Shutting down OpenStack is now as simple as running the included
214``unstack.sh`` script:
215
216::
217
218 ./unstack.sh
219
220A more aggressive cleanup can be performed using ``clean.sh``. It
221removes certain troublesome packages and attempts to leave the system in
222a state where changing the database or queue manager can be reliably
223performed.
224
225::
226
227 ./clean.sh
228
229Sometimes running instances are not cleaned up. DevStack attempts to do
230this when it runs but there are times it needs to still be done by hand:
231
232::
233
234 sudo rm -rf /etc/libvirt/qemu/inst*
235 sudo virsh list | grep inst | awk '{print $1}' | xargs -n1 virsh destroy
236
Matt Riedemannec828522019-01-30 20:48:18 -0500237Going further
238=============
Sean M. Collins09e550c2014-10-21 11:40:08 -0400239
240Additional Users
Sean Dague32930462014-11-18 06:51:16 -0500241----------------
Sean M. Collins09e550c2014-10-21 11:40:08 -0400242
243DevStack creates two OpenStack users (``admin`` and ``demo``) and two
Peter Stachowski9a808922015-04-08 19:48:09 +0000244projects (also ``admin`` and ``demo``). ``admin`` is exactly what it
Sean M. Collins09e550c2014-10-21 11:40:08 -0400245sounds like, a privileged administrative account that is a member of
Peter Stachowski9a808922015-04-08 19:48:09 +0000246both the ``admin`` and ``demo`` projects. ``demo`` is a normal user
247account that is only a member of the ``demo`` project. Creating
Sean M. Collins09e550c2014-10-21 11:40:08 -0400248additional OpenStack users can be done through the dashboard, sometimes
249it is easier to do them in bulk from a script, especially since they get
250blown away every time ``stack.sh`` runs. The following steps are ripe
251for scripting:
252
253::
254
255 # Get admin creds
256 . openrc admin admin
Sean Dague32930462014-11-18 06:51:16 -0500257
Peter Stachowski9a808922015-04-08 19:48:09 +0000258 # List existing projects
259 openstack project list
Sean M. Collins09e550c2014-10-21 11:40:08 -0400260
261 # List existing users
Peter Stachowski9a808922015-04-08 19:48:09 +0000262 openstack user list
Sean M. Collins09e550c2014-10-21 11:40:08 -0400263
Peter Stachowski9a808922015-04-08 19:48:09 +0000264 # Add a user and project
Sean M. Collins09e550c2014-10-21 11:40:08 -0400265 NAME=bob
Balagopal7ed812c2016-03-01 04:43:31 +0000266 PASSWORD=BigSecret
Peter Stachowski9a808922015-04-08 19:48:09 +0000267 PROJECT=$NAME
268 openstack project create $PROJECT
269 openstack user create $NAME --password=$PASSWORD --project $PROJECT
270 openstack role add Member --user $NAME --project $PROJECT
271 # The Member role is created by stack.sh
Mike Perezc271b3e2016-10-03 16:00:33 -0700272 # openstack role assignment list
Sean M. Collins09e550c2014-10-21 11:40:08 -0400273
274Swift
Sean Dague32930462014-11-18 06:51:16 -0500275-----
Sean M. Collins09e550c2014-10-21 11:40:08 -0400276
Shilla Saebi2ed09d82015-04-21 15:02:13 -0400277Swift, OpenStack Object Storage, requires a significant amount of resources
Sean Daguea6db5e32015-08-04 06:23:28 -0400278and is disabled by default in DevStack. The support in DevStack is geared
Shilla Saebi2ed09d82015-04-21 15:02:13 -0400279toward a minimal installation but can be used for testing. To implement a
280true multi-node test of swift, additional steps will be required. Enabling it is as
Sean M. Collins09e550c2014-10-21 11:40:08 -0400281simple as enabling the ``swift`` service in ``local.conf``:
282
283::
284
285 enable_service s-proxy s-object s-container s-account
286
Shilla Saebi2ed09d82015-04-21 15:02:13 -0400287Swift, OpenStack Object Storage, will put its data files in ``SWIFT_DATA_DIR`` (default
Sean M. Collins09e550c2014-10-21 11:40:08 -0400288``/opt/stack/data/swift``). The size of the data 'partition' created
289(really a loop-mounted file) is set by ``SWIFT_LOOPBACK_DISK_SIZE``. The
JordanPa6dfe812014-11-20 18:06:23 +0100290Swift config files are located in ``SWIFT_CONF_DIR`` (default
Sean M. Collins09e550c2014-10-21 11:40:08 -0400291``/etc/swift``). All of these settings can be overridden in (wait for
292it...) ``local.conf``.
293
294Volumes
Sean Dague32930462014-11-18 06:51:16 -0500295-------
Sean M. Collins09e550c2014-10-21 11:40:08 -0400296
297DevStack will automatically use an existing LVM volume group named
298``stack-volumes`` to store cloud-created volumes. If ``stack-volumes``
Matt Riedemann4a3cc1c2019-01-30 20:50:47 -0500299doesn't exist, DevStack will set up a loop-mounted file to contain
300it. If the default size is insufficient for the number and size of volumes
301required, it can be overridden by setting ``VOLUME_BACKING_FILE_SIZE`` in
302``local.conf`` (sizes given in ``truncate`` compatible format, e.g. ``24G``).
Sean M. Collins09e550c2014-10-21 11:40:08 -0400303
304``stack-volumes`` can be pre-created on any physical volume supported by
305Linux's LVM. The name of the volume group can be changed by setting
Jordan Pittierf5069f32016-11-08 12:10:12 +0100306``VOLUME_GROUP_NAME`` in ``localrc``. ``stack.sh`` deletes all logical
307volumes in ``VOLUME_GROUP_NAME`` that begin with ``VOLUME_NAME_PREFIX`` as
Sean M. Collins09e550c2014-10-21 11:40:08 -0400308part of cleaning up from previous runs. It is recommended to not use the
Jordan Pittierf5069f32016-11-08 12:10:12 +0100309root volume group as ``VOLUME_GROUP_NAME``.
Sean M. Collins09e550c2014-10-21 11:40:08 -0400310
311The details of creating the volume group depends on the server hardware
312involved but looks something like this:
313
314::
315
316 pvcreate /dev/sdc
317 vgcreate stack-volumes /dev/sdc
318
319Syslog
Sean Dague32930462014-11-18 06:51:16 -0500320------
Sean M. Collins09e550c2014-10-21 11:40:08 -0400321
322DevStack is capable of using ``rsyslog`` to aggregate logging across the
323cluster. It is off by default; to turn it on set ``SYSLOG=True`` in
324``local.conf``. ``SYSLOG_HOST`` defaults to ``HOST_IP``; on the compute
325nodes it must be set to the IP of the cluster controller to send syslog
326output there. In the example above, add this to the compute node
327``local.conf``:
328
329::
330
331 SYSLOG_HOST=192.168.42.11
332
333Using Alternate Repositories/Branches
Sean Dague32930462014-11-18 06:51:16 -0500334-------------------------------------
Sean M. Collins09e550c2014-10-21 11:40:08 -0400335
336The git repositories for all of the OpenStack services are defined in
337``stackrc``. Since this file is a part of the DevStack package changes
338to it will probably be overwritten as updates are applied. Every setting
339in ``stackrc`` can be redefined in ``local.conf``.
340
341To change the repository or branch that a particular OpenStack service
342is created from, simply change the value of ``*_REPO`` or ``*_BRANCH``
343corresponding to that service.
344
345After making changes to the repository or branch, if ``RECLONE`` is not
346set in ``localrc`` it may be necessary to remove the corresponding
347directory from ``/opt/stack`` to force git to re-clone the repository.
348
Shilla Saebi2ed09d82015-04-21 15:02:13 -0400349For example, to pull nova, OpenStack Compute, from a proposed release candidate
350in the primary nova repository:
Sean M. Collins09e550c2014-10-21 11:40:08 -0400351
352::
353
354 NOVA_BRANCH=rc-proposed
355
Shilla Saebi2ed09d82015-04-21 15:02:13 -0400356To pull glance, OpenStack Image service, from an experimental fork:
Sean M. Collins09e550c2014-10-21 11:40:08 -0400357
358::
359
360 GLANCE_BRANCH=try-something-big
361 GLANCE_REPO=https://github.com/mcuser/glance.git
362
363Notes stuff you might need to know
Sean Dague32930462014-11-18 06:51:16 -0500364==================================
Sean M. Collins09e550c2014-10-21 11:40:08 -0400365
Sean M. Collins09e550c2014-10-21 11:40:08 -0400366Set MySQL Password
Sean Dague32930462014-11-18 06:51:16 -0500367------------------
Sean M. Collins09e550c2014-10-21 11:40:08 -0400368
369If you forgot to set the root password you can do this:
370
371::
372
373 mysqladmin -u root -pnova password 'supersecret'
Zhenzan Zhoue1f87962015-09-08 16:49:52 +0800374
375Live Migration
376--------------
377
378In order for live migration to work with the default live migration URI::
379
380 [libvirt]
381 live_migration_uri = qemu+ssh://stack@%s/system
382
383SSH keys need to be exchanged between each compute node:
384
3851. The SOURCE root user's public RSA key (likely in /root/.ssh/id_rsa.pub)
386 needs to be in the DESTINATION stack user's authorized_keys file
387 (~stack/.ssh/authorized_keys). This can be accomplished by manually
388 copying the contents from the file on the SOURCE to the DESTINATION. If
389 you have a password configured for the stack user, then you can use the
390 following command to accomplish the same thing::
391
392 ssh-copy-id -i /root/.ssh/id_rsa.pub stack@DESTINATION
393
3942. The DESTINATION host's public ECDSA key (/etc/ssh/ssh_host_ecdsa_key.pub)
395 needs to be in the SOURCE root user's known_hosts file
396 (/root/.ssh/known_hosts). This can be accomplished by running the
397 following on the SOURCE machine (hostname must be used)::
398
399 ssh-keyscan -H DEST_HOSTNAME | sudo tee -a /root/.ssh/known_hosts
400
Hidekazu Nakamura541617b2016-11-09 15:27:19 +09004013. Verify that login via ssh works without a password::
402
403 ssh -i /root/.ssh/id_rsa.pub stack@DESTINATION
404
Zhenzan Zhoue1f87962015-09-08 16:49:52 +0800405In essence, this means that every compute node's root user's public RSA key
406must exist in every other compute node's stack user's authorized_keys file and
407every compute node's public ECDSA key needs to be in every other compute
408node's root user's known_hosts file. Please note that if the root or stack
409user does not have a SSH key, one can be generated using::
410
411 ssh-keygen -t rsa
412
413The above steps are necessary because libvirtd runs as root when the
414live_migration_uri uses the "qemu:///system" family of URIs. For more
415information, see the `libvirt documentation`_.
416
417.. _libvirt documentation: https://libvirt.org/drvqemu.html#securitydriver