Consul introduction practice -- installation and management

Posted by azuka on Mon, 17 Jan 2022 02:03:36 +0100

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

 

Topics: Microservices