datacratic / StarCluster

StarCluster is a utility for creating and managing computing clusters hosted on Amazon's Elastic Compute Cloud (EC2).
http://star.mit.edu/cluster
GNU Lesser General Public License v3.0
37 stars 13 forks source link

efs support for starcluster #51

Closed cariaso closed 8 years ago

cariaso commented 8 years ago

updated plugin is working well for me. Doesn't create the efs from scratch, but will allow you to associate an existing efs with your starcluster. Performance is considerably improved from standard nfs, and the master no longer works hard serving nfs and can instead do regular work.

FinchPowers commented 8 years ago

Thanks for contributing!

cariaso commented 8 years ago

Thanks for keeping an awesome project alive and growing.

vasisht commented 8 years ago

@cariaso Thanks for writing the plugin. I had to make a couple of changes to get the plugin to work. Please see the comments in the code for the pull request.

FinchPowers commented 8 years ago

@vasisht Thanks for the review. I just fixed vanilla_improvements.

vasisht commented 8 years ago

@FinchPowers I've created a new pull request 52 with some more minor fixes that help in a "vanilla" enviroment.

cariaso commented 8 years ago

https://docs.aws.amazon.com/efs/latest/ug/mounting-fs-mount-cmd-general.html suggests the mount should probably be changed to

cmd = 'mount -t nfs4 -ominorversion=1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2 %s:/ %s' % (efs_dns,
                                                          self.mount_point)

and that there should probably be an optional extra param, so that you can chose to replace it with sync and other options as well.

vasisht commented 8 years ago

I've been thinking about how best to set it up within the plugin structure. Maybe we can pass all these additional options as a dict to the EFSplugin. The current plugin architecture doesn't seem to allow for **kwargs style arguments. Any suggestions?

On Tue, Aug 30, 2016 at 2:10 AM, cariaso notifications@github.com wrote:

https://docs.aws.amazon.com/efs/latest/ug/mounting-fs- mount-cmd-general.html suggests the mount should probably be changed to

cmd = 'mount -t nfs4 -ominorversion=1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2 %s:/ %s' % (efs_dns, self.mount_point)

and that there should probably be an optional extra param, so that you can chose to replace it with sync and other options as well.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/datacratic/StarCluster/pull/51#issuecomment-243342384, or mute the thread https://github.com/notifications/unsubscribe-auth/ABq0Ys-gmXYl-_JPYy_U4vFBqNqg1h2Qks5qk8k5gaJpZM4JOLIx .

Pour trouver les limites du possible il faut tenter l'impossible.

cariaso commented 8 years ago

This is what I had in mind

[plugin efs]
SETUP_CLASS = efs.EFSPlugin
mount_point = /mnt/myefs
fs_id = fs-1234abcd

gets a well chosen default

or

[plugin efs]
SETUP_CLASS = efs.EFSPlugin
mount_point = /mnt/myefs
mount_options = minorversion=2,rsize=12345678,wsize=1234,hard,timeo=123,retrans=4
fs_id = fs-1234abcd

gets whatever it explicitly requests.

And code like this does the job

if mount_options is None:
    mount_options = 'minorversion=1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2'

cmd = 'mount -t nfs4 -o%s %s:/ %s' % (mount_options, efs_dns, self.mount_point)

but would probably be stored in a self.mount_options

vasisht commented 8 years ago

I think your approach is more straightforward to parse a string as options rather than use a dict and leave it to the user to get the options right.

On Wed, Sep 14, 2016 at 12:09 PM, cariaso notifications@github.com wrote:

This is what I had in mind

[plugin efs] SETUP_CLASS = efs.EFSPlugin mount_point = /mnt/myefs fs_id = fs-1234abcd

or

[plugin efs] SETUP_CLASS = efs.EFSPlugin mount_point = /mnt/myefs mount_options = minorversion=2,rsize=12345678,wsize=1234,hard,timeo=123,retrans=4 fs_id = fs-1234abcd

if mount_options is None: mount_options = 'minorversion=1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2'

cmd = 'mount -t nfs4 -o%s %s:/ %s' % (mount_options, efs_dns, self.mount_point)

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/datacratic/StarCluster/pull/51#issuecomment-247065873, or mute the thread https://github.com/notifications/unsubscribe-auth/ABq0YmK-_A3ILxez8gJgFV5xQvHNYE9Bks5qqBxPgaJpZM4JOLIx .

Pour trouver les limites du possible il faut tenter l'impossible.

vasisht commented 8 years ago

I submitted a pull request https://github.com/datacratic/StarCluster/pull/60 with the mount_options as an additional option. I've tested it out in my enviroment and it does seem to have better I/O performance.

On Wed, Sep 14, 2016 at 1:18 PM, Vasisht Tadigotla vasishtreddy@gmail.com wrote:

I think your approach is more straightforward to parse a string as options rather than use a dict and leave it to the user to get the options right.

On Wed, Sep 14, 2016 at 12:09 PM, cariaso notifications@github.com wrote:

This is what I had in mind

[plugin efs] SETUP_CLASS = efs.EFSPlugin mount_point = /mnt/myefs fs_id = fs-1234abcd

or

[plugin efs] SETUP_CLASS = efs.EFSPlugin mount_point = /mnt/myefs mount_options = minorversion=2,rsize=12345678,wsize=1234,hard,timeo=123,retrans=4 fs_id = fs-1234abcd

if mount_options is None: mount_options = 'minorversion=1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2'

cmd = 'mount -t nfs4 -o%s %s:/ %s' % (mount_options, efs_dns, self.mount_point)

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/datacratic/StarCluster/pull/51#issuecomment-247065873, or mute the thread https://github.com/notifications/unsubscribe-auth/ABq0YmK-_A3ILxez8gJgFV5xQvHNYE9Bks5qqBxPgaJpZM4JOLIx .

Pour trouver les limites du possible il faut tenter l'impossible.

Pour trouver les limites du possible il faut tenter l'impossible.