首页 文章 精选 留言 我的

精选列表

搜索[学习],共10000篇文章
优秀的个人博客,低调大师

ES[7.6.x]学习笔记(一)Elasticsearch的安装与启动

Elasticsearch是一个非常好用的搜索引擎,和Solr一样,他们都是基于倒排索引的。今天我们就看一看Elasticsearch如何进行安装。 下载和安装 今天我们的目的是搭建一个有3个节点的Elasticsearch集群,所以我们找了3台虚拟机,ip分别是: 192.168.73.130 192.168.73.131 192.168.73.132 然后我们要下载ES,这里我们采用的版本是7.6.0。我们进入到/opt目录下,下载elasticsearch7.6.0 curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.6.0-linux-x86_64.tar.gz 下载的过程比较慢。下载完成后,我们解压: tar -zxvf elasticsearch-7.6.0-linux-x86_64.tar.gz 在启动elasticsearch之前,这里有一个重点:ES在启动的时候是不允许使用root账户的,所以我们要新建一个elasticsearch用户: useradd elasticsearch 然后把elasticsearch-7.6.0这个目录和目录下所有的文件的拥有者都改成elasticsearch: chown elasticsearch:elasticsearch -R elasticsearch-7.6.0 然后,我们切换到elasticsearch用户: su - elasticsearch 我们将ES安装在/opt目录下,先进入到/opt目录, cd /opt/elasticsearch-7.6.0 我们启动一下,看看单机版能不能启动成功。 ./bin/elasticsearch 可以启动成功。但是我们通过浏览器访问这个ip的9200端口时,是不成功的。我们需要对elasticsearch进行配置,才可以在别的机器上访问成功。 ES的配置 es的所有配置文件都在${ES_HOME}/config这个目录下,首先我们设置一下jvm参数,打开jvm.options文件, vim jvm.options ################################################################ ## IMPORTANT: JVM heap size ################################################################ ## ## You should always set the min and max JVM heap ## size to the same value. For example, to set ## the heap to 4 GB, set: ## ## -Xms4g ## -Xmx4g ## ## See https://www.elastic.co/guide/en/elasticsearch/reference/current/heap-size.html ## for more information ## ################################################################ # Xms represents the initial size of total heap space # Xmx represents the maximum size of total heap space -Xms256m -Xmx256m 我们改一下堆内存的大小,我这里使用的虚拟机,只分配了1g的内存,所以,我这里统一调整为256m内存,大家可以根据自己机器的内存情况进行调整。 然后,我们再打开elasticsearch.yml文件,配置一下这里边的参数。 # ======================== Elasticsearch Configuration ========================= # # NOTE: Elasticsearch comes with reasonable defaults for most settings. # Before you set out to tweak and tune the configuration, make sure you # understand what are you trying to accomplish and the consequences. # # The primary way of configuring a node is via this file. This template lists # the most important settings you may want to configure for a production cluster. # # Please consult the documentation for further information on configuration options: # https://www.elastic.co/guide/en/elasticsearch/reference/index.html # # ---------------------------------- Cluster ----------------------------------- # # Use a descriptive name for your cluster: # cluster.name: cluster-a # # ------------------------------------ Node ------------------------------------ # # Use a descriptive name for the node: # node.name: node-130 # # Add custom attributes to the node: # #node.attr.rack: r1 # # ----------------------------------- Paths ------------------------------------ # 我们先配置一下集群的名字,也就是cluster.name,在这里,我们叫做cluster-a。在另外两台机器上,集群的名字也要叫做cluster-a,这样才能够组成一个集群。在ES中,集群名字相同的节点,会组成ES集群。 然后,我们再修改node.name节点名称,这个名称是每一个节点的,所以,每个节点的名称都不能相同。这里我们以ip命名,130这台机器,节点名称就叫node-130,另外两台叫做node-131和node-132。 我们再接着看后面的配置, # ----------------------------------- Paths ------------------------------------ # # Path to directory where to store the data (separate multiple locations by comma): # #path.data: /path/to/data # # Path to log files: # #path.logs: /path/to/logs # # ----------------------------------- Memory ----------------------------------- # # Lock the memory on startup: # #bootstrap.memory_lock: true # # Make sure that the heap size is set to about half the memory available # on the system and that the owner of the process is allowed to use this # limit. # # Elasticsearch performs poorly when the system is swapping the memory. # # ---------------------------------- Network ----------------------------------- # # Set the bind address to a specific IP (IPv4 or IPv6): # network.host: 192.168.73.130 # # Set a custom port for HTTP: # #http.port: 9200 路径和内存,咱们使用默认的就好,咱们重点看一下网络。我们需要指定一下ES绑定的地址,如果不设置,那么默认绑定的就是localhost,也就是127.0.0.1,这样就只有本机能够访问了,其他机器是访问不了的。所以这里我们要绑定每台机器的地址,分别是192.168.73.130,192.168.73.131,192.168.73.132。 接下来,我们看一下集群的相关配置, # --------------------------------- Discovery ---------------------------------- # # Pass an initial list of hosts to perform discovery when this node is started: # The default list of hosts is ["127.0.0.1", "[::1]"] # discovery.seed_hosts: ["192.168.73.130", "192.168.73.131","192.168.73.132"] # # Bootstrap the cluster using an initial set of master-eligible nodes: # cluster.initial_master_nodes: ["node-130", "node-131", "node-132"] # # For more information, consult the discovery and cluster formation module documentation. # 也就是Discovery这一段的配置,我们先设置一下集群中节点的地址,也就是discovery.seed_hosts这一段,我们把3台机器的ip写在这里。然后再把3台机器的节点名称写在cluster.initial_master_nodes,好了,集群的配置到这里就告一段落了。 系统配置 接下来我们再看看重要的系统配置。在ES的官网上,有这样一句话, Ideally, Elasticsearch should run alone on a server and use all of the resources available to it. 翻译过来是,合理的做法是,ES应该在一个服务中单独运行,并且可以使用这个机器中所有的可用资源。 只要你在配置文件中配置了network.host,ES就认为你将发布生产环境,如果你的一些配置不正确,那么ES就不会启动成功。在这里,ES也要求我们对系统的一些配置做出修改。 ulimit调整 首先,我们要修改Linux系统的文件打开数,将其调到65535。 su - ulimit -n 65535 exit 然后再修改limits.conf文件,我们同样切换到root用户,打开limits.conf文件, vim /etc/security/limits.conf 在文件的最后添加elasticsearch - nofile 65535,然后保存退出。 关闭swapping 其次,在ES的官方文档上,要求Disabled Swapping ,我们要关掉它。执行以下命令: sudo swapoff -a 这只是临时的关闭swapping,重启linux后,会失效。如果要永久的关闭swapping,需要编辑/etc/fstab文件,将包含swap的行的注释掉。 /dev/mapper/centos-root / xfs defaults 0 0 UUID=6a38540f-2ba9-437b-ac8b-8757f5754fff /boot xfs defaults 0 0 # /dev/mapper/centos-swap swap swap defaults 0 0 调整mmapfs的数值 由于ES是使用mmapfs存储索引,但是系统的默认值太低了,我们调高一点。 sysctl -w vm.max_map_count=262144 线程的数量 确保elasticsearch用户最少可创建4096个线程。我们还是要以root用户去设置。 su - ulimit -u 4096 同样,这知识临时的方案,linux重启后会失效,我们需要修改配置文件/etc/security/limits.conf,将nproc设置为4096。 elasticsearch - nproc 4096 好,到这里我们所有的配置就完成了,现在依次启动3个节点的ES。启动完成后,我们在浏览器中检查以下集群的状态,http://192.168.73.130:9200/_cluster/health, {"cluster_name":"cluster-a","status":"green","timed_out":false,"number_of_nodes":3,"number_of_data_nodes":3,"active_primary_shards":0,"active_shards":0,"relocating_shards":0,"initializing_shards":0,"unassigned_shards":0,"delayed_unassigned_shards":0,"number_of_pending_tasks":0,"number_of_in_flight_fetch":0,"task_max_waiting_in_queue_millis":0,"active_shards_percent_as_number":100.0} 我们看到status是green。说明我们的ES集群搭建成功了。

