Android 疯狂造轮子 常用工具类 直接拿来用!
Posted 一叶知秋V
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 疯狂造轮子 常用工具类 直接拿来用!相关的知识,希望对你有一定的参考价值。
Apache ZooKeeper 是一个分布式的、开源的程序协调服务,是 Hadoop 项目下的一个子项目。ZooKeeper 主要应用场景包括集群管理、配置中心、分布式锁、注册中心等。实际项目中,为了保证高可用,ZooKeeper 都是以分布式集群的方式进行安装的,至少需要三个节点。
ZooKeeper 包含主从节点以及心跳机制(选举模式),假设 master 节点挂了之后,ZooKeeper 会通过选举模式在 slave 节点选举出一个新的 master。
这里 Linux 选择 CentOS 7.2。
1.ZooKeeper安装
# wget -P /usr/local http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.13/zookeeper-3.4.13.tar.gz
# cd /usr/local
# tar -zxvf zookeeper-3.4.13.tar.gz
# vim /etc/rc.d/rc.local //配置开启自启动
追加如下配置即可(oracle jdk 对应的 JAVA_HOME 为 export JAVA_HOME=/usr/java/jdk):
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.171-8.b10.el7_5.x86_64
/usr/local/zookeeper-3.4.13/bin/zkServer.sh start
我们在三台不同的服务器上各部署一个 ZooKeeper 进程,以构成一个 ZooKeeper 集群。三个 ZooKeeper 进程均使用相同的 zoo.cfg 配置:
# cd /usr/local/zookeeper-3.4.13/conf
# mkdir -p /export/data/zookeeper //递归创建目录
# mkdir -p /export/logs/zookeeper
# cp zoo_sample.cfg zoo.cfg //拷贝配置文件
# vim zoo.cfg
修改配置如下:
# 配置存储快照文件的目录
dataDir=/export/data/zookeeper
# 配置存储日志文件的目录
dataLogDir=/export/logs/zookeeper
# zk服务进程监听的TCP端口
clientPort=2181
# 2888:ZooKeeper服务之间通信的端口,3888:ZooKeeper与其他应用程序通信的端口
# server.1:表示这是第几号服务器
server.1=192.168.20.11:2888:3888
server.2=192.168.20.12:2888:3888
server.3=192.168.20.13:2888:3888
然后在三台服务器 dataDir 目录下,分别创建一个 myid 文件,其内容分别为1,2,3。然后分别在这三台机器上启动 ZooKeeper 进程,这样我们便将 ZooKeeper 集群启动了起来。如下:
# cd /export/data/zookeeper
# echo 1 >>myid //创建myid文件并写入1
# cd /usr/local/zookeeper-3.4.13/bin
# ./zkServer.sh start //后台启动ZooKeeper
还有一些其他命令如下:
# ./zkServer.sh restart //重启ZooKeeper
# ./zkServer.sh stop //关闭ZooKeeper
# ./zkServer.sh status //查看服务状态,其中Mode参数:leader表示master节点,follower表示slave节点
# ./zkServer.sh start-foreground //前台启动
2.ZooKeeper运维
1.zk目录结构
目录 | 说明 |
---|---|
zookeeper/bin | 主要的一些运行命令 |
zookeeper/conf | 存放配置文件 |
zookeeper/contrib | 附加的一些功能 |
zookeeper/dist-maven | mvn 编译后的目录 |
zookeeper/docs | 文档 |
zookeeper/lib | 需要依赖的 jar 包 |
zookeeper/recipes | 案例 demo 代码 |
zookeeper/src | 源码 |
2.zoo_sample.cfg配置文件
配置项 | 默认值 | 说明 |
---|---|---|
tickTime | 2000 | 用于计算的时间单元,单位毫秒,比如 session 超时: N * tickTime |
initLimit | 10 | 用于集群,允许从节点连接并同步到 master 节点的初始化连接时间,以 tickTime 的倍数来表示 |
syncLimit | 5 | 用于集群,master 主节点与从节点之间发送消息,请求和应答时间长度(心跳机制) |
dataDir | 必须配置,配置存储快照文件的目录 | |
dataLogDir | 配置存储日志文件的目录,如果没有配置则会和 dataDir 共用同一个目录 | |
clientPort | 2181 | zk 服务进程监听的TCP端口 |
3.基于Linux的zk客户端命令行
# cd /usr/local/zookeeper/bin
# ./zkCli.sh //打开zk的客户端进入命令行后台
[zk: localhost:2181(CONNECTED) 0] ls /
[zookeeper]
[zk: localhost:2181(CONNECTED) 0] stat /
cZxid = 0x0 //表示创建之后 zk 为此节点分配的 id
ctime = Thu Jan 01 08:00:00 HKT 1970 //创建时间
mZxid = 0x0 //表示修改后 zk 分配的id
mtime = Thu Jan 01 08:00:00 HKT 1970 //修改时间
pZxid = 0xd //表示子节点的 id,
cversion = 5 //表示子节点的版本号,
dataVersion = 0 //表示当前节点数据的版本号,
aclVersion = 0 //表示当前节点权限的版本号,
ephemeralOwner = 0x0 //表示与该节点绑定的session id,
dataLength = 0 //表示数据长度,
numChildren = 1 //表示子节点有几个
基于 Linux 的 zk 客户端命令:
命令 | 说明 |
---|---|
help | 打开帮助 |
ls path [watch] | 例如 ls /configCenter,表示显示 /configCenter 下的节点;可选参数 [watch] 表示当前命令可以设置 watcher 事件,例如 ls /configCenter watch,表示为 /config 设置 watcher 事件 |
ls2 path [watch] | 例如 ls2 /configCenter,比 ls 命令多输出一些状态信息,等价于 ls 命令 + stat 命令 |
get path [watch] | 例如 get /configCenter,把当前指定节点的数据取出来,状态信息也会输出 |
stat path [watch] | 例如 stat /configCenter,输出状态信息 |
create [-s] [-e] path data acl | 例如 create -s /configCenter/search 0,表示创建 /configCenter/search 节点,节点数据为 0 |
set path data [version] | version 参数如果设置的话,必须设置为指定节点最新的 version 才会去更新,起到乐观锁的效果 |
delete path [version] | version 参数如果设置的话,必须设置为指定节点最新的 version 才会去删除,起到乐观锁的效果 |
getAcl path | 获取某个节点的acl权限信息 |
setAcl path acl | 设置某个节点的acl权限信息,例如 setAcl /configCenter world:anyone:crwa |
addauth scheme auth | 输入认证授权信息,注册时输入明文密码 (登录),但是在 zk 的系统中,密码是以加密的形式存在的 |
4.zk四字命令
zk 可以通过它自身提供的简写命令来和服务器进行交互。
# yum install nc //安装nc命令
zk 四字命令 (Four Letter Words):echo [commond] | nc [ip] [port]
# echo stat | nc localhost 2181 //查看zk的状态信息,以及是否mode(集群还是单机)
Zookeeper version:
Clients:
Latency min/avg/max: 0/0/1
Received: 7
Sent: 6
Connections: 1
Outstanding: 0
Zxid: 0x1da
Mode: standalone
Node count: 9
# echo ruok | nc localhost 2181 //查看当前zkServer是否启动,返回imok
imok
# echo dump | nc localhost 2181 //列出未经处理的会话和临时节点
SessionTracker dump:
Session Sets (0):
ephemeral nodes dump:
Sessions with Ephemerals (0):
# echo conf | nc localhost 2181 //查看服务器配置
clientPort=2181
dataDir=
dataLogDir=
tickTime=2000
maxClientCnxns=60
minSessionTimeout=4000
maxSessionTimeout=40000
serverId=0
# echo cons | nc localhost 2181 //展示连接到服务器的客户端信息
/0:0:0:0:0:0:0:1:58070[0](queued=0,recved=1,sent=0)
# echo envi | nc localhost 2181 //查看环境变量
Environment:
host.name=
java.version= ...
# echo mntr | nc localhost 2181 //监控zk健康信息
zk_version
zk_avg_latency 1
zk_max_latency 28 ...
# echo wchs | nc localhost 2181 //展示watch的信息
1 connections watching 1 paths
Total watches:1
# echo wchc | nc localhost 2181 //session与watch信息
# echo wchp | nc localhost 2181 //path与watch信息
5.zk迁移数据
找到原先配置中的数据保存地址,可以在 /usr/local/zookeeper-3.4.13/conf/zoo.cfg 配置文件中查看,例如 dataDir=/data/zookeeper/data
# cd /data/zookeeper/data/version-2
# ls -alh
找到最新的日志文件和快照文件,例如 log.ab0002cfd1 和 snapshot.1f0006b6eb,日志文件存放 ZooKeeper 全部数据记录 ,快照文件则是内存增量文件。
拷贝数据到新的 ZooKeeper 集群节点下,重启 ZooKeeper 服务,查看节点数据是否正常:
# scp log.ab0002cfd1 snapshot.1f0006b6eb root@192.168.90.200:/data/zookeeper2
以上是关于Android 疯狂造轮子 常用工具类 直接拿来用!的主要内容,如果未能解决你的问题,请参考以下文章
JSchException: Algorithm negotiation fail问题解决之路
别再重复造轮子了,推荐使用 Google Guava 开源工具类库,真心强大!