elasticsearch初始化之配置文件读取

public static Tuple<Settings, Environment> prepareSettings(Settings pSettings, boolean loadConfigSettings) {
        // ignore this prefixes when getting properties from es. and elasticsearch.
        String[] ignorePrefixes = new String[]{"es.default.", "elasticsearch.default."};
        boolean useSystemProperties = !pSettings.getAsBoolean("config.ignore_system_properties", false);
        // just create enough settings to build the environment
        ImmutableSettings.Builder settingsBuilder = settingsBuilder().put(pSettings);
        if (useSystemProperties) {
            settingsBuilder.putProperties("elasticsearch.default.", System.getProperties())
                    .putProperties("es.default.", System.getProperties())
                    .putProperties("elasticsearch.", System.getProperties(), ignorePrefixes)
                    .putProperties("es.", System.getProperties(), ignorePrefixes);
        }
        settingsBuilder.replacePropertyPlaceholders();

        Environment environment = new Environment(settingsBuilder.build());

        if (loadConfigSettings) {
            boolean loadFromEnv = true;
            if (useSystemProperties) {
                // if its default, then load it, but also load form env
                if (Strings.hasText(System.getProperty("es.default.config"))) {
                    loadFromEnv = true;
                    settingsBuilder.loadFromUrl(environment.resolveConfig(System.getProperty("es.default.config")));
                }
                // if explicit, just load it and don't load from env
                if (Strings.hasText(System.getProperty("es.config"))) {
                    loadFromEnv = false;
                    settingsBuilder.loadFromUrl(environment.resolveConfig(System.getProperty("es.config")));
                }
                if (Strings.hasText(System.getProperty("elasticsearch.config"))) {
                    loadFromEnv = false;
                    settingsBuilder.loadFromUrl(environment.resolveConfig(System.getProperty("elasticsearch.config")));
                }
            }
            if (loadFromEnv) {
                try {
                    settingsBuilder.loadFromUrl(environment.resolveConfig("elasticsearch.yml"));
                } catch (FailedToResolveConfigException e) {
                    // ignore
                } catch (NoClassDefFoundError e) {
                    // ignore, no yaml
                }
                try {
                    settingsBuilder.loadFromUrl(environment.resolveConfig("elasticsearch.json"));
                } catch (FailedToResolveConfigException e) {
                    // ignore
                }
                try {
                    settingsBuilder.loadFromUrl(environment.resolveConfig("elasticsearch.properties"));
                } catch (FailedToResolveConfigException e) {
                    // ignore
                }
            }
        }

        settingsBuilder.put(pSettings);
        if (useSystemProperties) {
            settingsBuilder.putProperties("elasticsearch.", System.getProperties(), ignorePrefixes)
                    .putProperties("es.", System.getProperties(), ignorePrefixes);
        }
        settingsBuilder.replacePropertyPlaceholders();

        // allow to force set properties based on configuration of the settings provided
        for (Map.Entry<String, String> entry : pSettings.getAsMap().entrySet()) {
            String setting = entry.getKey();
            if (setting.startsWith("force.")) {
                settingsBuilder.remove(setting);
                settingsBuilder.put(setting.substring(".force".length()), entry.getValue());
            }
        }
        settingsBuilder.replacePropertyPlaceholders();

        // generate the name
        if (settingsBuilder.get("name") == null) {
            String name = System.getProperty("name");
            if (name == null || name.isEmpty()) {
                name = settingsBuilder.get("node.name");
                if (name == null || name.isEmpty()) {
                    name = Names.randomNodeName(environment.resolveConfig("names.txt"));
                }
            }

            if (name != null) {
                settingsBuilder.put("name", name);
            }
        }

        // put the cluster name
        if (settingsBuilder.get(ClusterName.SETTING) == null) {
            settingsBuilder.put(ClusterName.SETTING, ClusterName.DEFAULT.value());
        }

        Settings v1 = settingsBuilder.build();
        environment = new Environment(v1);

        // put back the env settings
        settingsBuilder = settingsBuilder().put(v1);
        // we put back the path.logs so we can use it in the logging configuration file
        settingsBuilder.put("path.logs", cleanPath(environment.logsFile().getAbsolutePath()));

        v1 = settingsBuilder.build();

        return new Tuple<>(v1, environment);
    }