优秀的个人博客,低调大师

JVM实战(六) - 通过案例深入学习class文件结构原理

1 什么是JVM的“无关性”? Java具有平台无关性,也就是任何操作系统都能运行Java代码.之所以能实现这一点,是因为Java运行在虚拟机之上,不同的操作系统都拥有各自的Java虚拟机,因此Java能实现"一次编写,处处运行". 而JVM不仅具有平台无关性,还具有语言无关性. 平台无关性是指不同操作系统都有各自的JVM 语言无关性是指Java虚拟机能运行除Java以外的代码! 这听起来非常惊人,但JVM对能运行的语言是有严格要求的.首先来了解下Java代码的运行过程. Java源代码首先需要使用Javac编译器编译成class文件,然后启动JVM执行class文件,从而程序开始运行. 也就是JVM只认识class文件,它并不管何种语言生成了class文件,只要class文件符合JVM的规范就能运行. 因此目前已经有Scala、JRuby、Jy

优秀的个人博客,低调大师

工作和学习中遇到的各种报错及解决方案

一. Java项目连接MySQL时报错: "The last packet sent successfully to the server was 0 milliseconds ago." 1. 出错原因 数据库回收了连接, 而系统的缓冲池不知道, 继续使用被回收的连接. 2. 解决方法 方法一. 将MySQL回收空闲连接的时间变长, MySQL默认回收时间是8小时, 可以在MySQL目录下的my.ini中增加下面配置, 将时间改为1天(单位是秒) [mysqld] wait_timeout=86400 方法二. 可以通过配置, 让缓冲池去测试连接是否被回收, 如果被回收, 则不继续使用, DBCP添加如下配置 # SQL查询,用来验证从连接池取出的连接 dbcp.validationQuery=SELECT 1 # 指明连接是否被空闲连接回收器(如果有)进行检验,如果检测失败,则连接将被从池中去除 dbcp.testWhileIdle=true # 在空闲连接回收器线程运行期间休眠的时间值,以毫秒为单位,一般比minEvictableIdleTimeMillis小 dbcp.timeBetweenEvictionRunsMillis=300000 # 在每次空闲连接回收器线程(如果有)运行时检查的连接数量,最好和maxActive一致 dbcp.numTestsPerEvictionRun=50 # 连接池中连接,在时间段内一直空闲,被逐出连接池的时间(1000*60*60),以毫秒为单位 dbcp.minEvictableIdleTimeMillis=3600000 二. Linux启动Java项目报错: Get local host name failed.java.net.UnknownHostException. 1. 详细错误信息如下 ERROR - Get local host name failed -com.trs.infra.cluster.ClusterConfig.getMemberHost(ClusterConfig.java:293) java.net.UnknownHostException: localhost: localhost at java.net.InetAddress.getLocalHost(InetAddress.java:1353) at xxxxxxx 产品异常信息 at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1029) at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:862) at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4013) at org.apache.catalina.core.StandardContext.start(StandardContext.java:4357) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:823) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:807) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:595) at org.apache.catalina.core.StandardHostDeployer.install(StandardHostDeployer.java:277) at org.apache.catalina.core.StandardHost.install(StandardHost.java:832) at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:701) at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:432) at org.apache.catalina.startup.HostConfig.start(HostConfig.java:983) at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:349) at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1091) at org.apache.catalina.core.StandardHost.start(StandardHost.java:789) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1083) at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:478) at org.apache.catalina.core.StandardService.start(StandardService.java:480) at org.apache.catalina.core.StandardServer.start(StandardServer.java:2313) at org.apache.catalina.startup.Catalina.start(Catalina.java:556) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:287) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:425) 2. 出错的Java代码 InetAddress localhost = InetAddress.getLocalHost(); 3. 分析问题 ping 127.0.0.1 可以ping通 ping localhost 不通 说明是主机映射的原因 4. 解决方法 在Linux的/etc/hosts文件最后一行加入如下代码 127.0.0.1 www.paulandcode.com localhost 第一部份: 网络IP地址第二部份: 主机名或域名第三部份: 主机名别名 三. Java, Kettle, Jenkins等第三方插件执行Linux的sudo命令时报错: sudo: no tty present and no askpass program specified 1. 这是因为非root账号执行sudo时需要密码, 可以设置免密码. 2. 进入到root用户下 3. 给/etc/sudoers文件添加写权限 chmod u+w /etc/sudoers 4. 添加免密码 abc ALL = NOPASSWD: ALL 四. 阿里云的Linux报错: sudo: unable to resolve host [hostname] 1. 执行sudo vim /etc/hosts编辑原文件如下 127.0.0.1 localhost # The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters 2. 在第一行下面添加如下代码 127.0.0.1 [hostname] 3. 如果觉得主机名太长, 可以在/etc/hostname里面修改, 重启后生效. 五. Kettle报错: Unexpected problem reading shared objects from XML file:null 1. 原因 将数据库链接进行了共享, 然后删除共享. 再次保存转换时报错.或者DB连接为中文, 也会报这个错误. 2. 解决 在C:/Administrator/.kettle文件夹下, 找到share.xml, 在文件中找到sharedobjects节点, 将想要删除的共享对应的子节点删除. 六. ORA-01810: 格式代码出现两次 1. 错误原因 Oracle中格式化时间时出错(分钟不能用java中的mm), 出错Sql代码: TO_DATE('2011-09-24 00:00:00','YYYY-MM-DD HH:mm:ss') 2. 正确的Sql如下: TO_DATE('2011-09-01 00:00:00','YYYY-MM-DD HH24:MI:SS') 七. Java报错: SEVERE: Unable to process Jar entry [......]for annotations java.io.EOFException 可能原因: 1. jar包损坏, 需删掉jar包重新下载 2. Tomcat版本, 遇到过的情况: 使用8.0.9版本Tomcat启动报这个错, 改成8.0.22版本就不报错了. 3. 一个Tomcat中部署了两个同样的项目,一个war,一个由该war解压的文件夹,删掉一个即可 八. Tomcat启动报错: Unsupported major.minor version 52.0 1. 错误原因 不支持JDK1.8, 在编译时使用的时JDK1.8, 而运行时使用的JDK版本低于1.8 2. 解决方案 指定Tomcat运行时JDK版本(若不指定, 会使用默认版本)在Tomcat安装目录下的bin目录找到setclasspath.bat这个文件, 编辑文件, 在第一行加入如下代码 set JAVA_HOME=D:\Program Files\Java\jdk8\jdk1.8.0_51 set JRE_HOME=D:\Program Files\Java\jdk8\jre8 九. 启动Tomcat报错: IllegalArgumentException: The main resource set specified ... is not valid 1. 错误信息 java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/spring]] at java.util.concurrent.FutureTask.report(Unknown Source) at java.util.concurrent.FutureTask.get(Unknown Source) at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:941) at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:872) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1421) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1411) at java.util.concurrent.FutureTask.run(Unknown Source) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source) Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/spring]] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167) ... 6 more Caused by: org.apache.catalina.LifecycleException: Failed to start component [org.apache.catalina.webresources.StandardRoot@19d5011c] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167) at org.apache.catalina.core.StandardContext.resourcesStart(StandardContext.java:4868) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5003) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) ... 6 more Caused by: java.lang.IllegalArgumentException: The main resource set specified [D:\Users\chengyq\eclipse-workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\spring] is not valid at org.apache.catalina.webresources.StandardRoot.createMainResourceSet(StandardRoot.java:748) at org.apache.catalina.webresources.StandardRoot.startInternal(StandardRoot.java:706) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) ... 9 more 2. 错误原因 之前创建了一个名为spring的项目,已经删除, 但是server中还有这个项目。现在运行其他项目,报错找不到已经删除的项目。 3. 解决方法 (1) 找到如下路径: workspacemetadatapluginsorg.eclipse.wst.server.coretmp0conf, 将其中已删除项目对应的标签删除。 (2) 删除Eclipse左侧Servers中对应的Server.xml文件中多余的配标签 十. Arrays.asList返回的List无法直接使用add()方法, Java报错: java.lang.UnsupportedOperationException 1. 报错代码 String[] array = {"1","2","3","4","5"}; List<String> list = Arrays.asList(array); list.add("6"); 2. 报错信息 Exception in thread "main" java.lang.UnsupportedOperationException at java.util.AbstractList.add(AbstractList.java:148) at java.util.AbstractList.add(AbstractList.java:108) at com.paulandcode.test.ListTest.main(ListTest.java:11) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) 3. 错误分析 调用了Arrays.asList()生产的List的add、remove方法时报异常, 这是由Arrays.asList() 返回的是Arrays的内部类ArrayList, 而不是java.util.ArrayList. Arrays的内部类ArrayList和java.util.ArrayList都是继承AbstractList, remove、add等方法AbstractList中是默认throw UnsupportedOperationException而且不作任何操作. java.util.ArrayList重新了这些方法而Arrays的内部类ArrayList没有重新, 所以会抛出异常. 4. 解决错误 String[] array = {"1","2","3","4","5"}; List<String> list = Arrays.asList(array); List<String> arrList = new ArrayList<String>(list); arrList.add("6");

