AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题

问题[high-availability](server)

Martin Hope
motorleague
Asked: 2022-03-26 07:35:55 +0800 CST

当 Firewalld 运行时,Keepalived 脑裂

  • 0

我正在使用 keepalived 在两个 Alma 8 Nginx 服务器之间提供可用性(如果有任何相关性,则托管在 VMWare 上)。启用 firewalld 后,尽管为 VRRP 设置了丰富的规则,但当我启动 firewalld 时,两台主机都开始响应虚拟 IP:

root@dca-nfs01:~# arping 172.31.5.233
60 bytes from 00:50:56:84:ac:d0 (172.31.5.233): index=39 time=1.960 usec
60 bytes from 00:50:56:84:ac:d0 (172.31.5.233): index=40 time=20.660 usec
60 bytes from 00:50:56:84:52:ed (172.31.5.233): index=41 time=24.930 usec
60 bytes from 00:50:56:84:ac:d0 (172.31.5.233): index=42 time=534.616 msec
60 bytes from 00:50:56:84:52:ed (172.31.5.233): index=43 time=534.646 msec

我的 keepalived 配置取自标准教程模板,如下所示:

[root@dca-ngx01-al ~]# cat /etc/keepalived/keepalived.conf
global_defs {
  # Keepalived process identifier
  router_id nginx
}

# Script to check whether Nginx is running or not
vrrp_script check_nginx {
  script "/sbin/pidof nginx"
  interval 2
  weight 50
}

# Virtual interface - The priority specifies the order in which the assigned interface to take over in a failover
vrrp_instance VI_01 {
  state MASTER
  interface ens192
  virtual_router_id 151
  priority 110

  # The virtual ip address shared between the two NGINX Web Server which will float
  virtual_ipaddress {
    172.31.5.233
  }
  track_script {
    check_nginx
  }
  authentication {
    auth_type AH
    auth_pass secret
  }
}

两个盒子都有一个简单的单区防火墙,我添加了一个丰富的规则来允许两台主机之间的 VRRP 通信:

