每次只要试图给Oracle数据库换IP,就会地动山摇一地鸡毛。
首先需要梳理所有连接数据库的服务,越是运行时间长的数据库,影响范围就越大。因为你不知道数据库被什么应用引用了,可能是在dblink中,也可能是在某个ETL工具的配置中。如果是客户端直连数据库,则所有客户端都需要跟着一起改。
如果数据库迁移、换IP的任务被安排在半夜,则所有与之相关的应用的责任工程师都将为切换IP做准备。如果是终端直连数据库,比如使用tnsname方式,则需要大费周章对所有终端的tnsname配置进行变更。如果有云桌面或软件批量下发机制,则更新配置会相对容易一点,要不然就需要手工变更了,想起来就是一场灾难。
数据库迁移当天,如果定下的方案是变更服务器IP,则会议室内会人满为患,相反如果最后宣布IP不用变,瞬间所有人的压力都烟消云散,甚至最终参与数据库迁移的人都能减少到一至两个人,其他人只用远程检查一下数据库迁移完后业务是否恢复。毕竟个别业务比较傻,会出现数据库长时间启停后无法主动连接的情况,这时需要人工重启恢复业务。
如果确定数据库的IP需要变更,此时需要做哪些准备?
最优方案当然是使用DNS代替静态IP,提前将IP直连的方式改成使用内部域名,使用域名来代替IP。如果内网没有DNS服务器提供统一的域名服务,则可以在操作系统的hosts文件中手工维护IP与域名间的对照。
hosts 文件位置:
# windowsC:\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 allcc -c -Wall -o tcpfwd.o tcpfwd.ccc -o tcpfwd tcpfwd.occ -c -Wall -o udpfwd.o udpfwd.ccc -o udpfwd udpfwd.o$ lsMakefile 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:1521tcpfwd: TCP proxy [0.0.0.0]:1521 -> [192.168.10.100]:1521tcpfwd: New connection [192.168.1.210]:1134 -> [192.168.10.100]:1521tcpfwd: Connection [192.168.1.210]:1167 closedtcpfwd: New connection [192.168.1.210]:1169 -> [192.168.10.100]:1521tcpfwd: Connection [192.168.1.210]:1169 closed
A服务器作为跳板机,此时访问A服务器的1521端口,A会转发来自客户端的请求,对于客户端来说转发是无感的,最终由A代替客户端访问服务器B。
使用tcpfwd可以保留原始Oracle服务器的IP,由该服务器转发请求访问新的数据库服务器。同时新的数据库服务器也可以对外提供服务。对于方便更改请求IP的应用可以直接使用新的服务器IP,如果年久无人维护找不到服务商对数据库连接串IP进行变更,此时可以暂时使用端口转发的方式保留旧的服务器IP。
端口转发工具tcpfwd的参数比较简单,可以在前台执行,也可以作为守护进程在后台执行。程序的帮助文档为:
$ ./tcpfwd -hUserspace 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
全文完。
如果转发本文,文末务必注明:“转自微信公众号:生有可恋”。




