数据库高可用负载均衡
# Mariadb Cluster+HAproxy+Keepalived
# 数据库集群的高可用设计
(1)熟悉 HAproxy 与 Keepalived 组件的作用、功能、使用场景等。
(2)熟悉 Mariadb Cluster+HAproxy+Keepalived 的架构与原理。
(3)能够搭建高可用数据库集群。
# HAProxy
HAProxy 是一个免费的负载均衡软件,可以运行于大部分主流的 Linux 操作系统上。
HAProxy 提供了 L4(TCP)和 L7(HTTP)两种负载均衡能力,具备丰富的功能。HAProxy 的社区非常活跃,版本更新快速。最关键的是,HAProxy 具备媲美商用负载均衡器的性能和稳定性。由于 HAProxy 的上述优点,它当前不仅仅是免费负载均衡软件的首选,更几乎成为了唯一选择。
⚫HAProxy 的核心功能
负载均衡
:L4 和 L7 两种模式,支持 RR、静态 RR、LC、IP Hash、URI Hash、 URL_PARAM Hash、HTTP_HEADER Hash 等丰富的负载均衡算法。健康检查:支持 TCP 和 HTTP 两种健康检查模式。会话保持
:对于未实现会话共享的应用集群,可通过 Insert Cookie/Rewrite Cookie/Prefix Cookie,以及上述的多种 Hash 方式实现会话0保0持。SSL
:HAProxy 可以解析 HTTPS 协议,并能够将请求解密为 HTTP 后向后端传输。 HTTP 请求重写与重定向监控与统计
:HAProxy 提供了基于 Web 的统计信息页面,展现健康状态和流量数据。基于此功能,使用者可以开发监控程序来监控 HAProxy 的状态从核心功能来看,Haproxy 实现的功能类似于 Nginx 的 L4、L7 反向代理。
⚫HAProxy 的关键特性性能
- 采用单线程、事件驱动、非阻塞模型,减少上下文切换的消耗,能在 1ms 内处理数百个请求。并且每个会话只占用数 KB 的内存。
- 大量精细的性能优化,如复杂度的事件检查器、延迟更新技术、 Single-buffereing、Zero-copy forwarding 等等,这些技术使得 HAProxy 在中等负载下只占用极低的 CPU 资源。
- HAProxy 大量利用操作系统本身的功能特性,使得其在处理请求时能发挥极高的性能,通常情况下,HAProxy 自身只占用 15%的处理时间,剩余的 85%都是在系统内核层完成的。
- HAProxy 作者在 11 年前(2009)年使用 1.4 版本进行了一次测试,单个 HAProxy 进程的处理能力突破了 10 万请求/秒,并轻松占满了 10Gbps 的网络带宽。
稳定性:
作为建议以单进程模式运行的程序,HAProxy 对稳定性的要求是十分严苛的。按照作者的说法,HAProxy 在 13 年间从未出现过一个会导致其崩溃的 BUG,HAProxy 一旦成功启动,除非操作系统或硬件故障,否则就不会崩溃(可能多少还是有夸大的成分)。
# Keepalived
⚫HAProxy 的大部分工作都是在操作系统内核完成的
,所以HAProxy 的稳定性主要依赖于操作系统,作者建议使用 2.6 或 3.x 的 Linux 内核,对 sysctls 参数进行精细的优化,并且确保主机有足够的内存。这样 HAProxy 就能够持续满负载稳定运行数年之久。
Keepalived 是集群管理中保证集群高可用的一个服务软件,其功能类似于 heartbeat,用来防止单点故障。
⚫Keepalived 是以 VRRP 协议为实现基础的,VRRP 全称 Virtual Router Redundancy Protocol,即虚拟路由冗余协议。
虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将 N 台提供相同功能的路由器组成一个路由器组,这个组里面有一个 master 和多个 backup,master 上面有一个对外提供服务的 VIP (该路由器所在局域网内其他机器的默认路由为该 VIP),master 会发组播,当 backup 收不到 vrrp 包时,就认为 master 宕掉了,这时就需要根据 VRRP 的优先级来选举一个 backup 当 master。这样的话就可以保证路由器的高可用了。
⚫Keepalived主要有3个模块
,分别是core、check和vrrp。core模块为Keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check 负责健康检查,包括常见的各种检查方式。vrrp 模块是来实现 VRRP 协议的。
⚫HAProxy 软件提供负载均衡服务,Keepalived 提供的高可用服务。
本案例中使用 Keepalived 及 HAProxy 来实现服务的高可用与负载均衡,防止单点故障。下面的实操案例中会介绍如何使用这两个软件配合,完成数据库集群的高可用与负载均衡。
首先实施案例的目的:
完成了 MariaDB Galera Cluster 集群的部署,搭建了一个多主的数据库集群,但是在项目真正使用的过程中,客户端指向了数据库集群的某一个节点,当这个节点出现问题时,虽然集群还能正常工作,但客户端无法正常访问数据库集群,需要手动将客户端指向的数据库节点 IP 修改成未出现问题的节点。这个时候,Keepalived 组件就派上用场了。Keepalived 服务提供一个虚拟的 VIP 地址,客户想要访问数据库集群的时候,并不需要访问具体的某一台,而是连接该虚拟 IP(VIP)。
node1(192.168.1.18)、node2(192.168.1.5)、node3(192.168.1.13),安装完 Keepalived 之后,会产生虚拟 IP(VIP:192.168.1.15)。客户使用数据库不需要连接 node1、node2 或者 node3 的实际 IP 地址,只需访问 VIP 地址 192.168.1.15,再由 Keepalived 决定实际访问的数据库 IP。若 VIP 地址在 node1 节点上,那么访问 VIP 地址实际就是访问 node1 节点。Keepalived 提供心跳检测服务,若 node1 节点发生了故障,VIP 会转移到其他的节点,对于用户访问不会产生任何影响,客户端连接的还是 VIP 地址(192.168.1.15),但是后台实际使用的数据库发生了变化。使用 Keepalived 和 MariaDB Galera Cluster 就构成了数据库的高可用。 那 HAProxy 什么时候发挥作用呢?
在通过 VIP 地址访问数据库服务的时候,实际访问的是某一个数据库,另外两个节点可以看做是备份数据库。因为要在 VIP 切换到其他节点的时候,实际访问的数据库才会切换。当访问量大的时候,单个数据库的访问会很容易达到瓶颈。这时候 HAProxy 服务就发挥作用了,HAProxy 提供了负载均衡服务,在 3 个数据库节点安装 HAProxy 服务,在通过 VIP 访问数据库服务的时候,会先通过 HAProxy 服务,然后选择后台访问的数据库节点,就能达到负载均衡的目的。
这样通过 Keepalived+HAProxy+MariaDB Galera Cluster 就搭建了一个高可用、负载均衡的数据库集群。
客户端通过 VIP 地址访问数据库服务,就跟访问单节点没什么两样,但后台会根据当前 VIP 地址在哪个节点上,访问该节点的HAProxy 服务,再根据 HAProxy 服务设置的负载均衡规则,访问实际的数据库。
# 规划节点
系统 | IP 地址 | 节点 | |
---|---|---|---|
node1 | CentOS7.5-1708 | 192.168.1.18 | 高可用集群中一节点 |
node2 | CentOS7.5-1708 | 192.168.1.5 | 高可用集群中一节点 |
node3 | CentOS7.5-1708 | 192.168.1.13 | 高可用集群中一节点 |
# HAProxy负载均衡服务
# 1.安装Haproxy
⚫使用搭建数据库高可用集群的环境,node1、node2、node3 节点来完成 MariaDB Galera Cluster+HAProxy 负载均衡。
⚫3 个节点均安装 HAProxy 服务
[root@node1 ~]# yum install haproxy -y
[root@node2 ~]# yum install haproxy -y
[root@node3 ~]# yum install haproxy -y
# 2.配置Haproxy
⚫使用 node1 节点,体验 HAProxy 负载均衡服务,修改 node1 节点的 HAProxy配置文件/etc/haproxy/haproxy.cfg 。
⚫将 haproxy.cfg 配置文件原来的内容删除,替换为如下代码,注意修改 listen stats 和 listen mariadb 字段下的 IP 地址为实际 IP 地址
[root@node1 ~]# cat /etc/haproxy/haproxy.cfg
global
# to have these messages end up in /var/log/haproxy.log you will
# need to:
#
# 1) configure syslog to accept network log events. This is done
# by adding the '-r' option to the SYSLOGD_OPTIONS in
# /etc/sysconfig/syslog
#
# 2) configure local2 events to go to the /var/log/haproxy.log
# file. A line like the following can be added to
# /etc/sysconfig/syslog
#
# local2.* /var/log/haproxy.log
#
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon
# turn on stats unix socket
stats socket /var/lib/haproxy/stats
#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
mode http
log global
option httplog
option dontlognull
option http-server-close
option forwardfor except 127.0.0.0/8
option redispatch
retries 3
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 3000
#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
listen stats
bind 192.168.1.18:9000
mode http
stats enable
stats uri /stats
stats auth admin:admin
stats admin if TRUE
listen mariadb
balance roundrobin
mode tcp
option tcplog
option tcpka
bind 192.168.1.18:3307
server node1 192.168.1.18:3306 check weight 1
server node2 192.168.1.5:3306 check weight 1
server node3 192.168.1.13:3306 check weight 1
# 3.Haproxy配置解析
在这个配置文件中,要关注的地方主要为 listen mariadb 的各个配置,配置解析如下:
⚫balance roundrobin:
新连接定向到循环顺序列表中的下一个目标,并通过服务器的权重进行修改。关于 balance 的模式还有 source、leastconn、static-rr 等,关于其他的模式,读者可以自行去了解。
⚫mode tcp:
定义路由的连接类型。Galera Cluster 使用 TCP 连接。
⚫option tcpka:
启用 Keepalived 功能以维护 TCP 连接。
⚫bind 192.168.1.18:3307:
HAProxy 服务监听的 IP 及端口,因为使用的是 node1 节点,所以不能监听 3306 端口,会产生冲突。当启用 Keepalived 服务后,可写成 VIP:3306。
⚫server node1 192.168.1.18:3306 check weight 1:
定义 HAProxy 在路由连接中使用的节点。check 代表接受检查,weight 1 代表权重。
修改完配置文件后,开启 node1 节点的 HAProxy 服务,并查看端口启动状。
[root@node1 ~]# systemctl start haproxy
[root@node1 ~]# netstat -ntpl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address
State PID/Program name tcp 0 0 192.168.200.11:3307 0.0.0.0:*
LISTEN 83132/haproxy tcp 0 0 0.0.0.0:22 0.0.0.0:*
LISTEN 935/sshd tcp 0 0 0.0.0.0:4567 0.0.0.0:*
LISTEN 11910/mysqld tcp 0 0 127.0.0.1:25 0.0.0.0:*
LISTEN 1207/master tcp 0 0 192.168.200.11:9000 0.0.0.0:*
LISTEN 83132/haproxy tcp6 0 0 :::22 :::*
LISTEN 935/sshd tcp6 0 0 ::1:25 :::*
LISTEN 1207/master tcp6 0 0 :::3306 :::*
LISTEN 11910/mysqld
# 4.检查负载情况
可以看见192.168.1.18:3307 和 192.168.1.18:9000 端口启动,可以通过 Web 界面查看 HAProxy 服务的状态。使用网页访问 192.168.1.18:9000/stats,(登录用户名和密码均为 admin)。
# 5.优化数据库
回到 HAProxy 负载均衡服务,现在对于使用者而言,统一窗口是192.168.1.18 :3307,HAProxy 会把工作分散到不同台的 node1,node2,node3
(这几个 Node 的资料也会同步)。
[root@node1 ~]# mysql -h 192.168.1.18 -P 3307 -uroot -p000000
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 14
Server version: 10.3.22-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
⚫使用 3307 端口能够访问数据库服务,但是不确定 HAProxy 功能是否正常,因为不确定后台访问的数据库到底是哪一台,所以通过下面的方式来验证。
⚫每一台的 MySQL/MariaDB 都可以设定属于自己的 server_id ,设定 3 个节点数据库不同的 server_id 。
[root@node1 ~]# mysql -h 192.168.1.18 -uroot -p000000 -e "SET GLOBAL server_id=18"
[root@node1 ~]# mysql -h 192.168.1.5 -uroot -p000000 -e "SET GLOBAL server_id=5"
[root@node1 ~]# mysql -h 192.168.1.13 -uroot -p000000 -e "SET GLOBAL server_id=13"
现在 3 个数据库节点拥有自己的专属的 ID,当通过 HAProxy 服务器访问的时候,能确定 HAProxy 服务是否正常运行。
[root@node1 ~]# mysql -h 192.168.1.18 -P 3307 -uroot -p000000 -e "show variables like 'server_id'"
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 18 |
+---------------+-------+
[root@node1 ~]# mysql -h 192.168.1.18 -P 3307 -uroot -p000000 -e "show variables like 'server_id'"
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 5 |
+---------------+-------+
[root@node1 ~]# mysql -h 192.168.1.18 -P 3307 -uroot -p000000 -e "show variables like 'server_id'"
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 13 |
+---------------+-------+
可以看到每次访问的数据库节点发生了变化,验证 HAProxy 负载均衡服务成功。
# Keepalived高可用服务
对于用户来说,只需访问 192.168.1.18:3307 端口,就能使用数据库,而后台具体选择哪台数据库,会由 HAProxy 来选择。当把 3 个节点都装上 HAProxy 后。每个节点都有负载均衡的功能,但是对于用户来讲,当 node1 的 HAProxy 出现问题,用户还需要手动修改配置文件来使用 node2 节点的负载均衡服务,这对于用户来讲,显然是不太合理的。
这时候就需要用到 Keepalived 提供的虚拟 IP 服务(VIP 服务),用户通过 VIP 来访问数据库,由 Keepalived 选择使用哪个节点的 HAProxy 负载均衡服务,再由 HAProxy 选择后台的某个数据库节点。这样就完成了Keepalived+HAProxy+MariaDB Galera Cluster 高可用负载均衡数据库集群。
# 1.安装Keepalived
⚫基于Haproxy架构的Galera集群配置Keepalived。
⚫部署 Keepalived 服务,首先在 3 个节点上安装 Keepalived 服务。
[root@node1 ~]# yum install keepalived -y
[root@node2 ~]# yum install keepalived -y
[root@node3 ~]# yum install keepalived -y
# 2.配置Keepalived
⚫修改 3 个节点的 Keepalived 配置文件/etc/keepalived/keepalived.conf,修改成如下:
⚫node1 节点:(需要将 interface eth0 修改成当前网卡,virtual_ipiddress 修改为服务器集群同一段内的地址,priority 130 权重设置为 130)
[root@node1 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
#简单的头部,这里主要可以做邮件通知报警等的设置,此处就暂不配置了
global_defs {
notificationd LVS_DEVEL
}
#预先定义一个脚本,方便后面调用,也可以定义多个,方便选择;
vrrp_script chk_haproxy{
script "/etc/keepalived/chk.sh"
#脚本循环运行间隔
interval 2
}
#VRRP 虚拟路由冗余协议配置
vrrp_instance VI_1 { #VI_1 是自定义的名称;
#MASTER 表示是一台主设备,BACKUP 表示为备用设备【我们这里因为设置为开启不抢占,所以都设置为备用】
state BACKUP
#开启不抢占
nopreempt
#指定 VIP 需要绑定的物理网卡
interface eth0
#VRID 虚拟路由标识,也叫做分组名称,该组内的设备需要相同
virtual_router_id 51
#定义这台设备的优先级 1~254;开启了不抢占,所以此处优先级必须高于另一台
priority 130
#生存检测时的组播信息发送间隔,组内一致
advert_int 1
authentication { #设置验证信息,组内一致
#有 PASS 和 AH 两种,常用 PASS
auth_type PASS
#密码
auth_pass 1111
}
virtual_ipaddress {
#指定 VIP 地址,组内一致,可以设置多个 IP
192.168.1.15
}
track_script{ #使用在这个域中使用预先定义的脚本,上面定义的
chk_haproxy
}
}
⚫node2 节点:(需要将 interface eth0 修改成当前网卡,virtual_ipiddress 修改为服务器集群同一段内的地址,priority 120 权重设置为 120)
[root@node2 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notificationd LVS_DEVEL
}
vrrp_script chk_haproxy{
script "/etc/keepalived/chk.sh"
interval 2
}
vrrp_instance VI_1 {
state BACKUP
nopreempt
interface eth0
virtual_router_id 51
priority 120
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.15
}
track_script{
chk_haproxy
}
}
⚫node3 节点:(需要将 interface eth0 修改成当前网卡,virtual_ipiddress 修改为服务器集群同一段内的地址,priority 110 权重设置为 110)
[root@node3 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notificationd LVS_DEVEL
}
vrrp_script chk_haproxy{
script "/etc/keepalived/chk.sh"
interval 2
}
vrrp_instance VI_1 {
state BACKUP
nopreempt
interface eth0
virtual_router_id 51
priority 110
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.15
}
track_script{
chk_haproxy
}
}
# 3.启动Keepalived
⚫修改完 3 个节点的配置文件确认无误后,启动 3 个节点的 Keepalived 服务
⚫会产生配置文件中设置的虚拟机 IP 地址 192.168.1.15,因为 3 个节点中 node1 设置的权重最高,所以 VIP 会在 node1 节点上。
[root@node1 ~]# systemctl start keepalived
[root@node2 ~]# systemctl start keepalived
[root@node3 ~]# systemctl start keepalived
[root@node1 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether fa:16:3e:54:5c:e7 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.18/24 brd 192.168.1.255 scope global dynamic eth0
valid_lft 61891sec preferred_lft 61891sec
inet 192.168.1.15/32 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::f816:3eff:fe54:5ce7/64 scope link
valid_lft forever preferred_lft forever
至此,Keepalived 高可用的配置完成。接下来要配置 HAProxy 服务来对接Keepalived。
# 4.配置Haproxy
⚫在之前的 HAProxy 配置文件中,监听的数据库端口为 192.168.1.18:3307,现在 VIP 服务已经准备完毕,修改 HAProxy 配置,监听 VIP:3306。3 个节点修改配置文件如下
⚫node1:
[root@node1 ~]# cat /etc/haproxy/haproxy.cfg
listen stats
bind 192.168.1.18:9000 #这里修改成IP:9000
mode http
stats enable
stats uri /stats
stats auth admin:admin
stats admin if TRUE
listen mariadb
balance roundrobin
mode tcp
option tcplog
option tcpka
bind 192.168.1.15:3306 #只需要将这部分的改成VIP:3306
server node1 192.168.1.18:3306 check weight 1
server node2 192.168.1.5:3306 check weight 1
server node3 192.168.1.13:3306 check weight 1
⚫node2:
[root@node3 ~]# cat /etc/haproxy/haproxy.cfg
listen stats
bind 192.168.1.5:9000 #这里修改成IP:9000
mode http
stats enable
stats uri /stats
stats auth admin:admin
stats admin if TRUE
listen mariadb
balance roundrobin
mode tcp
option tcplog
option tcpka
bind 192.168.1.15:3306 #只需要将这部分的改成VIP:3306
server node1 192.168.1.18:3306 check weight 1
server node2 192.168.1.5:3306 check weight 1
server node3 192.168.1.13:3306 check weight 1
⚫node3:
[root@node3 ~]# cat /etc/haproxy/haproxy.cfg
listen stats
bind 192.168.1.13:9000 #这里修改成IP:9000
mode http
stats enable
stats uri /stats
stats auth admin:admin
stats admin if TRUE
listen mariadb
balance roundrobin
mode tcp
option tcplog
option tcpka
bind 192.168.1.15:3306 #只需要将这部分的改成VIP:3306
server node1 192.168.1.18:3306 check weight 1
server node2 192.168.1.5:3306 check weight 1
server node3 192.168.1.13:3306 check weight 1
# 5.配置sysctl
⚫修改完配置文件,在重启服务前还需做一项操作,修改 3 个节点的/etc/sysctl.conf 文件,添加 net.ipv4.ip_nonlocal_bind = 1 和 net.ipv4.ip_forward = 1
⚫添加完之后使用命令 sysctl -p 生效
[root@node1 ~]# sysctl -p
net.ipv4.ip_nonlocal_bind = 1
net.ipv4.ip_forward = 1
# 6.重启Haproxy
⚫重启 node1 节点的 Haproxy 服务,并启动 node2 与 node3的 Haproxy 服务。
⚫查看 3 个节点的端口开放情况
[root@node1 ~]# systemctl restart haproxy
[root@node2 ~]# systemctl start haproxy
[root@node3 ~]# systemctl start haproxy
[root@node1 ~]# netstat -ntpl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 192.168.1.18:9000 0.0.0.0:* LISTEN 12378/haproxy
tcp 0 0 192.168.1.15:3306 0.0.0.0:* LISTEN 12378/haproxy
tcp 0 0 192.168.1.18:3306 0.0.0.0:* LISTEN 1813/mysqld
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 502/rpcbind
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1173/sshd
tcp 0 0 0.0.0.0:4567 0.0.0.0:* LISTEN 1813/mysqld
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 978/master
tcp6 0 0 :::111 :::* LISTEN 502/rpcbind
tcp6 0 0 :::22 :::* LISTEN 1173/sshd
tcp6 0 0 ::1:25 :::* LISTEN 978/master
至此,Keepalived+HAProxy+MariaDB Galera Cluster 集群搭建完毕,在任意一个 node 节点(这边使用 node1)访问 VIP:3306。
通过访问 VIP:3306 的结果,同样得到了负载均衡的效果。
[root@node1 ~]# mysql -h 192.168.1.15 -P 3306 -uroot -p000000 -e "show variables like 'server_id'"
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 18 |
+---------------+-------+
[root@node1 ~]# mysql -h 192.168.1.15 -P 3306 -uroot -p000000 -e "show variables like 'server_id'"
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 5 |
+---------------+-------+
[root@node1 ~]# mysql -h 192.168.1.15 -P 3306 -uroot -p000000 -e "show variables like 'server_id'"
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 13 |
+---------------+-------+