Answers below:On Wednesday, May 11, 2011 at 5:15 PM, Alois Cochard wrote:
Hello all,
(would like to have your advice on this kimchy, I wonder what are your
recommendation for big big indices on HPC infrastructure)
I'm actually setting an ES cluster for QA, and moving from my tiny
developer machine to the HPC infrastructure.
I have at disposal 2 machines (or more for the future) with each:
- 32 cores (8x4)
- 32GB RAM
- File System: GPFShttp://en.wikipedia.org/wiki/IBM_General_Parallel_File_System
I would say go with fast local disks, simpler and cheaper.
For the moment I have 20million document in the first index and
something like 100'000 in the second.
The first index ('resource') could become really, really huge in the
future (billions...).
First topology I've setup:
- 8 ES Nodes on each server (default RAM)
8 nodes won't buy you much. I would go with 1 node and ~16gb memory allocated to ES (min and max).> - 16 shards per index and 1 replicate
For the index that will get really large, that can be a good number (16 shards). You need to do some capacity planning to see how much a shard "costs" in your config.
I would recommend local gateway. As mentioned in another answer to this mail, the shared FS does cost in more bandwidth used.
Why I choosed to run multiple ES node on a single server:
ES strives to be a good GC citizen. You can run 2 nodes each with 8gb, but I don't think you will need to.> - Parallelize write on the FS (think at GPFS as having each folder on
a separate disk)
You can have the local data location stored on GPFS, if its really faster then local (possibly RAIDed) disk.
After discussing with lukasvlcek, I've come to this second solution:
- 1 Node on each server
- Gateway: Shared FS
See my point above regarding shared FS. I would say go with local gateway.> - Store: Memory (outside of the heap to prevent GC)
I would still use the file system storage, you don't have enough mem to store teh index fully in memory and it won't buy you that much with file system caching.> - Huge number of shards per index (to be able to add nodes in the
future)
You will need to do some capacity planning. A 16 shard index means that the index can grow up to 16 machines size, which is considerable. Another option is to check if the large index can be further partitioned to several indices that you can add on demand.> - No replica (no need if shared FS?)
Replicas are needed even with shared gateway for fast failover.
So my questions are:
- Does it make sense any other ideas ?
- Can ES do heavy parallel writing on the FS (without running multiple
node on same machine) ?
Yes, a single node is parallel writing to the FS. More shards on a given node can give it a boost if its a beefy machine.> - How many max memory can ES handle (with the outside heap store) ?
Indices are stored outside the heap, and thats up to the memory the machine has. But, I recommend using the FS to store the index. If you have enough mem, you can always mmap it.> - How many shards did you recommend ?
For the large index, 16 sounds like a good number, but without capacity planning, its hard to tell. For the smaller index, you can have much less.
Thanks a lot guys for your help !
Alois