在DNS中,SRV记录是一种资源记录类型,用户能够指定一个表示服务、协议和域的名称,对该名称进行DNS查询会返回一个包含该域中多个提供所需服务的可用服务器名称的回复。MySQL支持使用DNS SRV记录来连接服务器,当多个MySQL实例(如服务器集群)为您的应用程序提供相同的服务时,可以使用DNS SRV记录来协助故障转移、负载平衡和复制服务,本实验中为了演示DNS SRV使用了Consul做服务发现,Consul是分布式的、高可用的、 可横向扩展的用于实现分布式系统的服务发现与配置的软件,提供了通过DNS或者HTTP接口的方式来注册服务和发现服务。

本实验全部使用Docker容器进行操作,需要使用如下的Image。
consul:latest
mysql:latest
centos:latest
docker run --name master -itd -e MYSQL_ROOT_PASSWORD=123456 mysql:latest
docker run -d -p 8500:8500 --restart=always --name=consul consul:latest agent -server -bootstrap -ui -node=node1 -client='0.0.0.0'
docker run --privileged -it -d centos:latest usr/sbin/init
使用以下命令获取容器的IP
docker inspect --format='{{.NetworkSettings.IPAddress}}' CONTAINERID

docker exec -it consul consul services register -name mysql -id my1 --address 172.17.0.3 -port 3306 -tag my

本实验省去了健康检测的配置。


启动dnsmasq,并检查是否生效。

首先安装Mysql的Python驱动和依赖包。
pip3 install mysql-connector-python
pip3 install dnspython
然后执行如下的代码。
import mysql.connector
cnx = mysql.connector.connect(user='root', password='gaoxing', database='admin', host='mysql.service.consul', dns_srv=True)
没有报错,说明整个配置完成。
有了SRV,Mysql和应用进一步解耦,省去了传统的虚拟IP和负载均衡的配置,非常方便。

作者简介
高胜杰,甲骨文云平台数据集成高级咨询顾问,专注于甲骨文数据集成相关产品及解决方案。具有7+年的大数据、数据处理经验,熟悉甲骨文相关集成产品,方案和项目实施经验。您可以通过joy.gao@oracle.com与他联系。




