[ https://issues.apache.org/jira/browse/IGNITE-24035?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Stanislav Lukyanov updated IGNITE-24035: ---------------------------------------- Description: h1. Motivation Imagine you are trying to launch an Ignite node and play with it. You've downloaded the distribution and installed it with standard packaging tools. Then you launched the node and entered the CLI. What's next? Exploring the CLI you understand that the node you've launched is not initialized. You run {{cluster init}} command and see the following: {code:java} [node1]> cluster init Missing required options: '--name=<clusterName>', '--metastorage-group=<node name>' USAGE cluster init [OPTIONS] DESCRIPTION Initializes an Ignite cluster OPTIONS * - required option * --name=<clusterName> Human-readable name of the cluster * --metastorage-group=<node name>[,<node name>...] Metastorage group nodes (use comma-separated list of node names '--metastorage-group node1, node2' to specify more than one node) that will host the Meta Storage. If the --cluster-management-group option is omitted, the same nodes will also host the Cluster Management Group. --cluster-management-group=<node name>[,<node name>...] Names of nodes (use comma-separated list of node names '--cluster-management-group node1, node2' to specify more than one node) that will host the Cluster Management Group. If omitted, then --metastorage-group values will also supply the nodes for the Cluster Management Group. --config=<config> Cluster configuration that will be applied during the cluster initialization --config-files=<file path>[,<file path>...] Path to cluster configuration files (use comma-separated list of paths '--config-files path1, path2' to specify more than one file) --url=<clusterUrl> URL of cluster endpoint. It can be any node URL.If not set, then the default URL from the profile settings will be used -h, --help Show help for the specified command -v, --verbose Show additional information: logs, REST calls. This flag is useful for debugging. Specify multiple options to increase verbosity for REST calls. Single option shows request and response, second option (-vv) shows headers, third one (-vvv) shows body {code} Run: {{cluster init --name=i_want_it_work --metastorage-group=node1}} Here is the quetion: what is the "Meta Storage" and why do we need it? This is something about metadata, ok. But what metadata? Why I, as a user, should care about it? Should the metastorage group be somehow isolated from others? Should it be installed on the hardware with special requirements? So many questions. What would be much better is to have a simple command that will initialize the cluster with default settings (especialy for the case with one node where the choice is obvious). Run: {{cluster init --name=i_want_it_work}} should be enough. Even --name could be optional. h1. Solution Make MS and CMG nodes parameters optional. If both are provided, the behavior is the same as now. If only one is provided, the other one uses the same value. Note: this is different from the current behavior where CMG can default to MS but MS cannot default to CMG because MS isn't optiona. If neither is provided, both are set to the same list of nodes picked automatically. The automatic MS/CMG node choice is as follows: * If cluster size <= 3, all nodes are picked. * If cluster size = 4, only 3 nodes are picked. This is to avoid an even number of nodes which may create split brain issues. * If cluster size is >= 5, only 5 nodes are picked. We don't pick more nodes because it may create unnecessary performance overhead while 5 MS/CMG create sufficient failure tolerance in most use cases. The nodes are always picked in alphabetical order of node names. This is to ensure that, given the same set of node names, we'll always initialize the same way. It provides predictability of automated environments such as k8s. h1. What to Do # Make MS and CMG lists optional on init in the internal service. # Make MS and CMG lists optional in the APIs: REST, CLI, Embedded API. # Update Getting Started, docs, and examples to not include MS and CMG specification. was: Imagine you are trying to launch an Ignite node and play with it. You've downloaded the distribution and installed it with standard packaging tools. Then you launched the node and entered the CLI. What's next? Exploring the CLI you understand that the node you've launched is not initialized. You run {{cluster init}} command and see the following: {code:java} [node1]> cluster init Missing required options: '--name=<clusterName>', '--metastorage-group=<node name>' USAGE cluster init [OPTIONS] DESCRIPTION Initializes an Ignite cluster OPTIONS * - required option * --name=<clusterName> Human-readable name of the cluster * --metastorage-group=<node name>[,<node name>...] Metastorage group nodes (use comma-separated list of node names '--metastorage-group node1, node2' to specify more than one node) that will host the Meta Storage. If the --cluster-management-group option is omitted, the same nodes will also host the Cluster Management Group. --cluster-management-group=<node name>[,<node name>...] Names of nodes (use comma-separated list of node names '--cluster-management-group node1, node2' to specify more than one node) that will host the Cluster Management Group. If omitted, then --metastorage-group values will also supply the nodes for the Cluster Management Group. --config=<config> Cluster configuration that will be applied during the cluster initialization --config-files=<file path>[,<file path>...] Path to cluster configuration files (use comma-separated list of paths '--config-files path1, path2' to specify more than one file) --url=<clusterUrl> URL of cluster endpoint. It can be any node URL.If not set, then the default URL from the profile settings will be used -h, --help Show help for the specified command -v, --verbose Show additional information: logs, REST calls. This flag is useful for debugging. Specify multiple options to increase verbosity for REST calls. Single option shows request and response, second option (-vv) shows headers, third one (-vvv) shows body {code} Run: {{cluster init --name=i_want_it_work --metastorage-group=node1}} Here is the quetion: what is the "Meta Storage" and why do we need it? This is something about metadata, ok. But what metadata? Why I, as a user, should care about it? Should the metastorage group be somehow isolated from others? Should it be installed on the hardware with special requirements? So many questions. What would be much better is to have a simple command that will initialize the cluster with default settings (especialy for the case with one node where the choice is obvious). Run: {{cluster init --name=i_want_it_work}} should be enough. Even --name could be optional. > Improvement proposal: Hide CMG and Metastore Group from cluster init operation > ------------------------------------------------------------------------------ > > Key: IGNITE-24035 > URL: https://issues.apache.org/jira/browse/IGNITE-24035 > Project: Ignite > Issue Type: Improvement > Reporter: Aleksandr > Assignee: Stanislav Lukyanov > Priority: Major > Labels: ignite-3 > > h1. Motivation > Imagine you are trying to launch an Ignite node and play with it. You've > downloaded the distribution and installed it with standard packaging tools. > Then you launched the node and entered the CLI. What's next? > Exploring the CLI you understand that the node you've launched is > not initialized. You run {{cluster init}} command and see the following: > {code:java} > [node1]> cluster init > Missing required options: '--name=<clusterName>', '--metastorage-group=<node > name>' > USAGE > cluster init [OPTIONS] > DESCRIPTION > Initializes an Ignite cluster > OPTIONS * - required option > * --name=<clusterName> Human-readable name of the cluster > * --metastorage-group=<node name>[,<node name>...] > Metastorage group nodes (use comma-separated > list of node names '--metastorage-group node1, node2' to specify > more than one node) that will host the Meta > Storage. If the --cluster-management-group option is omitted, the > same nodes will also host the Cluster > Management Group. > --cluster-management-group=<node name>[,<node name>...] > Names of nodes (use comma-separated list of node > names '--cluster-management-group node1, node2' to specify more > than one node) that will host the Cluster > Management Group. If omitted, then --metastorage-group values will > also supply the nodes for the Cluster > Management Group. > --config=<config> Cluster configuration that will be applied > during the cluster initialization > --config-files=<file path>[,<file path>...] > Path to cluster configuration files (use > comma-separated list of paths '--config-files path1, path2' to specify > more than one file) > --url=<clusterUrl> URL of cluster endpoint. It can be any node > URL.If not set, then the default URL from the profile settings will > be used > -h, --help Show help for the specified command > -v, --verbose Show additional information: logs, REST calls. > This flag is useful for debugging. Specify multiple options to > increase verbosity for REST calls. Single > option shows request and response, second option (-vv) shows headers, > third one (-vvv) shows body > {code} > Run: {{cluster init --name=i_want_it_work --metastorage-group=node1}} > Here is the quetion: what is the "Meta Storage" and why do we need it? This > is something about metadata, ok. > But what metadata? Why I, as a user, should care about it? Should the > metastorage group be somehow isolated from > others? Should it be installed on the hardware with special requirements? So > many questions. > What would be much better is to have a simple command that will initialize > the cluster with default settings > (especialy for the case with one node where the choice is obvious). > Run: {{cluster init --name=i_want_it_work}} should be enough. Even --name > could be optional. > h1. Solution > Make MS and CMG nodes parameters optional. > If both are provided, the behavior is the same as now. > If only one is provided, the other one uses the same value. Note: this is > different from the current behavior where CMG can default to MS but MS cannot > default to CMG because MS isn't optiona. > If neither is provided, both are set to the same list of nodes picked > automatically. > The automatic MS/CMG node choice is as follows: > * If cluster size <= 3, all nodes are picked. > * If cluster size = 4, only 3 nodes are picked. This is to avoid an even > number of nodes which may create split brain issues. > * If cluster size is >= 5, only 5 nodes are picked. We don't pick more nodes > because it may create unnecessary performance overhead while 5 MS/CMG create > sufficient failure tolerance in most use cases. > The nodes are always picked in alphabetical order of node names. This is to > ensure that, given the same set of node names, we'll always initialize the > same way. It provides predictability of automated environments such as k8s. > h1. What to Do > # Make MS and CMG lists optional on init in the internal service. > # Make MS and CMG lists optional in the APIs: REST, CLI, Embedded API. > # Update Getting Started, docs, and examples to not include MS and CMG > specification. -- This message was sent by Atlassian Jira (v8.20.10#820010)