Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services Neo4j HA群集使用螺栓连接到图形数据库时出错_Amazon Web Services_Neo4j_Spring Data Neo4j_Amazon Elb_Neo4j Ogm - Fatal编程技术网

Amazon web services Neo4j HA群集使用螺栓连接到图形数据库时出错

Amazon web services Neo4j HA群集使用螺栓连接到图形数据库时出错,amazon-web-services,neo4j,spring-data-neo4j,amazon-elb,neo4j-ogm,Amazon Web Services,Neo4j,Spring Data Neo4j,Amazon Elb,Neo4j Ogm,我们正在AWS上使用neo4j-enterprise-3.0.4集群和螺栓协议。HAproxy习惯于我们知道HA集群中谁是主,谁是奴隶。Java应用程序使用spring-data-neo4j框架,并部署在Tomcat7上 AWS上的结构为:Neo4j HA群集(1个主群集和2个从群集)--->HAproxy-->ELB 我们收到了这个错误。错误不是每次都发生,而是偶尔发生 (昨天3次) 我们不知道哪里出了问题。问题出在: 1) org.neo4j.ogm.drivers.bolt.driver.

我们正在AWS上使用neo4j-enterprise-3.0.4集群和螺栓协议。HAproxy习惯于我们知道HA集群中谁是主,谁是奴隶。Java应用程序使用spring-data-neo4j框架,并部署在Tomcat7上

AWS上的结构为:Neo4j HA群集(1个主群集和2个从群集)--->HAproxy-->ELB

我们收到了这个错误。错误不是每次都发生,而是偶尔发生 (昨天3次)

我们不知道哪里出了问题。问题出在:

1)
org.neo4j.ogm.drivers.bolt.driver.BoltDriver

2) 厄尔巴顿AWS

3) HAproxy
.cfg

4) AWS上的螺栓协议

在使用Bolt作为协议之前,我们使用HTTP端点,在AWS上使用相同的设置,并且没有问题

编辑 我们更改了配置,因此以下是我们对问题的了解:

1)
org.neo4j.ogm.drivers.bolt.driver.BoltDriver
-错误仅出现在Tomcat 7上

2) AWS上的ELB-我们不再使用ELB,而是直接连接到HAproxy

3) cfg-我们的PHP团队使用端口83使用http协议连接到Neo4j HA集群,他们没有错误

4) AWS上的螺栓协议-我们在ELB和EC2上添加了日志,我们没有收到任何关于螺栓协议的错误

neo4j-enterprise-3.0.4和neo4j ogm螺栓驱动器2.0.4是否存在问题

编辑 neo4j-enterprise-3.0.4或neo4j ogm螺栓驱动器2.0.4与AWS ELB或两者之间存在问题

我们更改了应用程序设置,并在AWS上使用具有相同结构的Http驱动程序,而不是Bolt驱动程序。我们没有收到错误


我们没有找到解决此问题的方法

