测试域名代替 IP 部署 TiDB
Contents
[NOTE] Updated January 20, 2020. This article may have outdated content or subject matter.
0x00 假设
新建机房网络频繁变更或公司内部要求禁止使用 IP 做为服务启动监听(大公司规划时喜欢使用 hostname/server name + domain 做为服务监听信息,配合公司内网 DNS 做跨地域运维管理),所以尝试下 TiDB 使用域名方式是否可以在线更换 IP 以及服务是否可以运行。 测试时未搭建 DNS 服务,使用 HOSTNAME 本地解析 测试版本 1.0
0x01 场景&问题
部署场景
- 使用 tidb-ansible 部署 binary 方式,启动使用 supervise
- inventory.ini 文件中直接填写域名
- 测试场景域名未经过 DNS 解析,直接使用
/etc/hosts
文件解析- 线上场景可以使用内网 DNS 或者批量修改
/etc/hosts
方式对hostname | domain
映射管理
- 线上场景可以使用内网 DNS 或者批量修改
测试场景
- 域名部署未影响实际功能,因此只测试个组件之间网络延迟与通讯是否正常
- PD 更换 IP 地址映射,用于修改主机 IP 或者迁移时场景
- TiDB 到 PD 之间通讯
- TiKV 到 PD 之间通讯
- PD 与 PD 之间通讯
问题
- PD 启动时,
client-urls
与peer-urls
参数不能使用域名格式,只能使用 IP 或者0.0.0.0
- TiKV 启动时,
--addr
参数不能使用域名格式,只能使用 IP 或者0.0.0.0
--advertise-addr "tikv.p.cc:20160"
无需添加http://
- 测试 TiDB 域名与 IP 行为一致,无特殊影响
- PD 启动时,
部署架构
域名 | 服务 | 初始IP | 修改后 |
---|---|---|---|
pd.p.cc | PD | 127.0.0.1 | 172.16.10.64 |
kv.p.cc | PD | 127.0.0.1 | 172.16.10.64 |
db.p.cc | PD | 127.0.0.1 | 172.16.10.64 |
PD 启动参数调整
|
|
TiKV 参数启动示例
|
|
0x02 测试结果
- TiDB 到 PD 之间网络通信
- PD 使用域名启动,如果经过 DNS 解析,TiDB 获取 TSO 会慢 200us 上下
- PD cluster 置于 haproxy 后面,实际通讯时 tidb – haproxy – 某个 etcd(etcd proxy) – pd leader ,会比直接连接 PD 慢 600us - 1ms 左右
- PD 到 PD
- 部署单节点,未达到测试目的
- TiKV 到 PD
- 部署单节点,未参与 PD 切换 leader 时对 TiKV 的影响
- TiKV 到 TiKV
- 多实例部署未受到影响
- 域名造成通讯延迟
测试修改 IP
修改 PD
- 正常启动
修改 TiDB
- TiDB 无状态,正常使用
修改 TiKV
- ok ,需要重启
- TiKV 是将 ip:port 注册到 pd etcd 信息中,如果重复,已有的必须是 tomestone , 否则出现以下错误,地址被占用,无法生成新的 id
1 2
2018/03/20 15:50:14.436 util.rs:315: [ERROR] fail to request: Grpc(RpcFailure(RpcStatus { status: Unknown, details: Some("duplicated store address: id:1001 address:\"kv.p.cc:20160\" , already registered by id:1 address:\"kv.p.cc:20160\" ") })) 2018/03/20 15:50:55.313 tikv-server.rs:263: [ERROR] failed to start node: Pd(Other(StringError("[src/pd/util.rs:323]: fail to request")))
Etcdctl 工具
PD 组件数据存储在 etcd 中,etcdctl 工具是管理 ectd 存储的工具;谨慎使用该工具,该工具可重置 etcd 存储从而导致 PD 数据丢失
- 获取 PD 内已注册所有字段
|
|
- 获取 /pd 为首的所有字段;部分信息未转码成功而乱码
|
|
- 当前仅 PD 启动
- json 输出格式中,字符串通过 Base64 加密格式化
|
|
- 当前启动一个 PD ;两个 TiKV ,其中一个 Down 状态,另一个 UP 状态
- json 输出格式中,字符串通过 Base64 加密格式化
|
|
- 获取 Store 状态
- IP 与域名均可注册到 PD Cluster
|
|