如何让TIDB的所有服务监听到ipv4地址上?

  • 【TiDB 版本】:tidb-ansible v3.0.8
  • 【问题描述】:

用GCP的LB负载4000端口,发现不成功,状态一直是黄色感叹号,去9个节点发现所有的端口都监听在ipv6上,如何修改监听到ipv4地址上,用sysctl 禁用了ipv6,并sysctl -p 让其生效,重启tidb之后还是监听在ipv6上。

是否是用 ansible 部署?这些端口信息是否是修改成 ipv6 ?

https://github.com/pingcap/tidb-ansible/blob/2f6c97175c3f8aa71ed18a6d678830f36801065c/group_vars/tidb_servers.yml#L4

是的ansible部署的,tidb_servers.yml这个文件没有动过,ipv6已经关了,可还是监听到ipv6地址上

[root@tidb-1 ~]# ifconfig 
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1460
        inet 10.142.0.12  netmask 255.255.255.255  broadcast 10.142.0.12
        ether 42:01:0a:8e:00:0c  txqueuelen 1000  (Ethernet)
        RX packets 734948  bytes 460844908 (439.4 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 898487  bytes 183387676 (174.8 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 25333  bytes 2590484 (2.4 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 25333  bytes 2590484 (2.4 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@tidb-1 ~]# netstat -anltp | grep LISTEN
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      21645/sshd          
tcp6       0      0 :::9115                 :::*                    LISTEN      23375/bin/blackbox_ 
tcp6       0      0 :::10080                :::*                    LISTEN      23673/bin/tidb-serv 
tcp6       0      0 :::4000                 :::*                    LISTEN      23673/bin/tidb-serv 
tcp6       0      0 :::9100                 :::*                    LISTEN      23105/bin/node_expo 
tcp6       0      0 :::22                   :::*                    LISTEN      21645/sshd
[tidb@devops-1 tidb-ansible]$ cat group_vars/tidb_servers.yml 
---
dummy:

tidb_port: 4000
tidb_status_port: 10080

tidb_log_dir: "{{ deploy_dir }}/log"
tidb_cert_dir: "{{ deploy_dir }}/conf/ssl"
[tidb@devops-1 tidb-ansible]$

看着监控的是 4000 端口以及 10080 的状态端口呀 ?这边有什么疑问呢 ?

端口没错,地址是v6的,如何改成0.0.0.0:4000?

意思就是GCP上的LB做健康检查检测4000端口,可能没检测到0.0.0.0:4000

这种是符合预期的,暂时不能调整。以下是我的测试环境 tidb 端口为 4807;

:joy:

:smile:

本来想着健康检查改成http的,但还是不行

tidb-server 的启动 -P 是没有指定是 ip ,所以就是所有 4000 端口都是可用的,所以不管是 ipv6 还是 ipv4。这里暂时无法进行调整,可以根据你的需求试下其他方式。

已经解决了

运行状况检查
每个后端服务还会针对每个可用的实例指定执行哪种运行状况检查。为了让运行状况检查探测能够正常进行,您必须创建一条防火墙规则,以允许来自 130.211.0.0/22 和 35.191.0.0/16 的流量到达您的实例。

如需详细了解运行状况检查,请参阅运行状况检查概念和创建运行状况检查。

:+1: