CloudCanal社区版采用docker部署,docker需要防火墙设置容器和宿主机进行NAT转换,需要确保防火墙正常运行,文中对涉及防火墙的问题进行说明,同时ORACLE2SR实时同步过程中遇到的一些问题进行说明。


0. ENV
CentOS 7.6;
ORACLE 19.3;
StarRocks 2.0.1(简称SR);
CloudCanal 2.1.0.22(简称CC)。

1.现象
之前配置的SR数据源正常,今天用的时候突然测试连接报错:
操作失败
call testConnect failed.msg:invoke rcontroller method failed.Request id:db17012a-9546-11ec-b386-77dcdacb37d2msg:RuntimeException: init druid ds for StarRocks ,driver=com.mysql.cj.jdbc.Driver ,jdbcUrl=jdbc:mysql://**.**.**.80:9030/information_schema?serverTimezone=Asia/Shanghai&connectTimeout=120000&socketTimeout=120000 failed.msg:SocketTimeoutException: connect timed out. Target sidecar is 172.31.238.4, route name is startrocks_rdbTestConnect


2. 排查过程
1.)验证StarRocks运行是否正常
在StarRocks FE主机使用IP登录,可正常登录,说明SR运行正常。

2.)验证sidecar及宿主机网络是否正常
sidecar所在主机ping FE_IP显示网络正常;
查看当前sidecar容器,并进入容器系统,ping FE_IP显示网络不通,说明sidecar和SR FE通讯异常。

3.)查看sidecar宿主机防火墙状态
发现防火墙关闭,但存在大量防火墙转发规则,防火墙关闭导致NAT规则不生效。


3. 问题原因
CloudCanal社区版采用docker方式部署,docker在创建容器的时候,会自动配置宿主机的防火墙NAT规则,但没有持久化到文件。关闭宿主机的防火墙会影响这些docker容器(包含sidear)和宿主机通信,导致sidercar和外部数据源主机通信异常,需要开启防火墙,确保NAT规则正常运行。

4. 解决方法
1)启动宿主机防火墙
[root@oms ~]# systemctl start firewalld

2)再次测试SR数据源恢复正常。


5. 其它问题-Firewalld开放ORACLE 1521端口
测试环境,如果ORACLE和CC安装在同一台主机,firewalld开启状态下,需要打开tcp 1521防火墙规则:
[root@oms ~]# firewall-cmd --zone=public --add-port=1521/tcp --permanentsuccess[root@oms ~]# firewall-cmd --reloadsuccess
此时,外部客户端、CC 配置oracle数据源才可正常连接,CC和数据源连接为长链接,一旦连接成功后,任务中使用该数据源后,会一直连接数据源连接中配置的数据库。

6. 其它问题-ORA-00942: table or view does not exist .
使用CloudCanal同步ORACLE到StarRocks时,创建任务测试连接或创建任务下一步时会报错:ORA-00942: table or view does not exist .

解决方法:
授予同步用户dba角色,如数据源中配置的为scott用户,则授予scott用户dba角色,或者更改数据源配置的用户为system或sys。


7. 网络防火墙端口开放问题
CloudCanal 社区版是一个分布式系统,故会占用一些端口,部署前主机请确保未被其他应用占用8111、9090、55000、25000、55005、7007。
如果网络内有防火墙的话,可能要放开除上述提到的6个端口外,还需要放开8787 - 8797 11个端口以及3306。
旨在交流,不足之处,还望抛砖。
作者:王坤,微信公众号:rundba,欢迎转载,转载请注明出处。
如需公众号转发,请联系wx: landnow。





