温馨提示×

如何配置Ubuntu Oracle的负载均衡

小樊
45
2025-12-22 16:21:42
栏目: 云计算

Ubuntu 上 Oracle 负载均衡配置指南

一、方案总览与选择

  • Oracle RAC 内置负载均衡:包含客户端负载均衡服务器端负载均衡,适合多实例集群,连接分发由监听器和数据库服务协同完成,支持与TAF 故障转移联动。
  • TCP/应用层代理:在 Ubuntu 上使用 HAProxyNginx 做 4 层/7 层转发,将连接到 Oracle Net 1521 的会话分发到多个数据库节点,适合非 RAC 或需要统一入口、审计与熔断的场景。
  • 高可用增强:在代理层前叠加 Keepalived VIP,实现负载均衡器故障时的自动切换,提升整体可用性。

二、RAC 内置负载均衡配置步骤

  • 客户端负载均衡
    • 在客户端 tnsnames.ora 使用服务名,配置多个节点的 VIP 地址,启用 LOAD_BALANCE=YES,示例:
      MYDB =
        (DESCRIPTION =
          (ADDRESS = (PROTOCOL = TCP)(HOST = rac1-vip)(PORT = 1521))
          (ADDRESS = (PROTOCOL = TCP)(HOST = rac2-vip)(PORT = 1521))
          (LOAD_BALANCE = yes)
          (CONNECT_DATA =
            (SERVER = DEDICATED)
            (SERVICE_NAME = mydb)
          )
        )
      
    • 客户端将按地址列表随机挑选节点建立新连接,实现连接级负载均衡。
  • 服务器端负载均衡
    • 配置 SCAN 或地址列表到参数 remote_listener,使监听器间可交换负载信息:
      ALTER SYSTEM SET remote_listener='LISTENERS_MYDB' SCOPE=BOTH SID='*';
      
    • 监听器通过 PMON 收集的负载/连接信息,将新连接分配给负载更低的实例(无需在客户端指定实例名)。
  • 故障转移 TAF(可选)
    • 通过 dbcasrvctl 创建数据库服务,设置首选/可用实例与 TAF 策略(TYPE=SELECT, METHOD=BASIC),客户端在连接中断时可自动切换:
      SALES =
        (DESCRIPTION =
          (ADDRESS = (PROTOCOL = TCP)(HOST = rac1-vip)(PORT = 1521))
          (ADDRESS = (PROTOCOL = TCP)(HOST = rac2-vip)(PORT = 1521))
          (LOAD_BALANCE = yes)
          (CONNECT_DATA =
            (SERVER = DEDICATED)
            (SERVICE_NAME = sales)
            (FAILOVER_MODE =
              (TYPE = SELECT)
              (METHOD = BASIC)
              (RETRIES = 180)
              (DELAY = 5)
            )
          )
        )
      
    • 验证:lsnrctl status 应看到服务被多个实例注册;多次连接应相对均衡分布到各实例。

三、在 Ubuntu 上使用 HAProxy 或 Nginx 进行连接负载均衡

  • 适用场景:单实例/主备、应用不便直连 RAC、需要统一入口、限流/熔断/观测等。
  • HAProxy 示例(4 层 TCP,推荐用于 Oracle Net)
    1. 安装:sudo apt update && sudo apt install haproxy
    2. 配置 /etc/haproxy/haproxy.cfg(关键片段):
      global
          log /dev/log    local0
          log /dev/log    local1 notice
          chroot /var/lib/haproxy
          user haproxy
          group haproxy
          daemon
      
      defaults
          log     global
          mode    tcp
          option  tcplog
          timeout connect 5000ms
          timeout client  50000ms
          timeout server  50000ms
      
      frontend oracle_front
          bind *:1521
          default_backend oracle_back
      
      backend oracle_back
          balance leastconn
          server db1 192.168.1.101:1521 check
          server db2 192.168.1.102:1521 check
      
    3. 启用:sudo systemctl enable --now haproxy
  • Nginx 示例(仅当应用走 HTTP/ORDS/SOAP 等 7 层协议时)
    1. 安装:sudo apt update && sudo apt install nginx
    2. 配置 /etc/nginx/sites-available/oracle:
      upstream oracle_backend {
          least_conn;
          server 192.168.1.101:1521;
          server 192.168.1.102:1521;
      }
      
      server {
          listen 80;
          location / {
              proxy_pass http://oracle_backend;
              proxy_set_header Host $host;
              proxy_set_header X-Real-IP $remote_addr;
              proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
              proxy_set_header X-Forwarded-Proto $scheme;
          }
      }
      
    3. 启用:sudo ln -s /etc/nginx/sites-available/oracle /etc/nginx/sites-enabled && sudo systemctl reload nginx
  • 安全与网络
    • 仅开放必要端口(如 1521),使用 UFW/安全组 限制来源;为代理与数据库间启用 TLS/SSL(如 Oracle Advanced Security)以加密传输。

四、高可用与验证

  • 高可用增强(可选)
    • 在两台 Ubuntu 代理节点部署 Keepalived,配置 VRRP 虚拟 IP(VIP),主备自动切换;Nginx/HAProxy 配置保持一致,实现“VIP + 双活/主备”的负载均衡器层高可用。
  • 验证要点
    • RAC:多次连接应相对均衡命中不同实例;lsnrctl status 显示服务多实例注册;TAF 场景下断开可自动恢复会话。
    • 代理:对 VIP:1521 发起连接,检查后端实例接受情况;观察 HAProxy/Nginx 日志与监控指标(连接数、错误、延迟)。

五、关键注意事项

  • 使用 VIP 而非物理 IP 进行客户端/RAC 配置,缩短故障切换时间并提高可用性。
  • 区分 连接负载均衡运行时负载均衡:前者在连接建立时分发,后者依赖实例/服务统计信息做更细粒度调度。
  • 对数据库协议使用 TCP 模式(HAProxy)更稳妥;HTTP/ORDS 等才考虑 Nginx 7 层
  • 始终启用 防火墙/安全组加密传输监控告警,并在变更前做好 备份与回滚 方案。

0