高并发教程-基础篇-之分布式全文搜索引擎elasticsearch的搭建

如果大家看了我的上一篇《2.高并发教程-基础篇-之nginx+mysql实现负载均衡和读写分离》文章,如果能很好的利用,那么其实已经可以轻松日抗千万级别的访问量了,但是如果业务涉及查询比较多,查询条件比较丰富,又或者我就想要查询的响应更快点,那么在mysql上面去做优化,其实比较辛苦,有没有更好的解决方案呢?答案是肯定的!它就是我们今天的主角,分布式全文搜索引擎elasticsearch.

技巧提示:mysql集群层主要提供核心业务逻辑的读写以及数据的冗余备份;elasticsearch负责前端的查询和展示。比如,用户的所有写操作都是在mysql的master服务器上面完成;然后通过主从机制,把数据同步至多个mysql从机,然后通过从机把数据同步至elasticsearch.因为有多个mysql从机,所有同步的时候划分合适数量的表分担至各个从机去同步,这样既可以减轻各个mysql服务器的压力,又可以更加高效同步。同步工具这里推荐logstash,大家自行搜索了解,如果遇到坑可以留言。

一、架构图

服务器准备:3台,ubuntu16.04系统+elasticsearch-6.2.4
slave1:192.168.1.191 ES集群master
slave2:192.168.1.192 ES集群slave
slave3:192.168.1.193 ES集群slave
[注意:nginx方向代理和mysql集群的配置这里不做说明,大家可以看我的之前的文章]

二、elasticsearch配置(分别在三台服务器上面进行如下操作)

1.java环境配置:

    *请自行前往java官方下载java,然后解压至合适目录
vim /etc/profile加入如下内容:
#java
export JAVA_HOME=/home/qizexi/data/java #这个改为你java的解压目录
export JAVA_CLASS=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/jre/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
保存,退出
source /etc/profile
java -version看到如下内容即是java安装成功
---------------------------------------
java version "1.8.0_141"
---------------------------------------

2.账号准备:

    elasticsearch不允许以root账号运行,所以我们可以添加一个es用户来负责运行elasticsearch
useradd es
passwd es 将elasticsearch-6.2.4的安装目录变更为es用户
chown -R es:es elasticsearch-6.2.4 改变ulimit的1024的限制
vim /etc/security/limits.conf
* hard nofile 100000
* soft nofile 100000
* hard nproc 100000
* soft nproc 100000
保存退出
source /etc/security/limits.conf
切换es用户(su es)之后运行
ulimit -n可以看到
100000
说明成功,否则可以重启生效:) 改变max_map_countd的限制:
vim /etc/sysctl.conf修改如下配置:
vm.max_map_count=262144
保存退出
运行:sysctl -p

3.主服务器配置(191):

    cd 到elasticsearch-6.2.4的解压目录
vim config/elasticsearch.yml修改如下内容:
cluster.name: my-app
node.name: master
network.host: 192.168.1.191
http.port: 9200
discovery.zen.ping.unicast.hosts: ["192.168.1.191", "192.168.1.192", "192.168.1.193"]
保存,然后使用es账号启动即可.
su es
bin/elasticsearch -d
su root
netstat -tlnp看到如下内容即是成功(有可能过几秒钟才能看到):
------------------------------------------------------
192.168.1.191:9200
192.168.1.191:9300

4.配置从服务器(192,193):

    cd 到elasticsearch-6.2.4的解压目录
vim config/elasticsearch.yml修改如下内容:
cluster.name: my-app
node.name: slave1 #193服务器改为slave2
network.host: 192.168.1.192 #193服务器改为192.168.1.193
http.port: 9200
discovery.zen.ping.unicast.hosts: ["192.168.1.191", "192.168.1.192", "192.168.1.193"]
保存,然后使用es账号启动即可.
su es
bin/elasticsearch -d
su root
netstat -tlnp看到如下内容即是成功(有可能过几秒钟才能看到):
-------------------------------------------------------
192.168.1.192:9200 #192上面看到是193
192.168.1.192:9300 #192上面看到是193

5.查看集群的状态:

    curl -XGET 'http://192.168.1.191:9200/_cat/nodes?v'
看到三个节点即可成功:
ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
192.168.1.191 25 55 0 0.00 0.01 0.00 mdi * master
192.168.1.192 22 97 5 0.70 0.34 0.17 mdi - slave1
192.168.1.193 20 75 30 0.54 0.14 0.05 mdi - slave2

