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配置,可以保证普通节点与应用节点的配置的一致性,而不需要单独再维护一套代码配置。

  • 相关阅读:
    316 Remove Duplicate Letters 去除重复字母
    315 Count of Smaller Numbers After Self 计算右侧小于当前元素的个数
    313 Super Ugly Number 超级丑数
    312 Burst Balloons 戳气球
    309 Best Time to Buy and Sell Stock with Cooldown 买股票的最佳时间含冷冻期
    Java 类成员的初始化顺序
    JavaScript 全局
    HTML字符实体
    Java中的toString()方法
    JavaScript 弹窗
  • 原文地址:https://www.cnblogs.com/cord/p/9397613.html
Copyright © 2011-2022 走看看