ssm(Spring、Springmvc、Mybatis)实战之淘淘商城-第十三天(非原创)

文章大纲

1、课程介绍
2、SolrCloud介绍与搭建
3、工程部署
4、参考资料下载
5、参考文章java

 

1、课程介绍

一共14天课程
(1)第一天:电商行业的背景。淘淘商城的介绍。搭建项目工程。Svn的使用。
(2)次日:框架的整合。后台管理商品列表的实现。分页插件。
(3)第三天:后台管理。商品添加。商品类目的选择、图片上传、富文本编辑器的使用。
(4)第四天:商品规格的实现。
(5)第五天:商城前台系统的搭建。首页商品分类的展现。Jsonp。
(6)第六天:cms系统的实现。前台大广告位的展现。
(7)第七天:cms系统添加缓存。Redis。缓存同步。
(8)第八天:搜索功能的实现。使用solr实现搜索。
(9)第九天:商品详情页面的展现。
(10)第十天:单点登陆系统。Session共享。
(11)第十一天:购物车订单系统的实现。
(12)第十二天:nginx。反向代理工具。
(13)第十三天:redis集群的搭建、solr集群的搭建。系统的部署。
(14)项目总结。linux

2、SolrCloud介绍与搭建

1. 什么是SolrCloud

  SolrCloud(solr 云)是Solr提供的分布式搜索方案,当你须要大规模,容错,分布式索引和检索能力时使用 SolrCloud。当一个系统的索引数据量少的时候是不须要使用SolrCloud的,当索引量很大,搜索请求并发很高,这时须要使用SolrCloud来知足这些需求。
  SolrCloud是基于Solr和Zookeeper的分布式搜索方案,它的主要思想是使用Zookeeper做为集群的配置信息中心。
  它有几个特点功能:
(1)集中式的配置信息
(2)自动容错
(3)近实时搜索
(4)查询时自动负载均衡nginx

2. 什么是Zookeeper

  顾名思义zookeeper就是动物园管理员,他是用来管hadoop(大象)、Hive(蜜蜂)、pig(小猪)的管理员, Apache Hbase和 Apache Solr 的分布式集群都用到了zookeeper;Zookeeper:是一个分布式的、开源的程序协调服务,是hadoop项目下的一个子项目。redis

3. Zookeeper能够干哪些事情

(1)配置管理
  在咱们的应用中除了代码外,还有一些就是各类配置。好比数据库链接等。通常咱们都是使用配置文件的方式,在代码中引入这些配置文件。可是当咱们只有一种配置,只有一台服务器,而且不常常修改的时候,使用配置文件是一个很好的作法,可是若是咱们配置很是多,有不少服务器都须要这个配置,并且还多是动态的话使用配置文件就不是个好主意了。这个时候每每须要寻找一种集中管理配置的方法,咱们在这个集中的地方修改了配置,全部对这个配置感兴趣的均可以得到变动。好比咱们能够把配置放在数据库里,而后全部须要配置的服务都去这个数据库读取配置。可是,由于不少服务的正常运行都很是依赖这个配置,因此须要这个集中提供配置服务的服务具有很高的可靠性。通常咱们能够用一个集群来提供这个配置服务,可是用集群提高可靠性,那如何保证配置在集群中的一致性呢? 这个时候就须要使用一种实现了一致性协议的服务了。Zookeeper就是这种服务,它使用Zab这种一致性协议来提供一致性。如今有不少开源项目使用Zookeeper来维护配置,好比在HBase中,客户端就是链接一个Zookeeper,得到必要的HBase集群的配置信息,而后才能够进一步操做。还有在开源的消息队列Kafka中,也使用Zookeeper来维护broker的信息。在Alibaba开源的SOA框架Dubbo中也普遍的使用Zookeeper管理一些配置来实现服务治理。
(2)名字服务
  名字服务这个就很好理解了。好比为了经过网络访问一个系统,咱们得知道对方的IP地址,可是IP地址对人很是不友好,这个时候咱们就须要使用域名来访问。可是计算机是不能是别域名的。怎么办呢?若是咱们每台机器里都备有一份域名到IP地址的映射,这个却是能解决一部分问题,可是若是域名对应的IP发生变化了又该怎么办呢?因而咱们有了DNS这个东西。咱们只须要访问一个你们熟知的(known)的点,它就会告诉你这个域名对应的IP是什么。在咱们的应用中也会存在不少这类问题,特别是在咱们的服务特别多的时候,若是咱们在本地保存服务的地址的时候将很是不方便,可是若是咱们只须要访问一个你们都熟知的访问点,这里提供统一的入口,那么维护起来将方便得多了。