是否允许使用螺栓协议进行非本地连接?
neo4j.conf
中的相应行是什么?是的,我们允许非本地连接。否则,我们将永远不会偶尔出错Bolt connector
dbms.connector.Bolt.type=Bolt dbms.connector.Bolt.enabled=true dbms.connector.Bolt.tls_level=OPTIONAL#让Bolt接受非本地连接,取消注释此行dbms.connector.bolt.address=0.0.0:7687
#HTTP connector
dbms.connector.HTTP.type=HTTP dbms.connector.HTTP.enabled=true#dbms.connector.HTTP.encryption=NONE#要让HTTP接受非本地连接,请取消注释此行dbms.connector.HTTP.address=0.0.0:7474
org.neo4j.ogm.exception.ConnectionException: Error connecting to graph database using Bolt: N/A, Unable to close socket connection properly.Broken pipe
    at org.neo4j.ogm.drivers.bolt.driver.BoltDriver.newSession(BoltDriver.java:97) ~[neo4j-ogm-bolt-driver-2.0.1.jar:?]
    at org.neo4j.ogm.drivers.bolt.driver.BoltDriver.newTransaction(BoltDriver.java:71) ~[neo4j-ogm-bolt-driver-2.0.1.jar:?]
    at org.neo4j.ogm.session.transaction.DefaultTransactionManager.openTransaction(DefaultTransactionManager.java:57) ~[neo4j-ogm-core-2.0.1.jar:?]
    at org.neo4j.ogm.drivers.bolt.request.BoltRequest.executeRequest(BoltRequest.java:153) ~[neo4j-ogm-bolt-driver-2.0.1.jar:?]
    at org.neo4j.ogm.drivers.bolt.request.BoltRequest.execute(BoltRequest.java:139) ~[neo4j-ogm-bolt-driver-2.0.1.jar:?]
    at org.neo4j.ogm.session.delegates.ExecuteQueriesDelegate.query(ExecuteQueriesDelegate.java:93) ~[neo4j-ogm-core-2.0.1.jar:?]
    at org.neo4j.ogm.session.delegates.ExecuteQueriesDelegate.query(ExecuteQueriesDelegate.java:73) ~[neo4j-ogm-core-2.0.1.jar:?]
    at org.neo4j.ogm.session.Neo4jSession.query(Neo4jSession.java:313) ~[neo4j-ogm-core-2.0.1.jar:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_92]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_92]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_92]
    at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_92]
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:302) ~[spring-aop-4.2.0.RELEASE.jar:4.2.0.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190) ~[spring-aop-4.2.0.RELEASE.jar:4.2.0.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) ~[spring-aop-4.2.0.RELEASE.jar:4.2.0.RELEASE]
    at org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:133) ~[spring-aop-4.2.0.RELEASE.jar:4.2.0.RELEASE]
    at org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:121) ~[spring-aop-4.2.0.RELEASE.jar:4.2.0.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.2.0.RELEASE.jar:4.2.0.RELEASE]
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207) ~[spring-aop-4.2.0.RELEASE.jar:4.2.0.RELEASE]
    at com.sun.proxy.$Proxy73.query(Unknown Source) ~[?:?]
    at org.springframework.data.neo4j.template.Neo4jTemplate.query(Neo4jTemplate.java:217) ~[spring-data-neo4j-4.1.1.RELEASE.jar:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_92]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_92]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_92]
    at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_92]
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:302) ~[spring-aop-4.2.0.RELEASE.jar:4.2.0.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190) ~[spring-aop-4.2.0.RELEASE.jar:4.2.0.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) ~[spring-aop-4.2.0.RELEASE.jar:4.2.0.RELEASE]
    at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:136) ~[spring-tx-4.2.0.RELEASE.jar:4.2.0.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.2.0.RELEASE.jar:4.2.0.RELEASE]
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207) ~[spring-aop-4.2.0.RELEASE.jar:4.2.0.RELEASE]
    at com.sun.proxy.$Proxy75.query(Unknown Source) ~[?:?]
    at com.kubid.booking.service.bookings.SnapCardBookingService.getBookingsInternal(SnapCardBookingService.java:216) ~[classes/:?]
    at com.kubid.booking.service.bookings.SnapCardBookingService.getBookings(SnapCardBookingService.java:249) ~[classes/:?]
    at com.kubid.booking.service.bookings.SnapCardBookingService$$FastClassBySpringCGLIB$$d05944f4.invoke(<generated>) ~[spring-core-4.2.0.RELEASE.jar:?]
    at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) ~[spring-core-4.2.0.RELEASE.jar:4.2.0.RELEASE]
    at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:649) ~[spring-aop-4.2.0.RELEASE.jar:4.2.0.RELEASE]
    at com.kubid.booking.service.bookings.SnapCardBookingService$$EnhancerBySpringCGLIB$$bfd16c77.getBookings(<generated>) ~[spring-core-4.2.0.RELEASE.jar:?]
    at com.kubid.booking.service.controller.BookingController.getBookings(BookingController.java:264) ~[classes/:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_92]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_92]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_92]
    at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_92]
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221) ~[spring-web-4.2.0.RELEASE.jar:4.2.0.RELEASE]
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137) ~[spring-web-4.2.0.RELEASE.jar:4.2.0.RELEASE]
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:111) ~[spring-webmvc-4.2.0.RELEASE.jar:4.2.0.RELEASE]
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:806) ~[spring-webmvc-4.2.0.RELEASE.jar:4.2.0.RELEASE]
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:729) ~[spring-webmvc-4.2.0.RELEASE.jar:4.2.0.RELEASE]
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) ~[spring-webmvc-4.2.0.RELEASE.jar:4.2.0.RELEASE]
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959) [spring-webmvc-4.2.0.RELEASE.jar:4.2.0.RELEASE]
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893) [spring-webmvc-4.2.0.RELEASE.jar:4.2.0.RELEASE]
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) [spring-webmvc-4.2.0.RELEASE.jar:4.2.0.RELEASE]
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861) [spring-webmvc-4.2.0.RELEASE.jar:4.2.0.RELEASE]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:624) [servlet-api.jar:?]
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) [spring-webmvc-4.2.0.RELEASE.jar:4.2.0.RELEASE]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:731) [servlet-api.jar:?]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) [catalina.jar:7.0.65]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) [catalina.jar:7.0.65]
    at org.apache.catalina.filters.CorsFilter.handleNonCORS(CorsFilter.java:436) [catalina.jar:7.0.65]
    at org.apache.catalina.filters.CorsFilter.doFilter(CorsFilter.java:177) [catalina.jar:7.0.65]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) [catalina.jar:7.0.65]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) [catalina.jar:7.0.65]
    at com.kubid.booking.service.config.RequestBodyFilter.doFilter(RequestBodyFilter.java:36) [classes/:?]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) [catalina.jar:7.0.65]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) [catalina.jar:7.0.65]
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) [catalina.jar:7.0.65]
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) [catalina.jar:7.0.65]
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505) [catalina.jar:7.0.65]
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) [catalina.jar:7.0.65]
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) [catalina.jar:7.0.65]
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956) [catalina.jar:7.0.65]
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) [catalina.jar:7.0.65]
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423) [catalina.jar:7.0.65]
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079) [tomcat-coyote.jar:7.0.65]
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625) [tomcat-coyote.jar:7.0.65]
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316) [tomcat-coyote.jar:7.0.65]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [?:1.8.0_92]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [?:1.8.0_92]
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-coyote.jar:7.0.65]
    at java.lang.Thread.run(Thread.java:745) [?:1.8.0_92]
