我有一个多租户系统,我正在尝试设计ElasticSearch以支持多租户。我已经在网上搜索过,但是我发现的所有帖子都没有在实践中指定具体操作方法。 基本思想是在每个索引上具有每个客户1个分片,并使用自定义路由来查询客户专用分片。这很清楚。现在,我该如何实现呢?将来如何为每个索引指定“键值”创建多个分片,以便查询该特定分片?代码示例会有所帮助。
非常感谢您。
答案 0 :(得分:0)
我认为这不是实现多租户的正确方法,而不是在分片级别。
您到底想实现什么?我假设您希望不同的用户(或者更好的是,不同的角色)可以访问索引的不同部分。在这种情况下,您应该看看document-level security permissions。
如何在实践中实现这一目标?假设您有一个名为multitenants-index
的索引,并且有两个租户,使得:(i)第一个租户只能读取/写入具有字段"tenant": 1
的那些文档,(ii)第二个租户只能读写具有字段"tenant": 2
的那些文档。然后,您可以创建以下两个角色:
POST /_xpack/security/role/first_tenant
{
"indices": [
{
"names": [ "multitenants-index" ],
"privileges": [ "read", "write" ],
"query": "{\"match\": {\"tenant\": 1}}"
}
]
}
POST /_xpack/security/role/second_tenant
{
"indices": [
{
"names": [ "multitenants-index" ],
"privileges": [ "read", "write" ],
"query": "{\"match\": {\"tenant\": 2}}"
}
]
}