Zookeeper的Centos集群搭建

一、Centos 集群搭建

服务器端口
10.30.1.16218128813881
10.30.1.37218128813881
10.30.1.38218128813881

1、 修改操作系统的/etc/hosts文件,添加IP与主机名映射(这一步可以不修改,中zoo.cfg中直接写ip即可)

# zookeeper clusterservers

10.30.1.16  zk_node1

10.30.1.37  zk_node2

10.30.1.38  zk_node3

2、  下载或上传zookeeper-3.4.6.tar.gz到/home/base/目录:

cd /home/base

wget http://apache.fayea.com/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz

3、  解压zookeeper安装包,并按节点号对zookeeper目录重命名:

$ tar -zxvf zookeeper-3.4.6.tar.gz

服务器1:

$ mv zookeeper-3.4.6 zookeeper

服务器2:

$ mv zookeeper-3.4.6 zookeeper

服务器3:

$ mv zookeeper-3.4.6 zookeeper

4、  在各zookeeper节点目录下创建以下目录(若没有权限请sudo,若文件为权限不够请修改文件权限,sudo chmod a+wx 文件名 或直接sudo chmod 777 文件名

cd /home/base/zookeeper

mkdir data

mkdir logs

5、  将zookeeper/conf目录下的zoo_sample.cfg文件拷贝一份,命名为zoo.cfg:

cp zoo_sample.cfg zoo.cfg

6、  修改zoo.cfg配置文件:

修改三台服务器的zookeeper的配置(/home/base/zookeeper/conf/zoo.cfg)如下:

tickTime=2000

initLimit=10

syncLimit=5

dataDir=/home/base/zookeeper/data

dataLogDir=/home/base/zookeeper/logs

clientPort=2181

server.1=zk_node1:2881:3881

Server.2=zk_node2:2881:3881

Server.3=zk_node3:2881:3881

 参数说明:

tickTime=2000

tickTime这个时间是作为Zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个tickTime时间就会发送一个心跳。

initLimit=10

initLimit这个配置项是用来配置Zookeeper接受客户端(这里所说的客户端不是用户连接Zookeeper服务器的客户端,而是Zookeeper服务器集群中连接到Leader的Follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过10个心跳的时间(也就是tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 10*2000=20 秒。

syncLimit=5

syncLimit这个配置项标识Leader与Follower之间发送消息,请求和应答时间长度,最长不能超过多少个tickTime的时间长度,总的时间长度就是5*2000=10秒。

dataDir=/home/base/zookeeper/data

dataDir顾名思义就是Zookeeper保存数据的目录,默认情况下Zookeeper将写数据的日志文件也保存在这个目录里。

clientPort=2181

clientPort这个端口就是客户端(应用程序)连接Zookeeper服务器的端口,Zookeeper会监听这个端口接受客户端的访问请求。

  server.A=B:C:D

server.1=zk_node1:2881:3881

server.2=zk_node2:2881:3881

server.3=zk_node3:2881:3881

A是一个数字,表示这个是第几号服务器;

B是这个服务器的IP地址(或者是与IP地址做了映射的主机名);

C第一个端口用来集群成员的信息交换,表示这个服务器与集群中的Leader服务器交换信息的端口;

D是在leader挂掉时专门用来进行选举leader所用的端口。

注意:如果是伪集群的配置方式,不同的 Zookeeper 实例通信端口号不能一样,所以要给它们分配不同的端口号。

 

7、 在dataDir=/home/base/zookeeper/data下创建myid文件

$  cd/home/base/zookeeper/data

touch myid

编辑myid文件,并在对应的IP的机器上输入对应的编号:

vi /home/base/zookeeper/data/myid  ## 16服务器值为1

vi /home/base/zookeeper/data/myid  ## 37服务器值为2

vi /home/base/zookeeper/data/myid  ## 38服务器值为3

8、  在防火墙中打开要用到的端口2181、2881、3881

切换到root用户权限,执行以下命令:

chkconfigiptables on

service iptablesstart

编辑/etc/sysconfig/iptables

vi/etc/sysconfig/iptables

如服务器01增加以下3行:

## zookeeper

-A INPUT -m state --state NEW -m tcp -p tcp--dport 2181 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp--dport 2881 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp--dport 3881 -j ACCEPT

重启防火墙:

# service iptables restart

查看防火墙端口状态:

# service iptables status

9、  启动并测试zookeeper(要用base用户启动,不要用root启动的过程中,若遇到文件路径Pid不能创建的情况,并且已经修改了文件的访问权限等。网上有的会叫修改zkServer.sh文件,说原因是增加执行时候还没创建需要while sleep的语句,我修改后不能正常使用,后来在网上重新下载一新版本,ok:

(1)  使用base用户到/home/base/zookeeper/bin目录中执行(启动三台服务器)

$ /home/base/zookeeper/bin/zkServer.sh start

(2)  输入jps命令查看进程:

$ jps

1456QuorumPeerMain

其中,QuorumPeerMain是zookeeper进程,说明启动正常

(3)  查看状态:

$ /home/base/zookeeper/bin/zkServer.sh status

(4)  查看zookeeper服务输出信息:

由于服务信息输出文件在/home/wusc/zookeeper/node-0X/bin/zookeeper.out

$ tail-500f zookeeper.out

10、停止zookeeper进程:

$ zkServer.sh stop

11、配置zookeeper开机使用base用户启动:

编辑三台服务器中的/etc/rc.local文件,加入:

su - base-c '/home/base/zookeeper/bin/zkServer.sh start'

 

第一:Dubbo管控台链接集群

Dubbo管控台可以对注册到zookeeper注册中心的服务或服务消费者进行管理,但管控台是否正常对Dubbo服务没有影响,管控台也不需要高可用,因此可以单节点部署。

IP: 10.30.1.38

部署容器:Tomcat7

端口:8080

1、  下载(或上传)最新版的Tomcat7(apache-tomcat-7.0.57.tar.gz)到/home/base/

2、  解压:

$ tar -zxvf apache-tomcat-7.0.57.tar.gz

$ mv apache-tomcat-7.0.57 dubbo-admin-tomcat


3、  移除/home/base/dubbo-admin-tomcat/webapps目录下的所有文件:

$ rm -rf *

4、  上传Dubbo管理控制台程序dubbo-admin-2.5.3.war

到/home/base/dubbo-admin-tomcat/webapps

5、  解压并把目录命名为ROOT:

$ unzip dubbo-admin-2.5.3.war -d ROOT

把dubbo-admin-2.5.3.war移到/home/base/tools目录备份

$ mv dubbo-admin-2.5.3.war /home/base/tools


6、  配置dubbo.properties:

$ vi ROOT/WEB-INF/dubbo.properties

dubbo.registry.address=zookeeper://10.30.1.16:2181?backup=10.30.1.37:2181,10.30.1.38:2181

dubbo.admin.root.password=Admin@base

dubbo.admin.guest.password=Admin@guest

(以上密码在正式上生产前要修改)

7、  防火墙开启8080端口,用root用户修改/etc/sysconfig/iptables,

# vi /etc/sysconfig/iptables

增加:

## dubbo-admin-tomcat:8080

-A INPUT -m state --state NEW -m tcp -p tcp--dport 8080 -j ACCEPT

重启防火墙:

# service iptables restart

8、  启动Tomat7

$ /home/wusc/dubbo-admin-tomcat/bin/startup.sh

9、  浏览http://192.168.1.81:8080/

 

10、配置部署了Dubbo管控台的Tomcat开机启动:

在虚拟主机中编辑/etc/rc.local文件,加入:

su - base -c '/home/base/dubbo-admin-tomcat/bin/startup.sh'

 三、Zookeeper组成部分

1、zookeeper的特点

1)顺序一致性

客户端的更新顺序与它们被发送的顺序相一致。

2)原子性

更新操作要么成功要么失败,没有第三种结果。

3)单系统镜像

无论客户端连接到哪一个服务器,客户端将看到相同的 ZooKeeper 视图。

4)可靠性

