1.声明
当前内容用于本人学习和复习,当前内容主要为搭建Zookeeper集群三台电脑
当前内容主要来源:Zookeeper官方文档
2.查看官方文档的搭建方式
Running ZooKeeper in standalone mode is convenient for evaluation, some development, and testing. But in production, you should run ZooKeeper in replicated mode. A replicated group of servers in the same application is called a quorum, and in replicated mode, all servers in the quorum have copies of the same configuration file.
单例模式一般用于评估和某些开发测试中。但是在生产环境中,你应该使用Zookeeper复制模式,同一组程序的服务称之为仲裁,在复制模式中,所有的服务都应该使具有相同的配置文件
(表示需要使用相同的zoo.cfg配置文件)
Note
- For replicated mode, a minimum of three servers are required, and it is strongly recommended that you have an odd number of servers. If you only have two servers, then you are in a situation where if one of them fails, there are not enough machines to form a majority quorum. Two servers is inherently less stable than a single server, because there are two single points of failure.
对于复制模式,最小需要三台服务器,强烈建议你应该使用单数的服务器。如果你只有两台服务器那么可能出现这个样一种情况,一台服务器宕机,则没有足够的服务器来实现仲裁,由于存在两个单点故障,因此两个服务器本来就不如单个服务器稳定。(说明配置当前的zookeeper最好使单数的
)
这是一个必须的配置在zoo.cfg文件中,和之前的单机模式完全不同
The new entry, initLimit is timeouts ZooKeeper uses to limit the length of time the ZooKeeper servers in quorum have to connect to a leader. The entry syncLimit limits how far out of date a server can be from a leader.
在这个新的实体中,initLimit使用来设置这个仲裁的zookeeper在规定的时间内需要连接到leader的超时限制次数,这个实体syncLimit表示一个server与leader过时的次数
With both of these timeouts, you specify the unit of time using tickTime. In this example, the timeout for initLimit is 5 ticks at 2000 milleseconds a tick, or 10 seconds.
在这两个超时中,你都可以使用这个tickTime指定单位,在这个例子中,这个initLimit是5次,当前的2000毫秒进行/次,则一共需要时间为10s
The entries of the form server.X list the servers that make up the ZooKeeper service. When the server starts up, it knows which server it is by looking for the file myid in the data directory. That file has the contains the server number, in ASCII.
在这个实体中server.X列出了这些Zookeeper服务的服务器。当这个服务启动时,它是通过查找data文件夹中的myid文件知道那个服务的。这个文件通常包含一个服务数字,使用ASCII编码
Finally, note the two port numbers after each server name: " 2888" and “3888”. Peers use the former port to connect to other peers. Such a connection is necessary so that peers can communicate, for example, to agree upon the order of updates. More specifically, a ZooKeeper server uses this port to connect followers to the leader. When a new leader arises, a follower opens a TCP connection to the leader using this port. Because the default leader election also uses TCP, we currently require another port for leader election. This is the second port in the server entry.
最后,记下每个服务器名称后的两个端口号:2888和3888端口,前面这个端口使用来连接其他的的server.这个中连接时必须的,用来交流的。例如,以商定更新顺序。大多数情况下一个zookeeper服务都是用来连接这个leader。当一个新的leader选举出来的时候,这个从者将会使用TCP协议并使用2888端口连接到leader。因为默认的领导者选举也使用TCP,所以我们当前需要另一个端口来进行领导者选举。这是服务器条目中的第二个端口
从者使用2888端口连接到leader,所有的zookeeper使用3888端口进行选举leader
3.开始搭建zookeeper集群
这里使用安装Zookeeper的三台机器搭建集群:安装方式:CenOS7中Zookeeper中的安装
节点名称 | 节点ip |
---|---|
node1 | 192.168.1.103 |
node2 | 192.168.1.105 |
node3 | 192.168.1.107 |
1.修改当前的三个节点的zoo.cfg文件
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/hy/zookeeper-3.4.13/data
dataLogDir=/home/hy/zookeeper-3.4.13/log
clientPort=2181
#集群配置
server.1=192.168.1.103:2888:3888
server.2=192.168.1.105:2888:3888
server.3=192.168.1.107:2888:3888
2.为每个节点中的dataDir指定的文件夹data中添加一个myid
文件
- 192.168.1.103 该节点使用myid为1
- 192.168.1.105 该节点使用myid为2
- 192.168.1.107 该节点使用myid为3
3.开放端口:2181、2888、3888
firewall-cmd --zone=public --add-port=2181/tcp --permanent
firewall-cmd --zone=public --add-port=2888/tcp --permanent
firewall-cmd --zone=public --add-port=3888/tcp --permanent
systemctl restart firewalld.service
firewall-cmd --reload
此时搭建完毕
4.开启集群
启动node1节点的zkServer、然后启动node2的zkServer、最后启动node3的zkServer
./bin/zkServer.sh start
查看当前的节点状态
此时发现当前的第一个启动的node1节点直接就是leader,其他的节点为follower节点
搭建zookeeper集群
5.总结
1.当前配置zookeeper集群非常简单,只需要在zoo.cfg中配置server.myid中的数字=节点ip:连接leader端口:选举端口
2.当前的myid文件中使用的是数字,并且该文件放在data文件中
3.一定要开启2181、2888、3888这些端口,否则导致zookeeper集群失败
4.注意当前的zookeeper集群必须是单数,最少为3个节点
以上纯属个人见解,如有问题请联本人!