MySQL第五讲 MySQL-MHA集群搭建

本文介绍了MHA,一款开源的MySQL高可用工具,重点阐述了其自动化故障切换、在线切换功能,以及搭建集群的详细步骤,包括配置、ssh互信和MHA服务的组件。
       MHA(Master HA)是一款开源的 MySQL 的高可用程序,它为 MySQL 主从复制架构提供了 automating master failover 功能。MHA 在监控到 master 节点故障时,会提升其中拥有最新数据的 slave 节点成为新的master 节点,在此期间, MHA 会通过于其它从节点获取额外信息来避免一致性方面的问题。MHA 还提供了 master 节点的在线切换功能,即按需切换 master/slave 节点。
  MHA 是由日本人 yoshinorim(原就职于DeNA现就职于FaceBook)开发的 比较成熟的MySQL 高可用方案。MHA 能够在30秒内实现故障切换,并能在故障切换中,最大可能的保证数据一致性。目前淘宝也正在开发相似产品 TMHA, 目前已支持一主一从。

 MHA 服务

MHA 服务有两种角色, MHA Manager(管理节点)和 MHA Node(数据节点):
MHA Manager:
  通常单独部署在一台独立机器上管理多个 master/slave 集群(组),每个master/slave 集群称作一个 application ,用来管理统筹整个集群。
MHA node:
 运行在每台 MySQL 服务器上(master/slave/manager),它 通过监控具备解析 和清理 logs 功能的脚本来加快故障转移。
     主要是接收管理节点所发出指令的代理,代理需要运行在每一个 mysql 节点上。简单讲 node 就是用来收集从节点服务器上所生成的 bin-log 。对比打算提升为新的主节点之上的从节点的是否拥有并完成操作,如果没有发给新主节点在本地 应用后提升为主节点。
Manager节点:
   masterha_check_ssh :MHA 依赖的 ssh 环境监测工具;
   masterha_check_repl :MYSQL 复制环境检测工具;
   masterga_manager :MHA 服务主程序;
   masterha_check_status :MHA 运行状态探测工具;
   masterha_master_monitor :MYSQL master 节点可用性监测工具;
   masterha_master_swith:master :节点切换工具;
   masterha_conf_host :添加或删除配置的节点;
   masterha_stop :关闭 MHA 服务的工具。
Node节点:(这些工具通常由MHA Manager的脚本触发,无需人为操作)
   save_binary_logs :保存和复制 master 的二进制日志;
   apply_diff_relay_logs :识别差异的中继日志事件并应用于其他 slave;
   purge_relay_logs :清除中继日志(不会阻塞 SQL 线程);
   自定义扩展:
   secondary_check_script :通过多条网络路由检测master的可用性;
   master_ip_failover_script :更新application使用的masterip;
   report_script :发送报告;
   init_conf_load_script :加载初始配置参数;
   master_ip_online_change_script ;更新master节点ip地址。

 由上图我们可以看出,每个复制组内部和 Manager 之间都需要ssh实现无密码 互连,只有这样,在 Master 出故障时, Manager 才能顺利的连接进去,实现主从切换功能
提供的工具
  MHA会提供诸多工具程序, 其常见的如下所示:
Manager节点:
   masterha_check_ssh :MHA 依赖的 ssh 环境监测工具;
   masterha_check_repl :MYSQL 复制环境检测工具;
   masterga_manager :MHA 服务主程序;
   masterha_check_status :MHA 运行状态探测工具;
   masterha_master_monitor :MYSQL master 节点可用性监测工具;
   masterha_master_swith:master :节点切换工具;
   masterha_conf_host :添加或删除配置的节点;
   masterha_stop :关闭 MHA 服务的工具。
Node节点:(这些工具通常由MHA Manager的脚本触发,无需人为操作)
   save_binary_logs :保存和复制 master 的二进制日志;
   apply_diff_relay_logs :识别差异的中继日志事件并应用于其他 slave;
   purge_relay_logs :清除中继日志(不会阻塞 SQL 线程);
   自定义扩展:
   secondary_check_script :通过多条网络路由检测master的可用性;
   master_ip_failover_script :更新application使用的masterip;
   report_script :发送报告;
   init_conf_load_script :加载初始配置参数;
   master_ip_online_change_script ;更新master节点ip地址。

