集群与存储   

  • HAProxy简介                                                 

HAProxy简介

•  它是免费、快速并且可靠的一种解决方案

•  适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理

•  提供高可用性、负载均衡以及基于TCP和HTTP应用的代理

  • 衡量负责均衡器性能的因素

•  Session rate 会话率

–  每秒钟产生的会话数

•  Session concurrency 并发会话数

–  服务器处理会话的时间越长,并发会话数越多

•  Data rate 数据速率

–  以MB/s或Mbps衡量

–  大的对象导致并发会话数增加

–  高会话数、高数据速率要求更多的内存

  • HAProxy工作模式

•  mode http

–  客户端请求被深度分析后再发往服务器

•  mode tcp

–  客户端与服务器之间建立会话,不检查第七层信息

•  mode health

–  仅做健康状态检查,已经不建议使用

 

HTTP协议解析

HTTP解析

•  当HAProxy运行在HTTP模式下,HTTP请求(Request)和响应(Response)均被完全分析和索引,这样便于创建恰当的匹配规则

•  理解HTTP请求和响应,对于更好的创建匹配规则至关重要

  • HTTP事务模型

•  HTTP协议是事务驱动的

•  每个请求(Request)仅能对应一个响应(Response)

•  常见模型:

–  HTTP close

–  Keep-alive

–  Pipelining

  • HTTP事务模型(续1)

•  HTTP close

–  客户端向服务器建立一个TCP连接

–  客户端发送请求给服务器

–  服务器响应客户端请求后即断开连接

–  如果客户端到服务器的请求不只一个,那么就要不断的去建立连接

–  TCP三次握手消耗相对较大的系统资源,同时延迟较大

  • HTTP事务模型(续2)

•  Keep-alive

–  一次连接可以传输多个请求

–  客户端需要知道传输内容的长度,以避免无限期的等待传输结束

–  降低两个HTTP事务间的延迟

–  需要相对较少的服务器资源

  • HTTP事务模型(续3)

•  Pipelining

–  仍然使用Keep-alive

–  在发送后续请求前,不用等前面的请求已经得到回应

–  适用于有大量图片的页面

–  降低了多次请求之间的网络延迟

  • HTTP头部信息

•  请求头部信息

–  方法:GET

–  URI:/serv/login.php?lang=en&profile=2

–  版本:HTTP/1.1

Line Number     Contents

1                 GET /serv/login.php?lang=en&profile=2 HTTP/1.1

2                 Host: www.mydomain.com

3                 User-agent: my small browser

4                 Accept: image/jpeg, image/gif

5                 Accept: image/png

HTTP头部信息(续1)

•  请求头部信息

–  请求头包含许多有关的客户端环境和请求正文的有用信息,如浏览器所使用的语言、请求正文的长度等

Line Number    Contents

1                GET /serv/login.php?lang=en&profile=2 HTTP/1.1

2                Host: www.mydomain.com

3                User-agent: my small browser

4                Accept: image/jpeg, image/gif

5                Accept: image/png

•  响应头部信息

–  版本:HTTP/1.1

–  状态码:200

–  原因:OK

Line Number    Contents

1                HTTP/1.1. 200 OK

2                Content-length: 350

3                Content-Type: text/html


HAProxy配置实例

  • HAProxy安装

•  RHEL7光盘中内置了HAProxy,只要配置好yum,可以直接安装

[root@svr1 ~]#yum install haproxy

  • 配置文件说明

•  HAProxy配置参数来源

–  命令行:总是具有最高优先级

–  global部分:全局设置进程级别参数

–  代理声明部分

来自于default、listen、frontend和backend

  • 配置文件说明(续1)

•  配置文件可由如下部分构成:

–  default

为后续的其他部分设置缺省参数

缺省参数可以被后续部分重置

–  frontend

描述接收客户端侦听套接字(socket)集

–  backend

描述转发链接的服务器集

–  listen

把frontend和backend结合到一起的完整声明

  • 配置文件说明(续2)

•  /etc/haproxy/haproxy.cfg

global

