Ad Widget

Collapse

Zabbix with MySQL InnoDB Cluster Read/Write Splitting

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • revirven
    Junior Member
    • Jun 2025
    • 2

    #1

    Zabbix with MySQL InnoDB Cluster Read/Write Splitting

    Hi guys,

    I'm setting up Zabbix with MySQL InnoDB Cluster and i've been trying to get Zabbix to work with MySQL Router Read/Write splitting. Zabbix Server works fine if MySQL Router is installed on the server, and the database is reached via localhost interface (zabbix@localhost:6450). Other than that, Zabbix Server fails to start.
    Code:
    555017:20250611:110556.486 Starting Zabbix Server. Zabbix 7.0.13 (revision 42673dd61ca).
    555017:20250611:110556.486 ****** Enabled features ******
    555017:20250611:110556.486 SNMP monitoring: YES
    555017:20250611:110556.486 IPMI monitoring: YES
    555017:20250611:110556.487 Web monitoring: YES
    555017:20250611:110556.487 VMware monitoring: YES
    555017:20250611:110556.487 SMTP authentication: YES
    555017:20250611:110556.487 ODBC: YES
    555017:20250611:110556.487 SSH support: YES
    555017:20250611:110556.487 IPv6 support: YES
    555017:20250611:110556.487 TLS support: YES
    555017:20250611:110556.487 ******************************
    555017:20250611:110556.487 using configuration file: /etc/zabbix/zabbix_server.conf
    555017:20250611:110556.691 current database version (mandatory/optional): 07000000/07000019
    555017:20250611:110556.691 required mandatory version: 07000000
    555019:20250611:110556.723 starting HA manager
    555019:20250611:110556.858 [Z3005] query failed: [1064] You have an error in your SQL syntax; after BEGIN only [WORK] is expected. Unexpected input near ; [begin;]
    555017:20250611:110556.859 cannot start server: database error
    555019:20250611:110556.863 HA manager has been stopped
    555017:20250611:110556.875 Zabbix Server stopped. Zabbix 7.0.13 (revision 42673dd61ca).
    I want to set up MySQL Router on a separate node as i'm planning to deploy a HA Zabbix Cluster and it's not very ideal to set up and configure MySQL Router on every single node in the cluster. I would be very thankful if someone could help me figure out what i'm doing wrong.

    Below is my setup:
    - 3 nodes MySQL InnoDB Cluster (MySQL 8.4.5)
    - OS: Ubuntu Server 24.04 LTS
    - Zabbix Server (7.0.13) installed on the Primary node, set up with zabbix@% user instead of zabbix@localhost
    - MySQL Router (8.4.5) installed on one of the Secondary node (will be assigned Primary later)

    Zabbix Server configuration file:
    Code:
    # This is a configuration file for Zabbix server daemon
    # To get more information about Zabbix, visit https://www.zabbix.com
    
    ############ GENERAL PARAMETERS #################
    
    ### Option: ListenPort
    #    Listen port for trapper.
    #
    # Mandatory: no
    # Range: 1024-32767
    # Default:
    # ListenPort=10051
    
    ### Option: SourceIP
    #    Source IP address for outgoing connections.
    #
    # Mandatory: no
    # Default:
    # SourceIP=
    
    ### Option: LogType
    #    Specifies where log messages are written to:
    #        system  - syslog
    #        file    - file specified with LogFile parameter
    #        console - standard output
    #
    # Mandatory: no
    # Default:
    # LogType=file
    
    ### Option: LogFile
    #    Log file name for LogType 'file' parameter.
    #
    # Mandatory: yes, if LogType is set to file, otherwise no
    # Default:
    # LogFile=
    
    LogFile=/var/log/zabbix/zabbix_server.log
    
    ### Option: LogFileSize
    #    Maximum size of log file in MB.
    #    0 - disable automatic log rotation.
    #
    # Mandatory: no
    # Range: 0-1024
    # Default:
    # LogFileSize=1
    
    LogFileSize=0
    
    ### Option: DebugLevel
    #    Specifies debug level:
    #    0 - basic information about starting and stopping of Zabbix processes
    #    1 - critical information
    #    2 - error information
    #    3 - warnings
    #    4 - for debugging (produces lots of information)
    #    5 - extended debugging (produces even more information)
    #
    # Mandatory: no
    # Range: 0-5
    # Default:
    # DebugLevel=3
    
    ### Option: PidFile
    #    Name of PID file.
    #
    # Mandatory: no
    # Default:
    # PidFile=/tmp/zabbix_server.pid
    
    PidFile=/run/zabbix/zabbix_server.pid
    
    ### Option: SocketDir
    #    IPC socket directory.
    #        Directory to store IPC sockets used by internal Zabbix services.
    #
    # Mandatory: no
    # Default:
    # SocketDir=/tmp
    
    SocketDir=/run/zabbix
    
    ### NOTE: Support for Oracle DB is deprecated since Zabbix 7.0 and will be removed in future versions.
    
    ### Option: DBHost
    #    Database host name.
    #    If set to localhost, socket is used for MySQL.
    #    If set to empty string, socket is used for PostgreSQL.
    #    If set to empty string, the Net Service Name connection method is used to connect to Oracle database; also see
    #    the TNS_ADMIN environment variable to specify the directory where the tnsnames.ora file is located.
    #
    # Mandatory: no
    # Default:
    DBHost=<remote-mysql-router-ip>    # (localhost works)
    
    ### Option: DBName
    #    Database name.
    #    If the Net Service Name connection method is used to connect to Oracle database, specify the service name from
    #    the tnsnames.ora file or set to empty string; also see the TWO_TASK environment variable if DBName is set to
    #    empty string.
    #
    # Mandatory: yes
    # Default:
    # DBName=
    
    DBName=zabbix
    
    ### Option: DBSchema
    #    Schema name. Used for PostgreSQL.
    #
    # Mandatory: no
    # Default:
    # DBSchema=
    
    ### Option: DBUser
    #    Database user.
    #
    # Mandatory: no
    # Default:
    # DBUser=
    
    DBUser=zabbix
    
    ### Option: DBPassword
    #    Database password.
    #    Comment this line if no password is used.
    #
    # Mandatory: no
    # Default:
    DBPassword=<password>
    
    ### Option: DBSocket
    #    Path to MySQL socket.
    #
    # Mandatory: no
    # Default:
    # DBSocket=
    
    ### Option: DBPort
    #    Database port when not using local socket.
    #    If the Net Service Name connection method is used to connect to Oracle database, the port number from the
    #    tnsnames.ora file will be used. The port number set here will be ignored.
    #
    # Mandatory: no
    # Range: 1024-65535
    # Default:
    DBPort=6450    # Read/Write split port
    
    ### Option: AllowUnsupportedDBVersions
    #    Allow server to work with unsupported database versions.
    #       0 - do not allow
    #       1 - allow
    #
    # Mandatory: no
    # Default:
    # AllowUnsupportedDBVersions=0
    
    ### Option: HistoryStorageURL
    #    History storage HTTP[S] URL.
    #
    # Mandatory: no
    # Default:
    # HistoryStorageURL=
    
    ### Option: HistoryStorageTypes
    #    Comma separated list of value types to be sent to the history storage.
    #
    # Mandatory: no
    # Default:
    # HistoryStorageTypes=uint,dbl,str,log,text
    
    ### Option: HistoryStorageDateIndex
    #    Enable preprocessing of history values in history storage to store values in different indices based on date.
    #    0 - disable
    #    1 - enable
    #
    # Mandatory: no
    # Default:
    # HistoryStorageDateIndex=0
    
    ### Option: ExportDir
    #    Directory for real time export of events, history and trends in newline delimited JSON format.
    #    If set, enables real time export.
    #
    # Mandatory: no
    # Default:
    # ExportDir=
    
    ### Option: ExportFileSize
    #    Maximum size per export file in bytes.
    #    Only used for rotation if ExportDir is set.
    #
    # Mandatory: no
    # Range: 1M-1G
    # Default:
    # ExportFileSize=1G
    
    ### Option: ExportType
    #    List of comma delimited types of real time export - allows to control export entities by their
    #    type (events, history, trends) individually.
    #    Valid only if ExportDir is set.
    #
    # Mandatory: no
    # Default:
    # ExportType=events,history,trends
    
    ############ ADVANCED PARAMETERS ################
    
    ### Option: StartPollers
    #    Number of pre-forked instances of pollers.
    #
    # Mandatory: no
    # Range: 0-1000
    # Default:
    # StartPollers=5
    
    ### Option: StartAgentPollers
    #    Number of pre-forked instances of asynchronous Zabbix agent pollers. Also see MaxConcurrentChecksPerPoller.
    #
    # Mandatory: no
    # Range: 0-1000
    # Default:
    # StartAgentPollers=1
    
    ### Option: StartHTTPAgentPollers
    #    Number of pre-forked instances of asynchronous HTTP agent pollers. Also see MaxConcurrentChecksPerPoller.
    #
    # Mandatory: no
    # Range: 0-1000
    # Default:
    # StartHTTPAgentPollers=1
    
    ### Option: StartSNMPPollers
    #    Number of pre-forked instances of asynchronous SNMP pollers. Also see MaxConcurrentChecksPerPoller.
    #
    # Mandatory: no
    # Range: 0-1000
    # Default:
    # StartSNMPPollers=1
    
    ### Option: MaxConcurrentChecksPerPoller
    #    Maximum number of asynchronous checks that can be executed at once by each HTTP agent poller or agent poller.
    #
    # Mandatory: no
    # Range: 1-1000
    # Default:
    # MaxConcurrentChecksPerPoller=1000
    
    ### Option: StartIPMIPollers
    #    Number of pre-forked instances of IPMI pollers.
    #        The IPMI manager process is automatically started when at least one IPMI poller is started.
    #
    # Mandatory: no
    # Range: 0-1000
    # Default:
    # StartIPMIPollers=0
    
    
    ### Option: StartPreprocessors
    #    Number of pre-started instances of preprocessing worker threads should be set to no less than
    #    the available CPU core count. More workers should be set if preprocessing is not CPU-bound and has
    #    lots of network requests.
    # Mandatory: no
    # Range: 1-1000
    # Default:
    # StartPreprocessors=16
    
    ### Option: StartConnectors
    #    Number of pre-forked instances of connector workers.
    #        The connector manager process is automatically started when connector worker is started.
    #
    # Mandatory: no
    # Range: 0-1000
    # Default:
    # StartConnectors=0
    
    ### Option: StartPollersUnreachable
    #    Number of pre-forked instances of pollers for unreachable hosts (including IPMI and Java).
    #    At least one poller for unreachable hosts must be running if regular, IPMI or Java pollers
    #    are started.
    #
    # Mandatory: no
    # Range: 0-1000
    # Default:
    # StartPollersUnreachable=1
    
    ### Option: StartHistoryPollers
    #    Number of pre-forked instances of history pollers.
    #    Only required for calculated checks.
    #    A database connection is required for each history poller instance.
    #
    # Mandatory: no
    # Range: 0-1000
    # Default:
    # StartHistoryPollers=5
    
    ### Option: StartTrappers
    #    Number of pre-forked instances of trappers.
    #    Trappers accept incoming connections from Zabbix sender, active agents and active proxies.
    #    At least one trapper process must be running to display server availability and view queue
    #    in the frontend.
    #
    # Mandatory: no
    # Range: 0-1000
    # Default:
    # StartTrappers=5
    
    ### Option: StartPingers
    #    Number of pre-forked instances of ICMP pingers.
    #
    # Mandatory: no
    # Range: 0-1000
    # Default:
    # StartPingers=1
    
    ### Option: StartDiscoverers
    #    Number of pre-started instances of discovery workers.
    #
    # Mandatory: no
    # Range: 0-1000
    # Default:
    # StartDiscoverers=5
    
    ### Option: StartHTTPPollers
    #    Number of pre-forked instances of HTTP pollers.
    #
    # Mandatory: no
    # Range: 0-1000
    # Default:
    # StartHTTPPollers=1
    
    ### Option: StartTimers
    #    Number of pre-forked instances of timers.
    #    Timers process maintenance periods.
    #    Only the first timer process handles host maintenance updates. Problem suppression updates are shared
    #    between all timers.
    #
    # Mandatory: no
    # Range: 1-1000
    # Default:
    # StartTimers=1
    
    ### Option: StartEscalators
    #    Number of pre-forked instances of escalators.
    #
    # Mandatory: no
    # Range: 1-100
    # Default:
    # StartEscalators=1
    
    ### Option: StartAlerters
    #    Number of pre-forked instances of alerters.
    #    Alerters send the notifications created by action operations.
    #
    # Mandatory: no
    # Range: 1-100
    # Default:
    # StartAlerters=3
    
    ### Option: JavaGateway
    #    IP address (or hostname) of Zabbix Java gateway.
    #    Only required if Java pollers are started.
    #
    # Mandatory: no
    # Default:
    # JavaGateway=
    
    ### Option: JavaGatewayPort
    #    Port that Zabbix Java gateway listens on.
    #
    # Mandatory: no
    # Range: 1024-32767
    # Default:
    # JavaGatewayPort=10052
    
    ### Option: StartJavaPollers
    #    Number of pre-forked instances of Java pollers.
    #
    # Mandatory: no
    # Range: 0-1000
    # Default:
    # StartJavaPollers=0
    
    ### Option: StartVMwareCollectors
    #    Number of pre-forked vmware collector instances.
    #
    # Mandatory: no
    # Range: 0-250
    # Default:
    # StartVMwareCollectors=0
    
    ### Option: VMwareFrequency
    #    How often Zabbix will connect to VMware service to obtain a new data.
    #
    # Mandatory: no
    # Range: 10-86400
    # Default:
    # VMwareFrequency=60
    
    ### Option: VMwarePerfFrequency
    #    How often Zabbix will connect to VMware service to obtain performance data.
    #
    # Mandatory: no
    # Range: 10-86400
    # Default:
    # VMwarePerfFrequency=60
    
    ### Option: VMwareCacheSize
    #    Size of VMware cache, in bytes.
    #    Shared memory size for storing VMware data.
    #    Only used if VMware collectors are started.
    #
    # Mandatory: no
    # Range: 256K-2G
    # Default:
    # VMwareCacheSize=8M
    
    ### Option: VMwareTimeout
    #    Specifies how many seconds vmware collector waits for response from VMware service.
    #
    # Mandatory: no
    # Range: 1-300
    # Default:
    # VMwareTimeout=10
    
    ### Option: SNMPTrapperFile
    #    Temporary file used for passing data from SNMP trap daemon to the server.
    #    Must be the same as in zabbix_trap_receiver.pl or SNMPTT configuration file.
    #
    # Mandatory: no
    # Default:
    # SNMPTrapperFile=/tmp/zabbix_traps.tmp
    
    SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
    
    ### Option: StartSNMPTrapper
    #    If 1, SNMP trapper process is started.
    #
    # Mandatory: no
    # Range: 0-1
    # Default:
    # StartSNMPTrapper=0
    
    ### Option: ListenIP
    #    List of comma delimited IP addresses that the trapper should listen on.
    #    Trapper will listen on all network interfaces if this parameter is missing.
    #
    # Mandatory: no
    # Default:
    # ListenIP=0.0.0.0
    
    ### Option: HousekeepingFrequency
    #    How often Zabbix will perform housekeeping procedure (in hours).
    #    Housekeeping is removing outdated information from the database.
    #    To prevent Housekeeper from being overloaded, no more than 4 times HousekeepingFrequency
    #    hours of outdated information are deleted in one housekeeping cycle, for each item.
    #    To lower load on server startup housekeeping is postponed for 30 minutes after server start.
    #    With HousekeepingFrequency=0 the housekeeper can be only executed using the runtime control option.
    #    In this case the period of outdated information deleted in one housekeeping cycle is 4 times the
    #    period since the last housekeeping cycle, but not less than 4 hours and not greater than 4 days.
    #
    # Mandatory: no
    # Range: 0-24
    # Default:
    # HousekeepingFrequency=1
    
    ### Option: MaxHousekeeperDelete
    #    The table "housekeeper" contains "tasks" for housekeeping procedure in the format:
    #    [housekeeperid], [tablename], [field], [value].
    #    No more than 'MaxHousekeeperDelete' rows (corresponding to [tablename], [field], [value])
    #    will be deleted per one task in one housekeeping cycle.
    #    If set to 0 then no limit is used at all. In this case you must know what you are doing!
    #
    # Mandatory: no
    # Range: 0-1000000
    # Default:
    # MaxHousekeeperDelete=5000
    
    ### Option: CacheSize
    #    Size of configuration cache, in bytes.
    #    Shared memory size for storing host, item and trigger data.
    #
    # Mandatory: no
    # Range: 128K-64G
    # Default:
    # CacheSize=32M
    
    ### Option: CacheUpdateFrequency
    #    How often Zabbix will perform update of configuration cache, in seconds.
    #
    # Mandatory: no
    # Range: 1-3600
    # Default:
    # CacheUpdateFrequency=10
    
    ### Option: StartDBSyncers
    #    Number of pre-forked instances of DB Syncers.
    #
    # Mandatory: no
    # Range: 1-100
    # Default:
    # StartDBSyncers=4
    
    ### Option: HistoryCacheSize
    #    Size of history cache, in bytes.
    #    Shared memory size for storing history data.
    #
    # Mandatory: no
    # Range: 128K-2G
    # Default:
    # HistoryCacheSize=16M
    
    ### Option: HistoryIndexCacheSize
    #    Size of history index cache, in bytes.
    #    Shared memory size for indexing history cache.
    #
    # Mandatory: no
    # Range: 128K-2G
    # Default:
    # HistoryIndexCacheSize=4M
    
    ### Option: TrendCacheSize
    #    Size of trend write cache, in bytes.
    #    Shared memory size for storing trends data.
    #
    # Mandatory: no
    # Range: 128K-2G
    # Default:
    # TrendCacheSize=4M
    
    ### Option: TrendFunctionCacheSize
    #    Size of trend function cache, in bytes.
    #    Shared memory size for caching calculated trend function data.
    #
    # Mandatory: no
    # Range: 128K-2G
    # Default:
    # TrendFunctionCacheSize=4M
    
    ### Option: ValueCacheSize
    #    Size of history value cache, in bytes.
    #    Shared memory size for caching item history data requests.
    #    Setting to 0 disables value cache.
    #
    # Mandatory: no
    # Range: 0,128K-64G
    # Default:
    # ValueCacheSize=8M
    
    ### Option: Timeout
    #    Specifies how long to wait (in seconds) for establishing connection and exchanging data with Zabbix proxy, agent, web service, and for SNMP checks (except SNMP `walk[OID]` and `get[OID]` items) and `icmpping[*]` item.
    #
    # Mandatory: no
    # Range: 1-30
    # Default:
    # Timeout=3
    
    Timeout=4
    
    ### Option: TrapperTimeout
    #    Specifies timeout in seconds for:
    #        retrieval of historical data from Zabbix proxy
    #        sending configuration data to Zabbix proxy
    #        Global script / remote command execution on Zabbix proxy / server
    #
    # Mandatory: no
    # Range: 1-300
    # Default:
    # TrapperTimeout=300
    
    ### Option: UnreachablePeriod
    #    After how many seconds of unreachability treat a host as unavailable.
    #
    # Mandatory: no
    # Range: 1-3600
    # Default:
    # UnreachablePeriod=45
    
    ### Option: UnavailableDelay
    #    How often host is checked for availability during the unavailability period, in seconds.
    #
    # Mandatory: no
    # Range: 1-3600
    # Default:
    # UnavailableDelay=60
    
    ### Option: UnreachableDelay
    #    How often host is checked for availability during the unreachability period, in seconds.
    #
    # Mandatory: no
    # Range: 1-3600
    # Default:
    # UnreachableDelay=15
    
    ### Option: AlertScriptsPath
    #    Full path to location of custom alert scripts.
    #    Default depends on compilation options.
    #    To see the default path run command "zabbix_server --help".
    #
    # Mandatory: no
    # Default:
    # AlertScriptsPath=/usr/lib/zabbix/alertscripts
    
    ### Option: ExternalScripts
    #    Full path to location of external scripts.
    #    Default depends on compilation options.
    #    To see the default path run command "zabbix_server --help".
    #
    # Mandatory: no
    # Default:
    # ExternalScripts=/usr/lib/zabbix/externalscripts
    
    ### Option: FpingLocation
    #    Location of fping.
    #    Make sure that fping binary has root ownership and SUID flag set.
    #
    # Mandatory: no
    # Default:
    # FpingLocation=/usr/sbin/fping
    
    FpingLocation=/usr/bin/fping
    
    ### Option: Fping6Location
    #    Location of fping6.
    #    Make sure that fping6 binary has root ownership and SUID flag set.
    #    Make empty if your fping utility is capable to process IPv6 addresses.
    #
    # Mandatory: no
    # Default:
    # Fping6Location=/usr/sbin/fping6
    
    Fping6Location=/usr/bin/fping6
    
    ### Option: SSHKeyLocation
    #    Location of public and private keys for SSH checks and actions.
    #
    # Mandatory: no
    # Default:
    # SSHKeyLocation=
    
    ### Option: LogSlowQueries
    #    How long a database query may take before being logged (in milliseconds).
    #    Only works if DebugLevel set to 3, 4 or 5.
    #    0 - don't log slow queries.
    #
    # Mandatory: no
    # Range: 1-3600000
    # Default:
    # LogSlowQueries=0
    
    LogSlowQueries=3000
    
    ### Option: TmpDir
    #    Temporary directory.
    #
    # Mandatory: no
    # Default:
    # TmpDir=/tmp
    
    ### Option: StartProxyPollers
    #    Number of pre-forked instances of pollers for passive proxies.
    #
    # Mandatory: no
    # Range: 0-250
    # Default:
    # StartProxyPollers=1
    
    ### Option: ProxyConfigFrequency
    #    How often Zabbix Server sends configuration data to a Zabbix Proxy in seconds.
    #    This parameter is used only for proxies in the passive mode.
    #
    # Mandatory: no
    # Range: 1-3600*24*7
    # Default:
    # ProxyConfigFrequency=10
    
    ### Option: ProxyDataFrequency
    #    How often Zabbix Server requests history data from a Zabbix Proxy in seconds.
    #    This parameter is used only for proxies in the passive mode.
    #
    # Mandatory: no
    # Range: 1-3600
    # Default:
    # ProxyDataFrequency=1
    
    ### Option: StartLLDProcessors
    #    Number of pre-forked instances of low level discovery processors.
    #
    # Mandatory: no
    # Range: 1-100
    # Default:
    # StartLLDProcessors=2
    
    ### Option: AllowRoot
    #    Allow the server to run as 'root'. If disabled and the server is started by 'root', the server
    #    will try to switch to the user specified by the User configuration option instead.
    #    Has no effect if started under a regular user.
    #    0 - do not allow
    #    1 - allow
    #
    # Mandatory: no
    # Default:
    # AllowRoot=0
    
    ### Option: User
    #    Drop privileges to a specific, existing user on the system.
    #    Only has effect if run as 'root' and AllowRoot is disabled.
    #
    # Mandatory: no
    # Default:
    # User=zabbix
    
    ### Option: Include
    #    You may include individual files or all files in a directory in the configuration file.
    #    Installing Zabbix will create include directory in /usr/local/etc, unless modified during the compile time.
    #
    # Mandatory: no
    # Default:
    # Include=
    
    # Include=/usr/local/etc/zabbix_server.general.conf
    # Include=/usr/local/etc/zabbix_server.conf.d/
    # Include=/usr/local/etc/zabbix_server.conf.d/*.conf
    
    ### Option: SSLCertLocation
    #    Location of SSL client certificates.
    #    This parameter is used in web monitoring and for communication with Vault.
    #    Default depends on compilation options.
    #    To see the default path run command "zabbix_server --help".
    #
    # Mandatory: no
    # Default:
    # SSLCertLocation=${datadir}/zabbix/ssl/certs
    
    ### Option: SSLKeyLocation
    #    Location of private keys for SSL client certificates.
    #    This parameter is used in web monitoring and for communication with Vault.
    #    Default depends on compilation options.
    #    To see the default path run command "zabbix_server --help".
    #
    # Mandatory: no
    # Default:
    # SSLKeyLocation=${datadir}/zabbix/ssl/keys
    
    ### Option: SSLCALocation
    #    Override the location of certificate authority (CA) files for SSL server certificate verification.
    #    If not set, system-wide directory will be used.
    #    This parameter is used in web monitoring, SMTP authentication, HTTP agent items and for communication with Vault.
    #
    # Mandatory: no
    # Default:
    # SSLCALocation=
    
    ### Option: StatsAllowedIP
    #    List of comma delimited IP addresses, optionally in CIDR notation, or DNS names of external Zabbix instances.
    #    Stats request will be accepted only from the addresses listed here. If this parameter is not set no stats requests
    #    will be accepted.
    #    If IPv6 support is enabled then '127.0.0.1', '::127.0.0.1', '::ffff:127.0.0.1' are treated equally
    #    and '::/0' will allow any IPv4 or IPv6 address.
    #    '0.0.0.0/0' can be used to allow any IPv4 address.
    #    Example: StatsAllowedIP=127.0.0.1,192.168.1.0/24,::1,2001:db8::/32,zabbix.example.com
    #
    # Mandatory: no
    # Default:
    # StatsAllowedIP=
    StatsAllowedIP=127.0.0.1
    
    ####### LOADABLE MODULES #######
    
    ### Option: LoadModulePath
    #    Full path to location of server modules.
    #    Default depends on compilation options.
    #    To see the default path run command "zabbix_server --help".
    #
    # Mandatory: no
    # Default:
    # LoadModulePath=${libdir}/modules
    
    ### Option: LoadModule
    #    Module to load at server startup. Modules are used to extend functionality of the server.
    #    Formats:
    #        LoadModule=<module.so>
    #        LoadModule=<path/module.so>
    #        LoadModule=</abs_path/module.so>
    #    Either the module must be located in directory specified by LoadModulePath or the path must precede the module name.
    #    If the preceding path is absolute (starts with '/') then LoadModulePath is ignored.
    #    It is allowed to include multiple LoadModule parameters.
    #
    # Mandatory: no
    # Default:
    # LoadModule=
    
    ####### TLS-RELATED PARAMETERS #######
    
    ### Option: TLSCAFile
    #    Full pathname of a file containing the top-level CA(s) certificates for
    #    peer certificate verification.
    #
    # Mandatory: no
    # Default:
    # TLSCAFile=
    
    ### Option: TLSCRLFile
    #    Full pathname of a file containing revoked certificates.
    #
    # Mandatory: no
    # Default:
    # TLSCRLFile=
    
    ### Option: TLSCertFile
    #    Full pathname of a file containing the server certificate or certificate chain.
    #
    # Mandatory: no
    # Default:
    # TLSCertFile=
    
    ### Option: TLSKeyFile
    #    Full pathname of a file containing the server private key.
    #
    # Mandatory: no
    # Default:
    # TLSKeyFile=
    
    ####### For advanced users - TLS ciphersuite selection criteria #######
    
    ### Option: TLSCipherCert13
    #    Cipher string for OpenSSL 1.1.1 or newer in TLS 1.3.
    #    Override the default ciphersuite selection criteria for certificate-based encryption.
    #
    # Mandatory: no
    # Default:
    # TLSCipherCert13=
    
    ### Option: TLSCipherCert
    #    GnuTLS priority string or OpenSSL (TLS 1.2) cipher string.
    #    Override the default ciphersuite selection criteria for certificate-based encryption.
    #    Example for GnuTLS:
    #        NONE:+VERS-TLS1.2:+ECDHE-RSA:+RSA:+AES-128-GCM:+AES-128-CBC:+AEAD:+SHA256:+SHA1:+CURVE-ALL:+COMP-NULL:+SIGN-ALL:+CTYPE-X.509
    #    Example for OpenSSL:
    #        EECDH+aRSA+AES128:RSA+aRSA+AES128
    #
    # Mandatory: no
    # Default:
    # TLSCipherCert=
    
    ### Option: TLSCipherPSK13
    #    Cipher string for OpenSSL 1.1.1 or newer in TLS 1.3.
    #    Override the default ciphersuite selection criteria for PSK-based encryption.
    #    Example:
    #        TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256
    #
    # Mandatory: no
    # Default:
    # TLSCipherPSK13=
    
    ### Option: TLSCipherPSK
    #    GnuTLS priority string or OpenSSL (TLS 1.2) cipher string.
    #    Override the default ciphersuite selection criteria for PSK-based encryption.
    #    Example for GnuTLS:
    #        NONE:+VERS-TLS1.2:+ECDHE-PSK:+PSK:+AES-128-GCM:+AES-128-CBC:+AEAD:+SHA256:+SHA1:+CURVE-ALL:+COMP-NULL:+SIGN-ALL
    #    Example for OpenSSL:
    #        kECDHEPSK+AES128:kPSK+AES128
    #
    # Mandatory: no
    # Default:
    # TLSCipherPSK=
    
    ### Option: TLSCipherAll13
    #    Cipher string for OpenSSL 1.1.1 or newer in TLS 1.3.
    #    Override the default ciphersuite selection criteria for certificate- and PSK-based encryption.
    #    Example:
    #        TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256
    #
    # Mandatory: no
    # Default:
    # TLSCipherAll13=
    
    ### Option: TLSCipherAll
    #    GnuTLS priority string or OpenSSL (TLS 1.2) cipher string.
    #    Override the default ciphersuite selection criteria for certificate- and PSK-based encryption.
    #    Example for GnuTLS:
    #        NONE:+VERS-TLS1.2:+ECDHE-RSA:+RSA:+ECDHE-PSK:+PSK:+AES-128-GCM:+AES-128-CBC:+AEAD:+SHA256:+SHA1:+CURVE-ALL:+COMP-NULL:+SIGN-ALL:+CTYPE-X.509
    #    Example for OpenSSL:
    #        EECDH+aRSA+AES128:RSA+aRSA+AES128:kECDHEPSK+AES128:kPSK+AES128
    #
    # Mandatory: no
    # Default:
    # TLSCipherAll=
    
    ### Option: DBTLSConnect
    #    Setting this option enforces to use TLS connection to database.
    #    required    - connect using TLS
    #    verify_ca   - connect using TLS and verify certificate
    #    verify_full - connect using TLS, verify certificate and verify that database identity specified by DBHost
    #                  matches its certificate
    #    On MySQL starting from 5.7.11 and PostgreSQL following values are supported: "required", "verify_ca" and
    #    "verify_full".
    #    On MariaDB starting from version 10.2.6 "required" and "verify_full" values are supported.
    #    Default is not to set any option and behavior depends on database configuration
    #
    # Mandatory: no
    # Default:
    # DBTLSConnect=
    
    ### Option: DBTLSCAFile
    #    Full pathname of a file containing the top-level CA(s) certificates for database certificate verification.
    #    Supported only for MySQL and PostgreSQL
    #
    # Mandatory: no
    #    (yes, if DBTLSConnect set to one of: verify_ca, verify_full)
    # Default:
    # DBTLSCAFile=
    
    ### Option: DBTLSCertFile
    #    Full pathname of file containing Zabbix server certificate for authenticating to database.
    #    Supported only for MySQL and PostgreSQL
    #
    # Mandatory: no
    # Default:
    # DBTLSCertFile=
    
    ### Option: DBTLSKeyFile
    #    Full pathname of file containing the private key for authenticating to database.
    #    Supported only for MySQL and PostgreSQL
    #
    # Mandatory: no
    # Default:
    # DBTLSKeyFile=
    
    ### Option: DBTLSCipher
    #    The list of encryption ciphers that Zabbix server permits for TLS protocols up through TLSv1.2
    #    Supported only for MySQL
    #
    # Mandatory no
    # Default:
    # DBTLSCipher=
    
    ### Option: DBTLSCipher13
    #    The list of encryption ciphersuites that Zabbix server permits for TLSv1.3 protocol
    #    Supported only for MySQL, starting from version 8.0.16
    #
    # Mandatory no
    # Default:
    # DBTLSCipher13=
    
    ### Option: Vault
    #    Specifies vault:
    #        HashiCorp - HashiCorp KV Secrets Engine - Version 2
    #        CyberArk  - CyberArk Central Credential Provider
    #
    # Mandatory: no
    # Default:
    # Vault=HashiCorp
    
    ### Option: VaultToken
    #    Vault authentication token that should have been generated exclusively for Zabbix server with read only permission
    #    to paths specified in Vault macros and read only permission to path specified in optional VaultDBPath
    #    configuration parameter.
    #    It is an error if VaultToken and VAULT_TOKEN environment variable are defined at the same time.
    #
    # Mandatory: no
    #    (yes, if Vault is explicitly set to HashiCorp)
    # Default:
    # VaultToken=
    
    ### Option: VaultURL
    #    Vault server HTTP[S] URL. System-wide CA certificates directory will be used if SSLCALocation is not specified.
    #
    # Mandatory: no
    # Default:
    # VaultURL=https://127.0.0.1:8200
    
    ### Option: VaultPrefix
    #    Custom prefix for Vault path or query depending on the Vault.
    #    Most suitable defaults will be used if not specified.
    #    Note that 'data' is automatically appended after mountpoint for HashiCorp if VaultPrefix is not specified.
    #    Example prefix for HashiCorp:
    #        /v1/secret/data/zabbix/
    #    Example prefix for CyberArk:
    #        /AIMWebService/api/Accounts?
    # Mandatory: no
    # Default:
    # VaultPrefix=
    
    ### Option: VaultDBPath
    #    Vault path or query depending on the Vault from where credentials for database will be retrieved by keys.
    #    Keys used for HashiCorp are 'password' and 'username'.
    #        Example path with VaultPrefix=/v1/secret/data/zabbix/:
    #        database
    #        Example path without VaultPrefix:
    #            secret/zabbix/database
    #    Keys used for CyberArk are 'Content' and 'UserName'.
    #    Example query:
    #            AppID=zabbix_server&Query=Safe=passwordSafe;Object=zabbix_server_database
    #    This option can only be used if DBUser and DBPassword are not specified.
    #
    # Mandatory: no
    # Default:
    # VaultDBPath=
    
    ### Option: VaultTLSCertFile
    #    Name of the SSL certificate file used for client authentication. The certificate file must be in PEM1 format.
    #    If the certificate file contains also the private key, leave the SSL key file field empty. The directory
    #    containing this file is specified by configuration parameter SSLCertLocation.
    #
    # Mandatory: no
    # Default:
    # VaultTLSCertFile=
    
    ### Option: VaultTLSKeyFile
    #    Name of the SSL private key file used for client authentication. The private key file must be in PEM1 format.
    #    The directory containing this file is specified by configuration parameter SSLKeyLocation.
    #
    # Mandatory: no
    # Default:
    # VaultTLSKeyFile=
    
    ### Option: StartReportWriters
    #    Number of pre-forked report writer instances.
    #
    # Mandatory: no
    # Range: 0-100
    # Default:
    # StartReportWriters=0
    
    ### Option: WebServiceURL
    #    URL to Zabbix web service, used to perform web related tasks.
    #    Example: http://localhost:10053/report
    #
    # Mandatory: no
    # Default:
    # WebServiceURL=
    
    ### Option: ServiceManagerSyncFrequency
    #    How often Zabbix will synchronize configuration of a service manager (in seconds).
    #
    # Mandatory: no
    # Range: 1-3600
    # Default:
    # ServiceManagerSyncFrequency=60
    
    ### Option: ProblemHousekeepingFrequency
    #    How often Zabbix will delete problems for deleted triggers (in seconds).
    #
    # Mandatory: no
    # Range: 1-3600
    # Default:
    # ProblemHousekeepingFrequency=60
    
    ## Option: StartODBCPollers
    #    Number of pre-forked ODBC poller instances.
    #
    # Mandatory: no
    # Range: 0-1000
    # Default:
    # StartODBCPollers=1
    
    ### Option: EnableGlobalScripts
    #    Enable global scripts on Zabbix server.
    #       0 - disable
    #       1 - enable
    #
    # Mandatory: no
    # Default:
    # EnableGlobalScripts=1
    EnableGlobalScripts=0
    
    # Option: AllowSoftwareUpdateCheck
    #       Allow Zabbix UI to receive information about software updates from zabbix.com
    #       0 - disable software update checks
    #       1 - enable software update checks
    #
    # Mandatory: no
    # Default:
    # AllowSoftwareUpdateCheck=1
    
    ### Option: SMSDevices
    #    List of comma delimited modem files allowed to use Zabbix server
    #       SMS sending not possible if this parameter is not set
    #    Example: SMSDevices=/dev/ttyUSB0,/dev/ttyUSB1
    #
    # Mandatory: no
    # Default:
    # SMSDevices=
    
    ####### For advanced users - TCP-related fine-tuning parameters #######
    
    ## Option: ListenBacklog
    #       The maximum number of pending connections in the queue. This parameter is passed to
    #       listen() function as argument 'backlog' (see "man listen").
    #
    # Mandatory: no
    # Range: 0 - INT_MAX (depends on system, too large values may be silently truncated to implementation-specified maximum)
    # Default: SOMAXCONN (hard-coded constant, depends on system)
    # ListenBacklog=
    
    
    ####### High availability cluster parameters #######
    
    ## Option: HANodeName
    #    The high availability cluster node name.
    #    When empty, server is working in standalone mode; a node with empty name is registered with address for the frontend to connect to.
    #
    # Mandatory: no
    # Default:
    # HANodeName=
    
    ## Option: NodeAddress
    #    IP or hostname with optional port to specify how frontend should connect to the server.
    #    Format: <address>[:<port>]
    #
    #    If IP or hostname is not set, then ListenIP value will be used. In case ListenIP is not set, localhost will be used.
    #    If port is not set, then ListenPort value will be used. In case ListenPort is not set, 10051 will be used.
    #    This option can be overridden by address specified in frontend configuration.
    #
    # Mandatory: no
    # Default:
    # NodeAddress=localhost:10051
    
    ####### Browser monitoring #######
    
    ### Option: WebDriverURL
    #    WebDriver interface HTTP[S] URL. For example http://localhost:4444 used with Selenium WebDriver standalone server.
    #
    # Mandatory: no
    # Default:
    # WebDriverURL=
    
    ### Option: StartBrowserPollers
    #    Number of pre-forked instances of browser item pollers.
    #
    # Mandatory: no
    # Range: 0-1000
    # Default:
    # StartBrowserPollers=1
    My MySQL Router configuration file:
    Code:
    # File automatically generated during MySQL Router bootstrap
    [DEFAULT]
    name=system
    user=mysqlrouter
    keyring_path=/var/lib/mysqlrouter/keyring
    master_key_path=/etc/mysqlrouter/mysqlrouter.key
    connect_timeout=5
    read_timeout=30
    dynamic_state=/var/lib/mysqlrouter/state.json
    client_ssl_cert=/var/lib/mysqlrouter/router-cert.pem
    client_ssl_key=/var/lib/mysqlrouter/router-key.pem
    client_ssl_mode=PREFERRED
    server_ssl_mode=PREFERRED
    server_ssl_verify=DISABLED
    unknown_config_option=error
    max_idle_server_connections=64
    router_require_enforce=1
    
    [logger]
    level=info
    
    [metadata_cache:bootstrap]
    cluster_type=gr
    router_id=13
    user=zabbix-db-router
    metadata_cluster=zabbix-db
    ttl=0.5
    auth_cache_ttl=-1
    auth_cache_refresh_interval=2
    use_gr_notifications=0
    
    [routing:bootstrap_rw]
    bind_address=0.0.0.0
    bind_port=6446
    destinations=metadata-cache://zabbix-db/?role=PRIMARY
    routing_strategy=first-available
    protocol=classic
    
    [routing:bootstrap_ro]
    bind_address=0.0.0.0
    bind_port=6447
    destinations=metadata-cache://zabbix-db/?role=SECONDARY
    routing_strategy=round-robin-with-fallback
    protocol=classic
    
    [routing:bootstrap_rw_split]
    bind_address=0.0.0.0
    bind_port=6450
    destinations=metadata-cache://zabbix-db/?role=PRIMARY_AND_SECONDARY
    routing_strategy=round-robin
    #routing_strategy=round-robin-with-fallback
    protocol=classic
    connection_sharing=1
    client_ssl_mode=PREFERRED
    server_ssl_mode=PREFERRED
    access_mode=auto
    
    [routing:bootstrap_x_rw]
    bind_address=0.0.0.0
    bind_port=6448
    destinations=metadata-cache://zabbix-db/?role=PRIMARY
    routing_strategy=first-available
    protocol=x
    router_require_enforce=0
    client_ssl_ca=
    server_ssl_key=
    server_ssl_cert=
    
    [routing:bootstrap_x_ro]
    bind_address=0.0.0.0
    bind_port=6449
    destinations=metadata-cache://zabbix-db/?role=SECONDARY
    routing_strategy=round-robin-with-fallback
    protocol=x
    router_require_enforce=0
    client_ssl_ca=
    server_ssl_key=
    server_ssl_cert=
    
    [http_server]
    port=8443
    ssl=1
    ssl_cert=/var/lib/mysqlrouter/router-cert.pem
    ssl_key=/var/lib/mysqlrouter/router-key.pem
    
    [http_auth_realm:default_auth_realm]
    backend=default_auth_backend
    method=basic
    name=default_realm
    
    [rest_router]
    require_realm=default_auth_realm
    
    [rest_api]
    
    [http_auth_backend:default_auth_backend]
    backend=metadata_cache
    
    [rest_routing]
    require_realm=default_auth_realm
    
    [rest_metadata_cache]
    require_realm=default_auth_realm
  • Romolo
    Junior Member
    • Jul 2025
    • 1

    #2
    Revirven,

    I had installed MySQL Router at same host as application and for using "ZabbixServer -> localhost:6446" and "ZabbixWeb-> localhost:6450" so its works well.

    In my tests and labs, Zabbix Server 7.0.8 (that I use) not works with MySQL Router 8.4.3 Read/Write Split (tcp 6450) version.

    Regards,
    Romolo.

    Comment

    • revirven
      Junior Member
      • Jun 2025
      • 2

      #3
      Originally posted by Romolo
      Revirven,

      I had installed MySQL Router at same host as application and for using "ZabbixServer -> localhost:6446" and "ZabbixWeb-> localhost:6450" so its works well.

      In my tests and labs, Zabbix Server 7.0.8 (that I use) not works with MySQL Router 8.4.3 Read/Write Split (tcp 6450) version.

      Regards,
      Romolo.
      Hi Romolo,

      Thanks for taking time to test the case. Up to this point i have come to the conclusion that Zabbix simply doesn't support read/write splitting and use the cluster only for HA implementation, without load balancing.

      Regards,
      Revirven.

      Comment

      • cyber
        Senior Member
        Zabbix Certified SpecialistZabbix Certified Professional
        • Dec 2006
        • 4807

        #4
        Originally posted by revirven
        and use the cluster only for HA implementation, without load balancing.
        That is obvious, if you read the docs.. https://www.zabbix.com/documentation...epts/server/ha

        While one Zabbix server in the cluster is active, others are on standby, ready to take over if necessary.
        Click image for larger version

Name:	image.png
Views:	48
Size:	22.3 KB
ID:	507536

        Comment

        Working...