zoukankan      html  css  js  c++  java
  • apache ignite系列(二):配置

    ignite有两种配置方式,一种是基于XML文件的配置,一种是基于JAVA代码的配置:

    这里将ignite常用的配置集中罗列出来了,一般建议使用xml配置。

    1,基于XML的配置

    
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:util="http://www.springframework.org/schema/util"
           xsi:schemaLocation="
            http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/util
            http://www.springframework.org/schema/util/spring-util.xsd">
    
    	<bean id="igniteCfg" class="org.apache.ignite.configuration.IgniteConfiguration">
             
            <!-- Consistent globally unique node identifier which survives node restarts. -->
            <!-- 全局一致性id -->
            <!--<property name="consistentId" value="cord"/>-->
    	
    	    <!--Set to true to enable distributed class loading for examples, default is false. -->
            <!-- 分布式计算class传播 -->
            <property name="peerClassLoadingEnabled" value="true"/>
            
            <!-- Set deployment mode. -->
            <!-- 部署模式,控制类加载. -->
            <property name="deploymentMode" value="CONTINUOUS"/>
    
            <!-- Disable missed resources caching. -->
            <!-- 禁用丢失资源缓存 -->
            <property name="peerClassLoadingMissedResourcesCacheSize" value="0"/>
    		
            <!-- 设为false表示服务端模式 -->
            <property name="clientMode" value="false"/>
    
            <!-- Network timeout -->
            <!-- 连接超时时间 -->
            <property name="networkTimeout" value="10000" />
    
    		<!--Exclude force peer class loading of a class, even if exists locally.-->
            <!-- 配置需要传播的class的路径 -->
            <property name="peerClassLoadingLocalClassPathExclude">
                <list>
            <value>org.cord.*</value>
        </list>
        </property>
            
            <!-- 配置需要监听的事件类型-->
            <property name="includeEventTypes">
                <list>
                    <util:constant static-field="org.apache.ignite.events.EventType.EVT_CACHE_OBJECT_PUT"/>
                    <util:constant static-field="org.apache.ignite.events.EventType.EVT_CACHE_OBJECT_READ"/>
                    <util:constant static-field="org.apache.ignite.events.EventType.EVT_CACHE_OBJECT_REMOVED"/>
                </list>
            </property>
    	
            <!-- Configure internal thread pool. -->
            <!-- 公共线程池大小-->
            <property name="publicThreadPoolSize" value="64"/>
            
            <!-- Configure system thread pool. -->
            <!-- 系统线程池大小-->
            <property name="systemThreadPoolSize" value="32"/>
    
            <property name="cacheConfiguration">
                <list>
                    <bean class="org.apache.ignite.configuration.CacheConfiguration">
                        <!-- 缓存名-->
                        <property name="name" value="IGNITE_CACHE_KEY_PCOMM_RATE"/>
                        <!-- 原子模式类型,ATOMIC:原子型,保证性能; TRANSACTIONAL:事务型,分布式锁-->
                        <property name="atomicityMode" value="ATOMIC"/>
                        <!--PARTITIONED:分区; REPLICATED:复制;LOCAL:本地 -->
                        <property name="cacheMode" value="REPLICATED"/>
                        <!-- 备份数量-->
                        <property name="backups" value="1"/>
                        <!-- 禁用jcache标准中缓存读取获取的是副本的机制 -->
                        <property name="copyOnRead" value="false"/>
                        <!-- 内存区名-->
                        <property name="dataRegionName" value="Default_Region"/>
                        <!-- 是否以二进制形式存储-->
                        <!--<property name="storeKeepBinary" value="true"/>-->
                        <!-- 索引类型-->
                        <property name="indexedTypes">
                            <list>
                                <value>java.lang.Long</value>
                                <value>com.palic.demo.data.domain.CommRate</value>
                            </list>
                        </property>
                    </bean>
                </list>
            </property>
    
            <!-- Redefining maximum memory size for the cluster node usage. -->
            <property name="dataStorageConfiguration">
                <bean class="org.apache.ignite.configuration.DataStorageConfiguration">
                    <!-- Redefining the default region's settings -->
                    <!-- 默认存储区间配置-->
                    <property name="defaultDataRegionConfiguration">
                        <bean class="org.apache.ignite.configuration.DataRegionConfiguration">
                            <!-- 存储区名-->
                            <property name="name" value="Default_Region"/>
                            <!-- 存储区大小-->
                            <!-- Setting the size of the default region to 1GB. -->
                            <!--<property name="maxSize" value="#{1L * 1024 * 1024 * 1024}"/>-->
                            <property name="maxSize" value="#{512 * 1024 * 1024}"/>
                            <!-- 是否开启持久化-->
                            <!-- Enabling Apache Ignite Persistent Store. -->
                            <!--<property name="persistenceEnabled" value="true"/>-->
                        </bean>
                    </property>
                    <property name="dataRegionConfigurations">
                        <list>
                            <!-- 自定义内存区-->
                            <!--
                                Defining a data region that will consume up to 500 MB of RAM and
                                will have eviction and persistence enabled.
                            -->
                            <bean class="org.apache.ignite.configuration.DataRegionConfiguration">
                                <!-- Custom region name. -->
                                <property name="name" value="500MB_Region"/>
                                <!-- 100 MB initial size. -->
                                <property name="initialSize" value="#{100L * 1024 * 1024}"/>
                                <!-- 500 MB maximum size. -->
                                <property name="maxSize" value="#{500L * 1024 * 1024}"/>
                                <!-- Enabling persistence for the region. -->
                                <!--<property name="persistenceEnabled" value="true"/>-->
                            </bean>
                        </list>
                    </property>
    			   
                    <!-- 预写日志模式-->
                    <!-- Sets property that defines behavior of wal fsync. -->
                    <!--<property name="walMode">-->
                        <!--<util:constant static-field="org.apache.ignite.configuration.WALMode.DEFAULT"/>-->
                    <!--</property>-->
                    <property name="walMode" value="DEFAULT"/>
    				
                    <!-- 检查点频率-->
                    <!--Checkpointing frequency which is a minimal interval when the dirty pages will be written to the Persistent Store.-->
                    <property name="checkpointFrequency" value="180000"/>
                    <!--<property name="checkpointFrequency" value="10000"/>-->
    				
                    <!-- 检查点线程数-->
                    <!-- Number of threads for checkpointing.-->
                    <property name="checkpointThreads" value="4"/>
    
                    <!-- 在检查点同步完成后预写日志历史保留数量 -->
                    <!-- Number of checkpoints to be kept in WAL after checkpoint is finished.-->
                    <property name="walHistorySize" value="20"/>
                    <!--<property name="walHistorySize" value="2"/>-->
    				
                    <!-- 持久化文件路径 -->
                    <!--&lt;!&ndash; Path where data and indexes will be persisted. &ndash;&gt;-->
                    <!--<property name="storagePath" value="D:\Test\db" />-->
    
                    <!--&lt;!&ndash; Path to the directory where WAL (Write Ahead Log) is stored. &ndash;&gt;-->
                    <!--<property name="walPath" value="D:\Test\db\wal" />-->
    
                    <!--&lt;!&ndash; Path to the directory where WAL (Write Ahead Log) archive is stored. &ndash;&gt;-->
                    <!--<property name="walArchivePath" value="D:\Test\db\wal\archive" />-->
    
                </bean>
            </property>
    		
    	    <property name="discoverySpi">
    		    <bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
    			    <property name="localPort" value="48500"/>
    				<property name="localPortRange" value="20"/>
                    <property name="joinTimeout" value="0"/>
                    <property name="networkTimeout" value="5000" />
    				<property name="ipFinder">
    				    <bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder">
    					    <property name="addresses">
                                  <!-- 集群ip列表-->
    						    <list>
    							    <value>127.0.0.1:48500..48520</value>
    							</list>
    						</property>
    					</bean>
    				</property>
    			</bean>
    		</property>
    		<property name="communicationSpi">
    		    <bean class="org.apache.ignite.spi.communication.tcp.TcpCommunicationSpi">
    			    <property name="localPort" value="48100"/>
    			</bean>
    		</property>
    	</bean>
    </beans>
    
    

    基于此XML配置启动ignite节点的方式如下:

    @Configuration
    public class IgniteConfig {
        @Autowired
        private IgniteConfiguration igniteCfg;
      
        @Bean
        @ConditionalOnMissingBean
        public Ignite initIgnite() {
          //推荐借助spring bean的方式注入ignite配置信息,只需要将配置xml文件import即可
          //启动类加上注解@ImportResource(locations={"classpath:default-config.xml"})
          Ignite ignite = Ignition.start(igniteCfg);
          //Ignite ignite = Ignition.start(classpath:default-config.xml)
        }
    }
    

    2,基于JAVA代码的配置

    ......
    		IgniteConfiguration cfg = new IgniteConfiguration();
    		cfg.setClientMode(false);
            //配置集群发现
    		cfg.setDiscoverySpi(new TcpDiscoverySpi().setLocalPort(48500).setLocalPortRange(20)
    												 .setIpFinder(new TcpDiscoveryVmIpFinder().setAddresses(Arrays.asList("127.0.0.1:48500..48520"))));
            //基本配置
    		cfg.setCommunicationSpi(new TcpCommunicationSpi().setLocalPort(48100));
    		cfg.setDeploymentMode(CONTINUOUS);
    		cfg.setPeerClassLoadingEnabled(true);
    		cfg.setPeerClassLoadingLocalClassPathExclude("com.org.ignite.*");
    		cfg.setIncludeEventTypes(EventType.EVT_TASK_STARTED, EventType.EVT_TASK_FINISHED, EventType.EVT_TASK_FAILED);
    		cfg.setPublicThreadPoolSize(64);
    		cfg.setSystemThreadPoolSize(32);
    		//添加cache配置
    		List<CacheConfiguration> cacheConf = new ArrayList<>();
    		CacheConfiguration<String, Integer> conf = new CacheConfiguration<String, Integer>("test")
    				.setCacheMode(CacheMode.REPLICATED)
    				.setIndexedTypes(String.class, Integer.class)
    				.setAtomicityMode(CacheAtomicityMode.ATOMIC)
    				.setCopyOnRead(false)
    				.setBackups(1);
    		cacheConf.add(conf);
    		cfg.setCacheConfiguration(cacheConf.toArray(new CacheConfiguration[]{}));
    
    		//基于java代码配置启动
    		Ignition.start(cfg);
    ......
    

    一般建议基于XML配置,spring bean注入,如果确实需要JAVA配置,可以结合XML配置灵活处理。

    ​ 在ignite集群中,配置信息是可以动态传播的,而如果是修改配置文件,则需要重启节点才可生效,并且如果有些关键配置不一致,也会导致启动节点报错,无法加入集群。所以最好的做法是,在普通节点中只配置节点相关配置,以及集群发现配置,至于变动性最大的缓存cache配置,可以由应用节点配置,这样便于的集中管控缓存配置。除此之外,使用xml配置,可以保证普通节点与应用节点的配置的一致性,而不需要单独再维护一套代码配置。

  • 相关阅读:
    Flask程序相关配置加载的三种方式
    Redis数据库在windows系统下的安装及使用
    Redis数据库介绍
    python中模块的制作
    4.ORM框架的查询
    3.ORM框架一对多的关系及使用
    2.ORM框架添加,修改,删除操作
    1.ORM介绍,基本配置及通过ORM框架创建表
    4.集合
    3.字典
  • 原文地址:https://www.cnblogs.com/cord/p/9397613.html
Copyright © 2011-2022 走看看