云原生 / 配置中心

Nacos生产集群模式部署

浅时光博客 · 9月13日 · 2020年 103911次已读

一、Nacos介绍


Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

Nacos 的关键特性包括:

服务发现和服务健康监测

Nacos 支持基于 DNS 和基于 RPC 的服务发现。服务提供者使用 原生SDKOpenAPI、或一个独立的Agent TODO注册 Service 后,服务消费者可以使用DNS TODO 或HTTP&API查找和发现服务。

Nacos 提供对服务的实时的健康原文链接:https://www.dqzboy.com检查,阻止向不健康的主机或服务实例发送请求。Nacos 支持传输层 (PING 或 TCP)和应用层 (如 HTTP、MySQL、用户自定义)的健康检查。 对于复杂的云环境和网络拓扑环境中(如 VPC、边缘网络等)服务的健康检查,Nacos 提供了 agent 上报模式和服务端主动检测2种健康检查模式。Nacos 还提供了统一的健康检查仪表盘,帮助您根据健康状态管理服务的可用性及流量。

动态配置服务

动态配置服务可以让您以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置。

动态配置消除了配置变更时重新部署应用和服务的需要,让配置管理变得更加高效和敏捷。

配置中心化管理让实现无文章来源(Source):浅时光博客状态服务变得更简单,让服务按需弹性扩展变得更容易。

Nacos 提供了一个简洁易用的UI (控制台样例 Demo) 帮助您管理所有的服务和应用的配置。Nacos 还提供包括配置版本跟踪、金丝雀发布、一键回滚配置以及客户端配置更新状态跟踪在内的一系列开箱即用的配置管理特性,帮助您更安全地在生产环境中管理配置变更和降低配置变更带来的风险。

动态 DNS 服务

动态 DNS 服务支持权重路由,让您更容易地实现中间层负载均衡、更灵活的路由策略、流量控制以及数据中心内网的简单DNS解析服务。动态DNS服务还能让您更容易地实现以 DNS 协议为基础的服务发现,以帮助您消除耦合到厂商私有服务发现 API 上的风险。

Nacos 提供了一些简单的 DNS APIs TODO 帮助您管理服务的关联域名和可用的 IP:PORT 列表

服务及其元数据管理

Nacos 能让您从微服务平台建设的视角管理数据中心的所有服务及元数据,包括管理服务的描述、生命周期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由及安全策略、服务的 SLA 以及最首要的 metrics 统计数据。


二、环境描述


主机名服务器IP部署组件
Nacos-node1192.168.66.15 192.168.66.100(VIP)Nacos1.3.1、JDK1.8、MySQL5.7+、keepalived
Nacos-node2192.168.66.16Nacos1.3.1、JDK1.8、MySQL5.7+、keepalived
Nacos-node3192.168.66.17Nacos1.3.1、JDK1.8、MySQL5.7+、keepalived

官方推荐安装部署方式为:域名 + VIP模式,可读性好,而且换ip方便;这里我们也采用该方式进行搭建部署

三、环境初始化


1、配置主机名

[root@localhost ~]# hostnamectl set-hostname nacos-node1
[root@localhost ~]# hostnamectl set-hostname nacos-node2
[root@localhost ~]# hostnamectl set-hostname nacos-node3

2、配置主机名解析

[root@nacos-node1 ~]# vi /etc/hosts
192.168.66.15   nacos-node1
192.168.66.16   nacos-node2
192.168.66.17   nacos-node3
  • node1节点实现ssh免密登入其他节点
[root@nacos-node1 ~]# ssh-keygen -t rsa
[root@nacos-node1 ~]# ssh-copy-id [email protected]
[root@nacos-node1 ~]# ssh-copy-id [email protected]
[root@nacos-node1 ~]# ssh-copy-id [email protected]
  • hosts文件传给各节点,实现通过主机名解析
[root@nacos-node1 ~]# for i in 192.168.66.{16,17}; do echo ">>> $i";scp /etc/hosts root@$i:/etc/; done

