9.6. 监控跨站点复制的状态


监控备份位置的站点状态,以检测站点之间的通信中断。当远程站点状态变为 离线时,Data Grid 会停止将数据复制到备份位置。您的数据不同步,您必须在使集群重新上线前修复不一致的问题。

对于早期问题检测,需要监控跨站点事件。使用以下监控策略之一:

使用 REST API 监控跨站点复制

使用 REST 端点监控所有缓存的跨站点复制状态。您可以实施自定义脚本来轮询 REST 端点,或者使用以下示例。

先决条件

  • 启用跨站点复制。

流程

  1. 实施脚本以轮询 REST 端点。

    以下示例演示了如何使用 Python 脚本每 5 秒轮询站点状态。

#!/usr/bin/python3
import time
import requests
from requests.auth import HTTPDigestAuth


class InfinispanConnection:

    def __init__(self, server: str = 'http://localhost:11222', cache_manager: str = 'default',
                 auth: tuple = ('admin', 'change_me')) -> None:
        super().__init__()
        self.__url = f'{server}/rest/v2/container/x-site/backups/'
        self.__auth = auth
        self.__headers = {
            'accept': 'application/json'
        }

    def get_sites_status(self):
        try:
            rsp = requests.get(self.__url, headers=self.__headers, auth=HTTPDigestAuth(self.__auth[0], self.__auth[1]))
            if rsp.status_code != 200:
                return None
            return rsp.json()
        except:
            return None


# Specify credentials for Data Grid user with permission to access the REST endpoint
USERNAME = 'admin'
PASSWORD = 'change_me'
# Set an interval between cross-site status checks
POLL_INTERVAL_SEC = 5
# Provide a list of servers
SERVERS = [
    InfinispanConnection('http://127.0.0.1:11222', auth=(USERNAME, PASSWORD)),
    InfinispanConnection('http://127.0.0.1:12222', auth=(USERNAME, PASSWORD))
]
#Specify the names of remote sites
REMOTE_SITES = [
    'nyc'
]
#Provide a list of caches to monitor
CACHES = [
    'work',
    'sessions'
]


def on_event(site: str, cache: str, old_status: str, new_status: str):
    # TODO implement your handling code here
    print(f'site={site} cache={cache} Status changed {old_status} -> {new_status}')


def __handle_mixed_state(state: dict, site: str, site_status: dict):
    if site not in state:
        state[site] = {c: 'online' if c in site_status['online'] else 'offline' for c in CACHES}
        return

    for cache in CACHES:
        __update_cache_state(state, site, cache, 'online' if cache in site_status['online'] else 'offline')


def __handle_online_or_offline_state(state: dict, site: str, new_status: str):
    if site not in state:
        state[site] = {c: new_status for c in CACHES}
        return

    for cache in CACHES:
        __update_cache_state(state, site, cache, new_status)


def __update_cache_state(state: dict, site: str, cache: str, new_status: str):
    old_status = state[site].get(cache)
    if old_status != new_status:
        on_event(site, cache, old_status, new_status)
        state[site][cache] = new_status


def update_state(state: dict):
    rsp = None
    for conn in SERVERS:
        rsp = conn.get_sites_status()
        if rsp:
            break
    if rsp is None:
        print('Unable to fetch site status from any server')
        return

    for site in REMOTE_SITES:
        site_status = rsp.get(site, {})
        new_status = site_status.get('status')
        if new_status == 'mixed':
            __handle_mixed_state(state, site, site_status)
        else:
            __handle_online_or_offline_state(state, site, new_status)


if __name__ == '__main__':
    _state = {}
    while True:
        update_state(_state)
        time.sleep(POLL_INTERVAL_SEC)

当站点状态从 Online 变为 offline 或 vice-versa 时,调用 on_event 的功能。

如果要使用这个脚本,您必须指定以下变量:

  • USERNAMEPASSWORD :Data Grid 用户的用户名和密码,有权访问 REST 端点。
  • POLL_INTERVAL_SEC :轮询之间的秒数。
  • SERVERS :此站点的数据网格服务器列表。该脚本只需要一个有效的响应,但提供了列表以允许故障切换。
  • REMOTE_SITES: 要监控这些服务器上的远程站点列表。
  • CACHES :要监控的缓存名称列表。

使用 Prometheus 指标监控跨站点复制

Prometheus 和其他监控系统可让您配置警报来检测站点状态何时更改为 离线

提示

监控跨站点延迟指标可帮助您发现潜在的问题。

先决条件

  • 启用跨站点复制。

流程

  1. 配置数据网格指标。
  2. 使用 Prometheus 指标格式配置警报规则。

    • 对于站点状态,在线 使用 10 代表 离线
    • 对于 expr filed,请使用以下格式:
      vendor_cache_manager_default_cache_<cache name>_x_site_admin_<site name>_status

      在以下示例中,当 NYC 站点为名为 work 或 session 的缓存 离线时,Prometheus 会发出警告

      groups:
      - name: Cross Site Rules
        rules:
        - alert: Cache Work and Site NYC
          expr: vendor_cache_manager_default_cache_work_x_site_admin_nyc_status == 0
        - alert: Cache Sessions and Site NYC
          expr: vendor_cache_manager_default_cache_sessions_x_site_admin_nyc_status == 0

      下图显示了 NYC 站点 离线 进行缓存 工作 的警报。

      图 9.1. Prometheus Alert

      Prometheus xsite 警报
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.