may i suggest just add a new hook before OS conection (post cache miss and
previous to pick address
(http://trafficserver.apache.org/docs/v2/sdk/HTTPHooksAndTransactions.html)
if there's no health servers just send to the first (so it will fail)or just
send back a error.
in another part of the plugin i just add a schedule to test the servers health.
and every "pick address" just need to follow a algorithm between the server
pool. (and the cache is just going to get the content of the url he need w/o
noticing the origin of the content)
in this way if i get a hook like this
if (INKHttpHookAdd(TS_HTTP_PICK_ADDR, INKContCreate(pic_addr, NULL)) ==
INK_ERROR) {
}
static int pic_addr(INKCont contp, INKEvent event,void *edata);
edata might contain the header data so i can just add a regex check to validate
the hostname and select a server from the pool in the algorithm order.
--Victor Lucero
El 09-12-2010, a las 4:06, [email protected] escribió:
> we are thinking of L7 service health checking in connection manager to
> OS, still investing.
>
> if you want do full balance, that is hard, I think we have many
> checkpoints:
> 1, HostDB strict RR, proxy.config.hostdb.strict_round_robin, that may
> make all HostDB response strict RR.
> 2, need a strict RR connection manager to OS, I think that will need
> some work. and may or may not be a design problem, as we are not
> guarantee to connnect all OS hosts for now. and the full balance may or
> may not make sense, it will depends on how many TS hosts, how many OS
> hosts, and how many ts2os connection/request.
>
> I'd like to have it in a full proxy env.
>
> btw: TS-316 maybe relate to your requirement too.
> https://issues.apache.org/jira/browse/TS-316
>
>
> 在 2010-12-09四的 01:18 -0300,Victor Lucero写道:
>> El 09-12-2010, a las 0:56, Leif Hedstrom escribió:
>>
>>> On 12/08/2010 08:45 PM, Leif Hedstrom wrote:
>>>> On 12/08/2010 08:36 PM, Victor Lucero wrote:
>>>>> Hi.
>>>>> Im writing a plugin to implement Load balancing. im facing some problem
>>>>> doing it with a remap plugin because its looks like when i alter new_host
>>>>> its also alter the "host" header in the http petition (and i dont want
>>>>> that)
>>>>> I need a way to alter the conection to Original Server and change the
>>>>> ip(so i can select between the servers in the pool). but there is no hook
>>>>> in this step.
>>>>
>>>>
>>>> You have two options:
>>>
>>>
>>> Well, there's a third option, I meant to say there are "two options" if you
>>> want to do this as a remap plugin (which makes a fair amount of sense,
>>> since you might want to easily configure this plugin per remap rule).
>>>
>>> The third option is to use "trunk", which has a few changes to the hooks
>>> and APIs. In particular, there are two useful hooks (one is merely renamed,
>>> but still):
>>>
>>> TS_HTTP_PRE_REMAP_HOOK
>>> TS_HTTP_POST_REMAP_HOOK
>>>
>>>
>>
>> the problem in the remap plugin is that not every request end in OS and the
>> balance will not get homogeneus.
>>
>>
>>> In addition, there's a new, very useful API (when running as a reverse
>>> proxy only):
>>>
>>> tsapi TSReturnCode TSSkipRemappingSet(TSHttpTxn txnp, int flag);
>>>
>>>
>>> All three of my "suggestions" probably suffers from the fact that changing
>>> the destination "url" also affects the cache key (if the content is
>>> cacheable). In most cases, that would be undesirable, so you should also
>>> look into using this API to control the cache key:
>>>
>>> tsapi TSReturnCode TSCacheUrlSet(TSHttpTxn txnp, const char *url, int
>>> length);
>>>
>>>
>>> As a side note, for real load balancing, we need a way to intercept all DNS
>>> / hostDB lookups in a plugin. So, you'd do something like
>>>
>>> map http://www.example.com/ http://real.example.com/
>>>
>>>
>>> and when real.example.com is looked up in our hostDB / DNS (on every
>>> request), you would intercept it with a plugin (new hook required, there's
>>> no way to do this now afaik) that allows you to return an IP based on your
>>> own code. It's unclear to me right now how such a hook would interact with
>>> hostDB, and the existing code we have for marking IPs as down etc. (i.e.
>>> it's important for the core to communicate connect failures to a plugin in
>>> a new hook like this). It's something we should noodle about (I'll file a
>>> bug later), it'd be great to get core changes in before v3.0.
>>>
>>> Cheers,
>>>
>>
>> editing the response of the dns will do a better trick , also adding some
>> health test code (in the plugin. nothing really complicated) and adding a
>> hook near the connection to the OS for stats (also needed if i want to
>> implement least weight algorithm.)
>>
>> thanks.
>>
>>> -- leif
>>>
>>
>> -Victor Lucero.
>
>