director_username_hash = %d and doveadm director map
Ralf Becker
rb at egroupware.org
Mon Nov 30 19:39:53 EET 2020
Hi Timo,
it's a long time :)
Am 30.11.20 um 15:07 schrieb Timo Sirainen:
> On 29. Nov 2020, at 16.10, Ralf Becker <rb at egroupware.org
> <mailto:rb at egroupware.org>> wrote:
>>
>> To answer my question I was able to identify the director code on
>> Github and the hashes are the first 4 byte of the binary md5 written
>> as a 32 bit integer.
>>
>> With that I was able to write a script that runs doveadm director
>> map, queries all domains from our internal management, calculates the
>> hashes and displays a joined list:
>>
>> doveadm-director map | grep rbz
>> rbz-xxxxxxxxx.de <http://rbz-xxxxxxxxx.de> 3766880388 10.44.88.5
>> nfs 2020-11-29 15:06:53
>> rbz-yyyyyyyyyyyy.de <http://rbz-yyyyyyyyyyyy.de> 3088689059
>> 10.44.88.1 extern 2020-11-29 15:07:11
>
> Are you doing this to lots of domains or just a few? I think you could
> have also individually looked up the backends with "doveadm director
> status anything at domain.de <mailto:anything at domain.de> tag". Of course,
> requires knowing also the tag for the domain already in this lookup.
I only moved single domains from one tag / backend-pair to an other.
doveadm director status x at domain.com tag1 gives one of the IPs of
backends of tag1, same with tag2.
>
>> When I move a domain between backends / tags, I see for some time the
>> moved domain is listed for both tags, thought doveadm who on the
>> backends show users are only connected to the new backend. No idea
>> why that ist. Trying doveadm director move does NOT change that
>> situation.
>
> There's not really a concept of "moving user between tags". The
> intention was that you could have "user1 at domain" in tag1 and
> "user1 at domain" in tag2 and they would be different users. So when
> you're returning a new tag from passdb then director just treats it as
> a different user. The old user is remembered
> until director_user_expire has passed without the user being accessed.
That explains it. I was able to verify, that all connections go to the
new tag, by doing a doveadm who on all backends.
>> I currently disable the domain in our dict used for userdb and
>> passdb, clear the auth cache of all directors and flush them, before
>> (final) rsync of the mailboxes of the domain to the new backend. When
>> our dicts answer again with the new director tag, connections are
>> going to the correct backend-pair. But it takes some hours for the
>> old mapping to disappear.
>>
>> Is that the expected behavior?
>
> Yes. And as long as the user isn't accessed via the old tag it doesn't
> matter.
That's what I observed too. Just looks a bit scarry ...
>> Is doveadm director move supposted to work with
>> director_username_hash = %d?
>
> It should work if you do:
>
> doveadm director move anything at domain.de
> <mailto:anything at domain.de> backend2
>
> It updates the director internal mapping, and it also sends a
> KICK-DIRECTOR-HASH to each login process in each director. This in
> turn should match every user with that same domain and kick them out.
>
> But maybe the issue is that you're again trying to move the user
> between tags? That's not what is really happening. It's moving
> anything at domain.de <mailto:anything at domain.de> in backend2's tag from
> its currently assigned backend to backend2. If domain.de
> <http://domain.de>'s backend was already backend2 then nothing is
> done. You could maybe kludge this by moving it to backend1 and then
> quickly to backend2 so at least one of them does the kicking.
Yes, I tried to move between tags, not backends of a tag.
Ok, then I know now the tags in director are really separate and I dont
need to worry about the domain being mapped twice for different tags.
Only thing which is a bit annoying with director_username_hash = %d, it
that doveadm director map writes <unknown> instead of the domain:
kubectl exec -t dovecot-director-0 -c dovecot-director -- doveadm
director map
user hash mail server ip expire time
<unknown> 518789780 10.44.88.1 2020-11-30 17:38:39
<unknown> 2520389888 10.44.88.1 2020-11-30 17:39:18
Thanks a lot for you explenations :)
Ralf
--
Ralf Becker
EGroupware GmbH [www.egroupware.org]
Handelsregister HRB Kaiserslautern 3587
Geschäftsführer Birgit und Ralf Becker
Leibnizstr. 17, 67663 Kaiserslautern, Germany
Telefon +49 631 31657-0
More information about the dovecot
mailing list