3.高并发教程-基础篇-之分布式全文搜索引擎elasticsearch的搭建的更多相关文章

  1. 2.高并发教程-基础篇-之nginx+mysql实现负载均衡和读写分离

    技巧提示:mysql读写分离搭建好之后,配合nginx的负载均衡,可以高效的mysql的集群性能,同时免去麻烦的query分流.比如,sever1收到的请求就专门链接slave1从mysql读取数据, ...

  2. 高并发教程-基础篇-之nginx负载均衡的搭建

    温馨提示:请不要盲目的进行横向扩展,优先考虑对单台服务器的性能优化,只有单台服务器的性能达到最优化之后,集群才会被最大的发挥作用. 一.架构图: 服务器准备:3台,ubuntu16.04系统maste ...

  3. 1.高并发教程-基础篇-之nginx负载均衡的搭建

    温馨提示:请不要盲目的进行横向扩展,优先考虑对单台服务器的性能优化,只有单台服务器的性能达到最优化之后,集群才会被最大的发挥作用. 一.架构图: 服务器准备:3台,ubuntu16.04系统maste ...

  4. 分布式全文搜索引擎ElasticSearch—超详细

    1 ElasticSearch 1.1 ES的概念和特点 ES:全文检索的框架,专门做搜索,支持分布式.集群.封装的Lucene. 特点: 原生的Lucene使用的不足,优化了Lucene的调用方式 ...

  5. 分布式全文搜索引擎ElasticSearch

    一 什么是 ElasticSearch Elasticsearch 是一个分布式可扩展的实时搜索和分析引擎,一个建立在全文搜索引擎 Apache Lucene(TM) 基础上的搜索引擎.当然 Elas ...

  6. 深度学习入门者的Python快速教程 - 基础篇

      5.1 Python简介 本章将介绍Python的最基本语法,以及一些和深度学习还有计算机视觉最相关的基本使用. 5.1.1 Python简史 Python是一门解释型的高级编程语言,特点是简单明 ...

  7. Java高并发编程基础三大利器之CountDownLatch

    引言 上一篇文章我们介绍了AQS的信号量Semaphore<Java高并发编程基础三大利器之Semaphore>,接下来应该轮到CountDownLatch了. 什么是CountDownL ...

  8. java多线程与并发(基础篇)

    一.进程与线程 进程:是代码在数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位. 线程:是进程的一个执行路径,一个进程中至少有一个线程,进程中的多个线程共享进程的 资源. 虽然系统是把资源 ...

  9. 高并发编程基础(java.util.concurrent包常见类基础)

    JDK5中添加了新的java.util.concurrent包,相对同步容器而言,并发容器通过一些机制改进了并发性能.因为同步容器将所有对容器状态的访问都串行化了,这样保证了线程的安全性,所以这种方法 ...

随机推荐

  1. 纯CSS实现3D照片墙

    HTML部分: <body> <div class="photo-wrap"> <!-- 舞台 --> <div class=" ...

  2. js中作用域链和作用域

    作用域 在JavaScript中,我们可以将作用域定义为一套规则,这套规则用来管理引擎如何在当前作用域以及嵌套的子作用域中根据标识符名称(变量名或者函数名)进行变量查找. 经过研究<高级程序设计 ...

  3. Spring Data MongoDB 分页查询

    在上篇文章 Spring Data MongoDB 环境搭建 基础上进行分页查询 定义公用分页参数类,实现 Pageable 接口 import java.io.Serializable; impor ...

  4. Google APAC----Africa 2010, Qualification Round(Problem A. Store Credit)----Perl 解法

    原题地址链接:https://code.google.com/codejam/contest/351101/dashboard#s=p0 问题描述: Problem You receive a cre ...

  5. Python库安装注意事项

    由于一些python库依赖其它库或者其它组件,因此,在使用pip3命令安装python库的时候,经常会报错,告知缺失哪些组件. 但是, 开启VPN后,就没有再碰到类似错误,相关组件都是自动被安装. 因 ...

  6. Android LinkedList和ArrayList的区别

    LinkedeList和ArrayList都实现了List接口,但是它们的工作原理却不一样.它们之间最主要的区别在于ArrayList是可改变大小的数组,而LinkedList是双向链接串列(doub ...

  7. css预处理器(sass)

    学过CSS的人都知道,它不是一种编程语言.你可以用它开发网页样式,但是没法用它编程.也就是说,CSS基本上是设计师的工具,不是程序员的工具.在程序员眼里,CSS是一件很麻烦的东西.它没有变量,也没有条 ...

  8. Hbase集群部署

    1.安装Hadoop集群 这个之前已经写过 2.安装Zookeeper 这个之前也已经写过 3.下载hbase,放到master机器,解压 4.修改hbase-env.sh,添加Java地址 expo ...

  9. MyBatis基本配置和实践(一)

    第一步:创建Java工程和数据库表user 第二步:使用Maven管理项目依赖 第三步:在resources目录下加入log4j.properties 第四步:在resources目录下加入SqlMa ...

  10. Python学习---django之ORM的增删改查180125

    模型常用的字段类型参数 <1> CharField        #字符串字段, 用于较短的字符串.        #CharField 要求必须有一个参数 maxlength, 用于从数 ...