暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL 8.0的SRV体验

616

在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

在Consul中注册Mysql服务

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


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

配置dnsmasq

在CentOS容器中安装dnsmasq并配置dns转发,详细的安装这里不详细描述,下面是DNS的配置文件。


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

使用SRV连接Mysql

首先安装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与他联系。

文章转载自甲骨文开发者社区,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论