gpt4 book ai didi

amazon-web-services - 节点关闭时 Aerospike 丢失文档

转载 作者:行者123 更新时间:2023-12-01 13:49:59 25 4
gpt4 key购买 nike

我一直在使用 aerospike 进行圆顶测试,我发现行为与销售的不同。

我有一个由 4 个节点组成的集群,在同一可用区的 AWS 上运行,实例是 t2micro(1cpu、1gb RAM、25gb SSD),使用 aws linux 和 AMI aerospike

aerospike.conf:

heartbeat {
mode mesh
port 3002
mesh-seed-address-port XXX.XX.XXX.164 3002
mesh-seed-address-port XXX.XX.XXX.167 3002
mesh-seed-address-port XXX.XX.XXX.165 3002
#internal aws IPs
...
namespace teste2 {
replication-factor 2
memory-size 650M
default-ttl 365d
storage-engine device {
file /opt/aerospike/data/bar.dat
filesize 22G
data-in-memory false
}
}

我所做的是一个测试,看看我是否会在节点出现故障时丢失文档。为此,我在 python 上写了一些代码:

from __future__ import print_function
import aerospike
import pandas as pd
import numpy as np
import time
import sys
config = {
'hosts': [ ('XX.XX.XX.XX', 3000),('XX.XX.XX.XX',3000),
('XX.XX.XX.XX',3000), ('XX.XX.XX.XX',3000)]
} # external aws ips
client = aerospike.client(config).connect()
for i in range(1,10000):
key = ('teste2', 'setTest3', ''.join(('p',str(i))))
try:
client.put(key, {'id11': i})
print(i)
except Exception as e:
print("error: {0}".format(e), file=sys.stderr)
time.sleep(1)

我使用这段代码只是为了插入一个整数序列,之后我可以检查这些整数。我运行了该代码,几秒钟后,我使用 sudo service aerospike stop 在一个节点停止了 aerospike 服务 10 秒。和 sudo service aerospike colstart重新启动。

我等了几秒钟,直到节点完成所有迁移并执行以下 python 脚本:

query = client.query('teste2', 'setTest3')
query.select('id11')
te = []
def save_result((key, metadata, record)):
te.append(record)
query.foreach(save_result)
d = pd.DataFrame(te)
d2 = d.sort(columns='id11')
te2 = np.array(d2.id11)
for i in range(0,len(te2)):
if i > 0:
if (te2[i] != (te2[i-1]+1) ):
print('no %d'% int(te2[i-1]+1))
print(te2)

并得到回应:

no 3
no 6
no 8
no 11
no 13
no 17
no 20
no 22
no 24
no 26
no 30
no 34
no 39
no 41
no 48
no 53
[ 1 2 5 7 10 12 16 19 21 23 25 27 28 29 33 35 36 37 38 40 43 44 45 46 47 51 52 54]

我的集群配置错误还是这是正常的?

ps:我尽量包含尽可能多的内容,如果您建议包含更多信息,我将不胜感激。

最佳答案

其实我找到了解决办法,老实说,这很简单也很愚蠢。

在配置文件中我们有一些节点间网络通信的参数,比如:

interval 150                    # Number of milliseconds between heartbeats
timeout 10 # Number of heartbeat intervals to wait
# before timing out a node

这两个参数设置集群实现节点宕机脱离集群的时间。 (在本例中为 1.5 秒)。

我们发现有用的是调整客户端的写入策略以使用此参数。

根据客户端的不同,您会有一些策略,例如操作失败前的尝试次数、操作超时、尝试间隔时间。

您只需调整客户端参数即可。例如:将重试次数设置为 4(每次在 500 毫秒后执行),超时设置为 2 秒。这样做客户端将识别节点已关闭并将操作重定向到另一个节点。

此设置在集群上可能不堪重负,产生巨大的过载,但它对我们有效。

关于amazon-web-services - 节点关闭时 Aerospike 丢失文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32641520/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com