暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

SCAN(Single Client Access Name,单客户端访问名称)

恩恩霸 2025-10-10
48

SCAN(Single Client Access Name,单客户端访问名称)是 Oracle 自 11g R2 版本推出的一项核心网络特性,专为 RAC(Real Application Clusters)环境设计,旨在简化客户端连接、增强负载均衡和高可用性。以下从定义、工作原理、配置方式、优势与限制、运维要点等方面对 SCAN 做系统介绍。

---

### 一、SCAN 的定义与定位

SCAN 是一个单一的域名(如 `rac-scan.example.com`),客户端通过它访问整个 RAC 集群,而无需关心集群内部有多少节点、各节点的 VIP 是什么。SCAN 抽象了集群的拓扑变化,使得节点增减对客户端完全透明。

SCAN 实际上对应一组虚拟 IP(即 SCAN VIP),最多支持 3 个,Oracle 推荐配置 3 个以实现负载均衡与故障转移。每个 SCAN VIP 会绑定一个 SCAN Listener,这些 Listener 作为“入口门户”,负责接收客户端连接请求并将其重定向到最合适的节点本地监听器。

---

### 二、SCAN 的工作原理

1. **域名解析**:客户端通过 DNS 或 GNS 解析 SCAN 名称,获得 1~3 个 SCAN IP(推荐 3 个),DNS 通常以轮询(Round Robin)方式返回 IP 列表。

2. **连接建立**:客户端随机尝试其中一个 SCAN IP,连接对应的 SCAN Listener。

3. **负载评估**:SCAN Listener 根据各节点当前负载情况,选择运行目标服务且负载最轻的实例。

4. **重定向**:SCAN Listener 将客户端重定向到该实例所在节点的 VIP(由本地监听器提供服务),最终建立数据库会话。

整个过程对客户端完全透明,无需在连接串中列出所有节点的 VIP,也无需在集群拓扑变化时修改客户端配置。

---

### 三、SCAN 的配置方式

SCAN 的配置依赖于域名解析机制,有两种官方支持方式:

| 方式 | 描述 | 特点 |
|------|------|------|
| **DNS 解析** | 在 DNS 服务器中为 SCAN 名称注册 3 个 A 记录(IPv4)或 AAAA 记录(IPv6),实现轮询解析 | 最常用、最稳定,支持跨子网(12c 起) |
| **GNS 解析** | 使用 Oracle Grid Naming Service,结合 DHCP 自动分配 SCAN VIP 和节点 VIP | 简化部署,适合动态环境,但对网络基础设施有要求(需 DHCP、多播支持) |

> ⚠️ 不建议使用 `/etc/hosts` 文件解析 SCAN,因为只能定义一个 IP,失去负载均衡与故障转移能力,且 19c 安装时会强制检测并报错。

---

### 四、SCAN 的核心组件

| 组件 | 说明 |
|------|------|
| **SCAN VIP** | 虚拟 IP 地址,最多 3 个,由 Clusterware 管理,可浮动于任意节点 |
| **SCAN Listener** | 监听客户端连接请求,不直接创建服务器进程,仅负责重定向 |
| **Remote Listener 参数** | 数据库参数 `REMOTE_LISTENER` 指向 SCAN,确保实例向 SCAN Listener 注册自身服务 |
| **Local Listener 参数** | `LOCAL_LISTENER` 指向节点 VIP,用于接收 SCAN Listener 重定向过来的连接 |

---

### 五、SCAN 的优势

1. **连接透明性**:节点增减无需修改客户端连接串(如 JDBC、EZConnect)。
2. **负载均衡**:DNS 轮询 + SCAN Listener 评估,实现连接级负载均衡。
3. **高可用性**:某个 SCAN IP 或 Listener 故障时,客户端可自动尝试其他 IP。
4. **简化管理**:减少 `tnsnames.ora` 中冗长的地址列表,降低运维复杂度。
5. **共享 SCAN(12c 起)**:多集群可共用一组 SCAN VIP,节省地址资源。

---

### 六、SCAN 的限制与注意事项

| 限制 | 说明 |
|------|------|
| **IP 数量上限** | 最多 3 个 SCAN VIP,无法扩展更多 |
| **子网要求** | SCAN VIP 必须与公共网络(Public Network)在同一子网(11g),12c 起支持多子网 |
| **DNS 依赖** | 若 DNS 不稳定,解析失败将直接影响连接 |
| **端口固定** | SCAN Listener 默认端口 1521,修改需额外配置 |
| **不支持老版本客户端** | 10g 及更早客户端不支持 SCAN,需使用 VIP 连接 |

---

### 七、SCAN 的运维与故障排查

#### 1. 查看 SCAN 配置
```bash
srvctl config scan
srvctl config scan_listener
```

#### 2. 查看 SCAN 资源状态
```bash
srvctl status scan
srvctl status scan_listener
```

#### 3. DNS 解析验证
```bash
nslookup rac-scan.example.com
```
应返回 3 个 IP,且每次顺序可能不同(轮询生效)。

#### 4. 日志位置
- SCAN Listener 日志:`$GRID_HOME/log/diag/tnslsnr/<node>/scan_listener/trace/`
- Clusterware 日志:`$GRID_HOME/log/<node>/agent/ohasd/oraagent_grid/`

#### 5. 常见故障
| 现象 | 可能原因 |
|------|----------|
| 解析不到 SCAN | DNS 未配置或 `/etc/hosts` 优先 |
| 连接超时 | SCAN VIP 未上线、防火墙拦截、本地监听器未启动 |
| 负载不均 | DNS 未轮询、客户端缓存 DNS 结果 |

---

### 八、SCAN 与其他连接方式对比

| 特性 | SCAN | 传统 VIP 连接 |
|------|------|----------------|
| 客户端配置 | 单一名称 | 需列出所有 VIP |
| 节点扩展 | 无需修改 | 需更新客户端 |
| 负载均衡 | 自动 | 需手动配置 `LOAD_BALANCE=ON` |
| 高可用 | 自动 failover | 需配置 `FAILOVER=ON` |
| 管理复杂度 | 低 | 高 |

---

### 九、总结

SCAN 是 Oracle RAC 网络架构的一次重大演进,它通过“单一名称”抽象了集群的复杂性,实现了客户端连接的透明化、负载均衡与故障转移。正确配置和维护 SCAN,是保障 RAC 系统高性能、高可用的关键一环。对于运维人员而言,理解 SCAN 的原理、掌握其配置与排障方法,是管理现代 Oracle 集群不可或缺的基本功。

---

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论