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

当Oracle数据库需要换IP时会发生什么

生有可恋 2022-08-25
1355

每次只要试图给Oracle数据库换IP,就会地动山摇一地鸡毛。


首先需要梳理所有连接数据库的服务,越是运行时间长的数据库,影响范围就越大。因为你不知道数据库被什么应用引用了,可能是在dblink中,也可能是在某个ETL工具的配置中。如果是客户端直连数据库,则所有客户端都需要跟着一起改。


如果数据库迁移、换IP的任务被安排在半夜,则所有与之相关的应用的责任工程师都将为切换IP做准备。如果是终端直连数据库,比如使用tnsname方式,则需要大费周章对所有终端的tnsname配置进行变更。如果有云桌面或软件批量下发机制,则更新配置会相对容易一点,要不然就需要手工变更了,想起来就是一场灾难。


数据库迁移当天,如果定下的方案是变更服务器IP,则会议室内会人满为患,相反如果最后宣布IP不用变,瞬间所有人的压力都烟消云散,甚至最终参与数据库迁移的人都能减少到一至两个人,其他人只用远程检查一下数据库迁移完后业务是否恢复。毕竟个别业务比较傻,会出现数据库长时间启停后无法主动连接的情况,这时需要人工重启恢复业务。


如果确定数据库的IP需要变更,此时需要做哪些准备?


最优方案当然是使用DNS代替静态IP,提前将IP直连的方式改成使用内部域名,使用域名来代替IP。如果内网没有DNS服务器提供统一的域名服务,则可以在操作系统的hosts文件中手工维护IP与域名间的对照。


hosts 文件位置:

    # windows
    C:\Windows\System32\drivers\etc\hosts
    # Linux
    /etc/hosts

    文件格式为:

      192.168.1.1   www.mygit.com


      通过变更域名与IP间的映射关系,可以在服务器IP发生变化时做到快速适配,而不需要去修改程序配置。不论是jdbc连接串,还是程序的配置文件。修改这些配置都需要重启服务,提前使用域名代替IP可以很好地杜绝IP变动带来的影响。


      当然,如果能够不改变IP则所有人都不需要加班。那么一台服务器能使用多个IP吗?理论上可以,如果变更的IP属于同一个网段,这种情况可以直接在一个网卡上配置多个IP就可以解决。如果IP所属的网段都发生变化了,此时就需要配置路由,情况会变得复杂,具体可以参照下面这篇文章:


      Linux 双IP配置

      hyang0,公众号:生有可恋Linux 双网卡双IP配置


      最后一种情况,能否在数据库服务器的IP发生变化后,还能保留原IP的访问?这里就涉及到今天的重点:端口转发


      端口转发可以让我们访问A服务器,但实际访问的是B服务器。A服务器充当的是前置机或跳板的作用。端口转发的方法比较多,今天介绍一款开源工具来实现端口转发,不需要复杂的配置,随到随用。


      工具的github项目地址:

      • https://github.com/rssnsj/portfwd


      首先获取portfwd的代码:

        $ git clone https://github.com/rssnsj/portfwd.git

        代码量很小,使用C写的,需要使用gcc编译后使用。

          $ cd portfwd/src
          $ make all
          cc -c -Wall -o tcpfwd.o tcpfwd.c
          cc -o tcpfwd tcpfwd.o
          cc -c -Wall -o udpfwd.o udpfwd.c
          cc -o udpfwd udpfwd.o
          $ ls
          Makefile no-epoll.h tcpfwd tcpfwd.c tcpfwd.o udpfwd udpfwd.c udpfwd.o


          编译后的可执行文件有两个,分别为:

          • tcpfwd

          • udpfwd


          udp 的服务比较少,大多数服务是tcp的。如果我们想把目标服务器的端口映射到当前服务器,可以使用如下命令:

            $ ./tcpfwd 0.0.0.0:1521 192.168.10.100:1521
            tcpfwd: TCP proxy [0.0.0.0]:1521 -> [192.168.10.100]:1521
            tcpfwd: New connection [192.168.1.210]:1134 -> [192.168.10.100]:1521
            tcpfwd: Connection [192.168.1.210]:1167 closed
            tcpfwd: New connection [192.168.1.210]:1169 -> [192.168.10.100]:1521
            tcpfwd: Connection [192.168.1.210]:1169 closed


            A服务器作为跳板机,此时访问A服务器的1521端口,A会转发来自客户端的请求,对于客户端来说转发是无感的,最终由A代替客户端访问服务器B。


            使用tcpfwd可以保留原始Oracle服务器的IP,由该服务器转发请求访问新的数据库服务器。同时新的数据库服务器也可以对外提供服务。对于方便更改请求IP的应用可以直接使用新的服务器IP,如果年久无人维护找不到服务商对数据库连接串IP进行变更,此时可以暂时使用端口转发的方式保留旧的服务器IP。


            端口转发工具tcpfwd的参数比较简单,可以在前台执行,也可以作为守护进程在后台执行。程序的帮助文档为:

              $ ./tcpfwd -h
              Userspace TCP proxy.
              Usage:
              ./tcpfwd <local_ip:local_port> <dest_ip:dest_port> [-d] [-o] [-b]
              Options:
              -d run in background
              -o accept IPv6 connections only for IPv6 listener
              -b base address to port mapping mode
              -p <pidfile> write PID to file


              全文完。


              如果转发本文,文末务必注明:“转自微信公众号:生有可恋”。

                     
              文章转载自生有可恋,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

              评论