项目背景
项目在开发和设计阶段,因为过于简单,并没有想到会部署双节点。但是客户又需要双节点,遂采取简单方式实现。
如何实现双节点
- 服务端一定是多份的
- nginx会话一定要保持住( 但又因为我们没有会话同步机制,这里可以采用 ip hash或者 backup方式)
以上就简单的解决了因单节点挂掉而导致服务不可用的情况。
Run Config
关键字 -> ip_hash
关键字 -> backup
注意点
upstream 中的name不要使用_
只能使用
如何查看请求是否因nginx配置错误而请求没有到位
java.lang.IllegalArgumentException: The character [_] is never valid in a domain name.
at org.apache.tomcat.util.http.parser.HttpParser$DomainParseState.next(HttpParser.java:974) ~[tomcat-embed-core-9.0.38.jar:9.0.38]
at org.apache.tomcat.util.http.parser.HttpParser.readHostDomainName(HttpParser.java:870) ~[tomcat-embed-core-9.0.38.jar:9.0.38]
at org.apache.tomcat.util.http.parser.Host.parse(Host.java:71) ~[tomcat-embed-core-9.0.38.jar:9.0.38]
at org.apache.tomcat.util.http.parser.Host.parse(Host.java:45) ~[tomcat-embed-core-9.0.38.jar:9.0.38]
at org.apache.coyote.AbstractProcessor.parseHost(AbstractProcessor.java:295) ~[tomcat-embed-core-9.0.38.jar:9.0.38]
at org.apache.coyote.http11.Http11Processor.prepareRequest(Http11Processor.java:797) [tomcat-embed-core-9.0.38.jar:9.0.38]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:350) [tomcat-embed-core-9.0.38.jar:9.0.38]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) [tomcat-embed-core-9.0.38.jar:9.0.38]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868) [tomcat-embed-core-9.0.38.jar:9.0.38]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1590) [tomcat-embed-core-9.0.38.jar:9.0.38]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.38.jar:9.0.38]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_201]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_201]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.38.jar:9.0.38]
at java.lang.Thread.run(Thread.java:748) [na:1.8.0_201]
正规多节点配置是什么方式
- 服务集群化
- 会话持久化(Spring Session + Redis)
- nginx 多主化( lvs + keepalived)
- 多城市 两地三副本
复杂高可用 client ->dns -> lvs -> haproxy ->nginx ->server