Caused by: org.neo4j.driver.v1.exceptions.ClientException: Unable to close socket connection properly.Broken pipe
    at org.neo4j.driver.internal.connector.socket.SocketClient.stop(SocketClient.java:157) ~[neo4j-java-driver-1.0.0-RC1.jar:1.0.0-RC1-cc9a365a0ad5346cb6ba50f3b68a998b4d956b98]
    at org.neo4j.driver.internal.connector.socket.SocketConnection.close(SocketConnection.java:181) ~[neo4j-java-driver-1.0.0-RC1.jar:1.0.0-RC1-cc9a365a0ad5346cb6ba50f3b68a998b4d956b98]
    at org.neo4j.driver.internal.connector.ConcurrencyGuardingConnection.close(ConcurrencyGuardingConnection.java:163) ~[neo4j-java-driver-1.0.0-RC1.jar:1.0.0-RC1-cc9a365a0ad5346cb6ba50f3b68a998b4d956b98]
    at org.neo4j.driver.internal.pool.PooledConnection.dispose(PooledConnection.java:180) ~[neo4j-java-driver-1.0.0-RC1.jar:1.0.0-RC1-cc9a365a0ad5346cb6ba50f3b68a998b4d956b98]
    at org.neo4j.driver.internal.pool.InternalConnectionPool$1.onDispose(InternalConnectionPool.java:196) ~[neo4j-java-driver-1.0.0-RC1.jar:1.0.0-RC1-cc9a365a0ad5346cb6ba50f3b68a998b4d956b98]
    at org.neo4j.driver.internal.pool.InternalConnectionPool$1.onDispose(InternalConnectionPool.java:178) ~[neo4j-java-driver-1.0.0-RC1.jar:1.0.0-RC1-cc9a365a0ad5346cb6ba50f3b68a998b4d956b98]
    at org.neo4j.driver.internal.pool.ThreadCachingPool.dispose(ThreadCachingPool.java:197) ~[neo4j-java-driver-1.0.0-RC1.jar:1.0.0-RC1-cc9a365a0ad5346cb6ba50f3b68a998b4d956b98]
    at org.neo4j.driver.internal.pool.ThreadCachingPool.acquireFromGlobal(ThreadCachingPool.java:145) ~[neo4j-java-driver-1.0.0-RC1.jar:1.0.0-RC1-cc9a365a0ad5346cb6ba50f3b68a998b4d956b98]
    at org.neo4j.driver.internal.pool.ThreadCachingPool.acquire(ThreadCachingPool.java:118) ~[neo4j-java-driver-1.0.0-RC1.jar:1.0.0-RC1-cc9a365a0ad5346cb6ba50f3b68a998b4d956b98]
    at org.neo4j.driver.internal.pool.InternalConnectionPool.acquire(InternalConnectionPool.java:107) ~[neo4j-java-driver-1.0.0-RC1.jar:1.0.0-RC1-cc9a365a0ad5346cb6ba50f3b68a998b4d956b98]
    at org.neo4j.driver.internal.InternalDriver.session(InternalDriver.java:53) ~[neo4j-java-driver-1.0.0-RC1.jar:1.0.0-RC1-cc9a365a0ad5346cb6ba50f3b68a998b4d956b98]
    at org.neo4j.ogm.drivers.bolt.driver.BoltDriver.newSession(BoltDriver.java:95) ~[neo4j-ogm-bolt-driver-2.0.1.jar:?]
    ... 79 more