[root@nacos-node1 ~]# ssh-copy-id root@nacos-node1
[root@nacos-node1 ~]# ssh-copy-id root@nacos-node2
[root@nacos-node1 ~]# ssh-copy-id root@nacos-node3

3、关闭防火墙

[root@nacos-node1 ~]# for i in 192.168.66.{15..17}; do echo ">>> $i";ssh root@$i "systemctl stop firewalld && systemctl disable firewalld && systemctl status firewalld"; done

4、关闭SELINUX

[root@nacos-node1 ~]# for i in 192.168.66.{15..17}; do echo ">>> $i";ssh root@$i "sed -ri 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config"; done

[root@nacos-node1 ~]# for i in 192.168.66.{15..17}; do echo ">>> $i";ssh root@$i "setenforce 0 && getenforce"; done

5、安装常用命令

[root@nacos-node1 ~]# for i in 192.168.66.{15..17};do echo ">>> $i";ssh root@$i "yum -y install gcc gcc-c++ libaio make cmake zlib-devel openssl-devel pcre pcre-devel wget git curl lynx lftp mailx mutt rsync ntp net-tools vim lrzsz screen sysstat yum-plugin-security yum-utils createrepo bash-completion zip unzip bzip2 tree tmpwatch pinfo man-pages lshw pciutils gdisk system-storage-manager git  gdbm-devel sqlite-devel chrony";done

[root@nacos-node1 ~]# for i in 192.168.66.{15..17};do echo ">>> $i";ssh root@$i "yum install -y epel-release";done

6、配置时间同步

  • node1节点与互联网时间服务器进行同步,其他节点则于node1节点进行时间同步
[root@nacos-node1 ~]# systemctl start ntpd && systemctl enable ntpd
[root@nacos-node1 ~]# vim /etc/chrony.conf
  • 启动服务
[root@nacos-node1 ~]# systemctl start chronyd.service 
[root@nacos-node1 ~]# systemctl enable chronyd.service
[root@nacos-node1 ~]# systemctl status chronyd.service
  • 检查主节点时间同步信息
[root@nacos-node1 ~]# timedatectl
  • 其他节点关闭ntpd服务,我们这里使用chronyd服务
[root@nacos-node1 ~]# for i in 192.168.66.{16,17};do echo ">>> $i";ssh root@$i "systemctl stop ntpd && systemctl disable ntpd && systemctl status ntpd";done
  • 登入各个节点服务器进行手动修改chronyd
~]# vim /etc/chrony.conf
server 192.168.66.15 iburst
  • 另外2个节点启动服务,在node1节点操作
[root@nacos-node1 ~]# for i in 192.168.66.{16,17};do echo ">>> $i";ssh root@$i "systemctl restart chronyd.service && systemctl enable chronyd.service && systemctl status chronyd.service";done
  • 检查时间同步状态 ^* 表示已经同步
[root@nacos-node1 ~]# for i in 192.168.66.{16,17};do echo ">>> $i";ssh root@$i "chronyc sources ";done

7、所有节点安装JDK

  • 安装方式通过RPM方式安装,版本1.8
rpm -ivh jdk-8u231-linux-x64.rpm

四、MySQL主从


官方建议数据库最好是主备模式,这里我就先搭建个一主多从的模式;由于我这边资源问题,MySQL就与Nacos安装在一块

1、下载安装

  • 安装方式为RPM包安装,3台机器都需要进行安装部署,所需安装包如下:
  • MySQL官网地址:https://downloads.mysql.com/archives/community/
  • mysql-community-servermysql-community-clientmysql-community-commonmysql-community-libsmysql-community-develmysql-community-libs-compat
  • 安装服务,所有机器执行
#卸载掉系统默认的mariadb
[root@nacos-node1 ~]# rpm -qa|grep mariadb|xargs rpm -e --nodeps