工作原理

 

MHA工作原理总结为以下几条:
(1) 从宕机崩溃的 master 保存二进制日志事件(binlog events);
(2) 识别含有最新更新的 slave ;
(3) 应用差异的中继日志(relay log) 到其他 slave ;
(4) 应用从 master 保存的二进制日志事件(binlog events);
(5) 提升一个 slave 为新 master ;
(6) 使用其他的 slave 连接新的 master 进行复制。

搭建MHA集群

 MHA 对 MYSQL 复制环境有特殊要求,例如各节点都要开启二进制日志及继日志,各从节点必须显示启用其read-only属性,并关闭relay_log_purge功能等,这里对配置做事先说明。

本次总共使用三台服务器,列表清单如下:

机器名称Ip配置角色备注
node01192.168.36.138manager控制器用于监控管理
node02192.168.36.139数据库主服务开启bin-log relay-log关闭relay_log_purge
node03192.168.36.140数据库从服务器,可以搭建多个开启bin-log relay-log关闭relay_log_purge
 为了方便我们后期的操作,我们在各节点的/etc/hosts文件配置内容中添加如 下内容:
192.168.36.138   node01
192.168.36.139   node02
192.168.36.140   node03

初始主节点 master 的配置 

我们需要修改 master 的数据库配置文件来对其进行初始化配置:

[mysqld]
#复制集群中的各节点的id均必须唯一
server-id=1
#开启binlog 开启二进制日志
log_bin=master-bin
#开启中继日志
relay-log=mysql-relay-bin
#关闭名称解析(非必须)
skip-name-resolve
#设置连接端口
port=6306
#设置mysql数据库的数据的存放目录
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

symbolic-links=0

#允许最大连接数
max_connections=200
#允许连接失败的次数。
max_connect_errors=10
#服务端使用的字符集默认为UTF8
character-set-server=utf8
#创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
#默认使用“mysql_native_password”插件认证
#mysql_native_password
default_authentication_plugin=mysql_native_password

#只保留7天的二进制日志,以防磁盘被日志占满(可选) 
expire-logs-days = 7

[mysqld_safe]
log-error=/vat/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
~                                        

 docker cp mysqlMaster:/usr/lib/mysql  /mydata/MHACLUSTER/lib/ 

docker stop MHAMaster && docker rm MHAMaster
docker run  --restart=always --privileged=true \
-p 6306:6306 \
--name MHAMaster \
-v /mydata/MHACLUSTER/data:/var/lib/mysql-files \
-v /mydata/MHACLUSTER/conf/my.cnf:/etc/mysql/my.cnf \
-v /mydata/MHACLUSTER/conf/conf.d:/etc/mysql/conf.d \
-v /mydata/MHACLUSTER/logs:/var/log/mysql \
-v /mydata/MHACLUSTER/lib/mysql:/usr/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-e TZ=Asia/Shanghai \
-d mysql:8.0.28 

所有 slave 节点依赖的配置

  我们修改 slave 的数据库配置文件,从节点都做如下操作:

[mysqld]
#复制集群中的各节点的id均必须唯一
server-id=2
#开启binlog 开启二进制日志
log_bin=master-bin
#开启中继日志
relay-log=mysql-relay-bin
#启用只读属性
read_only = ON
#关闭名称解析(非必须)
skip-name-resolve
#使得更新的数据写进二进制日志中
log_slave_updates = 1
#是否自动清空不再需要中继日志
relay_log_purge = 0
#设置连接端口
port=6306
#设置mysql数据库的数据的存放目录
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

symbolic-links=0