log 127.0.0.1 local2 ###[err warning info debug]

chroot /usr/local/haproxy

pidfile /var/run/haproxy.pid ###haproxy的pid存放路径

maxconn 4000 ###最大连接数,默认4000

user haproxy

group haproxy

daemon     ###创建1个进程进入deamon模式运行

  • 配置文件说明(续3)

•  /etc/haproxy/haproxy.cfg

defaults

mode hEp ###默认的模式mode { tcp|hEp|health } log global         ###采用

  • 全局定义的日志

opIon dontlognull        ###不记录健康检查的日志信息

opIon hEpclose        ###每次请求完毕后主动关闭hEp通道

opIon hEplog        ###日志类别hEp日志格式

opIon forwardfor   ###后端服务器可以从HEp Header中获得客户端ip

opIon redispatch       ###serverid服务器挂掉后强制定向到其他健康服务器

Imeout connect  10000        #如果backend没有指定,默认为10s

Imeout client  300000    ###客户端连接超时

Imeout server  300000    ###服务器连接超时

maxconn  60000    ###最大连接数

retries 3   ###3次连接失败就认为服务不可用,也可以通过后面设置

  • 配置注意:

将这个以下部分全部删除,

60 #---------------------------------------------------------------------

61 # main frontend which proxys to the backends

62 #---------------------------------------------------------------------

  • 配置文件说明(续4)

•  /etc/haproxy/haproxy.cfg

listen stats

bind 0.0.0.0:1080     #监听端口

stats refresh 30s         #统计页面自动刷新时间

stats uri /stats         #统计页面url

stats realm Haproxy  Manager #统计页面密码框上提示文本

stats auth   admin:admin #统计页面用户名和密码设置

#stats hide-version     #隐藏统计页面上HAProxy的版本信息

  • 配置文件说明(续5)

•  /etc/haproxy/haproxy.cfg

listen web_backend  0.0.0.0:80   #后端服务器,监听在80端口cookie  SERVERID  rewrite

balance  roundrobin

server web1 192.168.4.2:80 cookie  a1i1  check inter  2000  rise  2  fall  5                 #检查这台服务器,两千毫秒检查一次,检查超过5次是不成功的

server web2 192.168.4.3:80 cookie  a1i2  check inter  2000  rise  2  fall  5

  • 管理服务

•  启动服务

[root@svr1 ~]# systemctl start haproxy

•  停止服务

[root@svr1 ~]# systemctl stop haproxy

•  查看状态

[root@svr1 ~]# systemctl status haproxy

  • 访问验证:

[root@vh01 ~]# firefox   192.168.4.4:1080/stats

日志

//用户名和密码都是admin

//stop掉vh02和vh03任何一台,刷新页面,查看页面颜色的变化、

配置调度器本身也是日志服务器,可以接受网络发来的日志

1)配置服务

[root@vh04 ~]# netstat  -nutlp  |grep  :514

[root@vh04 ~]# vim  /etc/rsyslog.conf

//去掉日志

15 $ModLoad imudp

16 $UDPServerRun 514

19 $ModLoad imtcp

20 $InputTCPServerRun 514

2)重起日志

[root@vh04 ~]# systemctl   restart   rsyslog

[root@vh04 ~]# netstat  -nutlp  | grep  :514

tcp        0      0 0.0.0.0:514             0.0.0.0:*               LISTEN      7897/rsyslogd

tcp6       0      0 :::514                  :::*                    LISTEN      7897/rsyslogd

udp        0      0 0.0.0.0:514             0.0.0.0:*                           7897/rsyslogd

udp6       0      0 :::514                  :::*                                7897/rsyslogd

3)客户端访问:

[root@room9pc01 ~]# firefox  192.168.4.4:1080/stats

[root@room9pc01 ~]# firefox  192.168.4.4    //这两个访问哪个都可以

4)查看haproxy的日志

[root@vh04 ~]# tail    -f  /var/log/messages

客户端访问负载均衡,将有日志产生


高可用Web拓扑

•  使用Keepalived为主从设备提供VIP地址漂移

配置高可用web集群