优秀的个人博客,低调大师

RocketMQ 学习之路 | 第二章 :RocketMQ-console的安装

一.介绍 rocketmq有一个对其扩展的开源项目,github:https://github.com/apache/rocketmq-externals 。 其中有一个子模块rocketmq-console,该子模块提供为rocketmq提供可视化的监控界面。 二.下载rocketmq-externals ,并解压 unzip rocketmq-externals-master.zip cd rocketmq-externals-master/ 三. 进入rocketmq-console子模块 cd rocketmq-console/ 四. 修改配置文件编辑rocketmq-externals-master/rocketmq-console/src/main/resources/application.properties . 修改端口号: server.port , 监听的服务地址:rocketmq.config.namesrvAddr , 数据存放位置:rocketmq.config.dataPath 示例: server.contextPath= #端口号 server.port=9000 ### SSL setting #server.ssl.key-store=classpath:rmqcngkeystore.jks #server.ssl.key-store-password=rocketmq #server.ssl.keyStoreType=PKCS12 #server.ssl.keyAlias=rmqcngkey #spring.application.index=true spring.application.name=rocketmq-console spring.http.encoding.charset=UTF-8 spring.http.encoding.enabled=true spring.http.encoding.force=true logging.config=classpath:logback.xml #if this value is empty,use env value rocketmq.config.namesrvAddr NAMESRV_ADDR | now, you can set it in ops page.default localhost:9876 #监听地址, 多个用","隔开。 rocketmq.config.namesrvAddr=localhost:9876 #if you use rocketmq version < 3.5.8, rocketmq.config.isVIPChannel should be false.default true rocketmq.config.isVIPChannel= #rocketmq-console's data path:dashboard/monitor ## 数据存放地址 rocketmq.config.dataPath=/Users/zhengjinyou/logs/rocketmqconsole/data #set it false if you don't want use dashboard.default true rocketmq.config.enableDashBoardCollect=true #set the message track trace topic if you don't want use the default one rocketmq.config.msgTrackTopicName= rocketmq.config.ticketKey=ticket #Must create userInfo file: ${rocketmq.config.dataPath}/users.properties if the login is required rocketmq.config.loginRequired=false 五.编译打包rocketmq-console 只需要编译打包子模块即可 mvn clean package -Dmaven.test.skip=true 六.运行打包后的jar java -jar target/rocketmq-console-ng-1.0.1.jar 七.访问地址 访问监控主页:http://localhost:9000/ 如下图:

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册