#允许最大连接数
max_connections=200
#允许连接失败的次数。
max_connect_errors=10
#服务端使用的字符集默认为UTF8
character-set-server=utf8
#创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
#默认使用“mysql_native_password”插件认证
#mysql_native_password
default_authentication_plugin=mysql_native_password

#只保留7天的二进制日志,以防磁盘被日志占满(可选) 
expire-logs-days = 7

[mysqld_safe]
log-error=/vat/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid

如果多个从节点,修改字段

server-id=3

配置一主多从复制架构

master 节点上:
mysql> grant replication slave,replication client on *.* to 'root'@'%' ;
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

 slave 节点上:

mysql> stop slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> CHANGE MASTER TO
     MASTER_HOST = 'node02' ,
    MASTER_PORT =6306 ,
    MASTER_USER = 'root' ,
     MASTER_PASSWORD = 'root' ,
     MASTER_LOG_FILE = 'master-bin.000003' ,
     MASTER_LOG_POS =  157 ,
    GET_MASTER_PUBLIC_KEY = 1 ;
Query OK, 0 rows affected, 10 warnings (0.01 sec)

mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.01 sec)

mysql> show slave status\G;

 

 安装配置MHA

 在 master 上进行授权

 在所有 Mysql 节点授权拥有管理权限的用户可在本地网络中有其他节点上远程 访问。 当然, 此时仅需要且只能在 master 节点运行类似如下 SQL 语句即可。
grant all on *.* to 'admin'@'192.168.%.%' identified by 'admin';
自己定义用户名 密码

准备ssh互通环境

  MHA集群中的各节点彼此之间均需要基于ssh互信通信,以实现远程控制及数据管理功能。简单起见,可在Manager节点生成密钥对儿,并设置其可远程连接本地主机后, 将私钥文件及authorized_keys文件复制给余下的所有节点即可,下面操作在所有节点上操作:

[root@node02 MHACLUSTER]#  ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:rbYnr/nqds2rhBRcTIky9IoYfl9dSivxU6LIYj/2qgE root@node02
The key's randomart image is:
+---[RSA 2048]----+
|     ..  +o.     |
|      oo..o      |
|  .    o= o o    |
| . o o o O *     |
|  E = + S B      |
|   + + o + .     |
|    . = + .o     |
|     o +o+o o    |
|    ...+BO+...   |
+----[SHA256]-----+

在所有机器上都执行完成后,在Node01下查看

 几台机器的公钥都已经在 authorized_keys 这个文件中了,接着,我们只需要把这个文件发送至另外两台机器,这三台机器就可以实现 ssh 无密码互通了:
scp authorized_keys root@node02:~/.ssh/
scp authorized_keys root@node03:~/.ssh/

 可以在机器上通过ssh验证是否不需要密码就可以连接

 安装 MHA 包

 在本步骤中, Manager节点需要另外多安装一个包。具体需要安装的内容如下:
四个节点都需安装:mha4mysql-node-0.58-0.el7.norch.rpm
Manager 节点另需要安装:mha4mysql - manager - 0.58 -0.el7.noarch.rpm
注意版本不一样下载的版本不一样  mha4mysql-node-0.58-0.el7.norch.rpm支持mysql5.7以上
对于5.6版本的可以下载mha4mysql-node-0.56-0.el6.norch.rpm

 下载地址:https://centos.pkgs.org/

git下载地址:https://github.com/yoshinorim/mha4mysql-manager/releases

https://github.com/yoshinorim/mha4mysql-node/releases/tag/v0.58

 使用Yum安装

上传到服务器上
yum install -y mha4mysql-node-0.58-0.el7.noarch.rpm
yum install -y mha4mysql-manager-0.58-0.el6.noarch.rpm

初始化MHA,进行配置

     Manager 节点需要为每个监控的 master/slave 集群提供一个专用的配置文件,而所有的 master/slave 集群也可共享全局配置 。全局配置文件 默认 /etc/masterha_default.cnf ,其为 可选配置 。如果仅监控一组 master/slave 集群,也可直接通过 application 的配置来提供各服务器的默认配置 信息。而每个 application 的配置文件路径为自定义。具体操作见下一步骤。