elasticsearch初始化
时将elasticsearch.yml文件读入并解析,获取初始化配置信息。将配置后的信息保存在 Tuple<Settings, Environment> tuple结构中。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
云数据库方案设计 云数据库的云化改造 面向云化环境,数据库在多个方面需要进行改造,包括快捷的安装部署,提供数据库的动态伸缩和资源隔离,以及监控、迁移、备份等一体化管理,以适应云环境中自动安装部署、一体化监控管理,资源动态分配等需求。 快速安装及部署 1.1 一键部署和分钟级实例的创建: 1. 准备好预置数据库的docker镜像 a. 初始化好空数据目录(也支持根据场景预置数据) b. 数据库配置文件放置在docker镜像之外,通过映射的方式进入镜像内部 2. 用户选择实例资源后(CPU、内存),系统自动计算最佳设置 a. 用户选择实例的内存、CPU数量,使用场景(OLTP、OLAP) b. 根据用户选择,自动调整、优化参数(共享缓存、work_mem、等等) 云数据库方案设计全文共6页,当前为第1页。 3. 使用docker镜像加载外置配置文件启动数据 云数据库方案设计全文共6页,当前为第1页。 1.2 多种部署方式 1. 单机(单独的docker镜像) 2. 主备 和 负载均衡 a). 配置好的三个独立docker镜像,分别扮演主机、备机、读写分离节点 b). 三个节点配置文件都在外部,映射到内部运行 c). 启动时,根据用户的资源选择和网络场景,自动规划配置文件内容 3. KADB 集群 a). 根据角色配置好独立的docker镜像,分别扮演数据节点、协调器节点等 b). 节点的配置文件都放在外部,映射到内部运行 c). 根据用户设置的资源,场景,自动分配节点数量,配置节点参数. 在线伸缩 云环境中,支持在线调整任何一个实例使用的资源。对于数据库而言,若分配的资源,包括CPU、内存、磁盘等资源发生变化,数据库同样需要对于资源的变化实施生效。 CPU变化时,主要影响数据库的并发连接数和并行参数,在金仓云数据库中,并发连接数和并行参数可以动态调整。 云数据库方案设计全文共6页,当前为第2页。内存发生变化时,数据库的共享内存,排序内存等内存分配支持动态调整,动态扩展。 云数据库方案设计全文共6页,当前为第2页。 磁盘发生变化时,数据库可以配置表空间的存储,以及表存储,分区的存储,动态使用新增资源。 另外,随着实际业务的增长,数据库集群的负载可能超出初始设计的承受能力,使得处理能力下降,不再满足业务需求,所以数据库集群支持在线扩展能力,即在不影响系统正常使用的情况下,增加数据库的数据处理能力。 资源隔离 KingbaseES云数据库支持多租户模式,以实现多个租户之间的资源隔离。 每个租户创建自己的数据库,各自的数据库从元信息、用户数据到内存、以及日志信息,都是彼此隔离的。每个租户的数据库不可以彼此访问。 各个租户的数据库可以方便的迁移和加载,支持各自的备份和恢复。 一体化管理 使用 KEM 监控数据库运行状态 a). 支持自主监控(由KEM主动呈现) b). 支持将收集的数据汇集到其他管理平台 云数据库方案设计全文共6页,当前为第3页。 云数据库方案设计全文共6页,当前为第3页。 使用 WEB 对象管理工具管理数据库对象 a). 单机形式的数据库对象管理 b). 主备形式的数据库对象管理 c). KADB集群数据库对象管理 二、向非关系型存储、大数据处理进行扩展 通用数据库 通用数据库按照处理业务的类型,分为交易型数据库和分析型数据库。 交易数据库 主要用于交易类型的业务处理,例如:业务流程电子化,其他业务系统。面向所有参与业务流程的人员。对数据的操作特点是:大量短、频、快的增删改操作。 分析型数据库 主要用于统计分析,数据挖掘应用。面向决策者和分析人员。对数据库的操作特点是:大量数据入库,大量复杂查询。 云上的数据库需要有这两种数据库,来应对更多的用户应用需求。 与大数据平台的互访 云数据库方案设计全文共6页,当前为第4页。大数据计算平台,例如Spark、HIVE等,需要支持大数据计算平台与数据库互访。以大数据计算平台为中心,建立分析平台。 云数据库方案设计全文共6页,当前为第4页。 大数据计算平台访问数据库 a)大数据计算平台Spark: 可以提供JdbcRDD来访问单机数据库系统,并且根据某列对表进行分区,并行读取,提升效率。对于集群数据库,Spark工作进程可以对每一个存储节点进行数据读取,通过这种并行的方式提升效率。 b)大数据计算平台HIVE: 需要在HIVE中注册数据库表信息,将数据库的表映射成HIVE表,通过Hive-SQL进行数据读取,并在HIVE中进行运算。 数据库访问大数据计算平台 大数据计算平台可以将数据,例如计算结果,写入到数据库中,再在数据库中,利用SQL对数据进行分析。 云数据集成 3.1 与RDS的数据集成 数据库使用外部表技术,可以访问RDS中的其他数据。 支持多种格式的数据; 支持访问和更新数据

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值