vh01,vh02,vh03三台虚拟机

1.在两台web服务器vh02,vh03上安装keepalived

[root@vh02 ~]# yum  -y  install  keepalived

2.配置

[root@vh02 ~]# vim  /etc/keepalived/keepalived.conf

将全局的 vrrp_strict 这一行注释掉

global_defs {

   notification_email {  管理员email地址

        root@localhost

}

   notification_email_from   admin@tedu.cn  谁发

   smtp_server 127.0.0.1    用哪台服务器发

   smtp_connect_timeout 30

   router_id LVS_DEVEL    设置路由的ID号

   vrrp_skip_check_adv_addr

   vrrp_garp_interval 0

   vrrp_gna_interval 0

}  

vrrp_instance VI_1 {    VI_1 随便起的名,实例名

    state MASTER    主服务器

    interface eth0   用哪一个网卡

    virtual_router_id 51  产生虚拟路由器的ID号,ID号要求一样

    priority 150   优先级

    advert_int 1   通告间隔,每隔一秒发一次

    authentication {  认证,用密码做认证的,是共享密码,要求一样

        auth_type PASS

        auth_pass 1111   主辅服务器密码必须一致

    }

    virtual_ipaddress {   虚拟地址,两个节点必须一样

        192.168.4.200

    }

}

  剩下的全部删除

3.启动服务查看ip

[root@vh02 ~]# systemctl   start   keepalived

[root@vh02 ~]# ip  a  s  eth0

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

link/ether 52:54:00:ec:bb:c1 brd ff:ff:ff:ff:ff:ff

inet 192.168.4.2/24 brd 192.168.4.255 scope global eth0

valid_lft forever preferred_lft forever

inet 192.168.4.200/32 scope global eth0

valid_lft forever preferred_lft forever

vh03上配置

1.在vh02上的配组织文件拷贝到vh03上

[root@vh02~]#scp /etc/keepalived/keepalived.conf   192.168.4.3:/etc/keepalived/keepalived.conf

2.vh03上修复改配置文件

[root@vh03 ~]# vim  /etc/keepalived/keepalived.conf

global_defs {

   notification_email {

        root@localhost

}  

   notification_email_from   admin@tedu.cn

   smtp_server 127.0.0.1

   smtp_connect_timeout 30

   router_id LVS_DEVEL

   vrrp_skip_check_adv_addr

   vrrp_garp_interval 0

   vrrp_gna_interval 0

}   

 

vrrp_instance VI_1 {

    state BACKUP  从属的用BACKUP 

    interface eth0

    virtual_router_id 51

    priority 100

    advert_int 1   

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        192.168.4.200

    }

}   

3.起服务

[root@vh03 ~]#  systemctl   start   keepalived

4.清空防火墙规则

[root@vh02 ~]# iptables  -F

[root@room9pc01 ~]# ping  192.168.4.200

[root@room9pc01 ~]# firefox  192.168.4.200/bbs

在vh02上关闭keepalived,再查看eth0的ip,再用客户端访问

[root@vh02 ~]# systemctl   stop  keepalived

[root@vh03 ~]# ip  a  s  eth0

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

    link/ether 52:54:00:df:6b:7c brd ff:ff:ff:ff:ff:ff

    inet 192.168.4.3/24 brd 192.168.4.255 scope global eth0

       valid_lft forever preferred_lft forever

    inet 192.168.4.200/32 scope global eth0

       valid_lft forever preferred_lft forever

[root@room9pc01 ~]# firefox  192.168.4.200/bbs

依然可以访问然后再把vh02重启服务,ip  a s eth0  可以看到ip,在vh03上就没有了


 LVS+keepalived,实现高可用,负载均衡的web集群

 

一,web服务器配置

1.修改内核参数

2.在lo网卡上配置vip

二,调度器配置

1.在两台调度器上安装ipvsadm,但是不要配置规则,因为规则将由keepalived配置文件进行配置

2.打开调度器的路由转发功能,7版本默认是打开的

3.配置vip,注意:vip是通过keepalived配置的,不要手工配置