[root@nacos-node1 ~]# mkdir -p /opt/soft && cd /opt/soft
[root@nacos-node1 soft]# yum install mysql-community-*
  • 启动MySQL服务(三节点都要启动)
[root@nacos-node1 ~]# systemctl start mysqld
[root@nacos-node1 ~]# systemctl enable mysqld
[root@nacos-node1 ~]# systemctl status mysqld
  • 重置ROOT密码(三节点都需要)
[root@nacos-node1 ~]# cat /var/log/mysqld.log |grep password
[root@nacos-node1 ~]# mysql -uroot -p
Enter password:

#修改密码策略
mysql> set global validate_password_policy=0;
Query OK, 0 rows affected (0.00 sec)

mysql> set global validate_password_mixed_case_count=0;
Query OK, 0 rows affected (0.00 sec)

mysql> set global validate_password_number_count=3;
Query OK, 0 rows affected (0.00 sec)

mysql> set global validate_password_special_char_count=0;
Query OK, 0 rows affected (0.00 sec)

mysql> set global validate_password_length=3;

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'dqz123456';

2、修改配置

  • 修改MySQL配置(三节点都需要修改)
#------------node1节点------------#
[root@nacos-node1 ~]# vim /etc/my.cnf
#添加如下信息
#gtid
server-id = 1
gtid-mode = ON
enforce-gtid-consistency = ON
log-slave-updates = ON
#binlog
expire_logs_days = 30
max_binlog_size  = 100M
log_bin = /data/mysql/mysql-bin
binlog-format = Row
#elay log
skip_slave_start= ON

#------------node2节点------------#
[root@nacos-node2 ~]# vim /etc/my.cnf
#添加如下信息
#gtid
server-id = 2
gtid-mode = ON
enforce-gtid-consistency = ON
log-slave-updates = ON
#binlog
expire_logs_days = 30
max_binlog_size  = 100M
log_bin = /data/mysql/mysql-bin
binlog-format = Row
#elay log
skip_slave_start= ON

#------------node3节点------------#
[root@nacos-node3 ~]# vim /etc/my.cnf
#添加如下信息
#gtid
server-id = 3
gtid-mode = ON
enforce-gtid-consistency = ON
log-slave-updates = ON
#binlog
expire_logs_days = 30
max_binlog_size  = 100M
log_bin = /data/mysql/mysql-bin
binlog-format = Row
#elay log
skip_slave_start= ON


#所有节点创建binlog日志存储目录并授权
mkdir -p /data/mysql
chown -R mysql. /data/

#所有节点重启MySQL服务
systemctl restart mysqld

3、配置主从

3.1、创建同步账号

  • 在主库执行;基于 GTID 的复制会自动地将没有在从库执行过的事务重放,所以不要在其它从库上建立相同的账号。 如果建立了相同的账户,有可能造成复制链路的错误。
[root@nacos-node1 ~]# mysql -uroot -p

#修改密码策略
mysql> set global validate_password_policy=0;
mysql> set global validate_password_mixed_case_count=0;
mysql> set global validate_password_number_count=3;
mysql> set global validate_password_special_char_count=0;
mysql> set global validate_password_length=3;


mysql> grant replication slave on *.* to 'slave'@'192.168.66.%' identified by 'dqz123456';
mysql> flush privileges;
  • 查看主库与从库的GTID是否开启
mysql> show variables like "%gtid%";
+----------------------------------+-----------+
| Variable_name                    | Value     |
+----------------------------------+-----------+
| binlog_gtid_simple_recovery      | ON        |
| enforce_gtid_consistency         | ON        |
| gtid_executed_compression_period | 1000      |
| gtid_mode                        | ON        |
| gtid_next                        | AUTOMATIC |
| gtid_owned                       |           |
| gtid_purged                      |           |
| session_track_gtids              | OFF       |
+----------------------------------+-----------+
8 rows in set (0.00 sec)