(3)分布式锁
  其实在第一篇文章中已经介绍了Zookeeper是一个分布式协调服务。这样咱们就能够利用Zookeeper来协调多个分布式进程之间的活动。好比在一个分布式环境中,为了提升可靠性,咱们的集群的每台服务器上都部署着一样的服务。可是,一件事情若是集群中的每一个服务器都进行的话,那相互之间就要协调,编程起来将很是复杂。而若是咱们只让一个服务进行操做,那又存在单点。一般还有一种作法就是使用分布式锁,在某个时刻只让一个服务去干活,当这台服务出问题的时候锁释放,当即fail over到另外的服务。这在不少分布式系统中都是这么作,这种设计有一个更好听的名字叫Leader Election(leader选举)。好比HBase的Master就是采用这种机制。但要注意的是分布式锁跟同一个进程的锁仍是有区别的,因此使用的时候要比同一个进程里的锁更谨慎的使用。
(4)集群管理
  在分布式的集群中,常常会因为各类缘由,好比硬件故障,软件故障,网络问题,有些节点会进进出出。有新的节点加入进来,也有老的节点退出集群。这个时候,集群中其余机器须要感知到这种变化,而后根据这种变化作出对应的决策。好比咱们是一个分布式存储系统,有一个中央控制节点负责存储的分配,当有新的存储进来的时候咱们要根据如今集群目前的状态来分配存储节点。这个时候咱们就须要动态感知到集群目前的状态。还有,好比一个分布式的SOA架构中,服务是一个集群提供的,当消费者访问某个服务时,就须要采用某种机制发现如今有哪些节点能够提供该服务(这也称之为服务发现,好比Alibaba开源的SOA框架Dubbo就采用了Zookeeper做为服务发现的底层机制)。还有开源的Kafka队列就采用了Zookeeper做为Cosnumer的上下线管理。数据库

4. SolrCloud结构

  SolrCloud为了下降单机的处理压力,须要由多台服务器共同来完成索引和搜索任务。实现的思路是将索引数据进行Shard(分片)拆分,每一个分片由多台的服务器共同完成,当一个索引或搜索请求过来时会分别从不一样的Shard的服务器中操做索引。
  SolrCloud须要Solr基于Zookeeper部署,Zookeeper是一个集群管理软件,因为SolrCloud须要由多台服务器组成,由zookeeper来进行协调管理。
下图是一个SolrCloud应用的例子:apache

 

对上图进行图解,以下:编程

 

4.1 物理结构
  三个Solr实例( 每一个实例包括两个Core),组成一个SolrCloud。缓存

4.2 逻辑结构
  索引集合包括两个Shard(shard1和shard2),shard1和shard2分别由三个Core组成,其中一个Leader两个Replication,Leader是由zookeeper选举产生,zookeeper控制每一个shard上三个Core的索引数据一致,解决高可用问题。
  用户发起索引请求分别从shard1和shard2上获取,解决高并发问题。tomcat

collection:
  Collection在SolrCloud集群中是一个逻辑意义上的完整的索引结构。它经常被划分为一个或多个Shard(分片),它们使用相同的配置信息。好比:针对商品信息搜索能够建立一个collection。collection=shard1+shard2+....+shardX服务器

Core:
  每一个Core是Solr中一个独立运行单位,提供 索引和搜索服务。一个shard须要由一个Core或多个Core组成。因为collection由多个shard组成因此collection通常由多个core组成。

Master或Slave:
  Master是master-slave结构中的主结点(一般说主服务器),Slave是master-slave结构中的从结点(一般说从服务器或备服务器)。同一个Shard下master和slave存储的数据是一致的,这是为了达到高可用目的。

Shard:
  Collection的逻辑分片。每一个Shard被化成一个或者多个replication,经过选举肯定哪一个是Leader。

5. SolrCloud搭建

5.1 架构安排
  本教程的这套安装是单机版的安装,因此采用伪集群的方式进行安装,若是是真正的生产环境,将伪集群的ip改下就能够了,步骤是同样的。
SolrCloud结构图以下:

 

