I don't think that there is any documentation around that, as this is not a really explored area.
I'll try to work an example. Till then you could setup your zookeeper ensemble manually and have fabric join it.
Hmm, never thought about working the problem the other way (having fabric join an existing ensemble), that might work just as well or better. How can you configure fabric to join/use an existing ensemble rather than using it's own?
Using the command fabric:join and passing the zookeeper url as an argument you can have a container join an existing fabric.
In earlier releases of fabric it was quite trivial to join any zookeeper cluster. Nowdays its more complex. You could try though something like that:
In a fresh container:
>fabric:join --zookeeper-password <anything> <url to zookeeper e.g. somehost:2181>
At this point you will be connected to zookeeper but no profiles or any kind of configuration will be available to you. So you'll have to create them manually.
1. Add The ensemble configuration entries
>zk:create -r zk:create -r /fabric/configs/ensemble
>zk:set zk:create -r /fabric/configs/ensemble 0000
>zk:create zk:create -r /fabric/configs/url
>zk:set /fabric/configs/ensemble/ulr <zookeeper url>
>zk:create -r /fabric/configs/ensemble/0000
>zk:set zk:create -r /fabric/configs/ensemble ""
>zk:create zk:create -r /fabric/configs/ensemble/profiles
2. Import the profiles
So you'll need to load the profiles:
You may want to also add entries for authentication under /fabric/authentication or remove the fabric-jaas feature from your profiles if you don't want to use zookeeper backed jaas realm.
Note: This setup is experimental and not recommended for production.
Yeah, I got the feeling like I'm going into somewhat "uncharted" waters here. The above configuration is less than ideal, having to manually configure things that fabric assumes should be there seems brittle/dependant on fabric's configuration. I'm also guessing this setup would void the use of normal ensemble:add/remove commands as well (since fabric doesn't have any control of zookeeper). Thinking at a higher level, maybe I started the question a little too fine grained - what we're trying to do is use the fabric registry zookeeper to store some of our own data (integration information for applications like object translations, etc...). Along with this was the idea was to add zookeeper observers on the application servers (or embedded in the applications themselves) for faster access to the data. I guess a better first question would be: is re-using the fabric registry zookeeper to store our own data recommended/supported and if so are there any best-practices about this?
Reusing the fabric managed zookeeper should be possible.
Fabric stores all its configuration under the /fabric znode, so the rest of the tree is available for you to use.
Ok, thanks. After tinkering around for a little bit, I have two questions:
1) After creating some new data in the zookeeper tree, if I use any of the fabric ensemble edit commands (add/remove) any non-fabric data is lost. Is this something that I can/should open a bug against?
2) Back to my intial question, it seems possible to find a way to add standalone zookeeper servers into the ensemble but it sounds like this is an untested/experimental configuration. Is supporting these kinds of configurations on a roadmap for a future release?
1) The fabric:ensemble-add / ensemble-remove commands should only be used when setting up your fabric and its not a good idea to use them once you have your cluster running. So I'd suggest to setup your ensemble first and then add any extra data.
2) The original idea was to be able to do it. And it is doeable, but requires quite a few manual steps. If there's interest in this kind of setups we could work on minimizing the steps for setting it up.
That makes sense. Thanks for your help on this.
So, I was poking around the zookeeper jira and ran into this: https://issues.apache.org/jira/browse/ZOOKEEPER-107. It looks like zookeeper will be supporting elastic ensemble configuration at 3.5.0. Is it planned to pick this version up in the next Fabric/Fuse release (if zk is released before then) and if so would there be plans to rework the fabric:ensemble commands to use this new funcationality?
This is a really interesting feature which is greatly anticipated.
It could help Fabric in a lot of different ways, so the intention is to explore the possibilities of reusing this.