1.下载(本次测试环境是3.4.6的版本)
http://mirrors.hust.edu.cn/apache/zookeeper/zookeeper-3.4.6/
zoo1.cfg:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=E:\\tmp\\zookeeper\\data\\1
dataLogDir=E:\\tmp\\zookeeper\\log\\1
clientPort=2181
server.1=127.0.0.1:2887:3887
server.2=127.0.0.1:2888:3888
server.3=127.0.0.1:2889:3889
zoo2.cfg:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=E:\\tmp\\zookeeper\\data\\2
dataLogDir=E:\\tmp\\zookeeper\\log\\2
clientPort=2182
server.1=127.0.0.1:2887:3887
server.2=127.0.0.1:2888:3888
server.3=127.0.0.1:2889:3889
zoo3.cfg:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=E:\\tmp\\zookeeper\\data\\3
dataLogDir=E:\\tmp\\zookeeper\\log\\3
clientPort=2183
server.1=127.0.0.1:2887:3887
server.2=127.0.0.1:2888:3888
server.3=127.0.0.1:2889:3889
5.添加data和log文件夹
启动三个server文件后,用jps查看,会看到三个启动的java主进程。
也可输入:netstat -ano|findstr "2181" 查看端口是否监听
2015-10-09 11:20:08,162 [myid:1] - WARN [QuorumPeer[myid=1]/0:0:0:0:0:0:0:0:218
1:QuorumCnxManager@382] - Cannot open channel to 3 at election address localhost
/192.168.132.16:3889
java.net.ConnectException: Connection refused: connect
at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketI
mpl.java:85)
这样在一台机器上搭建了zookeeper伪集群,并且启动成功。
8.C#客户端代码
代码下载参考这位博主的好文:http://www.cnblogs.com/shanyou/p/3221990.html
class Watcher : IWatcher
{
public void Process(WatchedEvent @event)
{
//if (@event.Type == EventType.NodeDataChanged)
//{
Console.WriteLine("已经触发了" + @event.Type + "事件!");
//}
}
}
static void Main(string[] args)
{
//创建一个Zookeeper实例,第一个参数为目标服务器地址和端口,第二个参数为Session超时时间,第三个为节点变化时的回调方法
using (ZooKeeper zk = new ZooKeeper("127.0.0.1:2181", new TimeSpan(0, 0, 0, 50000), new Watcher()))
{
//var stat = zk.Exists("/root",true);
////创建一个节点root,数据是mydata,不进行ACL权限控制,节点为永久性的(即客户端shutdown了也不会消失)
//zk.Create("/root", "mydata".GetBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.Persistent);
//在root下面创建一个childone znode,数据为childone,不进行ACL权限控制,节点为永久性的
//zk.Create("/root/childone", "childone".GetBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.Persistent);
//取得/root节点下的子节点名称,返回List
List liststr = zk.GetChildren("/root", true);
//取得/root/childone节点下的数据,返回byte[]
//zk.GetData("/root/childone", true, null);
//修改节点/root/childone下的数据,第三个参数为版本,如果是-1,那会无视被修改的数据版本,直接改掉
//zk.SetData("/root/childone", "childonemodify".GetBytes(), -1);
//删除/root/childone这个节点,第二个参数为版本,-1的话直接删除,无视版本
//zk.Delete("/root/childone", -1);
}
Console.Read();
}
9.linux下环境搭建
参考这位博主的好文:http://blog.csdn.net/eric_sunah/article/details/43969603
其中,下载连接修改一下即可:
wget http://mirrors.hust.edu.cn/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz
10.遗留问题
还没有用zookeeper搭建生产环境,计划是用thrift做服务,zookeeper服务治理,可用nginx做负载均衡,还没去做这件事。后续补上