mysql> show variables like '%gtid_next%';
+---------------+-----------+
| Variable_name | Value     |
+---------------+-----------+
| gtid_next     | AUTOMATIC |
+---------------+-----------+
1 row in set (0.00 sec)

3.2、主库查看状态

mysql> show master status;
+------------------+----------+--------------+------------------+------------------------------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                        |
+------------------+----------+--------------+------------------+------------------------------------------+
| mysql-bin.000001 |      601 |              |                  | a4c5734e-d16e-11ea-b7c1-000c29b0226c:1-2 |
+------------------+----------+--------------+------------------+------------------------------------------+
1 row in set (0.00 sec)

3.3、从库链接主库

  • 在2台从节点执行
[root@nacos2 ~]# mysql -uroot -p
Enter password:

mysql> CHANGE MASTER TO MASTER_HOST='192.168.66.15',MASTER_USER='slave',MASTER_PASSWORD='dqz123456',MASTER_AUTO_POSITION=1;

3.4、从库启动复制

mysql> START SLAVE;

3.5、检查SLAVE状态

mysql> SHOW SLAVE STATUS\G
  • 确认 Slave_IO_Running 和 Slave_SQL_Running 两个参数都为 Yes 状态

3.6、主库检查从库信息

mysql> SHOW SLAVE HOSTS;

3.7、检查GTID复制

  • 在主库创建一个库,查看从库是否复制过去
#主库创建新库
mysql> CREATE DATABASE TESTDB;

#从库查看复制情况
mysql> SHOW DATABASES;

五、部署Nacos


1、下载Nacos

[root@nacos-node1 ~]# cd /opt/soft/
[root@nacos-node1 soft]# unzip nacos-server-1.3.1.zip -d /usr/local/

2、修改配置

  • 所有nacos节点都需要配置;
  • nacos 的默认服务端口是 8848
[root@nacos-node1 soft]# cd /usr/local/nacos/conf

[root@nacos-node1 conf]# vim cluster.conf
# ip:port
192.168.66.15:8848
192.168.66.16:8848
192.168.66.17:8848

3、数据源配置

  • 创建Nacos连接用户和库,在主库执行即可;
  • 注意这里的库名,后面配置nacos连接数据库时需要更改为此数据库
[root@nacos-node1 conf]# mysql -uroot -p
Enter password:

mysql> CREATE DATABASE `nacos_config` CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

mysql> CREATE USER 'nacos'@'%' IDENTIFIED BY 'dqz123456';

mysql> grant all privileges on nacos_config.* to nacos@'%';

mysql> flush privileges;
  • 导入数据;sql文件存储在nacos安装路径下的conf目录中;只需在主库执行即可
mysql> use nacos_config
mysql> source /usr/local/nacos/conf/nacos-mysql.sql;

所有nacos节点修改nacos连接数据库的配置文件;

  • db.num 为数据库实例数量
  • db.url.0 指定不同的数据库连接
  • 如果有多个数据库实例通过 db.url.0、db.url.1… 指定不同的数据库连接
[root@nacos-node1 ~]# cd /usr/local/nacos/conf/
[root@nacos-node1 conf]# vim application.properties
#拷贝给其他节点
[root@nacos-node1 conf]# scp application.properties [email protected]:/usr/local/nacos/conf/

[root@nacos-node1 conf]# scp application.properties [email protected]:/usr/local/nacos/conf/

4、启动Nacos

  • 所有节点执行以下命令启动
[root@nacos-node1 ~]# cd /usr/local/nacos/bin/
[root@nacos-node1 bin]# ./startup.sh
  • 启动日志查看
tailf /usr/local/nacos/logs/start.out

5、访问Nacos

六、安装keepalived


这里我们使用keepalived来实现nacos的高可用,通过keepalived进行虚拟IP并绑定Nacos真实地址

详细的Keepalived安装部署和配置详解,请点击下面链接中的文章进行阅读:

Keepalived源码安装与实践

2020-2-25 文章来源(Source):https://www.dqzboy.com 0

1、编译安装

