跟孙哥学java
zookeeper简介
集群管理技术
提供了强一致性的保证,基于Paxos算法的ZAB协议保证的数据一致性
顾名思义 zookeeper 就是动物园管理员,他是用来管 hadoop(大象)、Hive(蜜蜂)、pig(小 猪)的管理员, Apache Hbase 和 Apache Solr 的分布式集群都用到了 zookeeper;Zookeeper: 是一个分布式(集群)的、开源的程序协调服务(服务),是 hadoop 项目下的一个子项目。他提供的主要功 能包括:配置管理、名字服务、分布式锁、集群管理。
广泛引用在java开发中:
大数据 hadoop hbase
javaEE dubbo kafka RocketMQ
存在趋势:去zookeeper 。原因:
- 数据一致性的算法不够优秀 (RAFT优于Paxos) 2.完整的整体
zk的功能
注册中心,配置中心,负载均衡,故障转移,分布式锁..... 注册中心:
- 把一组功能相同的rpc服务管理起来,并且给这一组服务命名
- 健康检查(定期检查rpc服务是否正常运行)
- 负载均衡,通过负载均衡选择一个特定的RPC服务(轮询。。。)
注意: 服务发现与注册/注册中心/命名服务 这三者是一样的
zk的替代性产品
consul,etcd ,applo,nacos...
zookeeper的逻辑结构
树形结构
根节点 /
后续接待你 绝对路径 起始 /
树上的节点 名词 znode
zookeeper节点的分类
- 持久节点
- 临时节点
- 有序的持久节点
- 有序的临时节点
zookeeper 物理结构
单机版 standalone
单机版的zk 只能进行测试 而不用用于生产环境。
原因:1. 单点故障 2. 受限硬件资源 (CPU 内存 网络)
集群版
集群zk注意事项:
- zk-server分为 主节点(leader) 从节点(flower) 其他的集群命名一般是主Master从Slave,zk为了与其他Client集群命名产生歧义,所以把主节点叫leader,从节点叫flower
- 如何确定zk集群中节点的身份 (主从) zk使用选举算法(投票)过半数认可,就是主节点
- 主节点作用 : 主节点管理树状结构 增加,删除--->节点 查询节点
- 从节点作用: 主节点修改了树状结构,会同步到从节点,从节点主要负载查询树状
- 注意:如果一半的从节点更新到了最新的数据,那么zk就认可这个操作成功了
- zk集群的容错性:只要集群中过半节点出现问题,zk集群就会中断服务
- zk集群节点数有说明要求:
- 任何个数节点(大于3)都可以作为 zk集群 3....-->zk集群
- 建议zk集群的个数用奇数 。因为就容错性来说,增加一个节点为偶数时,并不会增加系统的可靠性,但是硬件资源占了更多
安装zk、
docker安装
blog.csdn.net/lanse_huanx…
linux安装:
apache归档 archive.apache.org/dist/
下载3.6.1版本和孙哥一样
移动到linux上
tar -zxvf apache-zookeeper-3.6.1-bin.tar.gz
解压缩到当前路径
改个名字
2.配置zookeeper
修改名字
mv conf/zoo_sample.cfg conf/zoo.cfg
进入zoo.cfg
vim zoo.cfg
创建数据文件夹
mkdir /root/zookeeper3.6.1/data
- 启动zk服务
cd bin 查看命令
./zkServer.sh start 启动服务
ps -ef |grep java 查看允许进程
jps 直接查看java进程
看到Quo rumPeerMain 说明启动成功了
./zkServer.sh status /stop 查看状态、停止
客户端访问: bin下面 ./zkCli.sh 连接到zk服务器
集群版zk
- ssh登录 :linux远端登录操作的一种手段,对比其他的登录方式(telnet),ssh登录非常安全,可以防止黑客恶意的劫持。
- ssh登录 :在ssh登录过程中,需要提供用户名、密码。
- ssh免密登录 : 在集群环境下,个个节点间可能需要进行相互通信,设置会相互执行一些命令,那么在执行命令时,需要登录到另一台服务上,才可以执行。按照传统的ssh登录需要提供用户名密码,会造成通信的复杂度,设置需要人工干预,繁琐。所以ssh提供了免密登录,降低服务器之间登录通信的难度。所以在集群环境下搭建ssh免密登录是一种常见的运维手段。
- ssh免密登录运行流程
:::info
免密登录 默认使用 ssh root@blue.huy.com 用户名@主机名
ssh 免密登录:
生成公私钥对
1. 生成公私钥对
ssh-keygen -t rsa
公私钥对的放置的位置 ~/.ssh id_rsa id_rsa.pub
2. 公钥发送给远端的主机
ssh-copy-id 用户名@主机名
公钥存储在远端主机 ~/.ssh
authorized_keys
:::