5.2 环境准备
(1)CentOS-6.4-i386-bin-DVD1.iso
(2)jdk-7u72-linux-i586.tar.gz
(3)apache-tomcat-7.0.47.tar.gz
(4)zookeeper-3.4.6.tar.gz
(5)solr-4.10.3.tgz

5.3 具体环境安装
  具体环节安装在请参考资料下载中进行学习

6. solrJ访问solrCloud

public class SolrCloudTest { // zookeeper地址 private static String zkHostString = "192.168.25.154:2181,192.168.25.154:2182,192.168.25.154:2183"; // collection默认名称,好比个人solr服务器上的collection是collection2_shard1_replica1,就是去掉“_shard1_replica1”的名称 private static String defaultCollection = "collection1"; // cloudSolrServer实际 private CloudSolrServer cloudSolrServer; // 测试方法以前构造 CloudSolrServer @Before public void init() { cloudSolrServer = new CloudSolrServer(zkHostString); cloudSolrServer.setDefaultCollection(defaultCollection); cloudSolrServer.connect(); } // 向solrCloud上建立索引 @Test public void testCreateIndexToSolrCloud() throws SolrServerException, IOException { SolrInputDocument document = new SolrInputDocument(); document.addField("id", "100001"); document.addField("title", "李四"); cloudSolrServer.add(document); cloudSolrServer.commit(); } // 搜索索引 @Test public void testSearchIndexFromSolrCloud() throws Exception { SolrQuery query = new SolrQuery(); query.setQuery("*:*"); try { QueryResponse response = cloudSolrServer.query(query); SolrDocumentList docs = response.getResults(); System.out.println("文档个数:" + docs.getNumFound()); System.out.println("查询时间:" + response.getQTime()); for (SolrDocument doc : docs) { ArrayList title = (ArrayList) doc.getFieldValue("title"); String id = (String) doc.getFieldValue("id"); System.out.println("id: " + id); System.out.println("title: " + title); System.out.println(); } } catch (SolrServerException e) { e.printStackTrace(); } catch (Exception e) { System.out.println("Unknowned Exception!!!!"); e.printStackTrace(); } } // 删除索引 @Test public void testDeleteIndexFromSolrCloud() throws SolrServerException, IOException { // 根据id删除 UpdateResponse response = cloudSolrServer.deleteById("zhangsan"); // 根据多个id删除 // cloudSolrServer.deleteById(ids); // 自动查询条件删除 // cloudSolrServer.deleteByQuery("product_keywords:教程"); // 提交 cloudSolrServer.commit(); } } 

3、工程部署

1. 域名规划

 

2. 环境准备

CentOS6.4
Jdk1.8以上
Tomcat8

3. 部署步骤

使用maven实现tomcat的热部署。

第一步:安装tomcat
先在CentOS中安装jdk,而后解压tomcat。

第二步: 在tomcat中配置用户权限
咱们须要实现热部署,天然就须要经过maven操做tomcat,因此就须要maven取得操做tomcat的权限,如今这一步就是配置tomcat的可操做权限.
在tomcat的安装目录下,修改conf / tomcat-user.xml文件,在<tomcat-users> 节点下面增长以下配置:

<role rolename="manager-gui" /> <role rolename="manager-script" /> <user username="tomcat" password="tomcat" roles="manager-gui, manager-script"/> 

第三步:修改pom文件

在project中添加插件,以及maven中配置的server,
如今maven已经拥有操做tomcat的权限了,可是这二者之间想要通讯的话还须要一个桥梁,那就是在maven中配置tomcat插件.
修改项目的pom.xml文件,在<build> 节点下面增长以下配置:

<build> <plugins> <!-- 配置Tomcat插件 --> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <configuration> <port>8081</port> <path>/</path> <url>http://192.168.25.136:8080/manager/text</url> <username>tomcat</username> <password>tomcat</password> </configuration> </plugin> </plugins> </build> 

第四步:设置部署命令
通常使用搜是在eclipse中,能够右键点击须要部署的项目,Run as -> Run configurations -> maven build -> 右键 new,这样配置一个新的maven命令具体配置命令方法:
初次部署可使用 "tomcat7:deploy" 命令
若是已经部署过使用 "tomcat7:redeploy" 命令

4、参考资料下载

连接:https://pan.baidu.com/s/1udhG8gBTZ6wjW9eDR8ZSOQ
提取码:fml7

5、参考文章

http://yun.itheima.com/course?hm

相关文章
相关标签/搜索