[root@dca-ngx01-al ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens192
  sources:
  services: dhcpv6-client http https ssh
  ports: 10050/tcp
  protocols:
  forward: no
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
        rule protocol value="vrrp" accept

我也net.ipv4.ip_forward = 1入了/etc/sysctl.conf。

当firewalld在两个盒子上都停止时,keepalived行为正确,但是当启用时,双方似乎失去了联系,只是重复发送免费的ARP数据包:

● keepalived.service - LVS and VRRP High Availability Monitor
   Loaded: loaded (/usr/lib/systemd/system/keepalived.service; enabled; vendor preset: disabled)
   Active: active (running) since Fri 2022-03-25 12:48:25 GMT; 2h 35min ago
  Process: 7140 ExecReload=/bin/kill -HUP $MAINPID (code=exited, status=0/SUCCESS)
  Process: 12966 ExecStart=/usr/sbin/keepalived $KEEPALIVED_OPTIONS (code=exited, status=0/SUCCESS)
 Main PID: 12967 (keepalived)
    Tasks: 2 (limit: 11406)
   Memory: 1.8M
   CGroup: /system.slice/keepalived.service
           ├─12967 /usr/sbin/keepalived -D
           └─12968 /usr/sbin/keepalived -D

Mar 25 15:08:15 dca-ngx01-al.REDACTED.local Keepalived_vrrp[12968]: Sending gratuitous ARP on ens192 for 172.31.5.233
Mar 25 15:08:15 dca-ngx01-al.REDACTED.local Keepalived_vrrp[12968]: Sending gratuitous ARP on ens192 for 172.31.5.233
Mar 25 15:08:15 dca-ngx01-al.REDACTED.local Keepalived_vrrp[12968]: Sending gratuitous ARP on ens192 for 172.31.5.233
Mar 25 15:08:15 dca-ngx01-al.REDACTED.local Keepalived_vrrp[12968]: Sending gratuitous ARP on ens192 for 172.31.5.233
Mar 25 15:08:18 dca-ngx01-al.REDACTED.local Keepalived_vrrp[12968]: (VI_01) Sending/queueing gratuitous ARPs on ens192 for 1>
Mar 25 15:08:18 dca-ngx01-al.REDACTED.local Keepalived_vrrp[12968]: Sending gratuitous ARP on ens192 for 172.31.5.233
Mar 25 15:08:18 dca-ngx01-al.REDACTED.local Keepalived_vrrp[12968]: Sending gratuitous ARP on ens192 for 172.31.5.233
Mar 25 15:08:18 dca-ngx01-al.REDACTED.local Keepalived_vrrp[12968]: Sending gratuitous ARP on ens192 for 172.31.5.233
Mar 25 15:08:18 dca-ngx01-al.REDACTED.local Keepalived_vrrp[12968]: Sending gratuitous ARP on ens192 for 172.31.5.233
Mar 25 15:08:18 dca-ngx01-al.REDACTED.local Keepalived_vrrp[12968]: Sending gratuitous ARP on ens192 for 172.31.5.233

然而,我可以通过使用 TCPDump 看到,当 firewalld 处于活动状态时,来自其他主机的常规 VRRP 数据包至少会到达网络接口:

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens192, link-type EN10MB (Ethernet), capture size 262144 bytes
15:25:21.532300 IP dca-ngx02-al.REDACTED.local > vrrp.mcast.net: AH(spi=0xac1f05e5,seq=0x3160): VRRPv2, Advertisement, vrid 151, prio 150, authtype ah, intvl 1s, length 20
15:25:22.532419 IP dca-ngx02-al.REDACTED.local > vrrp.mcast.net: AH(spi=0xac1f05e5,seq=0x3161): VRRPv2, Advertisement, vrid 151, prio 150, authtype ah, intvl 1s, length 20
15:25:23.532476 IP dca-ngx02-al.REDACTED.local > vrrp.mcast.net: AH(spi=0xac1f05e5,seq=0x3162): VRRPv2, Advertisement, vrid 151, prio 150, authtype ah, intvl 1s, length 20
15:25:24.532544 IP dca-ngx02-al.REDACTED.local > vrrp.mcast.net: AH(spi=0xac1f05e5,seq=0x3163): VRRPv2, Advertisement, vrid 151, prio 150, authtype ah, intvl 1s, length 20

有人对我如何进一步解决此问题有任何想法吗?

提前致谢。

linux nginx high-availability keepalived vrrp
  • 1 个回答
  • 373 Views
Martin Hope
matpen
Asked: 2022-03-14 08:45:49 +0800 CST

RabbitMQ quorum queues - 让节点自动重新加入

  • 0

我正在探索RabbitMQ quorum 队列,以改进 Kubernetes 集群中某些服务的 HA。在我阅读时,它们的设计考虑到了数据安全。

但是,“管理副本”一章指出:

仲裁队列的副本由操作员显式管理。当一个新节点被添加到集群中时,它不会托管任何仲裁队列副本,除非操作员明确地将其添加到仲裁队列或一组仲裁队列的成员(副本)列表中。

因此,如果发生中断(尤其是非自愿的),可能会出现以下情况(对于 3 节点集群):

  1. 中断后,一个节点会宕机:其他两个节点仍然占多数,并将“保持队列活动”,可能会选举一个新的领导者;
  2. kubernetes 会提供一个新的节点(pod)来替换失效的节点;新节点会自动重新加入 RabbitMQ 集群,但是
  3. 除非操作员手动干预,否则新节点不会对现有的仲裁队列做出贡献;
  4. 对于 3 节点集群,这意味着不再有 HA:如果将来某个时候,其他节点之一发生故障,则队列实际上会丢失;

有什么办法可以缓解这种情况吗?例如,是否可以让节点自动重新加入所有现有的仲裁队列集群?也许通过维护一个“启动命令”列表(在 RabbitMQ 启动后运行)我们可以添加重新加入命令?

high-availability kubernetes rabbitmq
  • 1 个回答
  • 242 Views
Martin Hope
knm
Asked: 2021-11-19 05:32:43 +0800 CST

循环法的高可用性 - rsync 和数据库复制或集群?

  • 0

我有一台机器(centos7),安装了 Apache、PHP、MariaDB 和 Nginx、Nodejs、MongoDB,并被许多不同的域使用。

我想创建一个工作镜像,但无法在 2 个选项之间做出决定:

  1. rsync 静态网站、服务器和配置文件 + mariadb 和 mongodb 复制
  2. 集群由 2 台机器组成,带有一些 proxmox 或其他免费技术(对我来说是新主题)

我希望它们都提供文件,例如 master-master sync ,因此它们可以分别处理约 50% 的请求。

您会建议哪个更有效并推荐您选择的软件/系统吗?

apache-2.2 high-availability node.js mongodb mariadb
  • 2 个回答
  • 219 Views
Martin Hope
Nät Castaritas
Asked: 2021-09-20 21:45:05 +0800 CST

2 用于高可用性的不同公共地址

  • 4

这是我第一次在这里提出问题,我想知道是否可以将两个不同的 ISP 公共 IP 连接到一个系统以实现高可用性?

例如,如果我们的 ISP 1 离线,则第二个 ISP 将可用,就像 google 和 youtube 有不同的公共地址一样,我只是不知道在哪里配置它。

我们目前使用的是fortinet 300D。

domain-name-system ip high-availability fortinet
  • 2 个回答
  • 696 Views
Martin Hope
Cat Mucius
Asked: 2021-07-15 03:30:18 +0800 CST

SQL AlwaysOn 可用性组中的数据一致性

  • 1

我有一个 SQL Server 2019 的 AlwaysOn 集群,其中包含一个处于同步模式的 3 个副本的可用性组。根据微软文档:

  1. 辅助副本强化日志并向主副本返回确认。
  2. 在收到来自辅助副本的确认后,主副本完成提交处理并向客户端发送确认消息。

本文更详细地解释了这一点:

  1. 在辅助副本中,日志接收从主副本获取日志记录并写入日志缓存。在参与同步提交模式的每个辅助副本上重复此过程。
  2. 在每个从副本上,都存在重做线程,它将日志记录中提到的所有更改写入数据页和索引页。它刷新日志以强化辅助数据库日志。
  3. 如前所述,在同步数据提交中,主副本等待来自辅助副本的确认。在此阶段,辅助副本发送确认事务强化已在辅助副本上完成。
  4. 一旦主副本收到来自辅助副本的确认,它就会向客户端发送事务完成消息。

因此,如果我理解正确: 如果我通过主副本成功更新记录,则此更新后的值应该立即可供查询辅助副本的客户端使用。

但是,当我对此进行测试时,这不起作用。我运行一个简单的批处理文件,如下所示:

sqlcmd -E -S tcp:SQL-AG-Listener -d TestDB -Q "BEGIN TRANSACTION; UPDATE TestSyncTable SET CurrentTime='%currentTime%'; COMMIT TRANSACTION;"
sqlcmd -E -S tcp:SQL-Server01 -d TestDB -Q "SELECT * FROM TestSyncTable" -K ReadOnly
sqlcmd -E -S tcp:SQL-Server02 -d TestDB -Q "SELECT * FROM TestSyncTable" -K ReadOnly
sqlcmd -E -S tcp:SQL-Server03 -d TestDB -Q "SELECT * FROM TestSyncTable" -K ReadOnly

所以我CurrentTime通过主副本(托管 AG 侦听器)更新该字段,然后立即通过所有三个副本读取它。每个sqlcmd命令都是一个单独的客户端进程,因此它打开了自己独立的 TCP 连接。

然后我看到这样的东西:

SQL-Server01: CurrentTime = 20:02:19.93
SQL-Server02: CurrentTime = 20:02:16.94
SQL-Server03: CurrentTime = 20:02:19.93

(重新格式化输出以获得更好的可读性)

据我所见,主副本始终返回更新后的值。辅助节点也这样做 - 但只是一些短暂的延迟。

所以问题是:为什么?同步模式不应该保证读操作的结果与写操作的结果一致吗?如果辅助副本仅在其重做线程更新数据页面后才发送确认 - 那怎么可能呢?

谢谢,穆修斯。

sql-server database high-availability alwayson data-consistency
  • 1 个回答
  • 117 Views
Martin Hope
user10489
Asked: 2021-06-19 17:48:19 +0800 CST

需要一个简单的高可用性文件共享

  • 1

我正在寻找在一对 linux 服务器之间以高可用性方式共享单个文件的最简单方法。(版本和发行版并不重要,我正在寻找一个通用的解决方案。)

我有两台服务器,每台都有自己的本地磁盘和 NFS 共享以及它们之间的其他服务。我有一个两个服务器都需要访问的文件,但除了这些服务器之外没有其他需要访问它的文件。

如果任一服务器崩溃,我希望该文件的最新可能内容可用于其余服务器。(显然,其他服务器应该在恢复时获取更改。)

该文件是一个状态文件,一次可能只有一个服务器会写入它。状态文件大小未知,但很小。大概在1块到2M之间。状态文件的大小可能会根据停机时间的长短而增长。

在不添加外部硬件的情况下,像这样的高可用性文件共享有哪些选择?

linux network-share high-availability
  • 2 个回答
  • 291 Views
Martin Hope
lion
Asked: 2021-06-01 03:12:30 +0800 CST

VLAN - 具有相同第二个交换机的网络冗余?

  • 1

是否可以在两个不同的交换机上设置相同的 VLAN,IP 相同,但服务器的双端口网卡上的 MAC 不同?如果交换机 1 出现故障或需要维护,我希望交换机 2 接管服务器之间的通信,反之亦然,因为我不希望整个服务器网络彼此之间没有连接,因为它们要么是彼此的副本,要么接收旧数据的分片,我需要使网络高度可用 - 冗余。我的网络的整个目的是 3 个分片,每个分片有 3 个副本,并且分布相同应用程序数据的分片以使其故障安全,但是在我的工程计划中,网络还不能通过 1 个交换机进行故障安全。

像这样的东西:

分片 I - 新数据复制,新传入数据 - 3 台服务器,使其在服务器级别 server1 + server2 + server3 上故障安全

Shard II - server4(访问较少的数据) - 定期从新数据中移动数据 Shard I - 不需要副本(RAID 级别的冗余)

Shard III - 相同的 server4,但连接到 server4 的模块化存储阵列上的数据 - 数据定期从 Shard II 移动到这里(访问最少的数据) - 不需要副本(RAID 级别的冗余)

所以我需要使网络故障安全。我的想法是第二个相同的开关,但对设置有疑问。还在研究如何实现。假设两个交换机都没有连接的最佳方法是什么?如果每台服务器同时从其网卡上的不同端口连接到两台交换机,它会起作用吗?使用开关,如果重要的话 - 广达 LB6M。有什么更好的开关可以推荐给用例吗?交换机需要相互连接吗?然后我可以尝试使用 Dell EMC PowerSwitch S4048-ON 48 10GbE SFP+、6 40Gbps QSFP+ 并使用 40GbE QSFP+ 互连交换机和 10Gbe SFP+ 将服务器连接到交换机。谢谢!

networking vlan switch high-availability redundancy
  • 1 个回答
  • 211 Views
Martin Hope
Tùng Nguyễn
Asked: 2021-05-24 21:37:05 +0800 CST

Centos 7,HA postgresql12,带有 etcd v3.4 的赞助人

  • 0

我遵循了这个文档,但不知道如何启用 v2 以便赞助人可以使用,有人可以帮忙吗? https://computingforgeeks.com/setup-etcd-cluster-on-centos-debian-ubuntu/

high-availability centos7 etcd patroni
  • 1 个回答
  • 287 Views
Martin Hope
Luca Polito
Asked: 2021-05-17 12:39:32 +0800 CST

用于管理 16 个磁盘冗余的 RAID 建议

  • 0

我需要有关如何为具有 16 个磁盘阵列的服务器设置 RAID 的建议(引导/操作系统磁盘在此阵列之外)。在这个 16 磁盘阵列中,所有磁盘都是相同的(12.8TB SSD)。

对我来说,理想的解决方案是至少有一半的可用空间(因此,204.8TB 中至少有 102.4TB),以及抵抗至少 8 个磁盘故障的能力(任何 8 个磁盘都应该能够在没有任何数据的情况下发生故障失利)。

无需将 102.4TB 可用空间视为单个连续卷,因此也可以将磁盘分组为单独的 RAID 卷等,只要任意 8 个磁盘可以中断而不会丢失任何数据。

我正在考虑几个解决方案,但没有一个解决方案真正让我完全满意:

  1. 第一个解决方案是具有 8 个跨度的单个 RAID 1+6 卷(76.8TB 容量,在最坏的情况下,任何 5 个磁盘都可以中断而不会丢失数据)。方案:RAID6( RAID1(D1,D2), RAID1(D3,D4), RAID1(D5,D6), RAID1(D7,D8), RAID1(D9,D10), RAID1(D11,D12), RAID1(D13,D14), RAID1(D15,D16) )

  2. 第二种解决方案是具有 2 个跨度的单个 RAID Z3+1 卷(容量为 64TB,在最坏的情况下,任何 7 个磁盘都可以中断而不会丢失数据)。方案:RAID1( RAID_Z3(D1,D2,D3,D4,D5,D6,D7,D8), RAID_Z3(D9,D10,D11,D12,D13,D14,D15,D16) )

对我来说,完美的 RAID 解决方案是八位奇偶校验 RAID(如 RAID 5 是单奇偶校验,RAID 6 是双奇偶校验,RAID Z3 是三重奇偶校验),因为这意味着 102.4TB 的可用空间和任何 8 个磁盘都可以在没有的情况下损坏数据丢失。但不幸的是,这个假设的“RAID Z8”并不存在。

提前感谢您的任何建议。

PS:在这种情况下,性能确实不是问题,因此不是要考虑的参数。

PPS:我寻求抵抗任何 8 磁盘故障的原因是因为这些磁盘将包含高度关键的任务数据。备份已经计划好了,但如果 R​​AID 卷停止工作,依赖它的几个关键任务服务器和服务也将停止工作。

PPPS:服务器本身的高可用性已经得到照顾。

raid storage high-availability
  • 2 个回答
  • 112 Views
Martin Hope
A X
Asked: 2021-02-21 12:40:52 +0800 CST

SQL Server Always On 可用性组零停机更新过程

  • 3

这里我有一个 2 节点 SQL Server 2016 AlwaysOn 可用性组集群,有 1 个主节点和 1 个辅助节点。

问题是 - 在群集中的服务器上安装 Microsoft 更新的最佳方式是什么?我一直在努力为此找到好的、明确的建议。

这是我目前的想法:

  1. 在辅助节点上使用 Microsoft Update 安装更新
  2. 重新启动辅助以完成更新
  3. 执行从主节点到辅助节点的手动故障转移
  4. 在新辅助(前主)上使用 Microsoft Update 安装更新
  5. 重新启动新的辅助节点(以前的主节点)
  6. 执行从新主节点到辅助节点的手动故障转移,使原始主节点再次成为主节点

我的理解是,这将:

  • 绝对不会导致应用程序停机
  • 导致没有同步错误
  • 不会造成数据损坏
  • 一半节点更新而另一半节点未更新时集群不会产生错误

这个对吗?有一个更好的方法吗?

在此先感谢 - 非常感谢任何帮助。

sql-server high-availability alwayson sql-server-2016
  • 1 个回答
  • 628 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve