blob: 1530a84523d91782a668d49dd50e2746b903d397 [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
131 MYSQL_PASSWORD=supersecret
132 RABBIT_PASSWORD=supersecrete
133 SERVICE_PASSWORD=supersecrete
134 SERVICE_TOKEN=xyzpdqlazydog
135
136In the multi-node configuration the first 10 or so IPs in the private
137subnet are usually reserved. Add this to ``local.sh`` to have it run
138after every ``stack.sh`` run:
139
140::
141
142 for i in `seq 2 10`; do /opt/stack/nova/bin/nova-manage fixed reserve 10.4.128.$i; done
143
144Fire up OpenStack:
145
146::
147
148 ./stack.sh
149
150A stream of activity ensues. When complete you will see a summary of
151``stack.sh``'s work, including the relevant URLs, accounts and passwords
152to poke at your shiny new OpenStack. The most recent log file is
153available in ``stack.sh.log``.
154
155Configure Compute Nodes
Sean Dague32930462014-11-18 06:51:16 -0500156-----------------------
Sean M. Collins09e550c2014-10-21 11:40:08 -0400157
158The compute nodes only run the OpenStack worker services. For additional
159machines, create a ``local.conf`` with:
160
161::
162
Kashyap Kopparamcd1c3c72014-10-31 17:32:57 +0530163 [[local|localrc]]
Sean M. Collins09e550c2014-10-21 11:40:08 -0400164 HOST_IP=192.168.42.12 # change this per compute node
165 FLAT_INTERFACE=eth0
166 FIXED_RANGE=10.4.128.0/20
167 FIXED_NETWORK_SIZE=4096
168 FLOATING_RANGE=192.168.42.128/25
169 MULTI_HOST=1
170 LOGFILE=/opt/stack/logs/stack.sh.log
171 ADMIN_PASSWORD=labstack
172 MYSQL_PASSWORD=supersecret
173 RABBIT_PASSWORD=supersecrete
174 SERVICE_PASSWORD=supersecrete
175 SERVICE_TOKEN=xyzpdqlazydog
176 DATABASE_TYPE=mysql
177 SERVICE_HOST=192.168.42.11
Masaki Matsushita597c9022015-08-15 11:35:20 +0900178 MYSQL_HOST=$SERVICE_HOST
179 RABBIT_HOST=$SERVICE_HOST
180 GLANCE_HOSTPORT=$SERVICE_HOST:9292
Sean Daguea6db5e32015-08-04 06:23:28 -0400181 ENABLED_SERVICES=n-cpu,n-net,n-api-meta,c-vol
Sean M. Collins09e550c2014-10-21 11:40:08 -0400182 NOVA_VNC_ENABLED=True
Masaki Matsushita597c9022015-08-15 11:35:20 +0900183 NOVNCPROXY_URL="http://$SERVICE_HOST:6080/vnc_auto.html"
Sean M. Collins09e550c2014-10-21 11:40:08 -0400184 VNCSERVER_LISTEN=$HOST_IP
185 VNCSERVER_PROXYCLIENT_ADDRESS=$VNCSERVER_LISTEN
186
Sean Daguea6db5e32015-08-04 06:23:28 -0400187**Note:** the ``n-api-meta`` service is a version of the api server
188that only serves the metadata service. It's needed because the
189computes created won't have a routing path to the metadata service on
190the controller.
191
Sean M. Collins09e550c2014-10-21 11:40:08 -0400192Fire up OpenStack:
193
194::
195
196 ./stack.sh
197
198A stream of activity ensues. When complete you will see a summary of
199``stack.sh``'s work, including the relevant URLs, accounts and passwords
200to poke at your shiny new OpenStack. The most recent log file is
201available in ``stack.sh.log``.
202
203Cleaning Up After DevStack
Sean Dague32930462014-11-18 06:51:16 -0500204--------------------------
Sean M. Collins09e550c2014-10-21 11:40:08 -0400205
206Shutting down OpenStack is now as simple as running the included
207``unstack.sh`` script:
208
209::
210
211 ./unstack.sh
212
213A more aggressive cleanup can be performed using ``clean.sh``. It
214removes certain troublesome packages and attempts to leave the system in
215a state where changing the database or queue manager can be reliably
216performed.
217
218::
219
220 ./clean.sh
221
222Sometimes running instances are not cleaned up. DevStack attempts to do
223this when it runs but there are times it needs to still be done by hand:
224
225::
226
227 sudo rm -rf /etc/libvirt/qemu/inst*
228 sudo virsh list | grep inst | awk '{print $1}' | xargs -n1 virsh destroy
229
230Options pimp your stack
Sean Dague32930462014-11-18 06:51:16 -0500231=======================
Sean M. Collins09e550c2014-10-21 11:40:08 -0400232
233Additional Users
Sean Dague32930462014-11-18 06:51:16 -0500234----------------
Sean M. Collins09e550c2014-10-21 11:40:08 -0400235
236DevStack creates two OpenStack users (``admin`` and ``demo``) and two
Peter Stachowski9a808922015-04-08 19:48:09 +0000237projects (also ``admin`` and ``demo``). ``admin`` is exactly what it
Sean M. Collins09e550c2014-10-21 11:40:08 -0400238sounds like, a privileged administrative account that is a member of
Peter Stachowski9a808922015-04-08 19:48:09 +0000239both the ``admin`` and ``demo`` projects. ``demo`` is a normal user
240account that is only a member of the ``demo`` project. Creating
Sean M. Collins09e550c2014-10-21 11:40:08 -0400241additional OpenStack users can be done through the dashboard, sometimes
242it is easier to do them in bulk from a script, especially since they get
243blown away every time ``stack.sh`` runs. The following steps are ripe
244for scripting:
245
246::
247
248 # Get admin creds
249 . openrc admin admin
Sean Dague32930462014-11-18 06:51:16 -0500250
Peter Stachowski9a808922015-04-08 19:48:09 +0000251 # List existing projects
252 openstack project list
Sean M. Collins09e550c2014-10-21 11:40:08 -0400253
254 # List existing users
Peter Stachowski9a808922015-04-08 19:48:09 +0000255 openstack user list
Sean M. Collins09e550c2014-10-21 11:40:08 -0400256
Peter Stachowski9a808922015-04-08 19:48:09 +0000257 # Add a user and project
Sean M. Collins09e550c2014-10-21 11:40:08 -0400258 NAME=bob
259 PASSWORD=BigSecrete
Peter Stachowski9a808922015-04-08 19:48:09 +0000260 PROJECT=$NAME
261 openstack project create $PROJECT
262 openstack user create $NAME --password=$PASSWORD --project $PROJECT
263 openstack role add Member --user $NAME --project $PROJECT
264 # The Member role is created by stack.sh
265 # openstack role list
Sean M. Collins09e550c2014-10-21 11:40:08 -0400266
267Swift
Sean Dague32930462014-11-18 06:51:16 -0500268-----
Sean M. Collins09e550c2014-10-21 11:40:08 -0400269
Shilla Saebi2ed09d82015-04-21 15:02:13 -0400270Swift, OpenStack Object Storage, requires a significant amount of resources
Sean Daguea6db5e32015-08-04 06:23:28 -0400271and is disabled by default in DevStack. The support in DevStack is geared
Shilla Saebi2ed09d82015-04-21 15:02:13 -0400272toward a minimal installation but can be used for testing. To implement a
273true multi-node test of swift, additional steps will be required. Enabling it is as
Sean M. Collins09e550c2014-10-21 11:40:08 -0400274simple as enabling the ``swift`` service in ``local.conf``:
275
276::
277
278 enable_service s-proxy s-object s-container s-account
279
Shilla Saebi2ed09d82015-04-21 15:02:13 -0400280Swift, OpenStack Object Storage, will put its data files in ``SWIFT_DATA_DIR`` (default
Sean M. Collins09e550c2014-10-21 11:40:08 -0400281``/opt/stack/data/swift``). The size of the data 'partition' created
282(really a loop-mounted file) is set by ``SWIFT_LOOPBACK_DISK_SIZE``. The
JordanPa6dfe812014-11-20 18:06:23 +0100283Swift config files are located in ``SWIFT_CONF_DIR`` (default
Sean M. Collins09e550c2014-10-21 11:40:08 -0400284``/etc/swift``). All of these settings can be overridden in (wait for
285it...) ``local.conf``.
286
287Volumes
Sean Dague32930462014-11-18 06:51:16 -0500288-------
Sean M. Collins09e550c2014-10-21 11:40:08 -0400289
290DevStack will automatically use an existing LVM volume group named
291``stack-volumes`` to store cloud-created volumes. If ``stack-volumes``
Dean Troyerea3cdfa2014-11-08 08:29:16 -0600292doesn't exist, DevStack will set up a 10Gb loop-mounted file to contain
Sean M. Collins09e550c2014-10-21 11:40:08 -0400293it. This obviously limits the number and size of volumes that can be
294created inside OpenStack. The size can be overridden by setting
295``VOLUME_BACKING_FILE_SIZE`` in ``local.conf``.
296
297``stack-volumes`` can be pre-created on any physical volume supported by
298Linux's LVM. The name of the volume group can be changed by setting
299``VOLUME_GROUP`` in ``localrc``. ``stack.sh`` deletes all logical
300volumes in ``VOLUME_GROUP`` that begin with ``VOLUME_NAME_PREFIX`` as
301part of cleaning up from previous runs. It is recommended to not use the
302root volume group as ``VOLUME_GROUP``.
303
304The details of creating the volume group depends on the server hardware
305involved but looks something like this:
306
307::
308
309 pvcreate /dev/sdc
310 vgcreate stack-volumes /dev/sdc
311
312Syslog
Sean Dague32930462014-11-18 06:51:16 -0500313------
Sean M. Collins09e550c2014-10-21 11:40:08 -0400314
315DevStack is capable of using ``rsyslog`` to aggregate logging across the
316cluster. It is off by default; to turn it on set ``SYSLOG=True`` in
317``local.conf``. ``SYSLOG_HOST`` defaults to ``HOST_IP``; on the compute
318nodes it must be set to the IP of the cluster controller to send syslog
319output there. In the example above, add this to the compute node
320``local.conf``:
321
322::
323
324 SYSLOG_HOST=192.168.42.11
325
326Using Alternate Repositories/Branches
Sean Dague32930462014-11-18 06:51:16 -0500327-------------------------------------
Sean M. Collins09e550c2014-10-21 11:40:08 -0400328
329The git repositories for all of the OpenStack services are defined in
330``stackrc``. Since this file is a part of the DevStack package changes
331to it will probably be overwritten as updates are applied. Every setting
332in ``stackrc`` can be redefined in ``local.conf``.
333
334To change the repository or branch that a particular OpenStack service
335is created from, simply change the value of ``*_REPO`` or ``*_BRANCH``
336corresponding to that service.
337
338After making changes to the repository or branch, if ``RECLONE`` is not
339set in ``localrc`` it may be necessary to remove the corresponding
340directory from ``/opt/stack`` to force git to re-clone the repository.
341
Shilla Saebi2ed09d82015-04-21 15:02:13 -0400342For example, to pull nova, OpenStack Compute, from a proposed release candidate
343in the primary nova repository:
Sean M. Collins09e550c2014-10-21 11:40:08 -0400344
345::
346
347 NOVA_BRANCH=rc-proposed
348
Shilla Saebi2ed09d82015-04-21 15:02:13 -0400349To pull glance, OpenStack Image service, from an experimental fork:
Sean M. Collins09e550c2014-10-21 11:40:08 -0400350
351::
352
353 GLANCE_BRANCH=try-something-big
354 GLANCE_REPO=https://github.com/mcuser/glance.git
355
356Notes stuff you might need to know
Sean Dague32930462014-11-18 06:51:16 -0500357==================================
Sean M. Collins09e550c2014-10-21 11:40:08 -0400358
359Reset the Bridge
Sean Dague32930462014-11-18 06:51:16 -0500360----------------
Sean M. Collins09e550c2014-10-21 11:40:08 -0400361
362How to reset the bridge configuration:
363
364::
365
366 sudo brctl delif br100 eth0.926
367 sudo ip link set dev br100 down
368 sudo brctl delbr br100
369
370Set MySQL Password
Sean Dague32930462014-11-18 06:51:16 -0500371------------------
Sean M. Collins09e550c2014-10-21 11:40:08 -0400372
373If you forgot to set the root password you can do this:
374
375::
376
377 mysqladmin -u root -pnova password 'supersecret'