Repository navigation
Commit 7aa859f
committed
clusterer_controller: the multicast controller, added to clusterer
The nodes of a cluster declared with cluster_options use_controller=1 find
each other over encrypted IPv4 multicast, elect a master, receive their
node ids and BIN addresses from it, and fail the cluster's sharing tags
over; every other cluster behaves as with clusterer. clusterer's side
(per-cluster node ids, controller-managed clusters and sharing tags, BIN
messages that cannot override the controller) is in clusterer's files,
the controller's own code in cl_ctr_*. Loading clusterer.so beside it is
refused.
The master admits joiners a few at a time and holds each one CONNECTING,
with no role or sharing tag, until its BIN links to every member are up
both ways; a joiner stuck there is named with the pairs that are down,
and parked after 60 s so that the queue moves on past it.
Every member multicasts a heartbeat each second with its links and
capability states, so liveness and node events come from heartbeats and
links, with no periodic BIN pings, no link-state floods and no routing
through other nodes. Module broadcasts go out as one multicast datagram
(fragments when larger), numbered per sender, repaired by unicast and
ordered with the TCP messages that follow them; what cannot be repaired
is reported, and the sender goes down and up to this node's modules,
which sync again. Wire version 4.
With its unit, network-namespace and real-cluster tests, the packages
(opensips-module-contrib-clusterer-controller), the README, an overview
diagram, and libsodium in the CI build dependencies.1 parent 89394a4 commit 7aa859f
64 files changed
Lines changed: 21445 additions & 473 deletions
File tree
- modules-contrib/clusterer_controller
- doc
- test
- packaging
- debian
- redhat_fedora
- scripts/build
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
6 | 6 | | |
7 | 7 | | |
8 | 8 | | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
9 | 28 | | |
Large diffs are not rendered by default.
Large diffs are not rendered by default.
0 commit comments