一旦一个更新操作被应用,那么在客户端再次更新它之前,它的值将不会改变。。这个保证将会产生下面两种结果:

1 .如果客户端成功地获得了正确的返回代码,那么说明更新已经成果。如果不能够获得返回代码(由于通信错误、超时等等),那么客户端将不知道更新操作是否生效。

2 .当从故障恢复的时候,任何客户端能够看到的执行成功的更新操作将不会被回滚。

5)实时性

在特定的一段时间内,客户端看到的系统需要被保证是实时的(在十几秒的时间里)。在此时间段内,任何系统的改变将被客户端看到,或者被客户端侦测到。

基于以上特性 ZooKeeper 更高级功能的设计与实现将会变得非常容易,例如: leader 选举、队列以及可撤销锁等机制的实现。

 

2、四字命令及常用命令

1、ruok   提供简单的服务器状态信息,如果服务器正在运行中(该节点可能与集群中的节点断开),任然会返回imok,否则不做任何相应

2、stat   输出关于性能和当前服务器的链接情况

3、srvr   与stat一样,只是少了连接的服务端的信息。

4、dump  列出活动的会话信息及其过期时间,只能在群首节点上使用该命令。

5、conf   列出服务器启动运行时的基本配置信息。

6、envi   列出服务环境的详细信息。

7、mntr  列出比stat更多的服务器统计信息,输出的格式为key<tab>value(群  首服务还将列出额外参数信息).    

8、wchs  列出服务器所跟踪的监视点的简短摘要信息。