定义 MHA 管理配置文件

 为MHA专门创建一个管理用户, 方便以后使用, 在mysql的主节点上, 三个 节点自动同步:
mkdir /etc/mha_master
vim /etc/mha_master/mha.cnf

配置文件内容如下;

user=root
password=root
#mha_master自己的工作路径
manager_workdir=/etc/mha_master/app1
# mha_master自己的日志文件
manager_log=/etc/mha_master/manager.log
#/每个远程主机的工作目录在何处
remote_workdir=/mydata/mha_master/app1
master_binlog_dir=/mydata/MHACLUSTER/data/mysql

#基于ssh的密钥认证
ssh_user=root
#数据库用户名
repl_user=root
#数据库密码
repl_password=root
#ping间隔时长
ping_interval=1
[server1]
 #节点2主机地址
hostname=node02
#端口不是3306
port=6306
ssh_port=22
master_binlog_dir=/mydata/MHACLUSTER/data/mysql
#将来可不可以成为master候选节点/主节点
candidate_master=1
[server2]
hostname=node03
ssh_port=22
candidate_master=1
port=6306
master_binlog_dir=/mydata/MHACLUSTER/data/mysql
对四个节点进行检测
1:检测各节点间 ssh 互信通信配置是否 ok, 我们在 Manager 机器上输入下述命令来检测
[root@node01 admin]# masterha_check_ssh -conf=/etc/mha_master/mha.cnf
Sun May 22 15:23:15 2022 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping.
Sun May 22 15:23:15 2022 - [info] Reading application default configuration from /etc/mha_master/mha.cnf..
Sun May 22 15:23:15 2022 - [info] Reading server configuration from /etc/mha_master/mha.cnf..
Sun May 22 15:23:15 2022 - [info] Starting SSH connection tests..
Sun May 22 15:23:16 2022 - [debug] 
Sun May 22 15:23:15 2022 - [debug]  Connecting via SSH from root@node02(192.168.36.139:22) to root@node03(192.168.36.140:22)..
Sun May 22 15:23:16 2022 - [debug]   ok.
Sun May 22 15:23:16 2022 - [debug] 
Sun May 22 15:23:16 2022 - [debug]  Connecting via SSH from root@node03(192.168.36.140:22) to root@node02(192.168.36.139:22)..
Sun May 22 15:23:16 2022 - [debug]   ok.
Sun May 22 15:23:16 2022 - [info] All SSH connection tests passed successfully.
 如果最后一行显示为 [info]All SSH connection tests passed successfully.则表示成功。