Caused by: java.io.IOException: Broken pipe
    at sun.nio.ch.FileDispatcherImpl.write0(Native Method) ~[?:1.8.0_92]
    at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:47) ~[?:1.8.0_92]
    at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:93) ~[?:1.8.0_92]
    at sun.nio.ch.IOUtil.write(IOUtil.java:51) ~[?:1.8.0_92]
    at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:471) ~[?:1.8.0_92]
    at org.neo4j.driver.internal.connector.socket.TLSSocketChannel.close(TLSSocketChannel.java:452) ~[neo4j-java-driver-1.0.0-RC1.jar:1.0.0-RC1-cc9a365a0ad5346cb6ba50f3b68a998b4d956b98]
    at org.neo4j.driver.internal.connector.socket.SocketClient.stop(SocketClient.java:145) ~[neo4j-java-driver-1.0.0-RC1.jar:1.0.0-RC1-cc9a365a0ad5346cb6ba50f3b68a998b4d956b98]
    at org.neo4j.driver.internal.connector.socket.SocketConnection.close(SocketConnection.java:181) ~[neo4j-java-driver-1.0.0-RC1.jar:1.0.0-RC1-cc9a365a0ad5346cb6ba50f3b68a998b4d956b98]
    at org.neo4j.driver.internal.connector.ConcurrencyGuardingConnection.close(ConcurrencyGuardingConnection.java:163) ~[neo4j-java-driver-1.0.0-RC1.jar:1.0.0-RC1-cc9a365a0ad5346cb6ba50f3b68a998b4d956b98]
    at org.neo4j.driver.internal.pool.PooledConnection.dispose(PooledConnection.java:180) ~[neo4j-java-driver-1.0.0-RC1.jar:1.0.0-RC1-cc9a365a0ad5346cb6ba50f3b68a998b4d956b98]
    at org.neo4j.driver.internal.pool.InternalConnectionPool$1.onDispose(InternalConnectionPool.java:196) ~[neo4j-java-driver-1.0.0-RC1.jar:1.0.0-RC1-cc9a365a0ad5346cb6ba50f3b68a998b4d956b98]
    at org.neo4j.driver.internal.pool.InternalConnectionPool$1.onDispose(InternalConnectionPool.java:178) ~[neo4j-java-driver-1.0.0-RC1.jar:1.0.0-RC1-cc9a365a0ad5346cb6ba50f3b68a998b4d956b98]
    at org.neo4j.driver.internal.pool.ThreadCachingPool.dispose(ThreadCachingPool.java:197) ~[neo4j-java-driver-1.0.0-RC1.jar:1.0.0-RC1-cc9a365a0ad5346cb6ba50f3b68a998b4d956b98]
    at org.neo4j.driver.internal.pool.ThreadCachingPool.acquireFromGlobal(ThreadCachingPool.java:145) ~[neo4j-java-driver-1.0.0-RC1.jar:1.0.0-RC1-cc9a365a0ad5346cb6ba50f3b68a998b4d956b98]
    at org.neo4j.driver.internal.pool.ThreadCachingPool.acquire(ThreadCachingPool.java:118) ~[neo4j-java-driver-1.0.0-RC1.jar:1.0.0-RC1-cc9a365a0ad5346cb6ba50f3b68a998b4d956b98]
    at org.neo4j.driver.internal.pool.InternalConnectionPool.acquire(InternalConnectionPool.java:107) ~[neo4j-java-driver-1.0.0-RC1.jar:1.0.0-RC1-cc9a365a0ad5346cb6ba50f3b68a998b4d956b98]
    at org.neo4j.driver.internal.InternalDriver.session(InternalDriver.java:53) ~[neo4j-java-driver-1.0.0-RC1.jar:1.0.0-RC1-cc9a365a0ad5346cb6ba50f3b68a998b4d956b98]
    at org.neo4j.ogm.drivers.bolt.driver.BoltDriver.newSession(BoltDriver.java:95) ~[neo4j-ogm-bolt-driver-2.0.1.jar:?]