三,清理

1.将web服务器的keepalived卸载

[root@vh02 ~]# yum  remove  -y  keepalived

2.将原来调度器的haproxy卸载

[root@vh04 ~]# yum   remove  -y  haproxy

3.将原来的调度器的lvs规则清除

[root@vh04 ~]# ipvsadm  -D  -t  192.168.4.100:80

4.清除原来调度器的eth0:0

[root@vh04 ~]# rm -rf  /etc/sysconfig/network-scripts/ifcfg-eth0:0

[root@vh04 ~]# systemctl   restart   network

四,配置调度器

1.安装额外的调度器  vh05.tedu.cn  192.168.4.5/24

2.在vh04,vh05两台调度器上安装ipvsadm,keepalived

[root@vh04 ~]# yum -y  install   ipvsadm   keepalived

[root@vh05 ~]# yum -y  install   ipvsadm   keepalived

3.配置主调度器

[root@vh04 ~]# vim  /etc/keepalived/keepalived.conf

 

5         root@localhost               //设置报警收件人邮箱

7    notification_email_from  admin@tedu.cn   //设置发件人

8    smtp_server 127.0.0.1        //定义邮件服务器

10    router_id vh04               //设置路由ID号

12   # vrrp_strict            

21     priority 150             

28         192.168.4.100  与vip调度器地址一样

 

给lvs配置规则

32 virtual_server 192.168.4.100 80 {

33     delay_loop 6

34     lb_algo rr

35     lb_kind DR

36     persistence_timeout 50  50秒内客户端访问我,让他访问相同的调度器

39     real_server 192.168.4.2 80 {

41         TCP_CHECK {

删除41行下面的8行

42             connect_timeout 3  超时时间3秒

43             nb_get_retry 3   失败一共检查三次

44             delay_before_retry 3

45         }

46     }

复制上面的8行,剩下的全部删除

47     real_server 192.168.4.3 80 {

48         weight 1

49         TCP_CHECK {

50             connect_timeout 3

51             nb_get_retry 3

52             delay_before_retry 3

53         }

54     }

55 }

4.启动服务

[root@vh04 ~]# systemctl   restart  keepalived

[root@vh04 ~]# ipvsadm  -Ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  192.168.4.100:80 rr persistent 50

-> 192.168.4.2:80               Route   1      0          0

-> 192.168.4.3:80               Route   1      0          0

5.查看ip

[root@vh04 ~]# ip a s eth0

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

    link/ether 52:54:00:e3:2e:83 brd ff:ff:ff:ff:ff:ff

    inet 192.168.4.4/24 brd 192.168.4.255 scope global eth0

       valid_lft forever preferred_lft forever

    inet 192.168.4.100/32 scope global eth0

       valid_lft forever preferred_lft forever

6.验证

[root@room9pc01 ~]# firefox  192.168.4.100访问的是vh03上的内容

Vh05配置keepalived服务器

1.备份调度器,同上,注意state为BACKUP                 

[root@vh04~]#scp /etc/keepalived/keepalived.conf   192.168.4.5:/etc/keepalived/keepalived.conf

state BACKUP

priority 100

2.启动服务

[root@vh05 ~]# systemctl   restart   keepalived

[root@vh05 ~]# ipvsadm  -Ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  192.168.4.100:80 rr persistent 50

-> 192.168.4.2:80               Route   1      0          0

-> 192.168.4.3:80               Route   1      0          0

3.停止vh04.查看ip是否跳转

[root@vh04 ~]# systemctl  stop   keepalived

[root@vh04 ~]# ip  a  s  eth0

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

    link/ether 52:54:00:e3:2e:83 brd ff:ff:ff:ff:ff:ff

    inet 192.168.4.4/24 brd 192.168.4.255 scope global eth0

       valid_lft forever preferred_lft forever

[root@vh05 ~]# ip  a  s  eth0

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

    link/ether 52:54:00:1d:71:cf brd ff:ff:ff:ff:ff:ff

    inet 192.168.4.5/24 brd 192.168.4.255 scope global eth0

       valid_lft forever preferred_lft forever

    inet 192.168.4.100/32 scope global eth0

       valid_lft forever preferred_lft forever

