项目背景

项目在开发和设计阶段,因为过于简单,并没有想到会部署双节点。但是客户又需要双节点,遂采取简单方式实现。

如何实现双节点

  1. 服务端一定是多份的
  2. nginx会话一定要保持住( 但又因为我们没有会话同步机制,这里可以采用 ip hash或者 backup方式)

以上就简单的解决了因单节点挂掉而导致服务不可用的情况。

Run Config

nginx负载均衡配置

关键字 -> ip_hash 关键字 -> backup

注意点

upstream 中的name不要使用_ 只能使用

如何查看请求是否因nginx配置错误而请求没有到位

tcp dump

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]

正规多节点配置是什么方式

实现服务高可用奇淫技巧(一) Link

  1. 服务集群化
  2. 会话持久化(Spring Session + Redis)
  3. nginx 多主化( lvs + keepalived)
  4. 多城市 两地三副本

复杂高可用 client ->dns -> lvs -> haproxy ->nginx ->server