云服务器内容精选

  • 步骤二:给用户组授权 在用户组列表中,单击新建用户组操作列的“授权”。 在用户组选择策略页面中,在搜索框中搜索“ CSS FullAccess”勾选并单击“下一步”。 一般创建集群的权限有“ CS S FullAccess”和“Elasticsearch Administrator”,可根据表1的对应的常用操作和系统权限的关系进行对应的配置设置。表2包含了CSS所有的系统权限。 如果还需要查看资源的消费情况,请在同区域选择“BSS Administrator”权限。 表1 常用操作与系统权限的关系 操作 CSS FullAccess CSS ReadOnlyAccess Elasticsearch Administrator 备注 创建集群 √ x √ - 查询集群列表 √ √ √ - 查询集群详情 √ √ √ - 删除集群 √ x √ - 重启集群 √ x √ - 扩容集群 √ x √ - 扩容实例的数量和存储容量 √ x √ - 查询指定集群的标签 √ √ √ - 查询所有标签 √ √ √ - 加载自定义词库 √ x √ 依赖OBS和 IAM 权限 查询自定义词库状态 √ √ √ - 删除自定义词库 √ x √ - 自动设置集群快照的基础配置 √ x √ 依赖OBS和IAM权限 修改集群快照的基础配置 √ x √ 依赖OBS和IAM权限 设置自动创建快照策略 √ x √ - 查询集群的自动创建快照策略 √ √ √ - 手动创建快照 √ x √ - 查询快照列表 √ √ √ - 恢复快照 √ x √ - 删除快照 √ x √ - 停用快照功能 √ x √ - 更改规格 √ x √ - 缩容集群 √ x √ - 表2 CSS系统权限 系统角色/策略名称 类别 权限描述 依赖关系 Elasticsearch Administrator 系统角色 CSS服务的所有执行权限。 该角色有依赖,需要在同项目中勾选依赖的Tenant Guest和Server Administrator角色。 Tenant Guest:全局级角色,在全局项目中勾选。 Server Administrator:项目级角色,在同项目中勾选。 CSS FullAccess 系统策略 基于策略授权的CSS服务的所有权限,拥有该权限的用户可以完成基于策略授权的CSS服务的所有执行权限。 无 CSS ReadOnlyAccess 系统策略 CSS服务的只读权限,拥有该权限的用户仅能查看CSS服务数据。 无 设置最小授权范围。 此处以仅为“华北-北京四”区域的资源设置权限为例,选择授权范围方案为“指定区域项目资源”,并选择“cn-north-4 [华北-北京四]”区域。 图6 设置最小授权范围 单击“确定”,完成用户组授权。
  • 步骤四:IAM用户登录并验证权限 在登录页面,单击登录下方的“IAM用户”“子用户登录”,在“IAM用户登录”页面,输入“租户名/原华为云账号名”、“IAM用户名/邮件地址”和“密码”。 图10 IAM用户登录 租户名/原华为云账号名:IAM用户所属的账号。 IAM用户名/邮件地址:在IAM创建用户时,输入的IAM用户名/邮件地址,例如“James”。如果不知道用户名及初始密码,请向管理员获取。 IAM用户密码:IAM用户的密码,非账号密码。 单击“登录”,登录华为云。 在“服务列表”中选择 云搜索服务 。 在 云搜索 服务总览页面右上角,单击“创建集群”按钮,按照创建集群的步骤创建集群,如果创建成功,则表示权限配置成功。
  • 操作步骤 订阅增量。在kafka/MQ中新建消费组,订阅增量数据。 存量数据同步。使用Logstash等工具将源端ES集群中的数据迁移到CSS集群中。如果使用Logstash进行数据迁移,可以参考使用Logstash迁移集群数据。 增量数据同步。待存量数据同步完成之后开启增量消费组,利用ES对数据操作的幂等性,等新的消费组追上之前的消费组时,两边的数据就会追平。 关于日志场景,源端ES集群中的数据并不需要迁移,即可跳过存量数据同步的步骤,待增量数据同步完成后,两边持续同步跑一段时间(例如3天或7天),然后直接割接即可。
  • 迁移流程 在泛IOT、新闻、舆情、社交等数据量较大的行业,通常会引入消息中间件(kafka、MQ等)对流量进行削峰填谷,然后借助Flink/Logstash等工具消费数据并进行数据预处理,最终将数据导入到搜索引擎,对外提供搜索服务。 对于这种源端是kafka/MQ的集群,集群迁移流程如图1所示。 图1 源端为Kafka/MQ的集群迁移流程 该迁移方案具有割接方便和通用性好的优点。 割接方便:一旦两个ES集群的数据保持一致后,随时可割接。 通用性好:两边均可同步对客户端的ES进行增删改查操作。
  • 查询性能优化 基于Elasticsearch的数据查询流程分析,有以下几种性能优化方案。 表1 查询性能优化 序号 优化方案 方案说明 1 通过_routing减少检索扫描的分片数 在数据入库时指定routing值,将数据路由到某个特定的分片,查询时通过该routing值将请求转发到某个特定的分片,而不是相关索引的所有分片,进而提升集群整体的吞吐能力。 Elasticsearch 7.x版本中,设置命令如下: 指定routing值插入数据 PUT /{index}/_doc/1?routing=user1 { "title": "This is a document" } 根据routing值去查询数据 GET /{index}/_doc/1?routing=user1 2 采用index sorting减少检索扫描的Segments数 当请求落到某个分片时,会逐个遍历其Segments,通过使用index sorting,可以使得范围查询、或者排序查询在段内提前终止(early-terminate)。 Elasticsearch 7.x版本中,示例命令如下: //假设需要频繁使用字段date做范围查询。 PUT {index} { "settings": { "index": { "sort.field": "date", "sort.order": "desc" } }, "mappings": { "properties": { "date": { "type": "date" } } } } 3 增加query cache提升缓存命中的概率 当filter请求在段内执行时,会通过bitset保留其刷选结果,当下一个类似的查询过来时,就可以复用之前查询的结果,以此减少重复查询。 增加query cache可以通过修改集群的参数配置实现,将自定义缓存参数“indices.queries.cache.size”设置为更大的值。具体操作请参见参数配置,修改参数配置后一定要重启集群使参数生效。 4 提前Forcemerge,减小需要扫描的Segments数 对于定期滚动后的只读索引,可以定期执行forcemerge,将小的Segments合并为大的Segments,并将标记为“deleted”状态的索引彻底删除,提升查询效率。 Elasticsearch 7.x版本中,配置示例如下: //假设配置索引forcemerge后segments数量为10个。 POST /{index}/_forcemerge?max_num_segments=10
  • 数据查询流程 图1 数据查询流程 当从客户端往Elasticsearch发送查询请求时,查询流程如下: 客户端向Node1发送查询请求,此时Node1为协调节点。 节点Node1根据查询请求的索引以及其分片分布,进行分片选择;然后将请求转发到Node1、Node2、Node3。 各分片分别执行查询任务;当各分片查询成功后,将查询结果汇聚到Node1,然后协调节点向客户端返回查询结果。 对于某个查询请求,其在节点上默认可并行查询5个分片,多于5个分片时将分批进行查询;在单个分片内,通过逐个遍历各个Segment的方式进行查询。 图2 Elasticsearch的索引组成
  • 方案架构 关系型数据库(例如MySQL、 GaussDB for MySQL等)受限于全文检索和Ad Hoc查询能力,因此会将Elasticsearch作为关系型数据库的补充,以此提升数据库的全文检索能力和高并发的Ad Hoc查询能力。 本章主要介绍,如何将MySQL数据库中的数据同步到云搜索服务CSS,通过CSS实现数据库的全文检索与Ad Hoc查询分析加速。方案架构图如图1所示。 图1 CSS加速数据库的查询分析方案 用户业务数据存储到MySQL。 通过 数据复制服务 DRS将MySQL中的数据实时同步到CSS。 通过CSS进行全文检索与数据查询分析。
  • 前提条件 已创建好安全模式的CSS集群和MySQL数据库,且两者在同一个VPC与安全组内。 MySQL数据库中已经有待同步的数据。本章以如下表结构和初始数据举例。 MySQL中创建一个学生信息表: CREATE TABLE `student` ( `dsc` varchar(100) COLLATE utf8mb4_general_ci DEFAULT NULL, `age` smallint unsigned DEFAULT NULL, `name` varchar(32) COLLATE utf8mb4_general_ci NOT NULL, `id` int unsigned NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; MySQL中插入3个学生的初始数据: INSERT INTO student (id,name,age,dsc) VALUES ('1','Jack Ma Yun','50','Jack Ma Yun is a Chinese business magnate, investor and philanthropist.'), ('2','will smith','22','also known by his stage name the Fresh Prince, is an American actor, rapper, and producer.'), ('3','James Francis Cameron','68','the director of avatar'); CSS集群中已完成索引创建,与MySQL中表相对应。 本章集群的索引示例如下: PUT student { "settings": { "number_of_replicas": 0, "number_of_shards": 3 }, "mappings": { "properties": { "id": { "type": "keyword" }, "name": { "type": "short" }, "age": { "type": "short" }, "desc": { "type": "text" } } } } 其中的number_of_shards与number_of_replicas需根据具体业务场景进行配置。
  • 注意事项 建议Rest High Level Client的版本和Elasticsearch的版本保持一致,例如需要访问的ES集群版本是7.6.2,则使用的Rest High Level Client客户端版本建议也是7.6.2。如果您使用相比Elasticsearch集群更高版本的Java Rest High Level Client且存在少量请求的兼容性问题,您可以使用“RestHighLevelClient.getLowLevelClient()”方式直接获取Low Level Client,实现自定义的Elasticsearch请求内容。
  • 给test用户共享admin账号的index_pattern,Dashboards等信息 一般情况下,新建用户本身并不具备创建index_pattern的权限或者由于业务关系不能够进行数据管理。此时,一般是由admin账号进行index_pattern创建并且管理dashboard等报表信息,然后再将这些信息共享给test用户。 您可以按照以下流程操作: 使用admin账户在Global Tenant中创建index_pattern和Dashboards。 Global Tenant所有的租户都可以直接访问,但是如果部门过多,这种情况体验较差,可以使用以下方法优化: 在“Security”中选择“Tenants”。以admin账户建立以部门为粒度的Tenant,比如test_tenant。 图14 创建Tenants 切换到对应部门test_tenant。 图15 切换test_tenant 在test_tenant下创建本部门需要的index_pattern、Dashboards。 在“Security”中选择“Roles”。单击test用户对应的角色Role1,在Tenant Permissions页签分配test_tenant给Role1。 保存后切换到test用户,test即可访问test_tenant空间内容。
  • 背景信息 云搜索服务(Cloud Search Service,简称CSS)用opendistro_security安全插件对外提供安全集群能力,opendistro_security安全插件是基于RBAC(Role-Based Access Control)模型构建。RBAC包括三个重要核心概念:用户(User)、权限(Action)、角色(Role)。RBAC简化了用户和权限的关系,降低了权限管理的难度,方便权限扩展易于维护。三者之前的关系如下图所示:
  • 创建一个具有Kibana访问权限的用户 参考创建用户并配置相应权限中的使用Kibana创建用户(User),创建一个用户名为test的用户。 角色用户映射,将Role和User绑定。 在“Security”中选择“Role Mappings”,进入Role Mappings页面。 在Role Mappings页面,单击“kibana_user”角色名称。 图12 kibana_user角色 kibana_user角色具有.kibana*索引的权限,Kibana界面上面操作的Dashboards以及index_pattern都是保存到.kibana*里面的,将test用户和kibana_user相映射,意味着这个test用户具有了kibana的权限。 单击“+”添加用户和角色映射。 在“Users”区域,选择创建的test用户。 添加完成后,单击“Submit”。 配置完成后,切换test用户,进行权限验证是否生效。
  • 给新建用户分配指定索引index*的权限 新创建的test用户可以访问Kibana,并且可以使用Kibana的index_pattern、Discover、Dashboards等权限,但是这并不意味着test用户能看到任意的.kibana。test用户默认只能看到private tenant和global tenant空间的数据,如果需要访问其他的tenant空间,还需要在role中定义其他的tenant权限。 在“Security”中选择“Roles”。 在“Open Distro Security Roles”页面,单击“+”添加角色权限。 在“Overview”页签,设置角色名Role1。 在“Index Permissions”页签,单击“Add index permissions”设置索引权限。 图13 设置权限 “Index patterns”:输入index*。 “Permissions: Action Groups”:选择对应的权限,如果想要查询,可以选择read。如果想要写入,可以选择write,具体的操作对应的最底层action,可以参考kibana界面的permission模块介绍,以read为例,选择indices:data/read* 和indices:admin/mappings/fields/get*权限。indices:data/read* 包含indices:data/read/下所有的权限,比如indices:data/read/get、indices:data/read/mget、indices:data/read/search等。 设置完成后,即可看到设置的角色Role1。 在Security中选择“Role Mappings”。 在“Role Mappings”页面,单击“+”添加用户test和角色Role1映射。 添加完成后,单击“Submit”。 配置完成后,test用户即可拥有index*的read权限。
  • 步骤四:全量迁移 使用putty登录准备工作中创建的Linux虚拟机。 执行python migrateTemplate.py 迁移索引模板。 执行 python migrateMapping.py迁移索引。 在Logstash集群管理页面,单击步骤一:创建Logstash集群中创建的集群名称,进入集群的基本信息页面。选择“配置中心”,或者直接单击目标集群操作列的“配置中心”,进入配置中心页面。 选择步骤三:配置Logstash全量迁移任务中所创建的配置文件,单击左上角的“启动”。 根据界面提示,选择是否启动Logstash服务会立刻开始迁移数据。 如果选择“是”,则可以在管道下面看到启动的配置文件。 数据迁移完毕检查数据一致性,使用putty登录linux虚拟机,执行python checkIndices.py 对比数据结果。
  • 约束和限制 Logstash版本约束: CSS 支持5.5.1,6.3.2,6.5.4,7.1.1,7.6.2,7.10.2多个版本,迁移集群尽量保持大版本一致。 对应ES集群是5.x, 6.x 选择logstash版本5.6.16, 对应ES版本是7.X 选择logstash版本7.10.0。 集群迁移过程禁止修改索引,修改索引会导致原数据和目标数据内容不一致。 索引大小小于100G可以使用迁移任务不用单独分析索引,简化分析工作。