Load balancing with a round robin load balancing method based on the R_MSEC macro of syslog-ng OSE
This section describes a round robin load balancing method based on the R_MSEC
macro of AxoSyslog to load balance your logs between multiple AxoSyslog destinations.
R_MSEC
is not precise enough, you can replace it with R_USEC
(which uses microseconds instead of milliseconds).
For more information about the R_MSEC
macro and further macros of AxoSyslog, see Macros of AxoSyslog.
Example: round robin load balancing between multiple destinations
The following example is a round-robin load balancing method, based on AxoSyslog’s R_MSEC
macro.
destination d_lb_network {
channel {
channel {
filter {
"0" == "$(% ${R_MSEC} 2)"
};
destination {
network("myhost1"
disk-buffer(flow-control-window-size(10000) capacity-bytes(2000000)));
};
flags(final);
};
channel {
filter {
"1" == "$(% ${R_MSEC} 2)"
};
destination {
network("myhost2"
disk-buffer(flow-control-window-size(10000) capacity-bytes(2000000)));
};
flags(final);
};
};
};
The filter {" <return value >" == "$(% ${R_MSEC} 2)"};
code snippets (in bold) serve as the basis of the method. This filter separates incoming log messages’ timestamp values based on the R_MSEC
macro, using a division with remainder method, and distributes the log messages equally between two destinations based on the return value (in this case, 0
or 1
).
If you need a file instead of a network destination, replace the network destination with the file in the example (and use the same analogy for any other AxoSyslog destinations).
For an alternative method to use the round robin load balancing method based on the R_MSEC
macro, see Configuration generator for the load balancing method based on MSEC hashing.