11

When I download, unpack and launch artifactory.sh I see the following error

2020-02-26T21:32:50.496Z [jfac ] [ERROR] [c1b4de79a3f11666] [.j.a.s.s.r.JoinServiceImpl:253] [http-nio-8040-exec-1] - Could not validate router Check-url: http://XXXXXX:8082/router/api/v1/system/ping

And then

2020-02-26T21:32:55.636Z [jfac ] [WARN ] [67b9d42698f5614c] [o.j.c.ExecutionUtils:141      ] [pool-6-thread-2     ] - Retry 20 Elapsed 9.04 secs failed: Registration with router on URL http://localhost:8046 failed with error: UNAVAILABLE: io exception. Trying again

I realize I'm missing something obvious but couldn't figure it out yet. Any suggestions? Thanks.

Alexey Loubyansky
  • 308
  • 1
  • 2
  • 8

6 Answers6

21

Alexey, I suspect ipv6 ip being picked up by the start-script, causing this.

Can you update your system.yaml (will be in var/etc/ folder) with the following and try?

shared:
    node:
        ip: <your ipv4 IP>

Related documentation: https://jfrog.com/help/r/access-router-connectivity-node-ip/getting-access-service/router-connectivity-issues-on-startup-try-setting-the-node-ip.

starball
  • 20,030
  • 7
  • 43
  • 238
  • Prasanna, thanks for the advice. I tried both 127.0.0.1 and a specific IPv4 assigned to my machine. It didn't really make a difference though. I still see the IPv6 in the logs instead. – Alexey Loubyansky Mar 03 '20 at 08:17
  • I assume you did a restart? Can you send the initial section of router-service.log - where it logs which SHARED_NODE_IP it picked? – Prasanna Raghavendra Mar 03 '20 at 08:28
  • Given that it doesn't start I don't keep it running. So I'm always launching `./artifactory.sh`. Having `127.0.0.1` in `system.yaml` as instructed, I'm seeing this on the terminal `2020-03-03T11:12:08.556Z [shell] [INFO ] [] [installerCommon.sh:2518 ] [main] - Setting JF_SHARED_NODE_IP to fe80::20ac:2da:2a77:51ab%enp0s31f6` then `JF_SHARED_NODE_IP : fe80::20ac:2da:2a77:51ab%enp0s31f6` and then `2020-03-03T11:16:06.821Z [jfrou] [INFO ] [ ] [bootstrap.go:73 ] [main ] - JFrog Router IP: fe80::20ac:2da:2a77:51ab%enp0s31f6` in `router-service.log` – Alexey Loubyansky Mar 03 '20 at 11:19
  • shared: ## Node Settings node: ## Default: auto resolved by startup script ip: 127.0.0.1 – Alexey Loubyansky Mar 03 '20 at 11:24
  • Alexey, It appears it is not reading your system.yaml, and using default values. can you check path used by system in log and the system.yaml you have placed? OR check hostname -i and try to change your /etc/hosts entry to make it return ipv4 address, if it is ok and possible. – Prasanna Raghavendra Mar 04 '20 at 02:21
  • 1
    Prasanna, your suggestion to set the `ip` in `system.yaml` actually fixes the issue. The reason it didn't work for me originally was that this file is apparently re-formatted during the start. `#ip` was commented out originally, so I simply uncommented it, which wasn't enough of course. After adjusting the formatting by making sure `ip` is nested under 'node` the value I specified `127.0.0.1` became effective. Thanks for your time helping figure it out. – Alexey Loubyansky Mar 04 '20 at 07:16
  • `shared: extraJavaOpts: -Djava.net.preferIPv4Stack=true` can also help. – vasquez Mar 11 '20 at 15:09
  • @vasquez Thank you. Yes it may help, but some of the services in Artifactory are non Java, and they will not pick JavaOpts. What may also help though is wrapping ipv6 addresses in [ ] – Prasanna Raghavendra Mar 15 '20 at 16:49
  • Changed IP address and lost 4 hours of my life. Thank you. – Cory Silva Apr 15 '20 at 23:25
2

Might be helpful to anyone. I had tried many things mentioned on google to solve the issue but does not work. Finally, it gets resolved by setting up proper resources. I used 4 GB RAM and 2 core and it worked

1

Alexey, Do you see any error in:

  • tomcat localhost log - will be at var/log/tomcat
  • router_service.log - will be at var/log
  • access_service.log - will be at var/log