[root@nacos-node1 ~]# cd /opt/soft/
[root@nacos-node1 soft]# wget https://www.keepalived.org/software/keepalived-2.0.20.tar.gz


#所有节点都需要安装依赖
[root@nacos-node1 script]# for i in 192.168.66.{15..17}; do echo ">>> $i"; ssh root@$i "yum -y install libnl libnl-devel libnfnetlink-devel openssl-devel"; done

[root@nacos-node1 soft]# tar -xf keepalived-2.0.20.tar.gz
[root@nacos-node1 soft]# cd keepalived-2.0.20
[root@nacos-node1 keepalived-2.0.20]# ./configure --prefix=/usr/local/keepalived

[root@nacos-node1 keepalived-2.0.20]# make && make install

2、修改配置

[root@nacos-node1 ~]# cd /usr/local/keepalived/etc/keepalived/
[root@nacos-node1 keepalived]# cp keepalived.conf{,_bak}
[root@nacos-node1 keepalived]# vim keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
     [email protected]
     [email protected]
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id nacos-node1		//唯一值,一般为所在服务器主机名
   vrrp_skip_check_adv_addr
   # vrrp_strict         //注释该参数
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

#注意此处添加nacos服务健康检查
vrrp_script check_nacos {
    script "/bin/bash /script/check_nacos.sh"	#nacos健康检查脚本路径
    interval 5		#健康检查周期,每隔5秒执行一次脚本     
}

vrrp_instance VI_1 {
state MASTER
    interface ens33	#绑定的网卡名称
    virtual_router_id 51		#主备ID必须保证一致
    priority 100			#优先级
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
	192.168.66.100/24	#VIP地址,虚拟IP
    }
    track_script {   #调用脚本
       check_nacos   #这里的名称必须与vrrp_scrip写的保证一致
    }
}
  • keepalived默认会读取/etc/keepalived/keepalived.conf配置文件,所以需要将配置文件移至该目录下
[root@nacos-node1 ~]# mkdir /etc/keepalived/
[root@nacos-node1 ~]# cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/

3、编写脚本

  • 编写nacos健康检查脚本
  • 编写nacos健康状态消息推送脚本
  • 注意:脚本存储目录跟名称要与上面配置文件中配置的检测脚本一致

3.1:健康检测脚本

[root@nacos-node1 ~]# mkdir /script
[root@nacos-node1 ~]# vim /script/check_nacos.sh
#!/bin/bash
network=`ifconfig ens33 |grep -w inet |awk '{print $2}'`
nacos=`netstat -tnlp|grep 8848|wc -l`
if [ "$nacos" -eq 0 ];then
    #这里调用消息通知脚本,并配置需要发送的消息
    /script/qywx_nacos.py "主机:$(hostname)--主机IP:$network:nacos服务心跳检测异常,>>> 请登入服务器查看;VIP已切换,请注意"
    systemctl stop keepalived.service
fi

3.2:消息推送脚本

[root@nacos-node1 ~]# vim /script/qywx_nacos.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
import requests
import json
import sys
import os

headers = {'Content-Type': 'application/json;charset=utf-8'}
api_url = "企业微信机器人或者钉钉机器人的webhook地址"
def msg(text):
    json_text= {
     "msgtype": "text",
        "text": {
            "content": text
        },
    }
    print requests.post(api_url,json.dumps(json_text),headers=headers).content

if __name__ == '__main__':
    text = sys.argv[1]
msg(text)
  • 安装pip和requests模块,所有节点安装
[root@nacos-node1 ~]# curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py

[root@nacos-node1 ~]# for i in 192.168.66.{16,17}; do echo ">>> $i";scp /root/get-pip.py root@$i:/root/; done

[root@nacos-node1 ~]# for i in 192.168.66.{15..17}; do echo ">>> $i"; ssh root@$i python /root/get-pip.py; done

[root@nacos-node1 ~]# for i in 192.168.66.{15..17}; do echo ">>> $i"; ssh root@$i pip install requests; done