9、wchc  列出服务器跟踪监视点的详细信息, 并根据会话进行分组。

10、wchp 列出服务器跟踪监视点的详细信息,并根据被设置监视点的znode节点路  径进行分组。

11、reqs  列出未经过处理的请求。

12、cons  列出所有连接到服务器的客户端的完全的连接 / 会话的详细信息。包括    “接受 / 发送”的包数量、会话 id 、操作延迟、最后的操作执行等等信息。

13、crst  将cons中的统计数计为0。

 

14、客户端常用命令  

ls / [true]          # 查看当前节点数据

ls2 /                # 查看当前节点数据并能看到更新次数等数据

# 指定客户端需要链 接的服务端
zkCli.sh–server 10.30.1.37:2181,10.30.1.38:2181 

zkServer.sh status   # 查看具体节点信息,如是否是leader

# 查看哪个节点被选择作为follower或者leader
echo stat|nc127.0.0.1 2181 

# 是否启动了该Server,回复imok表示启动
echo ruok | nc127.0.0.1 2181 

create /zk “myData”  # 创建一个zk节点 内容为myData ,创建内容可以为”” 

get /zk              # 获取zk节点的内容

set /zk "zsl"        # 设置zk节点的内容

delete /zk           # 删除zk节点

rmr /zk              # 删除zk节点及子节点

quit                 # 退出

15、服务器端常用命令

 

./zkServer.sh start | start-foreground | stop | restart | status

 

3、生产环境配置

上面提到了服务器的集群搭建的一般参数配置,但是在生产环境中是远远不够的,还需要更多的配置信息:

1)、存储配置

preAllocSize : 预分配的事务日志文件大小,以kb为单位

snapCount  : 每次快照的事务数,默认值为100000

Autopurge.snapRetainCount : 进行数据清理时的快照数量和对应的事务日志文件数量,默认值也是最小值为3。

autopurge.purgeInterval : 快照和日志进行垃圾回收的小时数设置,若设置为0则不会知道清理,需要使用zkClearup.sh脚本手动运行。

fsync.warningthreshouldms : 触发警告的存储同步时间阀值,以毫秒为单位默认为1000毫秒。

weight.x=n : 服务器节点选举header的权重值,默认为1。

traceFile : 持续跟踪zookeeper的操作,并将操作记录到跟踪日志中(文件名为traceFile.year.month.day),还需要设置requestTraceFile选项才有效。

 

2)、网络配置

zookeeper.globalOutstandingLimit : 待处理的最大请求数,默认值为1000

maxClientCnxns : 运行每个Ip地址并发的socket的最大数,默认为60个

clientPortAddress : 限制客户端链接到指定的接收信息的地址上,默认情况下,一个zookeeper会监听中所有的网络接口地址上等待客户端的链接。

minSessionTimeout : 最小的会话超时时间,单位为毫秒,

maxSessionTimeout : 最大的会话超时时间,单位为毫秒,默认情况下为tickTime的20倍。

 

3)、集群配置

initLimit : 追随者最初链接到群首的超时值,单位为tickTime的倍数。

syncLimit : 追随者与群首进行sync的超时值,单位为tickTime的倍数。

zookeeper.leaderServers : 群首是否为客户端提供服务,”yes”或”no”

Server.x=[hostname | ip]:port:port:[:observer]

zookeeper.cnxTimeout : 群首选举打开一个新的链接的超时值

electionAlg : 选举算法的配置选项。

 

4)、认证和授权配置

zookeeper.DigestAuthenticationProvider.superDigest :只适用于java系统属性,指定了super用户的密码摘要信息,默认不起作用。

 

5)、非安全配置

zookeeper.forceSync : 控制是否将数据信息同步到存储设备上,”yes”或”no”。

juti.maxbuffer : 只适用于java环境的系统属性

zookeeper.skipACL : 跳过ACL检查

readonlymode.enable : 只适用于java,true or false

 

6)、日志配置

使用conf/log4j.properties配置文件参数

 

7、重配置

   重配置是为了防止在生产环境中由于数据不同步造成的错误。例如:有集群A、B、C三个节点,由于客户端越来越多需要将节点数增加至五个,但是有无网络问题三个节点提示的事务个数不相同,在重启服务的时候A、B重启较慢,C、D、E先启动并且满足法定人的数量,同步了C中的事务数,当A、B链接进来的时候发现数据不同,要求将其多余的进行删除操作,则会造成数据的不正确。若使用重配置则不会造成类似的情况。

在服务器的zoo.cfg中增加

dynamicConfigFile=./dyn.cfg

4、内置鉴权模式

Zookeeper提供了四种内置模式进行ACL处理,分别为OPEN_ACL_UNSAFE、super、digest和ip。可也以扩展org.apache.zookeeper.server.auth.AuthenticationProvider,实现自己的鉴权模式。

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值