Potential issue may be -

  • your box is not allowing localhost calls (due to some security set-up), or
  • all dependent services are not starting for some other reason

Also - please check which script are you using, there is a new artifactory.sh script packed in app/bin folder, which should be used.

1

In my case, I had a similar error the moment i was trying to access artifactory. Logs of router-service:

[root@artifactory-master log]# tail -f router-service.log
2020-03-20T22:17:05.328Z [jfrou] [INFO ] [                ] [bootstrap.go:70               ] [main                ] - Router (jfrou) service initialization started. Version: 1.1.0 Revision: c2646fcb28e2d4ca095b07aacebe509d934cef77 PID: 19062 Home: /opt/jfrog/artifactory
2020-03-20T22:17:05.329Z [jfrou] [INFO ] [                ] [bootstrap.go:73               ] [main                ] - JFrog Router IP: ::1
2020-03-20T22:17:05.334Z [jfrou] [INFO ] [                ] [bootstrap.go:159              ] [main                ] - System configuration encryption report:
shared.newrelic.licenseKey: does not exist in the config file
shared.security.joinKeyFile: file '/opt/jfrog/artifactory/var/etc/security/join.key' - already encrypted
2020-03-20T22:17:05.336Z [jfrou] [INFO ] [                ] [bootstrap.go:78               ] [main                ] - JFrog Router Service ID: jfrou@01e3wgemz9esckmd8v48etdy18
2020-03-20T22:17:05.336Z [jfrou] [INFO ] [                ] [bootstrap.go:79               ] [main                ] - JFrog Router Node ID: artifactory-master
2020-03-20T22:17:07.354Z [jfrou] [INFO ] [                ] [config_holder.go:107          ] [main                ] - configuration update detected
2020-03-20T22:17:10.738Z [jfrou] [FATAL] [                ] [bootstrap.go:100              ] [main                ] - Cluster join: Failed joining the cluster; Error: Error response from service registry, status code: 400; message: Could not validate router Check-url: http://::1:8082/router/api/v1/system/ping; detail: I/O error on GET request for "http:///:1:8082/router/api/v1/system/ping": URI does not specify a valid host name: http:///:1:8082/router/api/v1/system/ping; nested exception is org.apache.http.client.ClientProtocolException: URI does not specify a valid host name: http:///:1:8082/router/api/v1/system/ping

To give you some context, i am running artifactory in a centos 8 VM and I'm accessing artifactory graphical interface via windows machine. That means, I am using a web browser (Chrome) to navigate to the artifactory instance.

For that, in the VM side i updated the files "hosts" and "hostname" (/etc/):

hosts:

127.0.0.1   localhost artifactory-master
::1         localhost artifactory-master

hostname:

artifactory-master

In the windows machine, i updated the hosts file located in "C:\Windows\System32\drivers\etc" with the VM host ip and hostname:

# localhost name resolution is handled within DNS itself.
#   127.0.0.1       localhost
#   ::1             localhost

192.100.100.10 artifactory-master

(in order to get the ip of the VM machine run the command ifconfig)

Then, I started artifactory by running the command:

service artifactory start

And tried to access artifactory in the browser unsucessfuly:

http://artifactory-master:8082/ui

I stopped the service and in order to accomplish my goal after some tryouts, I realized that I had to comment out the address "::1" in the "hosts" file (/etc/):

hosts:

127.0.0.1   localhost artifactory-master
#::1         localhost artifactory-master

Finally, I started the service again and i was able to access artifactory. Logs of router-service :