global
   log 127.0.0.1 local0
   log 127.0.0.1 local1 notice
   chroot /var/lib/haproxy
   stats socket /run/haproxy/admin.sock mode 660 level admin
   stats timeout 30s
   user haproxy
   group haproxy
   daemon
   maxconn 256
defaults
    log global
    mode tcp
    option tcplog
    option dontlognull
    timeout connect 30s
    timeout client 2h
    timeout server 2h
frontend http-in
    bind *:81
    acl write_method method POST DELETE PUT
    acl write_hdr hdr_val(X-Write) eq 1
    acl write_payload payload(0,0) -m reg -i CREATE|MERGE|SET|DELETE|REMOVE
    acl tx_cypher_endpoint path_beg /db/data/transaction
    http-request set-var(txn.tx_cypher_endpoint) bool(true) if tx_cypher_endpoint
    use_backend neo4j-master if write_hdr
    use_backend neo4j-master if tx_cypher_endpoint write_payload
    use_backend neo4j-all if tx_cypher_endpoint
    use_backend neo4j-master if write_method
    default_backend neo4j-all
frontend http-browse
    bind *:83
    mode http
    default_backend neo4j-browser
backend neo4j-all
    option httpchk GET /db/manage/server/ha/available HTTP/1.0\r\nAuthorization:\ Basic\ [code]
    acl tx_cypher_endpoint var(txn.tx_cypher_endpoint),bool
    stick-table type integer size 1k expire 70s  
    stick match path,word(4,/) if tx_cypher_endpoint
    stick store-response hdr(Location),word(6,/) if tx_cypher_endpoint
    server neo4j-1 192.0.0.250:7687 check port 7474
    server neo4j-2 192.0.0.251:7687 check port 7474
    server neo4j-3 192.0.0.252:7687 check port 7474
backend neo4j-master
    option httpchk GET /db/manage/server/ha/master HTTP/1.0\r\nAuthorization:\ Basic\ [code]
    server neo4j-1 192.0.0.250:7687 check port 7474
    server neo4j-2 192.0.0.251:7687 check port 7474
    server neo4j-3 192.0.0.252:7687 check port 7474
backend neo4j-browser
    mode http
    option prefer-last-server
    option httpchk GET /db/manage/server/ha/master HTTP/1.0\r\nAuthorization:\ Basic\ [code]
    server neo4j-1 192.0.0.250:7474 check
    server neo4j-2 192.0.0.251:7474 check
    server neo4j-3 192.0.0.252::7474 check
listen admin
    bind *:82
    mode http
    stats enable
    stats uri /haproxy?stats
    stats realm Haproxy\ Statistics
    stats auth admin:admin