]> git.proxmox.com Git - pve-docs.git/blame - pvecm.adoc
Makefile: use full path for asciidoc-pve
[pve-docs.git] / pvecm.adoc
CommitLineData
d8742b0c 1ifdef::manvolnum[]
7e2fdb3d
DM
2PVE(1)
3======
d8742b0c 4include::attributes.txt[]
5f09af76
DM
5:pve-toplevel:
6
d8742b0c
DM
7NAME
8----
9
74026b8f 10pvecm - Proxmox VE Cluster Manager
d8742b0c 11
49a5e11c 12SYNOPSIS
d8742b0c
DM
13--------
14
15include::pvecm.1-synopsis.adoc[]
16
17DESCRIPTION
18-----------
19endif::manvolnum[]
20
21ifndef::manvolnum[]
22Cluster Manager
23===============
24include::attributes.txt[]
25endif::manvolnum[]
26
5f09af76
DM
27ifdef::wiki[]
28:pve-toplevel:
29endif::wiki[]
30
8c1189b6
FG
31The {PVE} cluster manager `pvecm` is a tool to create a group of
32physical servers. Such a group is called a *cluster*. We use the
8a865621 33http://www.corosync.org[Corosync Cluster Engine] for reliable group
5eba0743 34communication, and such clusters can consist of up to 32 physical nodes
8a865621
DM
35(probably more, dependent on network latency).
36
8c1189b6 37`pvecm` can be used to create a new cluster, join nodes to a cluster,
8a865621 38leave the cluster, get status information and do various other cluster
e300cf7d
FG
39related tasks. The **P**rox**m**o**x** **C**luster **F**ile **S**ystem (``pmxcfs'')
40is used to transparently distribute the cluster configuration to all cluster
8a865621
DM
41nodes.
42
43Grouping nodes into a cluster has the following advantages:
44
45* Centralized, web based management
46
5eba0743 47* Multi-master clusters: each node can do all management task
8a865621 48
8c1189b6
FG
49* `pmxcfs`: database-driven file system for storing configuration files,
50 replicated in real-time on all nodes using `corosync`.
8a865621 51
5eba0743 52* Easy migration of virtual machines and containers between physical
8a865621
DM
53 hosts
54
55* Fast deployment
56
57* Cluster-wide services like firewall and HA
58
59
60Requirements
61------------
62
8c1189b6 63* All nodes must be in the same network as `corosync` uses IP Multicast
8a865621 64 to communicate between nodes (also see
ceabe189 65 http://www.corosync.org[Corosync Cluster Engine]). Corosync uses UDP
ff72a2ba 66 ports 5404 and 5405 for cluster communication.
ceabe189
DM
67+
68NOTE: Some switches do not support IP multicast by default and must be
69manually enabled first.
8a865621
DM
70
71* Date and time have to be synchronized.
72
ceabe189 73* SSH tunnel on TCP port 22 between nodes is used.
8a865621 74
ceabe189
DM
75* If you are interested in High Availability, you need to have at
76 least three nodes for reliable quorum. All nodes should have the
77 same version.
8a865621
DM
78
79* We recommend a dedicated NIC for the cluster traffic, especially if
80 you use shared storage.
81
82NOTE: It is not possible to mix Proxmox VE 3.x and earlier with
ceabe189 83Proxmox VE 4.0 cluster nodes.
8a865621
DM
84
85
ceabe189
DM
86Preparing Nodes
87---------------
8a865621
DM
88
89First, install {PVE} on all nodes. Make sure that each node is
90installed with the final hostname and IP configuration. Changing the
91hostname and IP is not possible after cluster creation.
92
93Currently the cluster creation has to be done on the console, so you
8c1189b6 94need to login via `ssh`.
8a865621 95
8a865621 96Create the Cluster
ceabe189 97------------------
8a865621 98
8c1189b6
FG
99Login via `ssh` to the first {pve} node. Use a unique name for your cluster.
100This name cannot be changed later.
8a865621
DM
101
102 hp1# pvecm create YOUR-CLUSTER-NAME
103
63f956c8
DM
104CAUTION: The cluster name is used to compute the default multicast
105address. Please use unique cluster names if you run more than one
106cluster inside your network.
107
8a865621
DM
108To check the state of your cluster use:
109
110 hp1# pvecm status
111
112
113Adding Nodes to the Cluster
ceabe189 114---------------------------
8a865621 115
8c1189b6 116Login via `ssh` to the node you want to add.
8a865621
DM
117
118 hp2# pvecm add IP-ADDRESS-CLUSTER
119
120For `IP-ADDRESS-CLUSTER` use the IP from an existing cluster node.
121
5eba0743 122CAUTION: A new node cannot hold any VMs, because you would get
7980581f 123conflicts about identical VM IDs. Also, all existing configuration in
8c1189b6
FG
124`/etc/pve` is overwritten when you join a new node to the cluster. To
125workaround, use `vzdump` to backup and restore to a different VMID after
7980581f 126adding the node to the cluster.
8a865621
DM
127
128To check the state of cluster:
129
130 # pvecm status
131
ceabe189 132.Cluster status after adding 4 nodes
8a865621
DM
133----
134hp2# pvecm status
135Quorum information
136~~~~~~~~~~~~~~~~~~
137Date: Mon Apr 20 12:30:13 2015
138Quorum provider: corosync_votequorum
139Nodes: 4
140Node ID: 0x00000001
141Ring ID: 1928
142Quorate: Yes
143
144Votequorum information
145~~~~~~~~~~~~~~~~~~~~~~
146Expected votes: 4
147Highest expected: 4
148Total votes: 4
149Quorum: 2
150Flags: Quorate
151
152Membership information
153~~~~~~~~~~~~~~~~~~~~~~
154 Nodeid Votes Name
1550x00000001 1 192.168.15.91
1560x00000002 1 192.168.15.92 (local)
1570x00000003 1 192.168.15.93
1580x00000004 1 192.168.15.94
159----
160
161If you only want the list of all nodes use:
162
163 # pvecm nodes
164
5eba0743 165.List nodes in a cluster
8a865621
DM
166----
167hp2# pvecm nodes
168
169Membership information
170~~~~~~~~~~~~~~~~~~~~~~
171 Nodeid Votes Name
172 1 1 hp1
173 2 1 hp2 (local)
174 3 1 hp3
175 4 1 hp4
176----
177
e4ec4154
TL
178Adding Nodes With Separated Cluster Network
179~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
180
181When adding a node to a cluster with a separated cluster network you need to
182use the 'ringX_addr' parameters to set the nodes address on those networks:
183
184[source,bash]
4d19cb00 185----
e4ec4154 186pvecm add IP-ADDRESS-CLUSTER -ring0_addr IP-ADDRESS-RING0
4d19cb00 187----
e4ec4154
TL
188
189If you want to use the Redundant Ring Protocol you will also want to pass the
190'ring1_addr' parameter.
191
8a865621
DM
192
193Remove a Cluster Node
ceabe189 194---------------------
8a865621
DM
195
196CAUTION: Read carefully the procedure before proceeding, as it could
197not be what you want or need.
198
199Move all virtual machines from the node. Make sure you have no local
200data or backups you want to keep, or save them accordingly.
201
8c1189b6 202Log in to one remaining node via ssh. Issue a `pvecm nodes` command to
7980581f 203identify the node ID:
8a865621
DM
204
205----
206hp1# pvecm status
207
208Quorum information
209~~~~~~~~~~~~~~~~~~
210Date: Mon Apr 20 12:30:13 2015
211Quorum provider: corosync_votequorum
212Nodes: 4
213Node ID: 0x00000001
214Ring ID: 1928
215Quorate: Yes
216
217Votequorum information
218~~~~~~~~~~~~~~~~~~~~~~
219Expected votes: 4
220Highest expected: 4
221Total votes: 4
222Quorum: 2
223Flags: Quorate
224
225Membership information
226~~~~~~~~~~~~~~~~~~~~~~
227 Nodeid Votes Name
2280x00000001 1 192.168.15.91 (local)
2290x00000002 1 192.168.15.92
2300x00000003 1 192.168.15.93
2310x00000004 1 192.168.15.94
232----
233
234IMPORTANT: at this point you must power off the node to be removed and
235make sure that it will not power on again (in the network) as it
236is.
237
238----
239hp1# pvecm nodes
240
241Membership information
242~~~~~~~~~~~~~~~~~~~~~~
243 Nodeid Votes Name
244 1 1 hp1 (local)
245 2 1 hp2
246 3 1 hp3
247 4 1 hp4
248----
249
250Log in to one remaining node via ssh. Issue the delete command (here
8c1189b6 251deleting node `hp4`):
8a865621
DM
252
253 hp1# pvecm delnode hp4
254
255If the operation succeeds no output is returned, just check the node
8c1189b6 256list again with `pvecm nodes` or `pvecm status`. You should see
8a865621
DM
257something like:
258
259----
260hp1# pvecm status
261
262Quorum information
263~~~~~~~~~~~~~~~~~~
264Date: Mon Apr 20 12:44:28 2015
265Quorum provider: corosync_votequorum
266Nodes: 3
267Node ID: 0x00000001
268Ring ID: 1992
269Quorate: Yes
270
271Votequorum information
272~~~~~~~~~~~~~~~~~~~~~~
273Expected votes: 3
274Highest expected: 3
275Total votes: 3
276Quorum: 3
277Flags: Quorate
278
279Membership information
280~~~~~~~~~~~~~~~~~~~~~~
281 Nodeid Votes Name
2820x00000001 1 192.168.15.90 (local)
2830x00000002 1 192.168.15.91
2840x00000003 1 192.168.15.92
285----
286
287IMPORTANT: as said above, it is very important to power off the node
288*before* removal, and make sure that it will *never* power on again
289(in the existing cluster network) as it is.
290
291If you power on the node as it is, your cluster will be screwed up and
292it could be difficult to restore a clean cluster state.
293
294If, for whatever reason, you want that this server joins the same
295cluster again, you have to
296
26ca7ff5 297* reinstall {pve} on it from scratch
8a865621
DM
298
299* then join it, as explained in the previous section.
d8742b0c 300
555e966b
TL
301Separate A Node Without Reinstalling
302~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
303
304CAUTION: This is *not* the recommended method, proceed with caution. Use the
305above mentioned method if you're unsure.
306
307You can also separate a node from a cluster without reinstalling it from
308scratch. But after removing the node from the cluster it will still have
309access to the shared storages! This must be resolved before you start removing
310the node from the cluster. A {pve} cluster cannot share the exact same
311storage with another cluster, as it leads to VMID conflicts.
312
3be22308
TL
313Its suggested that you create a new storage where only the node which you want
314to separate has access. This can be an new export on your NFS or a new Ceph
315pool, to name a few examples. Its just important that the exact same storage
316does not gets accessed by multiple clusters. After setting this storage up move
317all data from the node and its VMs to it. Then you are ready to separate the
318node from the cluster.
555e966b
TL
319
320WARNING: Ensure all shared resources are cleanly separated! You will run into
321conflicts and problems else.
322
323First stop the corosync and the pve-cluster services on the node:
324[source,bash]
4d19cb00 325----
555e966b
TL
326systemctl stop pve-cluster
327systemctl stop corosync
4d19cb00 328----
555e966b
TL
329
330Start the cluster filesystem again in local mode:
331[source,bash]
4d19cb00 332----
555e966b 333pmxcfs -l
4d19cb00 334----
555e966b
TL
335
336Delete the corosync configuration files:
337[source,bash]
4d19cb00 338----
555e966b
TL
339rm /etc/pve/corosync.conf
340rm /etc/corosync/*
4d19cb00 341----
555e966b
TL
342
343You can now start the filesystem again as normal service:
344[source,bash]
4d19cb00 345----
555e966b
TL
346killall pmxcfs
347systemctl start pve-cluster
4d19cb00 348----
555e966b
TL
349
350The node is now separated from the cluster. You can deleted it from a remaining
351node of the cluster with:
352[source,bash]
4d19cb00 353----
555e966b 354pvecm delnode oldnode
4d19cb00 355----
555e966b
TL
356
357If the command failed, because the remaining node in the cluster lost quorum
358when the now separate node exited, you may set the expected votes to 1 as a workaround:
359[source,bash]
4d19cb00 360----
555e966b 361pvecm expected 1
4d19cb00 362----
555e966b
TL
363
364And the repeat the 'pvecm delnode' command.
365
366Now switch back to the separated node, here delete all remaining files left
367from the old cluster. This ensures that the node can be added to another
368cluster again without problems.
369
370[source,bash]
4d19cb00 371----
555e966b 372rm /var/lib/corosync/*
4d19cb00 373----
555e966b
TL
374
375As the configuration files from the other nodes are still in the cluster
376filesystem you may want to clean those up too. Remove simply the whole
377directory recursive from '/etc/pve/nodes/NODENAME', but check three times that
378you used the correct one before deleting it.
379
380CAUTION: The nodes SSH keys are still in the 'authorized_key' file, this means
381the nodes can still connect to each other with public key authentication. This
382should be fixed by removing the respective keys from the
383'/etc/pve/priv/authorized_keys' file.
d8742b0c 384
806ef12d
DM
385Quorum
386------
387
388{pve} use a quorum-based technique to provide a consistent state among
389all cluster nodes.
390
391[quote, from Wikipedia, Quorum (distributed computing)]
392____
393A quorum is the minimum number of votes that a distributed transaction
394has to obtain in order to be allowed to perform an operation in a
395distributed system.
396____
397
398In case of network partitioning, state changes requires that a
399majority of nodes are online. The cluster switches to read-only mode
5eba0743 400if it loses quorum.
806ef12d
DM
401
402NOTE: {pve} assigns a single vote to each node by default.
403
e4ec4154
TL
404Cluster Network
405---------------
406
407The cluster network is the core of a cluster. All messages sent over it have to
408be delivered reliable to all nodes in their respective order. In {pve} this
409part is done by corosync, an implementation of a high performance low overhead
410high availability development toolkit. It serves our decentralized
411configuration file system (`pmxcfs`).
412
413[[cluster-network-requirements]]
414Network Requirements
415~~~~~~~~~~~~~~~~~~~~
416This needs a reliable network with latencies under 2 milliseconds (LAN
417performance) to work properly. While corosync can also use unicast for
418communication between nodes its **highly recommended** to have a multicast
419capable network. The network should not be used heavily by other members,
420ideally corosync runs on its own network.
421*never* share it with network where storage communicates too.
422
423Before setting up a cluster it is good practice to check if the network is fit
424for that purpose.
425
426* Ensure that all nodes are in the same subnet. This must only be true for the
427 network interfaces used for cluster communication (corosync).
428
429* Ensure all nodes can reach each other over those interfaces, using `ping` is
430 enough for a basic test.
431
432* Ensure that multicast works in general and a high package rates. This can be
433 done with the `omping` tool. The final "%loss" number should be < 1%.
434[source,bash]
435----
436omping -c 10000 -i 0.001 -F -q NODE1-IP NODE2-IP ...
437----
438
439* Ensure that multicast communication works over an extended period of time.
440 This covers up problems where IGMP snooping is activated on the network but
441 no multicast querier is active. This test has a duration of around 10
442 minutes.
443[source,bash]
4d19cb00 444----
e4ec4154 445omping -c 600 -i 1 -q NODE1-IP NODE2-IP ...
4d19cb00 446----
e4ec4154
TL
447
448Your network is not ready for clustering if any of these test fails. Recheck
449your network configuration. Especially switches are notorious for having
450multicast disabled by default or IGMP snooping enabled with no IGMP querier
451active.
452
453In smaller cluster its also an option to use unicast if you really cannot get
454multicast to work.
455
456Separate Cluster Network
457~~~~~~~~~~~~~~~~~~~~~~~~
458
459When creating a cluster without any parameters the cluster network is generally
460shared with the Web UI and the VMs and its traffic. Depending on your setup
461even storage traffic may get sent over the same network. Its recommended to
462change that, as corosync is a time critical real time application.
463
464Setting Up A New Network
465^^^^^^^^^^^^^^^^^^^^^^^^
466
467First you have to setup a new network interface. It should be on a physical
468separate network. Ensure that your network fulfills the
469<<cluster-network-requirements,cluster network requirements>>.
470
471Separate On Cluster Creation
472^^^^^^^^^^^^^^^^^^^^^^^^^^^^
473
474This is possible through the 'ring0_addr' and 'bindnet0_addr' parameter of
475the 'pvecm create' command used for creating a new cluster.
476
477If you have setup a additional NIC with a static address on 10.10.10.1/25
478and want to send and receive all cluster communication over this interface
479you would execute:
480
481[source,bash]
4d19cb00 482----
e4ec4154 483pvecm create test --ring0_addr 10.10.10.1 --bindnet0_addr 10.10.10.0
4d19cb00 484----
e4ec4154
TL
485
486To check if everything is working properly execute:
487[source,bash]
4d19cb00 488----
e4ec4154 489systemctl status corosync
4d19cb00 490----
e4ec4154
TL
491
492[[separate-cluster-net-after-creation]]
493Separate After Cluster Creation
494^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
495
496You can do this also if you have already created a cluster and want to switch
497its communication to another network, without rebuilding the whole cluster.
498This change may lead to short durations of quorum loss in the cluster, as nodes
499have to restart corosync and come up one after the other on the new network.
500
501Check how to <<edit-corosync-conf,edit the corosync.conf file>> first.
502The open it and you should see a file similar to:
503
504----
505logging {
506 debug: off
507 to_syslog: yes
508}
509
510nodelist {
511
512 node {
513 name: due
514 nodeid: 2
515 quorum_votes: 1
516 ring0_addr: due
517 }
518
519 node {
520 name: tre
521 nodeid: 3
522 quorum_votes: 1
523 ring0_addr: tre
524 }
525
526 node {
527 name: uno
528 nodeid: 1
529 quorum_votes: 1
530 ring0_addr: uno
531 }
532
533}
534
535quorum {
536 provider: corosync_votequorum
537}
538
539totem {
540 cluster_name: thomas-testcluster
541 config_version: 3
542 ip_version: ipv4
543 secauth: on
544 version: 2
545 interface {
546 bindnetaddr: 192.168.30.50
547 ringnumber: 0
548 }
549
550}
551----
552
553The first you want to do is add the 'name' properties in the node entries if
554you do not see them already. Those *must* match the node name.
555
556Then replace the address from the 'ring0_addr' properties with the new
557addresses. You may use plain IP addresses or also hostnames here. If you use
558hostnames ensure that they are resolvable from all nodes.
559
560In my example I want to switch my cluster communication to the 10.10.10.1/25
561network. So I replace all 'ring0_addr' respectively. I also set the bindetaddr
562in the totem section of the config to an address of the new network. It can be
563any address from the subnet configured on the new network interface.
564
565After you increased the 'config_version' property the new configuration file
566should look like:
567
568----
569
570logging {
571 debug: off
572 to_syslog: yes
573}
574
575nodelist {
576
577 node {
578 name: due
579 nodeid: 2
580 quorum_votes: 1
581 ring0_addr: 10.10.10.2
582 }
583
584 node {
585 name: tre
586 nodeid: 3
587 quorum_votes: 1
588 ring0_addr: 10.10.10.3
589 }
590
591 node {
592 name: uno
593 nodeid: 1
594 quorum_votes: 1
595 ring0_addr: 10.10.10.1
596 }
597
598}
599
600quorum {
601 provider: corosync_votequorum
602}
603
604totem {
605 cluster_name: thomas-testcluster
606 config_version: 4
607 ip_version: ipv4
608 secauth: on
609 version: 2
610 interface {
611 bindnetaddr: 10.10.10.1
612 ringnumber: 0
613 }
614
615}
616----
617
618Now after a final check whether all changed information is correct we save it
619and see again the <<edit-corosync-conf,edit corosync.conf file>> section to
620learn how to bring it in effect.
621
622As our change cannot be enforced live from corosync we have to do an restart.
623
624On a single node execute:
625[source,bash]
4d19cb00 626----
e4ec4154 627systemctl restart corosync
4d19cb00 628----
e4ec4154
TL
629
630Now check if everything is fine:
631
632[source,bash]
4d19cb00 633----
e4ec4154 634systemctl status corosync
4d19cb00 635----
e4ec4154
TL
636
637If corosync runs again correct restart corosync also on all other nodes.
638They will then join the cluster membership one by one on the new network.
639
640Redundant Ring Protocol
641~~~~~~~~~~~~~~~~~~~~~~~
642To avoid a single point of failure you should implement counter measurements.
643This can be on the hardware and operating system level through network bonding.
644
645Corosync itself offers also a possibility to add redundancy through the so
646called 'Redundant Ring Protocol'. This protocol allows running a second totem
647ring on another network, this network should be physically separated from the
648other rings network to actually increase availability.
649
650RRP On Cluster Creation
651~~~~~~~~~~~~~~~~~~~~~~~
652
653The 'pvecm create' command provides the additional parameters 'bindnetX_addr',
654'ringX_addr' and 'rrp_mode', can be used for RRP configuration.
655
656NOTE: See the <<corosync-conf-glossary,glossary>> if you do not know what each parameter means.
657
658So if you have two networks, one on the 10.10.10.1/24 and the other on the
65910.10.20.1/24 subnet you would execute:
660
661[source,bash]
4d19cb00 662----
e4ec4154
TL
663pvecm create CLUSTERNAME -bindnet0_addr 10.10.10.1 -ring0_addr 10.10.10.1 \
664-bindnet1_addr 10.10.20.1 -ring1_addr 10.10.20.1
4d19cb00 665----
e4ec4154
TL
666
667RRP On A Created Cluster
668~~~~~~~~~~~~~~~~~~~~~~~~
669
670When enabling an already running cluster to use RRP you will take similar steps
671as describe in <<separate-cluster-net-after-creation,separating the cluster
672network>>. You just do it on another ring.
673
674First add a new `interface` subsection in the `totem` section, set its
675`ringnumber` property to `1`. Set the interfaces `bindnetaddr` property to an
676address of the subnet you have configured for your new ring.
677Further set the `rrp_mode` to `passive`, this is the only stable mode.
678
679Then add to each node entry in the `nodelist` section its new `ring1_addr`
680property with the nodes additional ring address.
681
682So if you have two networks, one on the 10.10.10.1/24 and the other on the
68310.10.20.1/24 subnet, the final configuration file should look like:
684
685----
686totem {
687 cluster_name: tweak
688 config_version: 9
689 ip_version: ipv4
690 rrp_mode: passive
691 secauth: on
692 version: 2
693 interface {
694 bindnetaddr: 10.10.10.1
695 ringnumber: 0
696 }
697 interface {
698 bindnetaddr: 10.10.20.1
699 ringnumber: 1
700 }
701}
702
703nodelist {
704 node {
705 name: pvecm1
706 nodeid: 1
707 quorum_votes: 1
708 ring0_addr: 10.10.10.1
709 ring1_addr: 10.10.20.1
710 }
711
712 node {
713 name: pvecm2
714 nodeid: 2
715 quorum_votes: 1
716 ring0_addr: 10.10.10.2
717 ring1_addr: 10.10.20.2
718 }
719
720 [...] # other cluster nodes here
721}
722
723[...] # other remaining config sections here
724
725----
726
727Bring it in effect like described in the <<edit-corosync-conf,edit the
728corosync.conf file>> section.
729
730This is a change which cannot take live in effect and needs at least a restart
731of corosync. Recommended is a restart of the whole cluster.
732
733If you cannot reboot the whole cluster ensure no High Availability services are
734configured and the stop the corosync service on all nodes. After corosync is
735stopped on all nodes start it one after the other again.
736
737Corosync Configuration
738----------------------
739
740The `/ect/pve/corosync.conf` file plays a central role in {pve} cluster. It
741controls the cluster member ship and its network.
742For reading more about it check the corosync.conf man page:
743[source,bash]
4d19cb00 744----
e4ec4154 745man corosync.conf
4d19cb00 746----
e4ec4154
TL
747
748For node membership you should always use the `pvecm` tool provided by {pve}.
749You may have to edit the configuration file manually for other changes.
750Here are a few best practice tips for doing this.
751
752[[edit-corosync-conf]]
753Edit corosync.conf
754~~~~~~~~~~~~~~~~~~
755
756Editing the corosync.conf file can be not always straight forward. There are
757two on each cluster, one in `/etc/pve/corosync.conf` and the other in
758`/etc/corosync/corosync.conf`. Editing the one in our cluster file system will
759propagate the changes to the local one, but not vice versa.
760
761The configuration will get updated automatically as soon as the file changes.
762This means changes which can be integrated in a running corosync will take
763instantly effect. So you should always make a copy and edit that instead, to
764avoid triggering some unwanted changes by an in between safe.
765
766[source,bash]
4d19cb00 767----
e4ec4154 768cp /etc/pve/corosync.conf /etc/pve/corosync.conf.new
4d19cb00 769----
e4ec4154
TL
770
771Then open the Config file with your favorite editor, `nano` and `vim.tiny` are
772preinstalled on {pve} for example.
773
774NOTE: Always increment the 'config_version' number on configuration changes,
775omitting this can lead to problems.
776
777After making the necessary changes create another copy of the current working
778configuration file. This serves as a backup if the new configuration fails to
779apply or makes problems in other ways.
780
781[source,bash]
4d19cb00 782----
e4ec4154 783cp /etc/pve/corosync.conf /etc/pve/corosync.conf.bak
4d19cb00 784----
e4ec4154
TL
785
786Then move the new configuration file over the old one:
787[source,bash]
4d19cb00 788----
e4ec4154 789mv /etc/pve/corosync.conf.new /etc/pve/corosync.conf
4d19cb00 790----
e4ec4154
TL
791
792You may check with the commands
793[source,bash]
4d19cb00 794----
e4ec4154
TL
795systemctl status corosync
796journalctl -b -u corosync
4d19cb00 797----
e4ec4154
TL
798
799If the change could applied automatically. If not you may have to restart the
800corosync service via:
801[source,bash]
4d19cb00 802----
e4ec4154 803systemctl restart corosync
4d19cb00 804----
e4ec4154
TL
805
806On errors check the troubleshooting section below.
807
808Troubleshooting
809~~~~~~~~~~~~~~~
810
811Issue: 'quorum.expected_votes must be configured'
812^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
813
814When corosync starts to fail and you get the following message in the system log:
815
816----
817[...]
818corosync[1647]: [QUORUM] Quorum provider: corosync_votequorum failed to initialize.
819corosync[1647]: [SERV ] Service engine 'corosync_quorum' failed to load for reason
820 'configuration error: nodelist or quorum.expected_votes must be configured!'
821[...]
822----
823
824It means that the hostname you set for corosync 'ringX_addr' in the
825configuration could not be resolved.
826
827
828Write Configuration When Not Quorate
829^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
830
831If you need to change '/etc/pve/corosync.conf' on an node with no quorum, and you
832know what you do, use:
833[source,bash]
4d19cb00 834----
e4ec4154 835pvecm expected 1
4d19cb00 836----
e4ec4154
TL
837
838This sets the expected vote count to 1 and makes the cluster quorate. You can
839now fix your configuration, or revert it back to the last working backup.
840
841This is not enough if corosync cannot start anymore. Here its best to edit the
842local copy of the corosync configuration in '/etc/corosync/corosync.conf' so
843that corosync can start again. Ensure that on all nodes this configuration has
844the same content to avoid split brains. If you are not sure what went wrong
845it's best to ask the Proxmox Community to help you.
846
847
848[[corosync-conf-glossary]]
849Corosync Configuration Glossary
850~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
851
852ringX_addr::
853This names the different ring addresses for the corosync totem rings used for
854the cluster communication.
855
856bindnetaddr::
857Defines to which interface the ring should bind to. It may be any address of
858the subnet configured on the interface we want to use. In general its the
859recommended to just use an address a node uses on this interface.
860
861rrp_mode::
862Specifies the mode of the redundant ring protocol and may be passive, active or
863none. Note that use of active is highly experimental and not official
864supported. Passive is the preferred mode, it may double the cluster
865communication throughput and increases availability.
866
806ef12d
DM
867
868Cluster Cold Start
869------------------
870
871It is obvious that a cluster is not quorate when all nodes are
872offline. This is a common case after a power failure.
873
874NOTE: It is always a good idea to use an uninterruptible power supply
8c1189b6 875(``UPS'', also called ``battery backup'') to avoid this state, especially if
806ef12d
DM
876you want HA.
877
8c1189b6
FG
878On node startup, service `pve-manager` is started and waits for
879quorum. Once quorate, it starts all guests which have the `onboot`
612417fd
DM
880flag set.
881
882When you turn on nodes, or when power comes back after power failure,
883it is likely that some nodes boots faster than others. Please keep in
884mind that guest startup is delayed until you reach quorum.
806ef12d
DM
885
886
d8742b0c
DM
887ifdef::manvolnum[]
888include::pve-copyright.adoc[]
889endif::manvolnum[]