5.查看邮件在vh06或vh07down掉httpd

[root@vh06 ~]# systemctl stop httpd

[root@vh04 ~]# mail  可以查到邮件

[root@vh05 ~]# mail

keepalived双主配置

在keepalived高可用配置文件里,再添加主从,跟原来的主从配置刚好相反,

keepalived高可用 + mysql主从 配置,实现当一台数据库挂掉时,可以自动转换到另一台数据库上工作,需要三台虚拟机,mysql1做主,给用户授权,允许任何主机登录,mysql2做从,

mysql1的主配置文件

server_id=51

log-bin=db51

binlog-format="mixed"

主库授权:mysql> grant   replication  slave   on  *.*  to  yaya@"%"       identified    by  "123456";

mysql> show  master  status;

配置虚拟vip lo:0   192.168.4.100

mysql2的主配置文件

server_id=52

  • 配置从库:

mysql> change  master  to

-> master_host="192.168.4.51",

-> master_user="yaya",

-> master_password="123456",

-> master_log_file="db51.000001",

-> master_log_pos=154;

  • 启动slave进程

mysql> start slave;

配置虚拟vip lo:0      192.168.4.100

1.keepalived高可用

配置虚拟vip eth0:0   192.168.4.100

2.修改配置文件

real_server  mysql1的ip

real_server  mysql2的ip

3.启动服务

  1. 访问mysql1

[root@vh04 ~]# mysql -h192.168.4.1  -uadmin  -p123456

  1. 当mysql1当掉时,访问

[root@vh04 ~]# mysql -h192.168.4.2  -uadmin  -p123456

  1. 依然可以访问,因为设的固定ip是一样的,都是通过虚拟ip 4.100访问的

集群调度软件对比

Nginx分析

•  优点

–  工作在7层,可以针对http做分流策略

–  正则表达式比HAProxy强大

–  安装、配置、测试简单,通过日志可以解决多数问题

–  并发量可以达到几万次

–  Nginx还可以作为Web服务器使用

 缺点

–  仅支持http、https、mail协议,应用面小

–  监控检查仅通过端口,无法使用url检查

LVS分析

•  优点

–  负载能力强,工作在4层,对内存、CPU消耗低

–  配置性低,没有太多可配置性,减少人为错误

–  应用面广,几乎可以为所有应用提供负载均衡

•  缺点

–  不支持正则表达式,不能实现动静分离

–  如果网站架构庞大,LVS-DR配置比较繁琐

HAProxy分析

•  优点

–  支持session、cookie功能

–  可以通过url进行健康检查

–  效率、负载均衡速度,高于Nginx,低于LVS

–  HAProxy支持TCP,可以对MySQL进行负载均衡

–  调度算法丰富

•  缺点

–  正则弱于Nginx

–  日志依赖于syslogd,不支持apache日志

