服务器维护,服务器代维,安全设置,漏洞扫描,入侵检测服务

运维之家

 找回密码
 注册
搜索
查看: 3957|回复: 0

mysql高可用——MMM架构部署

[复制链接]
dirtysea 发表于 2021-5-7 16:58:30 | 显示全部楼层 |阅读模式
mysql高可用架构有MHA、MMM、PXC、MGR等,其中MHA和MMM的数据一致性相比较PXC和MGR要差一些,因为PXC和MGR是强一致性,其实现原理这里不过多介绍,这篇博文主要是将MMM高可用架构写下来。

MMM是基于perl实现的,关于mysql主主复制配置的监控、故障转移和管理的一套可伸缩的脚本套件(在任何时候只有一个节点可以被写入),MMM也能对从服务器进行读负载均衡,所以可以用它来在一组用于复制的服务器启动虚拟IP,除此之外,它还有实现数据备份、节点之间重新同步功能的脚本。通过MMM方案能实现服务器的故障转移,从而实现mysql的高可用。MMM不仅能提供浮动IP的功能,如果当前的主服务器挂掉后,会将你后端的从服务器自动转向新的主服务器进行同步复制,而不用手工更改同步配置。

MMM方案并不太适合对数据安全性要求很高,并且读、写繁忙的环境中,它更使用于数据库访问量大,并且能实现读写分离的场景。

MMM的主要功能由以下三个角色提供:

mmm_mond:负责所有的监控工作的监控守护进程,决定节点的移除(mmm_mond进程定时心跳检测,失败则将write ip浮动到另外一台master)等等。
mmm_agentd:运行在mysql服务器上的代理守护进程,通过简单远程服务集提供给监控节点。
mmm_control:通过命令行管理mmm_monitor用户和一个mmm_agent用户,如果要使用mmm的备份工具,则还需要添加一个mmm_tools用户。
一、环境准备
系统        主机名&角色        IP        VIP(虚拟IP)
centos 7.5        monitor        192.168.20.2
centos 7.5        master1        192.168.20.3        192.168.20.30(写IP)
centos 7.5        master2        192.168.20.4        192.168.20.40 (读IP)
centos 7.5        slave1        192.168.20.5        192.168.20.50 (读IP)
centos 7.5        slave2        192.168.20.6        192.168.20.60 (读IP)
二、部署前准备(在所有节点上进行以下操作)
1、安装依赖
[root@master1 ~]# yum -y install perl-* libart_lgpl.x86_64 rrdtool.x86_64 rrdtool-perl.x86_64
2、准备hosts文件
[root@master1 ~]# cat >> /etc/hosts << EOF
> 192.168.20.2   monitor
> 192.168.20.3   master1
> 192.168.20.4   master2
> 192.168.20.5   slave1
> 192.168.20.6   slave2
> EOF
3、安装cpan包
[root@master1 ~]# cpan    #进入cpan交互默认

#执行cpan指令后,需要按几次回车键,直到出现以下内容:
cpan shell -- CPAN exploration and modules installation (v1.9800)
Enter 'h' for help.

