This paper mainly introduces the installation and use of consul. The software versions used in this paper are RHEL 6.6 and Consul 1.11.1.
1. Stand alone installation
1.1. Download Consul and unzip it
https://www.consul.io/downloads
unzip consul_1.11.1_linux_amd64.zip
1.2 startup
./consul agent -server -ui -bootstrap-expect=1 -data-dir=./data -datacenter=dc1 -node=node10 -client=0.0.0.0 -bind=10.40.96.10
Parameter Description:
-Server: start as server; Without this parameter, the default is client
-UI: you can access the UI interface
-Bootstrap expect: the expected number of nodes in the cluster. Only when the number of nodes reaches this value will leader s be elected
-Data dir: directory where data is stored
-datacenter: the name of the data center. The default is dc1
-Node: the name of the node
-Client: the binding address of the client accessing Consul; The default is 127.0.0.1, which can only be accessed locally
-bind: the address of the cluster internal communication binding. The default value is 0.0.0.0
1.3 console
http://10.40.96.10:8500/
2. Cluster installation
2.1 planning
Machine | agent type | Data center name |
10.40.96.10 | server | dc1 |
10.40.96.11 | server | dc1 |
10.40.96.12 | server | dc1 |
2.2 startup
Here, start each node in turn through the configuration file (start 10.40.96.10 first, and then start the other two nodes):
nohup ./consul agent -config-file=./agent.hcl &
10.40.96.10 agent hcl:
server = true, ui_config = { enabled = true }, bootstrap_expect = 3, data_dir = "./data", datacenter = "dc1", node_name = "node10", client_addr = "0.0.0.0", bind_addr = "10.40.96.10"
10.40.96.11 agent hcl:
server = true, ui_config = { enabled = true }, bootstrap_expect = 3, data_dir = "./data", datacenter = "dc1", node_name = "node11", client_addr = "0.0.0.0", bind_addr = "10.40.96.11" start_join = ["10.40.96.10"],
retry_join = ["10.40.96.10"],
10.40.96.12 agent hcl:
server = true, ui_config = { enabled = true }, bootstrap_expect = 3, data_dir = "./data", datacenter = "dc1", node_name = "node12", client_addr = "0.0.0.0", bind_addr = "10.40.96.12" start_join = ["10.40.96.10"],
retry_join = ["10.40.96.10"],
Parameter description in configuration file:
Server: the same as the server parameter on the command line
bootstrap_expect: the same as the bootstrap expect parameter on the command line
data_dir: the same as the data dir parameter on the command line
Datacenter: the same as the datacenter parameter on the command line
node_name: the same as the node parameter on the command line
client_addr: the same as the client parameter on the command line
bind_addr: the same as the bind parameter on the command line
start_join: the address to join the cluster at startup, the same as the join parameter on the command line
retry_join: the retry address of joining the cluster, the same as the retry join parameter on the command line
2.3 management
2.3.1. View node information
./consul members
The results are as follows:
Node Address Status Type Build Protocol DC Partition Segment node10 10.40.96.10:8301 alive server 1.11.1 2 dc1 default <all> node11 10.40.96.11:8301 alive server 1.11.1 2 dc1 default <all> node12 10.40.96.12:8301 alive server 1.11.1 2 dc1 default <all>
2.3.2. View cluster status
./consul operator raft list-peers
The results are as follows:
Node ID Address State Voter RaftProtocol node10 e8974195-0bfc-9156-c4ea-abb2b594f75e 10.40.96.10:8300 leader true 3 node11 bf0f6378-fb29-8fad-07f3-2d369a8093c3 10.40.96.11:8300 follower true 3 node12 d460dfcd-607b-2804-725e-28aa79566127 10.40.96.12:8300 follower true 3
2.3.3. Exiting the cluster
A. Leave the cluster gracefully and close it
./consul leave [-http-addr=<address>]
After executing the command, the status of the node changes to "left"; The parameter HTTP addr defaults to http://127.0.0.1:8500 , that is, the node where the machine is located. After executing the command on} 10.40.96.12, view the node information as follows:
Node Address Status Type Build Protocol DC Partition Segment node10 10.40.96.10:8301 alive server 1.11.1 2 dc1 default <all> node11 10.40.96.11:8301 alive server 1.11.1 2 dc1 default <all> node12 10.40.96.12:8301 left server 1.11.1 2 dc1 default <all>
B. Force node status to "left"
./consul force-leave [-prune] nodeName
If the node status is "live", the node will rejoin the cluster, so it seems that the command has little effect.
For nodes in "fail" or "left" status, you can completely delete them from the cluster through this command (through the prune parameter). node12 is already in "left" status. Execute the following command:
./consul force-leave -prune node12
View the node information as follows:
Node Address Status Type Build Protocol DC Partition Segment node10 10.40.96.10:8301 alive server 1.11.1 2 dc1 default <all> node11 10.40.96.11:8301 alive server 1.11.1 2 dc1 default <all>
3. Multi data center
3.1 planning
On the cluster built in the previous step, we will build a cluster without access to the data center to form a cross data center cluster.
Machine | agent type | Data center name |
10.40.96.10 | server | dc1 |
10.40.96.11 | server | dc1 |
10.40.96.12 | server | dc1 |
10.40.96.20 | server | dc2 |
10.40.96.21 | client | dc2 |
3.2. Start the node of dc2
nohup ./consul agent -config-file=./agent.hcl &
10.40.96.20 agent hcl:
server = true, ui_config = { enabled = true }, bootstrap_expect = 1, data_dir = "./data", datacenter = "dc2", node_name = "node20", client_addr = "0.0.0.0", bind_addr = "10.40.96.20"
10.40.96.21 agent hcl:
server = false, ui_config = { enabled = true }, data_dir = "./data", datacenter = "dc2", node_name = "node21", client_addr = "0.0.0.0", bind_addr = "10.40.96.21", start_join = ["10.40.96.20"],
retry_join = ["10.40.96.20"],
3.3. Add dc1
On} 10.40.96.20 (server node required):
./consul join -wan 10.40.96.10
3.4 management
3.4.1. View all server nodes
./consul members -wan
This command allows you to view the server type nodes of all data centers:
Node Address Status Type Build Protocol DC Partition Segment node10.dc1 10.40.96.10:8302 alive server 1.11.1 2 dc1 default <all> node11.dc1 10.40.96.11:8302 alive server 1.11.1 2 dc1 default <all> node12.dc1 10.40.96.12:8302 alive server 1.11.1 2 dc1 default <all> node20.dc2 10.40.96.20:8302 alive server 1.11.1 2 dc2 default <all>
View all node information available for a data center:
./consul members [-http-addr=<address>]
3.4.2. Disassociate the data center
1. On 10.40.96.20:
./consul leave
2. On 10.40.96.10, 10.40.96.11 and 10.40.96.12 clusters:
./consul force-leave -prune -wan node20.dc2
3. Restart consumer on 10.40.96.20:
nohup ./consul agent -config-file=./agent.hcl &
4. Command line usage
You can learn how to use the command line through the prompt after executing the consumption command, such as:
./consul
Tips are as follows:
Usage: consul [--version] [--help] <command> [<args>] Available commands are: acl Interact with Consul's ACLs agent Runs a Consul agent catalog Interact with the catalog config Interact with Consul's Centralized Configurations connect Interact with Consul Connect debug Records a debugging archive for operators event Fire a new event exec Executes a command on Consul nodes force-leave Forces a member of the cluster to enter the "left" state info Provides debugging information for operators. intention Interact with Connect service intentions join Tell Consul agent to join cluster keygen Generates a new encryption key keyring Manages gossip layer encryption keys kv Interact with the key-value store leave Gracefully leaves the Consul cluster and shuts down lock Execute a command holding a lock login Login to Consul using an auth method logout Destroy a Consul token created with login maint Controls node or service maintenance mode members Lists the members of a Consul cluster monitor Stream logs from a Consul agent operator Provides cluster-level tools for Consul operators reload Triggers the agent to reload configuration files rtt Estimates network round trip time between nodes services Interact with services snapshot Saves, restores and inspects snapshots of Consul server state tls Builtin helpers for creating CAs and certificates validate Validate config files/directories version Prints the Consul version watch Watch for changes in Consul
To view the usage of the members instruction, execute:
./consul members -h
The usage and various parameters will be displayed. The parameters are optional:
Usage: consul members [options] Outputs the members of a running Consul agent. HTTP API Options -ca-file=<value> Path to a CA file to use for TLS when communicating with Consul. This can also be specified via the CONSUL_CACERT environment variable. -ca-path=<value> Path to a directory of CA certificates to use for TLS when communicating with Consul. This can also be specified via the CONSUL_CAPATH environment variable. -client-cert=<value> Path to a client cert file to use for TLS when 'verify_incoming' is enabled. This can also be specified via the CONSUL_CLIENT_CERT environment variable. -client-key=<value> Path to a client key file to use for TLS when 'verify_incoming' is enabled. This can also be specified via the CONSUL_CLIENT_KEY environment variable. -http-addr=<address> The `address` and port of the Consul HTTP agent. The value can be an IP address or DNS address, but it must also include the port. This can also be specified via the CONSUL_HTTP_ADDR environment variable. The default value is http://127.0.0.1:8500. The scheme can also be set to HTTPS by setting the environment variable CONSUL_HTTP_SSL=true. -tls-server-name=<value> The server name to use as the SNI host when connecting via TLS. This can also be specified via the CONSUL_TLS_SERVER_NAME environment variable. -token=<value> ACL token to use in the request. This can also be specified via the CONSUL_HTTP_TOKEN environment variable. If unspecified, the query will default to the token of the Consul agent at the HTTP address. -token-file=<value> File containing the ACL token to use in the request instead of one specified via the -token argument or CONSUL_HTTP_TOKEN environment variable. This can also be specified via the CONSUL_HTTP_TOKEN_FILE environment variable. Command Options -detailed Provides detailed information about nodes. -partition=<default> Specifies the admin partition to query. If not provided, the admin partition will be inferred from the request's ACL token, or will default to the `default` admin partition. Admin Partitions are a Consul Enterprise feature. -segment=<string> (Enterprise-only) If provided, output is filtered to only nodes inthe given segment. -status=<string> If provided, output is filtered to only nodes matching the regular expression for status. -wan If the agent is in server mode, this can be used to return the other peers in the WAN pool.
Finally, you can view node information by executing the following commands:
./consul members