Hi Jakov,

Do you see this issue if you drain the worker node before shutting it down? For 
reference: 
https://kubernetes.io/docs/tasks/administer-cluster/safely-drain-node/. I know 
this doesn’t directly answer your questions, but it seems like draining the 
node first would help the members receive the shutdown signal before the TCP 
connections are terminated. For what it’s worth, we also run Geode on 
Kubernetes but haven’t encountered this issue. Knowing whether it happens when 
you drain the node first would help us to be able to reproduce it.

Thanks,
Aaron

On Oct 20, 2020, at 7:49 AM, Jakov Varenina 
<jakov.varen...@est.tech<mailto:jakov.varen...@est.tech>> wrote:

Hi Ernie,

Thank you really much for trying to help.

Unfortunately we haven't been able to reproduce this issue without k8s.

I would like to share some additional info about this issue. We know that this 
is not the "correct" way to shut down member gracefully, since it's complete 
TCP communication towards the other members is forcefully terminated even 
before it receives shutdown indication. This issue with removals from previous 
mail can be easily avoided by enforcing policy that the TCP connections towards 
other members aren't terminated until member terminates them by itself during 
graceful shutdown.

Another thing is that the removals occur only when when we shut down complete 
k8s node as described in previous mail. When we reproduce the same situation 
without shutting down k8s node then the removals aren't initiated:

"In parallel terminate member TCP communication and initiate gracefully shut 
down the member. What happens then is that availability check over UDP using 
Heartbeat messages towards other members pass, and removals aren't initiated 
towards other members"

Given the above additional test result when using k8s with 1.12 release, and 
due to fact that we were unable to reproduce the issue on geode only, we are 
not sure that the problem is actually in geode. Please feel free to contact me 
by slack or mail for any additional questions or things you would like to 
discuss.

BRs,

Jakov

On 19. 10. 2020. 20:26, Ernie Burghardt wrote:
Hi Jakov,

I'm looking into your question(s)... curious if you've run into this in a 
non-k8s cluster?
Might help focus the investigation...

Thanks,
EB

On 10/13/20, 7:51 AM, "Jakov Varenina" 
<jakov.varen...@est.tech<mailto:jakov.varen...@est.tech>> wrote:

    Hi all,

    sorry for bothering, but we have noticed some differences in behavior
    between 1.11 and 1.12 releases and need your help in understanding them.

    First I would like to mention that we are running geode in Kubernetes.
    We perform shutdown of the worker node that is hosting one member(e.g.
    coordinator locator). Shutdown procedure affect member in a following way:

    1. TCP shared unordered connections towards other members are terminated

    2. Member receives graceful shut-down indication and starts with the
    shut-down procedure

    Usually connections starting to be terminated first and the shut-down
    indication comes short after (e.g. ~10 milliseconds in difference). The
    step 1. triggers availability check towards the other members for which
    TCP connection has been previously lost. At this point of time
    coordinator is unaware of ongoing shut-down and assumes that all other
    members are actually having issues due to connection loss. Even after
    coordinator receives the graceful shut-down indication this process of
    availability check is not stopped. What happens later on is that
    availability check fail for all members and coordinator initiates their
    removal with RemoveMemberMessage. This message is succesfully received
    on the other members forcing them to shut-down.

    In geode 1.11 everything is same except the fact that availability check
    pass and therefore removals aren't initiated.

    In logs it can be seen that for both releases TCP availability check
    fail, but HeartbeatMessageRequest/HearbeatMessage check fails only on
    1.12 and pass on 1.11. In 1.12 release it can be seen that heartbeat
    request and heartbeat messages are sent but does not reach their
    destination members. RemoveMemberMessage which are sent later on reach
    their destination successfully. Does anybody know what was changed in
    1.12 that could lead to such difference in behavior?

    Additionally, availability check is not stopped when graceful shutdown
    is initiated. Do you think that this could be improved, so that member
    stops ongoing availability check when detects gracefull shutdown? Just
    to add that shutdown procedure is also delayed due to unsuccessful
    attempts to estabilsh TCP connections towards the other members.

    BRs,
    Jakov



Reply via email to