2)检查管理的MySQL复制集群的连接配置参数是否OK
[root@node01 admin]# masterha_check_repl --conf=/etc/mha_master/mha.cnf
启动 MHA
nohup masterha_manager -conf=/etc/mha_master/mha.cnf &> /etc/mha_master/manager.log &
启动成功以后,我们来查看一下 master 节点的状态:
masterha_check_status -conf=/etc/mha_master/mha.cnf
<think>我们正在处理用户的问题:在Rocky Linux 9.5上搭建MySQL 8.0的MHA环境并配置VIP实现高可用。 根据引用,我们知道Rocky Linux 9.5上安装MySQL 8.0的步骤,以及MGR(MySQL Group Replication)是MySQL 8.0的高可用解决方案之一,但用户要求的是MHA(Master High Availability)环境。 注意:MHA(Master High Availability)是一个用于MySQL主从复制环境的高可用性解决方案,它通过自动故障转移来确保数据库的可用性。而MGR是MySQL官方提供的组复制方案,两者不同。 但是,引用[2]提到MGR是MySQL8.0实现高可用的一种方式,但用户明确要求MHA。因此,我们需要按照MHA的步骤进行。 由于引用中提供的安装步骤是针对MySQL 8.0的,我们可以直接使用这些步骤安装MySQL。 然而,MHA本身是一个由Perl编写的工具,它需要依赖Perl模块。在Rocky Linux 9.5上,我们需要安装必要的Perl模块和MHA软件包。 步骤概述: 1. 在所有节点上安装MySQL 8.0(参考引用[3]的安装步骤)。 2. 配置主从复制(一主多从)。 3. 安装MHA管理节点(通常是一个独立的节点,也可以部署在从节点上)。 4. 配置MHA,包括配置文件、SSH免密登录等。 5. 配置虚拟IP(VIP),MHA可以在故障转移时将VIP漂移到新的主节点。 需要注意的是,MHA官方对MySQL 8.0的支持情况:根据MHA的GitHub(https://github.com/yoshinorim/mha4mysql-manager)和文档,MHA 0.58版本支持MySQL 8.0。 因此,我们将使用MHA 0.58版本。 详细步骤: 第一步:安装MySQL 8.0(所有节点) 参考引用[3]的步骤,在Rocky Linux 9.5上安装MySQL 8.0。注意,安装后需要初始化(引用[4]提到初始化步骤,但注意初始化后要记录临时密码)。 第二步:配置主从复制 1. 在主节点上启用二进制日志,配置唯一的server-id。 2. 在从节点上配置唯一的server-id,并设置主节点信息。 第三步:安装MHA Manager和Node(所有节点) MHA由两部分组成:Manager(管理节点)和Node(数据节点)。Node需要安装在所有MySQL节点上(包括主和从),Manager通常单独安装在一个节点上。 安装依赖: ```bash dnf install -y perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes ``` 下载MHA Node和Manager(0.58版本): 可以从GitHub下载:https://github.com/yoshinorim/mha4mysql-manager/releases/tag/v0.58 和:https://github.com/yoshinorim/mha4mysql-node/releases/tag/v0.58 分别安装Node和Manager(注意:Manager节点也需要安装Node包,因为Manager也会使用Node的一些脚本)。 第四步:配置SSH免密登录 MHA Manager需要能够通过SSH无密码登录到所有MySQL节点。 第五步:配置MHA Manager 创建配置文件,例如:/etc/masterha/app1.cnf 配置包括:MySQL复制集群的信息、SSH登录用户、MySQL管理用户(用于故障转移)、工作目录等。 第六步:配置VIP 通常,我们可以使用arping和ifconfig(或ip命令)来绑定VIP。MHA提供了脚本模板,我们可以自定义脚本来实现VIP的漂移。 在MHA配置文件中,可以设置master_ip_failover_script和shutdown_script等。我们需要编写一个脚本来管理VIP。 示例脚本(master_ip_failover)可以在MHA的sample_scripts目录中找到,我们需要修改它以适应我们的环境(使用ip命令和arping)。 第七步:测试MHA 启动MHA Manager进行监控,并测试主节点故障时,VIP是否能够漂移到新的主节点。 由于步骤较多,我们将分步详细说明。 下面开始详细步骤:</think>### Rocky Linux 9.5 部署 MySQL 8.0 MHA 高可用集群 + VIP 配置指南 #### 一、基础环境准备(所有节点) 1. **系统配置** ```bash # 关闭防火墙和SELinux systemctl stop firewalld && systemctl disable firewalld setenforce 0 sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config # 配置主机名解析(所有节点) echo "192.168.1.101 master" >> /etc/hosts echo "192.168.1.102 slave1" >> /etc/hosts echo "192.168.1.103 slave2" >> /etc/hosts echo "192.168.1.100 mha-manager" >> /etc/hosts ``` 2. **安装MySQL 8.0** ```bash # 解压安装包(参考引用[3]) tar -xvf mysql-8.0.37-1.el9.x86_64.rpm-bundle.tar dnf install -y perl net-tools libtirpc rpm -ivh mysql-community-*.rpm # 初始化MySQL(参考引用[4]) systemctl start mysqld grep 'temporary password' /var/log/mysqld.log mysql_secure_installation ``` #### 二、MySQL主从配置(以3节点为例) 1. **主节点配置 (master)** ```ini # /etc/my.cnf [mysqld] server-id=101 log-bin=mysql-bin binlog_format=ROW gtid_mode=ON enforce_gtid_consistency=ON ``` 2. **从节点配置 (slave1/slave2)** ```ini # /etc/my.cnf [mysqld] server-id=102 # slave1用102, slave2用103 relay_log=slave-relay-bin read_only=ON super_read_only=ON ``` 3. **建立主从复制** ```sql -- 在主节点执行 CREATE USER 'repl'@'%' IDENTIFIED BY 'SecurePass123!'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; -- 在从节点执行 CHANGE MASTER TO MASTER_HOST='master', MASTER_USER='repl', MASTER_PASSWORD='SecurePass123!', MASTER_AUTO_POSITION=1; START SLAVE; ``` #### 三、MHA环境部署 1. **所有节点安装Perl依赖** ```bash dnf install -y perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager ``` 2. **安装MHA Node(所有DB节点)** ```bash rpm -Uvh https://github.com/yoshinorim/mha4mysql-node/releases/download/v0.58/mha4mysql-node-0.58-0.el7.noarch.rpm ``` 3. **Manager节点安装MHA Manager** ```bash rpm -Uvh https://github.com/yoshinorim/mha4mysql-manager/releases/download/v0.58/mha4mysql-manager-0.58-0.el7.noarch.rpm ``` 4. **配置SSH互信(所有节点间免密登录)** ```bash ssh-keygen -t rsa ssh-copy-id -i ~/.ssh/id_rsa.pub root@master ssh-copy-id -i ~/.ssh/id_rsa.pub root@slave1 ssh-copy-id -i ~/.ssh/id_rsa.pub root@slave2 ``` #### 四、MHA配置与VIP设置 1. **MHA配置文件 (/etc/masterha/app1.cnf)** ```ini [server default] manager_workdir=/var/log/masterha/app1 manager_log=/var/log/masterha/app1/manager.log ssh_user=root user=mha_admin password=MhaAdminPass123! repl_user=repl repl_password=SecurePass123! [server1] hostname=master candidate_master=1 [server2] hostname=slave1 candidate_master=1 [server3] hostname=slave2 no_master=1 [binlog1] no_master=1 ``` 2. **VIP漂移脚本 (/usr/bin/master_ip_failover)** ```perl #!/usr/bin/env perl my $vip = '192.168.1.200/24'; my $key = '1'; my $ssh_start_vip = "/sbin/ip addr add $vip dev eth0"; my $ssh_stop_vip = "/sbin/ip addr del $vip dev eth0"; if ($command eq "stop" || $command eq "stopssh") { my $exit_code = system("ssh root@$orig_master_host \" $ssh_stop_vip \""); } elsif ($command eq "start") { my $exit_code = system("ssh root@$new_master_host \" $ssh_start_vip \""); } ``` 3. **启用VIP脚本** ```bash chmod +x /usr/bin/master_ip_failover # 在app1.cnf中添加 master_ip_failover_script=/usr/bin/master_ip_failover ``` #### 五、启动与验证 1. **启动MHA监控** ```bash masterha_manager --conf=/etc/masterha/app1.cnf ``` 2. **验证MHA状态** ```bash masterha_check_status --conf=/etc/masterha/app1.cnf ``` 3. **测试故障转移** ```bash # 模拟主节点宕机 systemctl stop mysqld -h master # 观察日志验证VIP漂移 tail -f /var/log/masterha/app1/manager.log ``` #### 六、高可用验证要点 1. **VIP连通性** ```bash ping 192.168.1.200 mysql -h 192.168.1.200 -u root -p ``` 2. **故障转移时间** ```sql SHOW SLAVE STATUS\G # 观察Seconds_Behind_Master ``` 3. **数据一致性检查** ```bash pt-table-checksum --nocheck-replication-filters --replicate=test.checksums ``` [^1]: 参考MySQL安装步骤 [^2]: 高可用方案选择 [^3]: RPM包安装方式 [^4]: MySQL初始化流程
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员路同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值