机器迁移到云端,使用机器名方式统一命名规范,更加易于集群管理、运维管理工作。往往根据机器可以得知,机器所属地区、部门、业务、集群等信息,有利于记忆辨认。网络上还是以IP地址形式通信,统一命名规范要求机器名与网络地址映射支持。
早期使用本机hosts进行机器名解析,主机不断增多时,hosts文件管理变得复杂,解析性能也在下降;使用第三方域名服务,方便快捷不在需要调研开发等工作,只是处理问题变得繁琐,域名信息暴露给第三方,存在安全信息泄漏等隐患;如果机器数量达到成千上万级别,可以考虑自建DNS服务集群。
bind域名服务支持各种测试工具,包括压测工具。服务端要求与客户端时间保持一致性,大量配置文件也增加了使用难度,对高可用集群支持性不好。skydns+etcd方式,从成功项目摘出来的模块。配置简单,服务稳定。支持高可用集群,灵活性高,这样也导致etcd集群配置管理变得过于复杂。
l Dns服务集群结构
基于skydns与etcd配合的Dns模型,skydns负责域名解析,etcd集群保存域名记录,skydns与etcd出自同一个项目,两者之间有良好的配合接口。
l Dns服务集群高可用性
搭建skydns域名解析集群,提供域名解析服务负载均衡功能;内部搭建etcd集群,为skydns提供域名解析记录服务;每一个skydns可以访问多个etcd服务器获取域名记录,同集群的etcd数据一致性同步。
l Dns服务集群稳定性
经过测试,skydns服务长期稳定运行,可以支撑大量域名请求涌入;etcd集群数据同步到全部节点,稳定的集群管理协议,leader与节点出现故障对集群正常工作没有影响。
l DnS服务数据一致性
etcd集群扩缩容对数据一致性没有影响;etcd集群中故障节点恢复对数据一致性没有影响;etcd集群peers同步协议,维护集群数据一致性。
l Dns服务集群灵活性
etcd集群扩缩容灵活性高,可以跨机房或者多机房部署etcd集群,集群节点数据一致性同步;skydns同机房部署集群,统一管理机器就近访问dns服务。
l Dns服务集群管理
主要是etcd集群管理,集群创建、集群扩缩容等
l Dns服务域名解析性能
正常情况下,可以支撑成千上万级别机器域名服务功能。
客户端发送dns域名解析请求到skydns负载服务器,负载服务器把请求代理到各个skydns子节点。skydns接受域名解析请求,使用接口到etcd集群查询域名记录,把域名解析请求结果返回到客户端。
域名记录存储服务集群(etcd集群),下面可以部署多台etcd服务器。分别对应同机房部署、跨机房部署、多机房部署几种方式。多机房部署优势,把数据信息同步到不同机房,各台机器上面。不同机房搭建不同skydns服务集群,使用相同etcd集群保存的域名记录信息,也就保证了不同skydns域名解析记录一致性同步。不同机房搭建不同skydns服务原因是:同机房访问节省了跨机房网络访问时间。etcd跨机房集群对网络响应时间并不高,保证数据一致性同步即可。
高可用、稳定性、灵活性、数据一致性、成千上万级别域名解析;
etcd集群管理复杂性,需要后期调研解决该问题;
压测性能详细数据分析参考压测文档;
l 创建
A、静态创建:
需要提前使用IP构成集群创建,在需要加入依次执行下面命令,ip1、ip2、ip3换成真是ip地址。具体命令:
./etcd -name infra0 -initial-advertise-peer-urls http://ip1:2380 -listen-client-urls http://0.0.0.0:4001 -advertise-client-urls http://0.0.0.0:4001 -listen-peer-urls http://ip1:2380 -data-dir '/root/dns/my.etcd' -initial-cluster-token etcd-cluster-1 -initial-cluster infra0=http://ip1:2380,infra1=http://ip2:2380,infra2=http://ip3:2380 -initial-cluster-state new
|
./etcd -name infra1 -initial-advertise-peer-urls http://ip2:2380 -listen-client-urls http://0.0.0.0:4001 -advertise-client-urls http://0.0.0.0:4001 -listen-peer-urls http://ip2:2380 -data-dir '/root/dns/my.etcd' -initial-cluster-token etcd-cluster-1 -initial-cluster infra0=http://ip1:2380,infra1=http://ip2:2380,infra2=http://ip3:2380 -initial-cluster-state new
|
./etcd -name infra2 -initial-advertise-peer-urls http://ip3:2380 -listen-client-urls http://0.0.0.0:4001 -advertise-client-urls http://0.0.0.0:4001 -listen-peer-urls http://ip3:2380 -data-dir '/root/dns/my.etcd' -initial-cluster-token etcd-cluster-1 -initial-cluster infra0=http://ip1:2380,infra1=http://ip2:2380,infra2=http://ip3:2380 -initial-cluster-state new
|
其中参数含义:
-initial-cluster-token etcd-cluster-1创建集群名称
-data-dir '/root/dns/my.etcd' etcd数据保存目录,创建新集群使用新目录
-initial-advertise-peer-urls 集群使用同步,地址:端口形式
-advertise-client-urls 集群使用客户端,地址:端口形式
-listen-peer-urls 用户使用同步,地址:端口形式
-listen-client-urls 用户使用客户端,地址:端口形式
B、动态创建:
需要在一个已经存在的集群,创建新集群的key,把key写入到etcd数据库同时,设置新集群容量,新集群节点加入集群URL等。各个节点使用动态发现集群方式,带上URl参数,加入新集群。等待其他节点完全加入新集群,集群真正创建成功。具体命令如下:
创建一个token服务器或者集群:
./etcd -name infra0 -initial-advertise-peer-urls http://tokenip:2380 -listen-client-urls http://0.0.0.0:4001 -advertise-client-urls http://0.0.0.0:4001 -listen-peer-urls http:// tokenip:2380 -data-dir '/root/dns/keys.etcd' -initial-cluster-token etcd-cluster-1 -initial-cluster infra0=http:// tokenip:2380 -initial-cluster-state new |
在token服务器生产key
uuidgen |
设置token。使token生效,其他etcd使用discovery协议,加入token对应集群。
curl -X PUT http:// tokenip:4001/v2/keys/_etcd/registry/90b885c6-9cb1-46e3-b044-82b75d67e0ae/_config/size -d value=3
|
其他节点加入动态集群:
./etcd -name infra1 -initial-advertise-peer-urls http://ip1:2380 -listen-client-urls http://0.0.0.0:4001 -advertise-client-urls http://0.0.0.0:4001 -listen-peer-urls http://ip1:2380 -data-dir '/root/dns/dhcp.etcd' -discovery http:// tokenip:4001/v2/keys/_etcd/registry/90b885c6-9cb1-46e3-b044-82b75d67e0ae
|
./etcd -name infra2 -initial-advertise-peer-urls http://ip2:2380 -listen-client-urls http://0.0.0.0:4001 -advertise-client-urls http://0.0.0.0:4001 -listen-peer-urls http://ip2:2380 -data-dir '/root/dns/dhcp.etcd' -discovery http:// tokenip:4001/v2/keys/_etcd/registry/90b885c6-9cb1-46e3-b044-82b75d67e0ae
|
./etcd -name infra3 -initial-advertise-peer-urls http://ip3:2380 -listen-client-urls http://0.0.0.0:4001 -advertise-client-urls http://0.0.0.0:4001 -listen-peer-urls http://ip3:2380 -data-dir '/root/dns/dhcp.etcd' -discovery http:// tokenip:4001/v2/keys/_etcd/registry/90b885c6-9cb1-46e3-b044-82b75d67e0ae
|
为了保证集群稳定性、数据一致性维护,token服务器需要长期存在。
l 扩缩容
A、添加一个节点:集群中需要同步新添加节点信息,新加节点加入集群。
集群中任意节点同步新加节点信息:
./etcdctl member add infra3 http://ip4:2380 |
新节点加入集群:
./etcd -name infra4 -initial-advertise-peer-urls http://ip4:2380 -listen-client-urls http://0.0.0.0:4001 -advertise-client-urls http://0.0.0.0:4001 -listen-peer-urls http://ip4:2380 -data-dir '/root/dns/1q.etcd' -initial-cluster-token etcd-cluster-1 -initial-cluster infra0=http://ip0:2380,infra1=http:// ip1:2380,infra2=http:// ip2:2380,infra3=http:// ip3:2380, infra3=http://ip4:2380 -initial-cluster-state existing |
B、删除一个节点:集群中同步删除节点信息即可
etcdctl member remove a8266ecf031671f3 |
a8266ecf031671f3 是被删除节点ID
l 数据稳定性验证
A、集群停止各个节点,各个节点再次重启,数据依然存在;
B、集群删除各个节点,再次添加各个节点,数据已经不存在;
C、关闭leader情况:
其他节点选举新leader;
重启前leader会以普通节点角色正常运行;
下一次leader选举时,前leader仍然参加leader选举;
D、关闭任意节点情况:
其他节点继续正常工作;
重启后该节点正常加入集群;
重启节点前插入数据,该节点重启后会同步数据;
该节点重启后同步集群数据;
l 数据一致性验证
节点加入集群同步集群原有数据;
节点加入集群插入数据会同步到新节点;
删除节点原有数据,新节点同步删除
新插入数据,新节点同步更新;
l 不同集群间数据迁移
使用数据备份与恢复的方式迁移,目前,在A集群备份数据,B集群以备份数据新建集群,启动成功。存在问题,备份数据配置信息校验,导致新建集群节点服务IP地址不可设置情况,节点强制以localhost启动。
6、 域名服务监控
l sykdns监控:
监听skydns端口;
监听skydns功能:使用dig命令方式,探测skydns健康状态;
l etcd监控
提供集群健康状态询问接口:
./etcdctl cluster-health |
l 趋势图与报警
把skydns、etcd监控信息发送到监控平台,生成趋势图,配合相应规则,出现异常时触发报警。