3.3:授予执行权限

[root@nacos-node1 ~]# chmod +x /script/check_nacos.sh /script/qywx_nacos.py
  • 脚本测试:将nacos停止后查看机器人是否收到推送消息

4、拷贝文件

[root@nacos-node1 ~]# for i in 192.168.66.{16,17}; do echo ">>> $i"; scp -r /usr/local/keepalived root@$i:/usr/local/ && scp -r /script root@$i:/ && scp -r /etc/keepalived root@$i:/etc/ && scp /usr/lib/systemd/system/keepalived.service root@$i:/usr/lib/systemd/system/; done

5、备修改配置

  • 登入到另外2个备节点进行修改配置
  • 注意:三节点的router_id一定不要重复最好以当前主机名;virtual_router_id一定要一致;priority值依次为15节点MASTER(100)—16节点BACKUP(90)—17节点BACKUP(80)

5.1:Nacos-node2

[root@nacos-node2 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
     [email protected]
     [email protected]
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id nacos-node2
   vrrp_skip_check_adv_addr
   # vrrp_strict      
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_script check_nacos {
    script "/bin/bash /script/check_nacos.sh"
    interval 5
}

vrrp_instance VI_1 {
state BACKUP
    interface ens33
    virtual_router_id 51
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
	192.168.66.100/24
    }
    track_script {
       check_nacos
    }
}

5.2:Nacos-node3

[root@nacos-node3 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
     [email protected]
     [email protected]
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id nacos-node3
   vrrp_skip_check_adv_addr
   # vrrp_strict      
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_script check_nacos {
    script "/bin/bash /script/check_nacos.sh"
    interval 5
}

vrrp_instance VI_1 {
state BACKUP
    interface ens33
    virtual_router_id 51
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
	192.168.66.100/24
    }
    track_script {
       check_nacos
    }
}

6、启动服务

[root@nacos-node1 ~]# for i in 192.168.66.{15..17}; do echo ">>> $i"; ssh root@$i systemctl daemon-reload && systemctl start keepalived && systemctl status keepalived|grep Active; done

7、查看当前VIP

[root@nacos-node1 ~]# for i in 192.168.66.{15..17}; do echo ">>> $i"; ssh root@$i "ip a show ens33"; done
  • 可以看到当前VIP在15这台主机上

8、通过VIP进行访问

浏览器输入VIP地址+端口进行访问:http://192.168.66.100:8848/nacos/#/login

本文作者:浅时光博客
原文链接:https://www.dqzboy.com/3792.html
版权声明:知识共享署名-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)协议进行许可,转载时请以>超链接形式标明文章原始出处和作者信息
免责声明:本站提供的内容仅限于个人学习和研究使用;禁止将内容用于商业或非法用途。下载后请在24小时内彻底删除,否则后果由用户承担。访问和下载本站内容即表示您已同意上述条款 。

7 条回应

必须 注册 为本站用户, 登录 后才可以发表评论!

  1. 听到风中左耳的眼泪河北·邯郸2021-9-29 · 16:21

    mysql 8 好像没有global 的名称和密码等限制,名称长度限制为32 所以同步账户创建会出问题

    • 浅时光博客2021-9-29 · 16:25

      怎么可能没有呢

      • 听到风中左耳的眼泪河北·邯郸2021-9-29 · 16:34

        报错
        ERROR 1193 (HY000): Unknown system variable ‘validate_password_policy’

        • 浅时光博客2021-9-29 · 16:38

          这个参数只是变了下划线

          • 听到风中左耳的眼泪河北·邯郸2021-9-29 · 16:44

            Unknown system variable ‘validate_password.policy’ 版本号8.0.20

            • 浅时光博客2021-9-29 · 16:53

              这是你密码设置的复杂度不够,这不是啥问题

        • 浅时光博客2021-9-29 · 16:39

          8之前是 validate_password_ 8之后validate_password.