| .. Licensed to the Apache Software Foundation (ASF) under one |
| or more contributor license agreements. See the NOTICE file |
| distributed with this work for additional information |
| regarding copyright ownership. The ASF licenses this file |
| to you under the Apache License, Version 2.0 (the |
| "License"); you may not use this file except in compliance |
| with the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, |
| software distributed under the License is distributed on an |
| "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| KIND, either express or implied. See the License for the |
| specific language governing permissions and limitations |
| under the License. |
| |
| .. include:: ../../common.defs |
| |
| ============= |
| parent.config |
| ============= |
| |
| .. configfile:: parent.config |
| |
| The :file:`parent.config` file identifies the parent proxies used in an |
| cache hierarchy. Use this file to perform the following configuration: |
| |
| - Set up parent cache hierarchies, with multiple parents and parent |
| failover |
| - Configure selected URL requests to bypass parent proxies |
| |
| Traffic Server uses the :file:`parent.config` file only when the parent |
| caching option is enabled (refer to :ref:`configuring-traffic-server-to-use-a-parent-cache`). |
| |
| After you modify the :file:`parent.config` file, run the :option:`traffic_ctl config reload` |
| command to apply your changes. |
| |
| Format |
| ====== |
| |
| Each line in the :file:`parent.config` file must contain a parent caching |
| rule. Traffic Server recognizes three space-delimited tags: :: |
| |
| primary_destination=value secondary_specifier=value action=value |
| |
| The following list shows the possible primary destinations and their |
| allowed values. |
| |
| .. _parent-config-format-dest-domain: |
| |
| ``dest_domain`` |
| A requested domain name, and its subdomains. |
| |
| .. _parent-config-format-dest-host: |
| |
| ``dest_host`` |
| A requested hostname. |
| |
| .. _parent-config-format-dest-ip: |
| |
| ``dest_ip`` |
| A requested IP address or range of IP addresses separated by a dash (-). |
| |
| .. _parent-config-format-url-regex: |
| |
| ``url_regex`` |
| A regular expression (regex) to be found in a URL |
| |
| The secondary specifiers are optional in the :file:`parent.config` file. The |
| following list shows the possible secondary specifiers and their allowed |
| values. Every line in the :file:`parent.config` file must contain either a |
| ``parent=`` or ``go_direct=`` directive. |
| |
| .. _parent-config-format-port: |
| |
| ``port`` |
| A requested URL port. |
| |
| .. _parent-config-format-scheme: |
| |
| ``scheme`` |
| A request URL protocol: ``http`` or ``https``. |
| |
| .. _parent-config-format-prefix: |
| |
| ``prefix`` |
| A prefix in the path part of a URL. |
| |
| .. _parent-config-format-suffix: |
| |
| ``suffix`` |
| A file suffix in the URL. |
| |
| .. _parent-config-format-method: |
| |
| ``method`` |
| A request URL method. It can be one of the following: |
| |
| - get |
| - post |
| - put |
| - trace |
| |
| .. _parent-config-format-time: |
| |
| ``time`` |
| A time range, such as 08:00-14:00, during which the parent cache is |
| used to serve requests. |
| |
| .. _parent-config-format-src-ip: |
| |
| ``src_ip`` |
| A client IP address. |
| |
| .. _parent-config-format-internal: |
| |
| ``internal`` |
| A boolean value, ``true`` or ``false``, specifying if the rule should |
| match (or not match) a transaction originating from an internal API. This |
| is useful to differentiate transaction originating from an ATS plugin. |
| |
| The following list shows the possible actions and their allowed values. |
| |
| .. _parent-config-format-parent: |
| |
| ``parent`` `(hostname or IP address):port[|weight][&hash name][,another host]` |
| An ordered list of parent servers, separated by commas or |
| semicolons. If the request cannot be handled by the last parent |
| server in the list, then it will be routed to the origin server. |
| You can specify either a hostname or an IP address, but, you must |
| specify the port number. If there are multiple IP addresses associated |
| with the hostname, |TS| will treat them as a single entity when tracking |
| health. Example:: |
| |
| parent="p1.x.com:8080, 192.168.0.3:80, 192.168.0.4:80" |
| |
| An optional weight can be specified after a pipe (``|``). This example |
| has one parent take 20% (2/(2+3+5)) of the requests, another 30% (3/(2+3+5)), |
| and the last 50% (5/(2+3+5)):: |
| |
| parent="p1.x.com:8080|2.0, 192.168.0.3:80|3.0, 192.168.0.4:80|5.0" |
| |
| If ``round_robin`` is set to ``consistent_hash``, you may add a unique ``hash string`` |
| following the ``weight`` for each parent. The ``hash string`` must start with ``&`` |
| and is used to build both the primary and secondary rings using the ``hash string`` |
| for each parent instead of the parents ``hostname`` or ``ip address``. This can be |
| useful so that two different hosts may be used to cache the same requests. Example:: |
| |
| parent="p1.x.com:80|1.0&abcdef, p2.x.com:80|1.0&xyzl, p3.x.com:80|1.0&ldffg" round_robin=consistent_hash |
| |
| .. _parent-config-format-secondary-parent: |
| |
| ``secondary_parent`` |
| An optional ordered list of secondary parent servers in the same format as parent. This |
| optional list may only be used when ``round_robin`` is set to |
| ``consistent_hash``. If the request cannot be handled by the |
| first parent server chosen from the ``parent`` list, then the |
| request will be re-tried from a server found in this list using a |
| consistent hash of the url. The parent servers in this list will |
| be exhausted before the selection function will revert to trying |
| alternative parents in the ``parent`` list. |
| |
| ``secondary_mode`` |
| One of the following values: |
| |
| - ``1`` This is the default. The parent selection will first |
| attempt to choose a parent from the ``parent`` list. If the |
| chosen parent is not available or marked down then another |
| parent will be chosen from the ``secondary_parent`` list. |
| Choices in the ``secondary_parent`` list will be exhausted |
| before attempting to choose another parent from the ``parent`` |
| list. |
| |
| - ``2`` The parent selection will first attempt to choose a parent |
| from the ``parent`` list. If the chosen parent is not available |
| or marked down then another parent will be chosen from the |
| ``parent`` list. Choices in the ``parent`` list will be |
| exhausted before attempting to choose another parent from the |
| ``secondary_parent`` list. |
| |
| - ``3`` The parent selection will first attempt to choose a parent |
| from the ``parent`` list. |
| |
| - If the chosen parent is marked down then another parent will |
| be chosen from the ``secondary_parent`` list. The |
| ``secondary_parent`` list will be exhausted before attempting |
| to choose another parent in the ``parent`` list. This depends |
| on taking a parent down from a particular EDGE using traffic_ctl |
| like ``traffic_ctl host down sample.server.com``. This will be |
| useful during maintenance window or as a debugging aid when a |
| user wants to take down specific parents. Taking parents down |
| using ``traffic_ctl`` will cause the EDGE to ignore those parent |
| immediately from parent selection logic. |
| |
| - If the chosen parent is unavailable but not marked down then |
| another parent will be chosen from the ``parent`` list. The |
| ``parent`` list will be exhausted before attempting to choose |
| another parent in the ``secondary_parent`` list. |
| |
| .. _parent-config-format-parent-is-proxy: |
| |
| ``parent_is_proxy`` |
| One of the following values: |
| |
| - ``true`` - This is the default. The list of parents and secondary parents |
| are proxy cache servers. |
| - ``false`` - The list of parents and secondary parents are the origin |
| servers ``go_direct`` flag is ignored and origins are selected using |
| the specified ``round_robin`` algorithm. The FQDN is removed from |
| the http request line. |
| |
| .. _parent-config-format-parent-retry: |
| |
| ``parent_retry`` |
| - ``simple_retry`` - If the parent returns a 404 response or if the response matches |
| a list of http 4xx responses defined in ``simple_server_retry_responses`` on a request |
| a new parent is selected and the request is retried. The number of retries is controlled |
| by ``max_simple_retries`` which is set to 1 by default. |
| - ``unavailable_server_retry`` - If the parent returns a 503 response or if the response matches |
| a list of http 5xx responses defined in ``unavailable_server_retry_responses``, the currently selected |
| parent is marked down and a new parent is selected to retry the request. The number of |
| retries is controlled by ``max_unavailable_server_retries`` which is set to 1 by default. |
| - ``both`` - This enables both ``simple_retry`` and ``unavailable_server_retry`` as described above. |
| |
| .. _parent-config-format-simple-server-retry-responses: |
| |
| ``simple_server_retry_responses`` |
| If ``parent_retry`` is set to either ``simple_retry`` or ``both``, this parameter is a comma separated list of |
| http 4xx response codes that will invoke the ``simple_retry`` described in the ``parent_retry`` section. By |
| default, ``simple_server_retry_responses`` is set to 404. |
| |
| .. _parent-config-format-unavailable-server-retry-responses: |
| |
| ``unavailable_server_retry_responses`` |
| If ``parent_retry`` is set to either ``unavailable_server_retry`` or |
| ``both``, this parameter is a comma separated list of http 5xx response codes that will invoke the |
| ``unavailable_server_retry`` described in the ``parent_retry`` section. By default, ``unavailable_server_retry_responses`` |
| is set to 503. |
| |
| .. _parent-config-format-max-simple-retries: |
| |
| ``max_simple_retries`` |
| By default the value for ``max_simple_retries`` is 1. It may be set to any value in the range 1 to 5. |
| If ``parent_retry`` is set to ``simple_retry`` or ``both`` a 404 response |
| from a parent origin server will cause the request to be retried using a new parent at most 1 to 5 |
| times as configured by ``max_simple_retries``. |
| |
| .. _parent-config-format-max-unavailable-server-retries: |
| |
| ``max_unavailable_server_retries`` |
| By default the value for ``max_unavailable_server_retries`` is 1. It may be set to any value in the range 1 to 5. |
| If ``parent_retry`` is set to ``unavailable_server_retries`` or ``both`` a 503 response |
| by default or any http 5xx response listed in the list ``unavailable_server_retry_responses`` from a parent origin server will |
| cause the request to be retried using a new parent after first marking the current parent down. The request |
| will be retried at most 1 to 5 times as configured by ``max_unavailable_server_retries``. |
| |
| .. _parent-config-format-round-robin: |
| |
| ``round_robin`` |
| One of the following values: |
| |
| - ``true`` - Traffic Server determines the parent based on client IP address. |
| - ``strict`` - Traffic Server machines serve requests strictly in |
| turn. For example: machine ``proxy1`` serves the first request, |
| ``proxy2`` serves the second request, and so on. |
| - ``false`` - Round robin selection does not occur. |
| - ``consistent_hash`` - consistent hash of the url so that one parent |
| is chosen for a given url. If a parent is down, the traffic that |
| would go to the down parent is rehashed amongst the remaining parents. |
| The other traffic is unaffected. Once the downed parent becomes |
| available, the traffic distribution returns to the pre-down |
| state. |
| - ``latched`` - The first parent in the list is marked as primary and is |
| always chosen until connection errors cause it to be marked down. When |
| this occurs the next parent in the list then becomes primary. The primary |
| will wrap back to the first parent in the list when it is the last parent |
| in the list and is marked down due to a connection error. Newly chosen |
| primary parents marked as unavailable will then be restored if the failure |
| retry time has elapsed and the transaction using the primary succeeds. |
| |
| .. _parent-config-format-go-direct: |
| |
| ``go_direct`` |
| One of the following values: |
| |
| - ``true`` - requests bypass parent hierarchies and go directly to |
| the origin server. |
| |
| - ``false`` - requests do not bypass parent hierarchies. |
| |
| .. _parent-config-format-qstring: |
| |
| ``qstring`` |
| One of the following values: |
| |
| - ``consider`` - Use the query string when finding a parent. |
| |
| - ``ignore`` - Do not consider the query string when finding a parent. This |
| is especially useful when using the ``consistent_hash`` selection strategy, |
| and a random query string would prevent a consistent parent selection. |
| |
| .. _parent-config-format-ignore_self_detect: |
| |
| ``ignore_self_detect`` |
| One of the following values: |
| |
| - ``true`` - Ignore the marked down status of a host, typically the local host, |
| when the reason code is Reason::SELF_DETECT and use the host as if it were |
| marked up. |
| |
| - ``false`` - The default. Do not ignore the host status. |
| |
| Examples |
| ======== |
| |
| The following rule configures a parent cache hierarchy consisting of |
| Traffic Server (which is the child) and two parents, ``p1.x.com`` and |
| ``p2.x.com``. Traffic Server forwards the requests it cannot serve to |
| the parent servers ``p1.x.com`` and ``p2.x.com`` in a round-robin |
| fashion:: |
| |
| dest_domain=. method=get parent="p1.x.com:8080; p2.y.com:8080" round_robin=true |
| |
| The following rule configures Traffic Server to route all requests |
| containing the regular expression ``politics`` and the path |
| ``/viewpoint`` directly to the origin server (bypassing any parent |
| hierarchies):: |
| |
| url_regex=politics prefix=/viewpoint go_direct=true |
| |
| The following configures Traffic Server to route http requests for example.com (neither |
| https nor www.example.com would match) through parent servers. Each url will be hashed |
| to a specific parent. If the chosen parent has been marked down, a parent from the |
| secondary ring will be chosen for the retry.:: |
| |
| dest_host=example.com scheme=http parent="p1.x.com:80,p2.x.com:80" secondary_parent="p3.x.com:80,p4.x.com:80" round_robin=consistent_hash go_direct=false |