|
| 1 | +Title: Agent |
| 2 | +Slug: docs/agent/basics |
| 3 | + |
| 4 | + |
| 5 | +# XXX Agent |
| 6 | + |
| 7 | +The XXX agent is the core process of XXX. The agent maintains membership |
| 8 | +information, registers services, runs checks, responds to queries |
| 9 | +and more. The agent must run on every node that is part of a XXX cluster. |
| 10 | + |
| 11 | +Any Agent may run in one of two modes: client or server. A server |
| 12 | +node takes on the additional responsibility of being part of the [consensus quorum](#). |
| 13 | +These nodes take part in Raft, and provide strong consistency and availability in |
| 14 | +the case of failure. The higher burden on the server nodes means that usually they |
| 15 | +should be run on dedicated instances, as they are more resource intensive than a client |
| 16 | +node. Client nodes make up the majority of the cluster, and they are very lightweight |
| 17 | +as they maintain very little state and interface with the server nodes for most operations. |
| 18 | + |
| 19 | +## Running an Agent |
| 20 | + |
| 21 | +The agent is started with the `XXX agent` command. This command blocks, |
| 22 | +running forever or until told to quit. The agent command takes a variety |
| 23 | +of configuration options but the defaults are usually good enough. When |
| 24 | +running `XXX agent`, you should see output similar to that below: |
| 25 | + |
| 26 | +``` |
| 27 | +$ XXX agent -data-dir=/tmp/XXX |
| 28 | +==> Starting XXX agent... |
| 29 | +==> Starting XXX agent RPC... |
| 30 | +==> XXX agent running! |
| 31 | + Node name: 'Armons-MacBook-Air' |
| 32 | + Datacenter: 'dc1' |
| 33 | + Server: false (bootstrap: false) |
| 34 | + Client Addr: 127.0.0.1 (HTTP: 8500, DNS: 8600, RPC: 8400) |
| 35 | + Cluster Addr: 192.168.1.43 (LAN: 8301, WAN: 8302) |
| 36 | +
|
| 37 | +==> Log data will now stream in as it occurs: |
| 38 | +
|
| 39 | + [INFO] serf: EventMemberJoin: Armons-MacBook-Air.local 192.168.1.43 |
| 40 | +... |
| 41 | +``` |
| 42 | + |
| 43 | +There are several important components that `XXX agent` outputs: |
| 44 | + |
| 45 | +* **Node name**: This is a unique name for the agent. By default this |
| 46 | + is the hostname of the machine, but you may customize it to whatever |
| 47 | + you'd like using the `-node` flag. |
| 48 | + |
| 49 | +* **Datacenter**: This is the datacenter the agent is configured to run |
| 50 | + in. XXX has first-class support for multiple datacenters, but to work efficiently |
| 51 | + each node must be configured to correctly report its datacenter. The `-dc` flag |
| 52 | + can be used to set the datacenter. For single-DC configurations, the agent |
| 53 | + will default to "dc1". |
| 54 | + |
| 55 | +* **Server**: This shows if the agent is running in the server or client mode. |
| 56 | + Server nodes have the extra burden of participating in the consensus quorum, |
| 57 | + storing cluster state, and handling queries. Additionally, a server may be |
| 58 | + in "bootstrap" mode. Multiple servers cannot be in bootstrap mode, |
| 59 | + otherwise the cluster state will be inconsistent. |
| 60 | + |
| 61 | +* **Client Addr**: This is the address used for client interfaces to the agent. |
| 62 | + This includes the ports for the HTTP, DNS, and RPC interfaces. The RPC |
| 63 | + address is used for other `XXX` commands. Other XXX commands such |
| 64 | + as `XXX members` connect to a running agent and use RPC to query and |
| 65 | + control the agent. By default, this binds only to localhost. If you |
| 66 | + change this address or port, you'll have to specify an `-rpc-addr` whenever |
| 67 | + you run commands such as `XXX members` so they know how to talk to the |
| 68 | + agent. This is also the address other applications can use over [RPC to control XXX](/docs/agent/rpc.html). |
| 69 | + |
| 70 | +* **Cluster Addr**: This is the address and ports used for communication between |
| 71 | + XXX agents in a cluster. Every XXX agent in a cluster does not have to |
| 72 | + use the same port, but this address **MUST** be reachable by all other nodes. |
| 73 | + |
| 74 | +## Stopping an Agent |
| 75 | + |
| 76 | +An agent can be stopped in two ways: gracefully or forcefully. To gracefully |
| 77 | +halt an agent, send the process an interrupt signal, which is usually |
| 78 | +`Ctrl-C` from a terminal. When gracefully exiting, the agent first notifies |
| 79 | +the cluster it intends to leave the cluster. This way, other cluster members |
| 80 | +notify the cluster that the node has _left_. |
| 81 | + |
| 82 | +Alternatively, you can force kill the agent by sending it a kill signal. |
| 83 | +When force killed, the agent ends immediately. The rest of the cluster will |
| 84 | +eventually (usually within seconds) detect that the node has died and will |
| 85 | +notify the cluster that the node has _failed_. |
| 86 | + |
| 87 | +It is especially important that a server node be allowed to gracefully leave, |
| 88 | +so that there will be a minimal impact on availability as the server leaves |
| 89 | +the consensus quorum. |
| 90 | + |
| 91 | +For client agents, the difference between a node _failing_ and a node _leaving_ |
| 92 | +may not be important for your use case. For example, for a web server and load |
| 93 | +balancer setup, both result in the same action: remove the web node |
| 94 | +from the load balancer pool. But for other situations, you may handle |
| 95 | +each scenario differently. |
0 commit comments