2020-03-24T23:02:17.219Z [jfrou] [INFO ] [                ] [bootstrap.go:70               ] [main                ] - Router (jfrou) service initialization started. Version: 1.1.0 Revision: c2646fcb28e2d4ca095b07aacebe509d934cef77 PID: 14542 Home: /opt/jfrog/artifactory
2020-03-24T23:02:17.220Z [jfrou] [INFO ] [                ] [bootstrap.go:73               ] [main                ] - JFrog Router IP: 127.0.0.1
2020-03-24T23:02:17.224Z [jfrou] [INFO ] [                ] [bootstrap.go:159              ] [main                ] - System configuration encryption report:
shared.newrelic.licenseKey: does not exist in the config file
shared.security.joinKeyFile: file '/opt/jfrog/artifactory/var/etc/security/join.key' - already encrypted
2020-03-24T23:02:17.227Z [jfrou] [INFO ] [                ] [bootstrap.go:78               ] [main                ] - JFrog Router Service ID: jfrou@01e3wgemz9esckmd8v48etdy18
2020-03-24T23:02:17.227Z [jfrou] [INFO ] [                ] [bootstrap.go:79               ] [main                ] - JFrog Router Node ID: artifactory-master
2020-03-24T23:02:19.572Z [jfrou] [INFO ] [                ] [config_holder.go:107          ] [main                ] - configuration update detected
2020-03-24T23:02:25.663Z [jfrou] [INFO ] [                ] [join_executor.go:180          ] [main                ] - Cluster join: Successfully joined the cluster
2020-03-24T23:02:25.813Z [jfrou] [INFO ] [                ] [registry_handler.go:89        ] [main                ] - the following services were registered automatically based on persisted data: jfac@01e3wgdn6q0gvj0czswc8k0gp8, jffe@000, jfmd@01e3wges9tvwawj403y5mxfjp7, jfrt@01e3wgfass87mh1nbcv5rv1t98
2020-03-24T23:02:25.984Z [jfrou] [INFO ] [                ] [main.go:36                    ] [main                ] - Router (jfrou) service initialization completed in 8.808 seconds. Listening on port: 8082
2020-03-24T23:03:01.281Z [jfrou] [INFO ] [7e7df2f621a4e1aa] [local_topology.go:212         ] [main                ] -
###############################################################
###   All services started successfully in 44.081 seconds   ###
###############################################################

PS: my artifactory version is the OSS 7.2.1

Nelson Dias
  • 111
  • 7
  • Makes sense. Summary: The shared.node.ip is generated by the script using `hostname -i` if it is not provided in `system.yaml`. If you either make `hostname -i` return ipv4 or force ipv4 ip in system.yaml it will work. – Prasanna Raghavendra Mar 26 '20 at 05:17
1

we have put the IP in our node, and this doesnt work.

we can see that the router is still using LOCALHOST and that its using the ::1 IPV6, despite our system.yaml being indented correctly.

this was working fine (running system for more than 4 months) and then the most recent update this started to fail.

Does anyone have anything better than "check the file" - that actually addresses the issue, which is the following:

  • OS's generally come with both localhost set to the 127.0.0.1 and the ::1 to localhost.

  • JFROG router is "dumb " in that its picking up the url https://localhost:8046, but then trying to do resolution to the ::1 (catch all for IPv6).

  • many SO ticket shows @prasanna and others doing "edits" to the file, but even with correct syntax, we can see JFROG's product is not doing what is says its doing.

example of system.yaml (you can see the the indents are correct and in fact, this is from the system.yaml-full-example template that JFROG provides.

SHARED CONFIGURATIONS

A shared section for keys across all services in this config

shared: ## Security Configuration security: ## Join key value for joining the cluster (takes precedence over 'joinKeyFile') #joinKey: ""

## Join key file location
#joinKeyFile: "<For example: JFROG_HOME/artifactory/var/etc/security/join.key>"

## Master key file location
## Generated by the product on first startup if not provided
#masterKeyFile: "<For example: JFROG_HOME/artifactory/var/etc/security/master.key>"

## Maximum time to wait for key files (master.key and join.key)
#bootstrapKeysReadTimeoutSecs: 120

## Node Settings
node:
    ## A unique id to identify this node.
    ## Default auto generated at startup.
    id: "art-00"
    ## Default auto resolved by startup script
    ip: 10.x.34.63    (x is there on purpose)
## Sets this node as primary in HA installation

you can see plainly inside the logs when you start what is happening as the OP showed.

SAMPLE LOG

Daniel Smith
  • 11
  • 1
  • 2
  • This [issue is documented by JFrog][1] now, but it's incomplete. If you disable IPv6 on localhost, take care to remove or comment this entry in `/etc/hosts`: `::1 localhost` [1]: https://jfrog.com/help/r/access-router-connectivity-node-ip – bbaassssiiee Jun 22 '23 at 12:22
0

The router will only start after a database connection has been established. systemctl status -l artifactory will tell it's started, but there are several services listening on different ports. The router listens on 8082 if everything is fine.

Things to check:

  • ss -tan|grep 5432 should list established jdbc connections
  • IPv6 can be disabled, but remove the localhost IPv6 entry from /etc/hosts
  • system.yaml shared.node.ip should be 127.0.0.1 in a simple setup.
  • system.yaml shared.database.url should be a resolvable server name or an ip.
  • JDBC password would better be alphanumeric.
bbaassssiiee
  • 6,013
  • 2
  • 42
  • 55