Zookeeper集群
1.Leader选举机制
Zookeeper中的每一个节点都会监听一个投票选举的端口;每当有一个节点启动,所有已经启动的Zookeeper
都会去参与一次投票,根据节点ID大的来选择Leader,超过半数节点投票成功,则选举出Leader;后续即便有节点ID
更大的,Leader选举出来后,也不再进行选举;只有当Leader节点挂了,才再次开始选举;
Leader选举分为:服务器启动时期选举,服务器运行时期选举;如果当前运行期间的节点数量小于半数,那么整
个集群都将不可用
例如:现在有5个节点,ID为1,2,3,4,5;启动节点的顺序也是1-5;那么当启动到第3个节点时,Leader就选举
出来了,因此Leader是3
2.Zookeeper集群搭建
* 第一步: 在zookeeper目录下创建一个data文件夹,并配置节点ID
cd /home/tom/zookeeper-cluster/zookeeper-1/
mkdir data
echo 1 > myid # 其他节点按顺序更改ID值
* 第二步: 编辑conf/zoo_sample.cfg,配置客户端端口
cd /home/tom/zookeeper-cluster/zookeeper-1/conf/
vim zoo_sample.cfg #clientPort=2181
* 第三步: 编辑conf/zoo_sample.cfg,配置zookeeper服务器间通信端口,投票端口
server.1=192.168.25.128:2881:3881
server.2=192.168.25.128:2882:3882
server.3=192.168.25.128:2883:3883
* 第四步: 修改applicationContext-service.xml
<dubbo:registry protocol="zookeeper" address="192.168.25.128:2181,192.168.25.128:2182,192.168.25.128:2183">
</dubbo:registry>
Solr Cloud
Solr Cloud是由solr提供的分布式搜索解决方案,Solr Cloud基于solr和zookeeper,zookeeper作为
solr的配置文件管理中心(solr-home/conf)
1. Solr Cloud原理:
首先对solr-home中的整个索引库(全部的数据)进行分片,得到多个shard,这些shard各保存索引库中的一
部分数据,即:shard1+shard2+shard3+...=索引库;然后对每个shard进行主从备份,得到多个core,core和
shard保存的数据完全相同,即:core1.1=core1.2=chard;每一个solr-server中保存一套由不同shard备份
出来的core,相当于每个solr-server都保存一份完整的索引库
2.SolrCloud搭建
* 第一步: 上传tomcat-solr和solr-home,并各复制3份,修改各个/home/tom/tomcat-solr/apache-
tomcat-solor/apache-tomcat-1/webapps/solr/WEB-INF下的web.xml,关联tomcat-solr和solr-
home
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>/home/tom/tomcat-solr/apache-tomcat-solor/solrhome-1</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
* 第二步: 修改SHUTDOWN(22行),Connector(69行),AJP(116行)的端口号
/home/tom/tomcat-solr/apache-tomcat-solor/apache-tomcat-1/conf/server.xml
8105 8180 8109
8205 8280 8209
8305 8380 8309
8405 8480 8409
* 第三步: 设置 JVM 相关运行参数的变量,让tomcat启动时能找到zookeeper集群的IP
/home/tom/tomcat-solr/apache-tomcat-solor/apache-tomcat-1/bin/catalina.sh(288行)
JAVA_OPTS="-DzkHost=192.168.25.128:2181,192.168.25.128:2182,192.168.25.128:2183"
* 第四步: 配置solrCloud,修改/home/tom/tomcat-solr/apache-tomcat-solor/solrhome-1
/home/tom/tomcat-solr/apache-tomcat-solor/solrhome-1/solr.xml
<solrcloud>
<str name="host">192.168.25.128</str>
<int name="hostPort">8180</int>
<str name="hostContext">${hostContext:solr}</str>
<int name="zkClientTimeout">${zkClientTimeout:30000}</int>
<bool name="genericCoreNodeNames">${genericCoreNodeNames:true}</bool>
</solrcloud>
* 第五步: 让zookeeper统一管理配置文件
将 solr-4.10.3 压缩包上传到 linux,解压,然后进入 solr-4.10.3/example/scripts/cloud-scripts
执行:./zkcli.sh -zkhost 192.168.25.128:2181,192.168.25.128:2182,192.168.25.128:2183 -cmd upconfig -confdir /home/tom/tomcat-solr/apache-tomcat-solor/solrhome-1/collection1/conf -confname myconf
![在这里插入图片描述](https://img-blog.csdnimg.cn/201901102118008.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyNTE0MTI5,size_16,color_FFFFFF,t_70)
Redis Cluster
1.槽位算法:
redis集群内置0-16383个槽位,当我们搭了redis集群后,redis会自动为每一个节点分配部分槽位;当我们存
取值的时候,redis先对key根据crc16算法计算出一个值,再让这个值取余于16384,这样一定可以得到一个0-
16383之间的余数,然后就将这个数据存储到对应的槽位
2.投票机制
redis集群是没有leader的,因此每个节点之间需要定时的(PING-PONG)互相查看对方是否挂掉;当超过半数
的redis节点无法连接上某一个节点,就认为这个节点挂掉了,便替换上这个节点的从节点
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190110211821380.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyNTE0MTI5,size_16,color_FFFFFF,t_70)
Mycat数据库分片
1.Mycat介绍:
Mycat是一个用于数据库分片的数据库中间件,应用层通过访问Mycat来获取到数据
2.Mycat原理:
Mycat实现了Mysql的二进制传输协议,将自己伪装成Mysql,因此对编程人员来说,操作Mycat与操作Mysql
基本没有区别;但是Mycat实际上只是作为数据库的中间件,当我们操作Mycat逻辑数据库中的表时,Mycat会根据
schema中的table映射到物理数据库的表上
3.Mycat数据分片的策略:
* 垂直切分: 按照不同的表将数据分发到不同的物理数据库上,比如:将Studetn表分发到Student数据库,Teacher表切分到Student数据库
* 水平切分: 将同一张表中的数据按照一定的规则切分到不同的数据库中
4.Mycat相关概念:
逻辑数据库(schema):暴露给程序员操作的数据库
逻辑表(table):每个逻辑数据库关联多张逻辑表
dataNode:每张逻辑表关联多个dataNode
dataHost:物理数据库跟dataNode建立关系
5.Mycat读写分离机制:
Mycat读写分离机制是依赖于Mysql的主从复制机制的,通常是1个主节点负责读写,3个从节点负责读,从节点就相当于主节点的副本,由主节点保证主从节点数据一致
nginx
1.nginx介绍:
nginx是一款高性能的http服务器,方向代理服务器,它主要有两大功能:部署静态网页,反向代理负载均衡;
2.nginx原理
部署静态网页: 将静态网页部署到nginx服务器下,用户直接请求nginx服务器获得页面资源
反向代理:当用户需要访问tomcat服务器中的资源时,由nginx作为服务器中间件,用户依然访问nginx,由nginx根据负载均衡来请求tomcat服务器的资源,再响应给用户
3.nginx高可用
nginx高可用需要借助Keepalived软件,Keepalived的主要作用就是检测web服务器的状态;nginx高可用
环境下有一台主机,和多台备份机;当主机工作时,备份机是不提供服务的,只有主机宕机了,启用备份机,备份机才
开始工作;而Keppalived的作用就是检测主机和备份机的存活状态;实现主机和备份机间的切换依赖于VIP(虚拟
IP),VIP暴露在公网中,用户访问的就是VIP,主机工作时,便将VIP配置给主机;主机宕机后,便将VIP配置给备份机
nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
# 部署静态网页
server{
listen 80;
server_name www.test1.com;
location / {
alias H:/xcEdu/xcEdu-UI/xc-ui-pc-static-portal/;
index index.html;
}
}
# 反向代理负载均衡
upstream test2-portal {
server localhost:8081 weight=1;
server localhost:8082 weight=3;
server localhost:8083 weight=3;
}
server{
listen 80;
server_name www.test2.com;
location / {
proxy_pass http://test2-portal;
index index.html;
}
}
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190110211840851.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyNTE0MTI5,size_16,color_FFFFFF,t_70)