CentOS6.3搭建ZooKeeper伪集群
1. 将zookeeper安装包移动至/home, 解压后改名为zookeeper
相关命令
# 解压 tar –zxvf zookeeper-3.4.6.tar.gz # 重命名 mv zookeeper-3.4.6 zookeeper
2. 进入zookeeper/conf/目录下,将改目录下的zoo_sample.cfg配置文件拷贝4份,依次为zoo.cfg zoo1.cfg zoo2.cfg zoo3.cfg
zoo.cfg为备份文件, 我们将使用zoo1.cfg zoo2.cfg zoo3.cfg来搭建ZooKeeper伪集群
3. 使用vim编辑zoo1.cfg zoo2.cfg zoo3.cfg
zoo1.cfg修改内容如下:
zoo2.cfg修改内容如下:
zoo3.cfg修改内容如下:
4.dataDir目录开始不存在,需要手动创建,并在各data文件下创建名为myid的文件,文件内容对应服务器编号
分别创建下面三个文件
/home/tmp/zookeeper/server1/data/myid /home/tmp/zookeeper/server2/data/myid /home/tmp/zookeeper/server3/data/myid
三个文件内容分别为
echo 1 > /home/tmp/zookeeper/server1/data/myid echo 2 > /home/tmp/zookeeper/server2/data/myid echo 3 > /home/tmp/zookeeper/server3/data/myid
5. 分别启动三个zookeeper
bin/zkServer.sh start zoo1.cfg bin/zkServer.sh start zoo2.cfg bin/zkServer.sh start zoo3.cfg
6. 查看三个zookeeper状态
bin/zkServer.sh status zoo1.cfg bin/zkServer.sh status zoo2.cfg bin/zkServer.sh status zoo3.cfg
三个zookeeper的关系如图所示
7. 测试连通性
测试server2(leader,其他服务同理)是否连通
./zkCli.sh -server 127.0.0.1:2182
效果如图所示:
8. 使用Java客户端连接Zookeeper
1 /** 2 * Created by IntelliJ IDEA. 3 * 4 * @Auther: ShaoHsiung 5 * @Date: 2018/9/8 21:34 6 * @Title: 7 * @Description: Java客户端无法连接Zookeeper是因为Linux上的防火墙没有关闭 8 */ 9 public class ZookeeperDemo { 10 11 private static final String CONNECTION_STRING = "192.168.131.25:2181"; 12 private static final int SESSION_TIMEOUT = 5000; 13 14 private static CountDownLatch latch = new CountDownLatch(1); 15 16 public static void main(String[] args) throws IOException, InterruptedException { 17 ZooKeeper zk = new ZooKeeper(CONNECTION_STRING, SESSION_TIMEOUT, new Watcher() { 18 public void process(WatchedEvent watchedEvent) { 19 if (watchedEvent.getState() == Event.KeeperState.SyncConnected) { 20 latch.countDown(); 21 } 22 } 23 }); 24 latch.await(); 25 26 // 获取Zookeeper客户端 27 System.out.println(zk); 28 } 29 }
9. 执行效果
备注: 需要先关闭Linux上的防火墙, 否则Java客户端无法连接到Linux上的ZooKeeper
附上Linux临时操作防火墙命令
即时生效,重启后失效
开启:service iptables start
关闭:service iptables stop