cpan[1]>
# 在cpan交互模式中,如果输入错误,无法直接删除,需要按CTRL+“删除”键进行删除。
cpan[2]> o conf urllist   #查看cpan源,默认为国外的源
    urllist           
    0 [http://mirror-hk.koddos.net/CPAN/]
    1 [http://mirror.0x.sg/CPAN/]
    2 [http://mirror.downloadvn.com/cpan/]
Type 'o conf' to view all configuration items

# 依次移除默认的cpan源(国外源下载比较慢)
cpan[3]> o conf urllist pop http://mirror-hk.koddos.net/CPAN/
Please use 'o conf commit' to make the config permanent!

cpan[4]> o conf urllist pop http://mirror.0x.sg/CPAN/
Please use 'o conf commit' to make the config permanent!

cpan[5]> o conf urllist pop http://mirror.downloadvn.com/cpan/
Please use 'o conf commit' to make the config permanent!

cpan[6]> o conf commit       #提交修改
commit: wrote '/root/.local/share/.cpan/CPAN/MyConfig.pm'

cpan[7]> o conf urllist            #确认移除完成
    urllist           
Type 'o conf' to view all configuration items

# 添加国内的cpan源
cpan[8]> o conf urllist push http://mirrors.aliyun.com/CPAN/
Please use 'o conf commit' to make the config permanent!

cpan[9]> o conf urllist push ftp://mirrors.sohu.com/CPAN/
Please use 'o conf commit' to make the config permanent!

cpan[10]> o conf urllist push http://mirrors.163.com/cpan/
commit: wrote '/root/.local/share/.cpan/CPAN/MyConfig.pm'

cpan[11]> o conf commit        #提交更改
commit: wrote '/root/.local/share/.cpan/CPAN/MyConfig.pm'

cpan[12]> o conf urllist     #确认更改源成功
    urllist           
    0 [http://mirrors.aliyun.com/CPAN/]
    1 [ftp://mirrors.sohu.com/CPAN/]
    2 [http://mirrors.163.com/cpan/]
Type 'o conf' to view all configuration items

cpan[1]> exit   # 退出cpan 交互模式

# 安装相关cpan包
[root@master1 ~]# cpan -i Algorithm::Diff Class::Singleton DBI DBD::mysql Log::Dispatch Log::Log4perl Mail::Send Net::Ping Proc::Daemon Time::HiRes Params::Validate Net::ARP
4、配置时间同步
此步骤用来保证参与集群的主机时间一致性,在任何类型的集群中,时间保证一致,可以避免很多意想不到的问题。

在配置时间同步时,可以将参与的节点中其中一台更改如下(这里更改的时master1):

[root@master1 ~]# vim /etc/chrony.conf      #修改如下,指定为阿里的时间服务器
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst
server ntp3.aliyun.com iburst

allow 192.168.20.0/24           #设置允许同步的网段
[root@master1 ~]# systemctl restart chronyd.service    #重启服务,以便生效
然后在其他节点上将server指向上面的master1即可。如下:

[root@monitor ~]# egrep -v '^#|^$' /etc/chrony.conf
server master1 iburst
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
logdir /var/log/chrony
更改配置文件后需要执行以下命令重启服务:

[root@monitor ~]# systemctl restart chronyd.service
至此,准备工作基本完成了。

接下来要做的,就是将master1和master2做双主(互为主从),然后slave1和slave2为master1的从,这样的话,可以实现,一旦master1宕机,slave1和slave2会自动切换主为master2。

三、部署主从复制
注意,这一步是要配置master2、slave1、slave2为master1的从服务器,master1主机为master2的从服务器。

1、修改各个主机的配置文件
1)master1的mysql服务配置文件如下:
[root@master1 ~]# cat /etc/my.cnf
[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
port=3306
socket=/usr/local/mysql/mysql.sock
log-error=/usr/local/mysql/data/mysqld.err
log-bin = mysql-bin        # 指定二进制日志文件名
binlog_format = mixed       # 记录二进制日志的方式,mixed为混合模式
server-id = 1         # server id,每个节点必须有唯一的server id
#以下两条是中继日志相关配置
relay-log = relay-bin
relay-log-index = slave-relay-bin.index
log-slave-updates = 1
#以下是为了防止自增键冲突而设置的
auto-increment-increment = 2
auto-increment-offset = 1
2)master2的mysql服务配置文件如下:
[root@master2 ~]# cat /etc/my.cnf
[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
port=3306
socket=/usr/local/mysql/mysql.sock
log-error=/usr/local/mysql/data/mysqld.err
log-bin = mysql-bin
binlog_format = mixed
server-id = 2
relay-log = relay-bin
relay-log-index = slave-relay-bin.index
log-slave-updates = 1
auto-increment-increment = 2
auto-increment-offset = 2
3)slave1主机如下:
[root@slave1 ~]# cat /etc/my.cnf
[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
port=3306
server_id=3
socket=/usr/local/mysql/mysql.sock
log-error=/usr/local/mysql/data/mysqld.err
relay-log = relay-bin
relay-log-index = slave-relay-bin.index
read_only = 1
4)slave2主机如下:
[root@slave2 ~]# cat /etc/my.cnf
[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
port=3306
server_id=4
socket=/usr/local/mysql/mysql.sock
log-error=/usr/local/mysql/data/mysqld.err
relay-log = relay-bin
relay-log-index = slave-relay-bin.index
read_only = 1
以下命令在以下所有主机上执行(monitor主机除外)

[root@master1 ~]# systemctl restart mysqld       #如果更改了mysql配置文件,需要重启mysql服务
#防火墙放行mysql的3306端口
[root@master1 ~]# firewall-cmd --add-port=3306/tcp --permanent
success
[root@master1 ~]# firewall-cmd --reload
2、master主机创建从服务器所需用户并查看状态
# 主机master1创建同步用户如下:
mysql> grant replication slave on *.* to rep@'192.168.20.%' identified by '123.com';
Query OK, 0 rows affected, 1 warning (0.01 sec)
mysql> flush privileges;
# 由于master2主机也是主服务器,所以需要创建一样的用户名及密码,否则slave无法正常切换到master2主机
#主机master2操作如下:

mysql> grant replication slave on *.* to rep@'192.168.20.%' identified by '123.com';
Query OK, 0 rows affected, 1 warning (0.01 sec)

mysql> flush privileges;
3、查看主机master1的mysql状态
mysql> show master status\G
*************************** 1. row ***************************
             File: mysql-bin.000002       #需要用到这个值
         Position: 609                    #还需要用到这个值
     Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)
4、在master2、slave1及slave2主机上分别执行下面执行,以便指定master1为主服务器
#指定master1主机的信息,master_log_file和master_log_pos的值为master1主机查看到的值
mysql> change master to
    -> master_host='192.168.20.3',
    -> master_port=3306,
    -> master_user='rep',
    -> master_password='123.com',
    -> master_log_file = 'mysql-bin.000002',
    -> master_log_pos=609;
#启动slave同步
mysql> start slave;
#确定slave状态没有问题
mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.20.3
                  Master_User: rep
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000002
          Read_Master_Log_Pos: 609
               Relay_Log_File: relay-bin.000002
                Relay_Log_Pos: 320
        Relay_Master_Log_File: mysql-bin.000002
             Slave_IO_Running: Yes    #这里要为“Yes”
            Slave_SQL_Running: Yes     #这里也要为“Yes”
               .................#省略部分内容
如果Slave_IO_Running和Slave_SQL_Running都为yes,那么主从就已经配置OK了。但还没有完,由于master1和master2互为主从,所以还需要指定master1主机的主服务器为master2。

5、查看master2主机的状态
#在master2主机上查看master状态
mysql> show master status\G      
*************************** 1. row ***************************
#需要的是file和postition两个值
             File: mysql-bin.000002
         Position: 609
     Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)
6、在master1主机上指定master2为主服务器
#以下指令在master1主机执行
mysql> change master to
    -> master_host='192.168.20.4',
    -> master_port=3306,
    -> master_user='rep',
    -> master_password='123.com',
    -> master_log_file = 'mysql-bin.000002',
    -> master_log_pos=609;
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

mysql> show slave status\G     #查看slave状态

*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.20.4
                  Master_User: rep
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000002
          Read_Master_Log_Pos: 609
               Relay_Log_File: relay-bin.000002
                Relay_Log_Pos: 320
        Relay_Master_Log_File: mysql-bin.000002
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
#确定Slave_IO_Running和Slave_SQL_Running两个值为“yes”即可。
至此,主从复制就完全没有问题了。下面开始配置MMM。

四、部署配置MMM
1、创建代理账号及监控账号(在主机master1上执行即可)
#创建代理账号
mysql> grant super,replication client,process on *.* to 'mmm_agent'@'192.168.20.%' identified by '123.com';

#创建监控账号
mysql> grant replication client on *.* to 'mmm_monitor'@'192.168.20.%' identified by '123.com';
由于做了主从复制,所以上述操作只需要在master1这个主服务器上进行创建,其他mysql主机便自动有了这些账号。

在所有mysql节点上执行以下命令进行检查是否有相应的账号:

mysql>  select user,host from mysql.user where user in('mmm_monitor','mmm_agent');
+-------------+--------------+
| user        | host         |
+-------------+--------------+
| mmm_agent   | 192.168.20.% |
| mmm_monitor | 192.168.20.% |
+-------------+--------------+
2 rows in set (0.00 sec)
注:

mmm_monitor用户:mmm监控用于对mysql服务器进程健康检查。
mmm_agent用户:mmm代理用来更改只读模式,复制的主服务器等。
2、在所有主机上安装mysql-mmm程序
下载我提供的msyql-mmm源码包,并上传至所有主机。

所有主机上(我这里是两台master,两台slave,一台monitor监控,共五台主机)都需要执行以下命令进行安装mmm:

[root@monitor src]# tar zxf mysql-mmm-2.2.1.tar.gz
[root@monitor src]# cd mysql-mmm-2.2.1/
[root@monitor mysql-mmm-2.2.1]# make install
3、编写mmm配置文件,五台主机的mmm_common.conf文件内容必须一致
#配置文件修改如下:
[root@monitor ~]# grep -v ^$ /etc/mysql-mmm/mmm_common.conf
active_master_role  writer   #积极的master角色的标示,所有mysql服务器要开启read_only参数,对于writer服务器监控代理会自动将read_only属性关闭
<host default>
    cluster_interface       ens33     #承载虚拟IP的网络接口
    pid_path                /var/run/mmm_agentd.pid
    bin_path                /usr/lib/mysql-mmm/
    replication_user        rep            #复制用户名
    replication_password    123.com     #对应的复制用户名密码
    agent_user              mmm_agent        #代理用户名
    agent_password          123.com      #对应的代理用户名密码
</host>
<host master1>      #主机master1的host名
    ip                  192.168.20.3     #master1主机的IP
    mode                    master          #角色属性,master代表主
    peer                    master2      #与master1对等的服务器的host名,也就是master2的host名
</host>
<host master2>    #和上面master1的概念一样
    ip                  192.168.20.4
    mode                    master
    peer                    master1
</host>
<host slave1>    #指定从库的host名,如果有多个存库,可以重复一样的配置
    ip                  192.168.20.5
    mode                    slave
</host>
<host slave2>   #第二个slave主机
    ip                  192.168.20.6
    mode                    slave
</host>
<role writer>    # write角色配置
    hosts                   master1,master2    # 指定可以进行写操作的主机名,如果不想切换写操作,这里也可以只写一个master主机,可以避免因网络延时而进行write的切换,但是一旦唯一的master故障,那么当前的MMM就没有write了,只有对外的read操作。
    ips                 192.168.20.30          #定义的写操作的虚拟IP。
    mode                    exclusive
</role>
<role reader>
    hosts                   master2,slave1,slave2     # 对外提供读操作的服务器host名,当然,这里也可以将master加进来。
    ips                 192.168.20.40,192.168.20.50,192.168.20.60
# 对外提供读操作的虚拟IP,这三个IP和host不是一一对应的,并且ips和hosts的数目也可以不相同,但不建议ips数量比实际读主机的数量少,如果多的话,一个主机会分配多个虚拟IP。
    mode                    balanced     #balanced代表负载均衡。
</role>
完整无注释的配置文件如下:

[root@monitor ~]# grep -v ^$ /etc/mysql-mmm/mmm_common.conf
active_master_role  writer
<host default>
    cluster_interface       ens33
    pid_path                /var/run/mmm_agentd.pid
    bin_path                /usr/lib/mysql-mmm/
    replication_user        rep
    replication_password    123.com
    agent_user              mmm_agent
    agent_password          123.com
</host>
<host master1>
    ip                  192.168.20.3
    mode                    master
    peer                    master2
</host>
<host master2>
    ip                  192.168.20.4
    mode                    master
    peer                    master1
</host>
<host slave1>
    ip                  192.168.20.5
    mode                    slave
</host>
<host slave2>
    ip                  192.168.20.6
    mode                    slave
</host>
<role writer>
    hosts                   master1,master2
    ips                 192.168.20.30
    mode                    exclusive
</role>
<role reader>
    hosts                   master2,slave1,slave2
    ips                 192.168.20.40,192.168.20.50,192.168.20.60
    mode                    balanced
</role>
4、将编写好的配置文件发送到其他主机节点
[root@monitor ~]# for host in master1 master2 slave1 slave2 monitor ; do scp /etc/mysql-mmm/mmm_common.conf $host:/etc/mysql-mmm/ ; done
#自行在每台主机上确定文件已经复制过来
5、在master1、master2、slave1、slave2主机上修改mmm_agent.conf配置文件如下:
[root@master1 ~]# vim /etc/mysql-mmm/mmm_agent.conf

include mmm_common.conf
this master1   #将this   ....  后面指定为本机的host主机名
#依次类推,master2主机就应该修改为:this master2
6、修改mysql-mmm-agent的启动脚本文件
[root@master1 ~]# vim /etc/init.d/mysql-mmm-agent

#!/bin/sh         #在第一行下面添加以下内容
source ~/.bash_profile
# 将修改后的启动脚本分发到其他主机
[root@master1 ~]# for host in master1 master2 slave1 slave2 monitor ; do scp /etc/init.d/mysql-mmm-agent $host:/etc/init.d/ ; done
注:添加source /root/.bash_profile目的是为了mysql-mmm-agent服务能启机自启。 自动启动和手动启动的唯一区别,就是激活一个console 。那么说明在作为服务启动的时候,可能是由于缺少环境变量,服务启动失败。

7、除monitor主机外其他主机都启动mmm-agent服务
[root@master1 ~]# chkconfig --add mysql-mmm-agent    #添加为系统服务
[root@master1 ~]# chkconfig mysql-mmm-agent on    #加入开机自启
[root@master1 ~]# systemctl start mysql-mmm-agent     #启动服务
[root@master1 ~]# ss -lnpt | grep mmm_agent      #确定服务启动成功
LISTEN     0      10     192.168.20.3:9989                     *:*                   users:(("mmm_agentd",pid=79799,fd=3))
#防火墙放行相关流量
[root@master1 ~]# firewall-cmd --add-port=9989/tcp --permanent
success
[root@master1 ~]# firewall-cmd --reload
如果启动失败,日志显示如下:

[root@master1 ~]# /etc/init.d/mysql-mmm-agent start
Daemon bin: '/usr/sbin/mmm_agentd'
Daemon pid: '/var/run/mmm_agentd.pid'
Starting MMM Agent daemon... Can't locate Proc/Daemon.pm in @INC (@INC contains: /root/perl5/lib/perl5/x86_64-linux-thread-multi /root/perl5/lib/perl5 /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /usr/sbin/mmm_agentd line 7.
BEGIN failed--compilation aborted at /usr/sbin/mmm_agentd line 7.
failed
请执行如下命令:

[root@master1 ~]# cpan Proc::Daemon Log::Log4perl
#再次启动即可启动成功
[root@master1 ~]# /etc/init.d/mysql-mmm-agent start
Daemon bin: '/usr/sbin/mmm_agentd'
Daemon pid: '/var/run/mmm_agentd.pid'
Starting MMM Agent daemon... Ok
8、配置monitor主机配置文件
[root@monitor ~]# cat /etc/mysql-mmm/mmm_mon.conf   #修改后的配置文件如下
include mmm_common.conf

<monitor>
    ip                      127.0.0.1    #为了安全性,设置只在本机监听,默认监听端口9988
    pid_path                /var/run/mmm_mond.pid
    bin_path                /usr/lib/mysql-mmm/
    status_path             /var/lib/misc/mmm_mond.status
    ping_ips                192.168.20.3,192.168.20.4,192.168.20.5,192.168.20.6
#上面的IP都是用用于测试网络可用性Ip地址列表,只要有其中一个IP地址ping通,就代表网络正常,这里不要写入本机地址
</monitor>
<check default>
    check_period 5    #检查周期默认为5s
    trap_period 10    #一个节点被检测不成功的时间持续trap_period秒,就认为这个节点失败了
    timeout 2       #检查超时的时间
    max_backlog  86400      #记录检查rep_backlog日志的最大次数
</check>
<host default>
    monitor_user            mmm_monitor     #监控数据库服务的用户名
    monitor_password        123.com      #上面用户名对应的密码
</host>
debug 0    # 0为正常模式,1为debug模式
完整无注释的配置文件如下:

[root@monitor ~]# cat /etc/mysql-mmm/mmm_mon.conf
include mmm_common.conf

<monitor>
    ip                      127.0.0.1
    pid_path                /var/run/mmm_mond.pid
    bin_path                /usr/lib/mysql-mmm/
    status_path             /var/lib/misc/mmm_mond.status
    ping_ips                192.168.20.3,192.168.20.4,192.168.20.5,192.168.20.6
</monitor>
<check default>
    check_period 5
    trap_period 10
    timeout 2
    max_backlog  86400
</check>
<host default>
    monitor_user            mmm_monitor
    monitor_password        123.com
</host>
debug 0
9、启动monitor服务
[root@monitor ~]# head -2 /etc/init.d/mysql-mmm-monitor
#!/bin/sh         #在启动脚本的第二行写入以下内容
source ~/.bash_profile
[root@monitor ~]# chkconfig --add mysql-mmm-monitor   #添加为系统服务
[root@monitor ~]# chkconfig mysql-mmm-monitor on      #设置开机自启
[root@monitor ~]# systemctl start mysql-mmm-monitor    #启动monitor服务
[root@monitor ~]# ss -lnpt | grep 9988    #启动稍等一会,再查看端口是否在监听
LISTEN     0      10     127.0.0.1:9988                     *:*                   users:(("mmm_mond",pid=2381,fd=3))
同样,如果报错如下,则执行命令“cpan Proc::Daemon Log::Log4perl”安装perl库即可:
Starting MMM Monitor daemon: Can not locate Proc/Daemon.pm in @INC (@INC contains:
/usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl
/usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at
/usr/sbin/mmm_mond line 11.
BEGIN failed--compilation aborted at /usr/sbin/mmm_mond line 11.
failed
10、设置agent端在线
注:无论是在db端还是在监控端如果有对配置文件进行修改操作都需要重启代理进程和监控进程。MMM正确的启动顺序:先启动monitor,再启动 agent 检查集群状态。

[root@monitor ~]# mmm_control show   #查看群集状态
  master1(192.168.20.3) master/AWAITING_RECOVERY. Roles:
  master2(192.168.20.4) master/AWAITING_RECOVERY. Roles:
  slave1(192.168.20.5) slave/AWAITING_RECOVERY. Roles:
  slave2(192.168.20.6) slave/AWAITING_RECOVERY. Roles:

#如果服务状态不是online,可以用如下命令将服务器上线(四个主机分别设置为在线状态)
[root@monitor ~]# mmm_control set_online master1
[root@monitor ~]# mmm_control set_online master2
[root@monitor ~]# mmm_control set_online slave1
[root@monitor ~]# mmm_control set_online slave2

[root@monitor ~]# mmm_control show      #确定主机状态为以下(可以显示定义的虚拟IP):
  master1(192.168.20.3) master/ONLINE. Roles: writer(192.168.20.30)
  master2(192.168.20.4) master/ONLINE. Roles: reader(192.168.20.50)
  slave1(192.168.20.5) slave/ONLINE. Roles: reader(192.168.20.60)
  slave2(192.168.20.6) slave/ONLINE. Roles: reader(192.168.20.40)

————————————————
原文链接:https://blog.csdn.net/lvjianzhaoa/article/details/114847644

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|手机版|Archiver|运维之家

GMT+8, 2024-3-29 19:45 , Processed in 0.208678 second(s), 14 queries .

Powered by Dirtysea

© 2008-2020 Dirtysea.com.

快速回复 返回顶部 返回列表