什么是集群?
集群是一种计算机系统, 它通过一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作。在某种意义上,他们可以被看作是一台计算机。集群系统中的单个计算机通常称为节点,通常通过局域网连接,但也有其它的可能连接方式。集群计算机通常用来改进单个计算机的计算速度和/或可靠性。一般情况下集群计算机比单个计算机,比如工作站或超级计算机性能价格比要高得多。
集群的特点:
1.可扩展性:集群的性能不限制于单一的服务实体,新的服务实体可以动态的添加到集群,从而增强集群的性能。
2.高可用性:集群当其中一个节点发生故障时,这台节点上面所运行的应用程序将在另一台节点被自动接管,消除单点故障对于增强数据可用性、可达性和可靠性是非常重要的。
集群的两大能力:
1.负载均衡:负载均衡把人物比较均匀的分布到集群环境下的计算和网络资源,以提高数据吞吐量。
2.错误恢复:如果集群中的某一台服务器由于故障或者维护需要无法使用,资源和应用程序将转移到可用的集群节点上。这种由于某个节点的资源不能工作,另一个可用节点中的资源能够透明的接管并继续完成任务的过程,叫做错误恢复。
为什么需要搭建zookeeper集群?
大部分分布式应用需要一个主控、协调器或者控制器来管理物理分布的子进程。目前,大多数都要开发私有的协调程序,缺乏一个通用机制,协调程序的反复编写浪费,且难以形成通用、伸缩性好的协调器,zookeeper提供通用的分布式锁服务,用以协调分布式应用。所以说zookeeper是分布式应用的协作服务。zookeeper作为注册中心,服务器和客户端都要访问,如果有大量的并发,肯定会有等待。所以可以通过zookeeper集群解决。
搭建伪集群:
准备工作:
(1)、安装JDK
(2)、将zookeeper压缩包上传到服务器(下载地址:http://mirrors.shu.edu.cn/apache/zookeeper/)
(3)、将Zookeeper解压,创建data目录,将conf下zoo_sample.cfg文件改名为zoo.cfg
(4)、建立/usr/local/zookeeper-cluster目录,将解压后的Zookeeper复制到以下三个目录:
/usr/local/zookeeper-cluster/zookeeper-1
/usr/local/zookeeper-cluster/zookeeper-2
/usr/local/zookeeper-cluster/zookeeper-3
命令:
cp -r zookeeper /usr/local/zookeeper-cluster/zookeeper-1
cp -r zookeeper /usr/local/zookeeper-cluster/zookeeper-2
cp -r zookeeper /usr/local/zookeeper-cluster/zookeeper-3
(5)、配置每一个Zookeeper的dataDir(zoo.cfg) clientPort分别为2181 2182 2183
命令:
vim /usr/local/zookeeper-cluster/zookeeper-1/conf/zoo.cfg
vim /usr/local/zookeeper-cluster/zookeeper-2/conf/zoo.cfg
vim /usr/local/zookeeper-cluster/zookeeper-3/conf/zoo.cfg
clientPort=2181
dataDir=/usr/local/zookeeper-cluster/zookeeper-1/data
clientPort=2182
dataDir=/usr/local/zookeeper-cluster/zookeeper-2/data
clientPort=2183
dataDir=/usr/local/zookeeper-cluster/zookeeper-3/data
配置集群:
(1)、在每个zookeeper的data目录下创建一个myid文件,内容分别是1、2、3。这个文件就是记录每个服务器的ID
命令:
cd /usr/local/zookeeper-cluster/zookeeper-1/data
echo 内容 > 文件名
echo 1 > myid
echo 2 > myid
echo 3 > myid
(2)、在每一个zookeeper的zoo.cfg配置客户端访问端口(clientPort)和集群服务器IP列表
server.服务器ID=服务器IP地址:服务器之间通信端口:服务器之间投票选举端口
集群服务器IP列表如下:
server.1=192.168.25.128:2881:3881
server.2=192.168.25.128:2882:3882
server.3=192.168.25.128:2883:3883
启动集群:
启动集群就是分别启动每个示例。
命令:
/usr/local/zookeeper-cluster/zookeeper-1/bin/zkServer.sh start
/usr/local/zookeeper-cluster/zookeeper-2/bin/zkServer.sh start
/usr/local/zookeeper-cluster/zookeeper-3/bin/zkServer.sh start
启动后我们查询每个实例的运行状态
命令:
/usr/local/zookeeper-cluster/zookeeper-1/bin/zkServer.sh status
/usr/local/zookeeper-cluster/zookeeper-2/bin/zkServer.sh status
/usr/local/zookeeper-cluster/zookeeper-3/bin/zkServer.sh status
第一个服务:
Mode为follower表示是跟随者(从)
第二个服务:
Mode为leader表示是领导者(主)
第三个服务也是follower(跟随者)
当集群中的主服务区挂了,集群中的其他服务器会自动进行选举状态,然后产生新的leader
当领导者产生后,再次有新服务器加入集群,不会影响到现任领导者。