搭建DHProxy服务器的更多相关文章

  1. ubuntu 14.04LTS 环境下搭建tftp服务器

    花费我一整天的时间在 ubuntu 14.04LTS 环境下搭建tftp服务器,网上好多资料参差不齐,简单来说,TFTP(Trivial File Transfer Protocol),是一个基于UD ...

  2. centos6环境下搭建irc服务器

    问题描述 有时候逛技术社区,经常会发现有个叫IRC的东西存在,想搭建下看看到底是个什么东西 说明: 操作系统环境为CentOS6.5_64 安装irc服务器 通过yum进行安装,命令如下: yum i ...

  3. 在Ubuntu Server 14.04中搭建FTP服务器(VMWare)

    自己搭建ftp服务器,方便主机与虚拟机中的Ubuntu传输文件. 选用的ftp软件为vsftpd. 1.命令行: sudo apt-get install vsftpd 2.安装完配置: vsftpd ...

  4. 如何搭建SVN服务器,详细安装步骤。

    SVN服务器端安装 下载: VisualSVN是一款图形化svn服务器.官网 http://www.visualsvn.com/server/ 下载地址: http://www.visualsvn.c ...

  5. CentOS 7搭建SVN服务器

    安装步骤如下: 1.yum install subversion 2.查看安装版本 svnserve --version 3.创建SVN版本库目录 mkdir -p /var/svn/svnrepos ...

  6. 超简单——自己搭建ftp服务器

    自己搭建ftp服务器 之所以没选择serv-u,一是因为收费,虽说网上有破解版,但是使用过程中发现破解版很不稳定,经常异常死掉,随后改选用免费的filezilla. 1软件获取 从百度搜索 FileZ ...

  7. CentOS利用postfix搭建邮件服务器

    之前我用nodemailer通过163邮箱来发送邮件,不过没过几天就一直ETIMEDOUT,不知道什么原因,想着还是自己搭一个来发邮件可能靠谱点(flag?) 安装postfix CentOS 7 自 ...

  8. Linux 搭建FTP服务器

    介绍 本章主要介绍在Linux中搭建FTP服务器的过程,需要掌握的要点是配置文件的合理配置. 知识点 在linux中使用的FTP是vsftp FTP可以有三种登入方式分别是: 匿名登录方式:不需要用户 ...

  9. RedHat6.2搭建FTP服务器

    我的环境: A:Red Hat Enterprise 6.2 IP:192.168.16.12 此机作测试端 B:Red Hat Enterprise 6.2 IP:192.168.16.13 此机做 ...

随机推荐

  1. python3.7安装pygame

    经过各种找,下面这个安装地址中的版本是最全的 下载地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/#pygame 本机python版本

  2. 记录一个引用文件所有js文件的方法

    在项目api声明的时候,避免每次添加新的js都要对应去处理 首先我在项目api文件下新建一个files的文件夹,然后再api文件夹下的index.js这样写: var api = {}; const  ...

  3. (转)协议森林05 我尽力 (IP协议详解)

    协议森林05 我尽力 (IP协议详解) 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! IPv4与IPv6头部的对比 我们已经在I ...

  4. 文件上传transferTo一行代码的bug

    本次的项目环境为 Running with Spring Boot v1.5.10.RELEASE, Spring v4.3.14.RELEASE, 服务器环境为CentOS7.0. transfer ...

  5. 分享CCNTFS小工具,在 macOS 中完全读写、修改、访问Windows NTFS硬盘的文件,无须额外的驱动(原生驱动)更稳定,简单设置即可高速传输外接NTFS硬盘文件

    CCNTFS [ 下载 ] 在 macOS 中完全读写.修改.访问Windows NTFS硬盘的文件,无须额外的驱动(原生驱动)更稳定,安装后进行简单设置即可高速传输外接NTFS硬盘文件,可全程离线使 ...

  6. HTML基本标签,表格标签,框架标签

    1.html简介 1.1什么是html html全称:Hyper Text Markup Language(超文本标记语言) 备注:           a.超文本:页面内可以包含图片.链接,甚至音乐 ...

  7. 学习笔记----C语言的面向对象

    2020-03-26    21:27:17 面向对象的编程语言都有一个类的概念,像Java.python等.类是对特定数据的特定操作的集合体.它包含两个范畴:数据和操作.C语言是没有类的概念的,但是 ...

  8. 支付宝小程序获取 user_id(openid) ThinkPHP版

    支付宝小程序获取 user_id(openid) ThinkPHP版 近期支付宝小程序个人公测了,就想着玩一下,没想到就获取用户唯一标识都这么麻烦,微信的openid的话Get请求一下就完事了,支付宝 ...

  9. Selenium IDE安装及简介

    一.Selenium IDE安装 Selenium IDE是Firefox浏览器的一个插件,依附于Firefox浏览器.在网上搜了Selenium IDE的安装教程,大部分都是说在官网下载安装,其实最 ...

  10. Linux Namespace 入门系列:Namespace API

    Linux Namespace 是 Linux 提供的一种内核级别环境隔离的方法.用官方的话来说,Linux Namespace 将全局系统资源封装在一个抽象中,从而使 namespace 内的进程认 ...