Consul 实战

上两小节我们介绍了 MGR 和 ProxySQL 的部署,接下来我们继续从实战角度,学习这套高可用架构的最后部分:Consul 实战。

1. Consul 介绍

Consul 是 HashiCorp 公司推出的一个用于实现分布式系统的服务发现与配置工具。Consul 使用 Go 语言编写,具有天然可移植性,支持多平台部署,安装包仅仅是一个可执行文件,部署非常简单。

Consul 内置了服务注册与发现、分布一致性协议实现、dns 解析、健康检查、Key/Value 存储、多数据中心方案。

Consul 官方网址:https://www.consul.io

2. Consul 部署

下面从实战的角度一步步搭建 Consul 环境。

2.1 基本环境

  Consul-1 Consul-2 Consul-3
MySQL版本 Consul_1.8.4 Consul_1.8.4 Consul_1.8.4
操作系统 CentOS 7.8 CentOS 7.8 CentOS 7.8
服务器IP 192.168.0.1 192.168.0.2 192.168.0.3
端口 8600 8600 8600
服务器配置 2c4g 2c4g 2c4g

2.2 安装配置

创建日志文件和配置文件:

--consul日志
sudo touch /consul/log/consul.log
--Consul配置
sudo touch /consul/consul.d/consul_config.json
--服务注册
sudo touch /consul/consul.d/proxysql.json 

安装 Consul:

--解压缩即可
cd /consul
unzip consul_1.8.4_linux_amd64.zip
--创建软链接
ln -s /consul/consul /usr/bin/consul
--查看版本
consul --version
Consul v1.8.4

2.3 Consul配置-Server端

全局配置-consul_config.json:

vi /consul/consul.d/consul_config.json
{ 
"datacenter":"datacenter-1", 
"data_dir":"/consul/data", 
"log_level": "INFO", 
"node_name": "consul-server-01", 
"bootstrap_expect": 2,
"server": true, 
// ui界面在一台server设置为true,其它设置为false
"ui":true, 
// 如果绑定具体IP,会导致consul集群之间tcp8301端口失败
"bind_addr":"0.0.0.0", 
// 客户端允许访问ip
"client_addr":"0.0.0.0",
"enable_script_checks":true,
// 加入集群
"start_join":
["192.168.0.1", "192.168.0.2", "192.168.0.3"],
"retry_join":
["192.168.0.1", "192.168.0.2", "192.168.0.3"],
"ports": 
{"dns": 53}
}

2.4 Consul 配置-Client 端

全局配置-consul_config.json:

/consul/consul.d/consul_config.json
{ 
"datacenter":"datacenter-1", 
"data_dir":"/consul/data", 
"log_level": "INFO", 
"node_name": "consul-app-proxysql-01", 
"server":false, 
//ui界面在一台server设置为true,其它设置为false
"ui":false, 
// 如果绑定具体IP,会导致consul集群之间tcp8301端口失败
"bind_addr":"0.0.0.0", 
// 客户端允许访问ip
"client_addr":"0.0.0.0",
"enable_script_checks":true,
// 加入集群
"start_join":
["192.168.0.1", "192.168.0.2", "192.168.0.3"]],
"retry_join":
["192.168.0.1", "192.168.0.2", "192.168.0.3"]],
"ports": 
{"dns": 53}
}

服务注册-proxysql.json:

--采用mysqladmin检查
vi /consul/consul.d/proxysql.json
{
"service": {
"id": "proxysql-01",
"name": "proxysql",
"tags": ["6033-rw-app"],
"address": "192.168.0.1",
"port": 6033,
"check": {
"script": "mysqladmin ping --host=localhost --port=6033 --user=root --password=123456",
"interval": "3s"
}
}
}
 
--采用telnet检查
vi /consul/consul.d/proxysql.json
{
"service": {
"id": "proxysql1",
"name": "proxysql",
"tags": ["6033-rw-app"],
"address": "192.168.0.1",
"port": 6033,
        "check": {
            "interval": "3s", 
            "tcp": "127.0.0.1:6033", 
            "timeout": "1s"
        }
}
}

2.5 DNS 解析配置

--在应用端配置nameserver,指向consul集群
vi /etc/resolv.conf
#指向本地consul 53端口,正常由本地做dns解析
nameserver 127.0.0.1
#指向consul集群 53端口,备用
nameserver 192.168.0.1
nameserver 192.168.0.2
nameserver 192.168.0.3

3. 基础维护

Server 端启动:

consul agent -config-dir=/consul/consul.d/ >> /software/consul/log/consul.log &

Client 端启动:

consul agent -config-dir=/consul/consul.d/ >> /software/consul/log/consul.log &

域名测试:

dig @127.0.0.1 -p 53 proxysql.service.consul
dig 6033-rw-app.proxysql.service.consul

退出 Consul:

--consul命令
consul leave

查看 Consul 集群信息:

--查看consul集群信息
consul members

4. 小结

本小节主要从实战角度介绍如何搭建 Consul 环境。

对一个企业级的核心系统来说,数据库架构在设计时必须考虑足够的高可用,这样才能最大程度的确保业务的连续性。MGR+ProxySQL+Consul 的架构三个层面各司其职,确保 MySQL 的高可用:

  • Consul:dns 解析、服务发现、健康检查;
  • ProxySQL:负载均衡、读写分离、故障发现;
  • MGR:单主模式、故障转移、强一致性。