一、Nacos简介

Nacos是用于微服务管理的平台,其核心功能是服务注册与发现、服务配置管理。

  • Nacos作为服务注册发现组件,可以替换Spring Cloud应用中传统的服务注册于发现组件,如:Eureka、consul等,支持服务的健康检查。
  • Nacos作为服务配置中心,可以替换Spring Cloud Config。

当然Nacos作为一个微服务管理平台,除了面向spring Cloud,还支持很多其他的微服务基础设施,如:docker、dubbo、kubernetes等。除了核心的服务注册与发现和配置管理功能,还提供了各种服务管理的功能特性,如:动态DNS、服务元数据管理等。

二、Nacos单点部署

Nacos支持单点部署的模式,搭建过程非常简单,实际上nacos的standalone模式没有所谓的安装过程,就是下载和启动。但是这种情况没有高可用支持,所以只适合测试或学习使用。

首先去nacos的github地址下载release安装包。当然你也可以自己下载源码之后进行编译打包,nacos是使用java开发的,使用maven进行编译打包。这里我们就不自己打包了,使用release安装包。下载地址是:https://github.com/alibaba/nacos/releases。在linux系统下可以使用如下的命令下载和解压缩。

  1. #下载nacos
  2. wget https://github.com/alibaba/nacos/releases/download/1.1.4/nacos-server-1.1.4.tar.gz;
  3. # 解压nacos
  4. tar -xvf nacos-server-1.1.4.tar.gz

进入到nacos/bin目录下面,startup命令用于启动nacos,shutdown命令用于停掉nacos。

  • 如果你是linux/unix系统,使用sh startup.sh -m standalone脚本启动方式。
  • 如果你是windows系统,双击startup.cmd启动nacos。

nacos的默认服务端口是8848,启动完成之后通过浏览器访问nacos:http://ip:8848/nacos/。看到如下界面,需要登陆,默认的用户名密码都是nacos,登陆之后看到如下界面:

如果你访问不到上面的界面,请检查你部署的主机操作系统的防火墙设置。以下是为CentOS7系统防火墙开放8848端口的命令,其他系统请自行解决。

  1. firewall-cmd --zone=public --add-port=8848/tcp --permanent
  2. firewall-cmd --reload

三、查看主机网卡名称

使用ip addr命令查看linux主机的网卡。

  • 第一个lo网络ip是回路ip,127.0.0.1,这个是标配
  • 第二个enp0s3网络设备,ip是10.0.2.15,这个是因为我的服务器网络使用了双网卡:桥接+HostOnly模式。正常的服务器是没有的。
  • 第三个enp0s8就是本服务器真正的使用到提供服务的网络ip,如:192.168.161.4。
  • 第四个网络设备是因为我在这台虚拟机上安装过docker,所以有一个docker0的网络设备。

因为较多的网络设备,导致我在后续安装过程出现问题。这里先卖个关子。

四、配置nacos集群

我们准备了三台服务器(虚拟机),192.168.161.3、192.168.161.4、192.168.161.5。在三台服务器上分别下载、解压nacos,并开放8848端口。参考单点standalone部署的模式的操作。然后在conf/cluster.conf中加入三台服务器的ip配置

  1. #ip:port
  2. 192.168.161.3:8848
  3. 192.168.161.4:8848
  4. 192.168.161.5:8848
  • 初始化 MySQL 数据库,sql源文件是在nacos/conf解压目录下面的nacos-mysql.sql文件。sql语句源文件。并在nacos/conf/application.properties中增加mysql配置
  1. spring.datasource.platform=mysql
  2. db.num=1
  3. db.url.0=jdbc:mysql://192.168.161.3:3306/testdb?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
  4. db.user=test
  5. db.password=
  • spring.datasource.platform说明支持数据持久化的数据库类型,已知目前只支持mysql
  • db.num数据库的数量,我们实验环境只有一个mysql数据库,所以是1
  • db.url.0表示第一个mysql数据库的jdbc url连接。如果还有第二个、第三个,请增加db.url.n中的n。

问题: 解决网卡获取的不是我们希望绑定的网卡的问题:当我们配置完成之后,使用startup.sh命令启动。发现集群节点列表中并没有任何记录。而且后台服务日志报错,内容如下:

分析: 通过日志我们看到nacos程序自动获取的是10.0.2.15这个ip,而我们配置的是192.168.161.x的ip。二者不一致,所以报错。我们看一下获取主机ip的程序源码,如下:

  1. private static String getHostAddress() {
  2. String address = System.getProperty("nacos.server.ip");
  3. if (StringUtils.isNotEmpty(address)) {
  4. return address;
  5. } else {
  6. address = "127.0.0.1";
  7. }
  8. ...
  9. }

解决方案: 看完源码之后,ip是通过System.getProperty获取的,所以我们完全可以通过JVM传参指定ip。在startup.sh的启动脚本中增加nacos.server.ip参数。

  1. #=================================================================================
  2. # JVM Configuration
  3. #================================================================================
  4. # 单机模式对应的启动参数
  5. if [[ "${MODE}" == "standalone" ]]; then
  6. JAVA_OPT="${JAVA_OPT} -Xms512m -Xmx512m -Xmn256m"
  7. JAVA_OPT="${JAVA_OPT} -Dnacos.standalone=true"
  8. else
  9. # 集群模式对应的启动参数
  10. JAVA_OPT="${JAVA_OPT} -server -Xms2g -Xmx2g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
  11. JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${BASE_DIR}/logs/java_heapdump.hprof"
  12. JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages"
  13. # 新增以下参数设置本机ip地址
  14. JAVA_OPT="${JAVA_OPT} -Dnacos.server.ip=你的服务器的ip"
  15. fi

当以上工作都完成之后,我们通过浏览器分别访问nacos服务,看到如下界面。集群管理的节点列表里面已经有三各节点,ip分别是192.168.161.3:8848、192.168.161.4:8848、192.168.161.5:8848。

五、nacos集群架构

在完成nacos集群的配置之后,我们可以通过三个入口分别访问集群内的nacos服务,那下面的问题就是如何将三个入口转成一个入口。目前许多个人开发者写的博客或教程中的方法就是在三个nacos服务的前端加一个负载均衡器,如:nginx、haproxy。然后号称是生产级别的搭建方法,但这种方法是绝对不能用于生产的,因为你的nginx和haproxy是单点,一旦nginx挂了,整个服务就挂了。

nacos官网推荐的方法是使用虚拟ip的方法,如下:

  • 最开始虚拟ip192.168.161.6可能与192.168.161.3的主机绑定在一起,通过这两个ip都可以访问192.168.161.3主机的nacos服务。
  • 一旦192.168.161.3主机宕机或者其他网络故障,192.168.161.6会自动切换到与192.168.161.4或者192.168.161.5主机绑定在一起。这个过程被叫做虚拟ip的漂移。

这种虚拟ip的方法就是没有使用到负载均衡,访问的仍然是某一个节点的nacos服务,只不过形成了主从备份,提供了高可用。那既可以提供高可用,又可以提供负载均衡的办法可能有的朋友已经想到了,如下图:

  • 在nacos服务的前端加上nginx或者haproxy的负载均衡器
  • 然后对负载均衡器使用虚拟ip,通过keepalived实现虚拟ip的漂移
  • 用户访问负载均衡器实现对nacos服务的访问,主nginx挂掉,虚拟ip漂移到从nginx负载均衡提供服务

六、nacos集群(虚拟ip漂移)

我们就拿官网中推荐的方法,使用虚拟ip访问nacos集群的方式做个例子讲解一下。为什么不讲第三种?一般系统架构水平到了的人听懂这种方式就知道第三种方式怎么做,水平不到的人听了第三种仍然还是不懂。

6.1.安装配置keepalived

在三台服务器上分别安装keepalived

  1. yum install -y keepalived

在三台服务器上分别修改/etc/keepalived/keepalived.conf

  1. vrrp_instance VI_1 {
  2. state MASTER
  3. interface enp0s8
  4. virtual_router_id 51
  5. priority 100
  6. advert_int 1
  7. authentication {
  8. auth_type PASS
  9. auth_pass 123456
  10. }
  11. virtual_ipaddress {
  12. 192.168.161.6
  13. }
  14. }
  • 一台服务器是MASTER,其他的服务器为BACKUP
  • interface 配置为我们刚刚查看的网卡的名称
  • virtual_router_id 必须一致,表示这三台服务器抢用一个虚拟ip。
  • 修改priority 优先级,三台服务器要不一样,比如:100、101、102,优先级最高的优先使用虚拟ip。MASTER的优先级一定要高于BACKUP主机
  • advert_int 是几台服务器之间的同步检查时间,1秒
  • authentication 的设置必须一致,这样这几台服务器才能通信
  • 修改virtual_ipaddress为三台服务器所在网段内未被占用的IP地址,比如:192.168.161.6

6.2.修改防火墙

CentOS7必须开放防火墙配置,否则三台主机无法就虚拟ip的使用优先级通信,将都是MASTER,都配置虚拟ip。

  1. firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --protocol vrrp -j ACCEPT;
  2. firewall-cmd --reload;

6.3.启动keepalived服务

  1. sudo systemctl restart keepalived.service

期待您的关注

微服务管理平台nacos虚拟ip负载均衡集群模式搭建的更多相关文章

  1. LVS-DR:搭建HTTP和HTTPS负载均衡集群

    目录 LVS-DR实战:搭建HTTP和HTTPS负载均衡集群 1. 搭建lvs-dr模式的http负载集群 1.1 LVS上配置IP 1.2 RS上配置arp内核参数 1.3 RS上配置VIP 1.4 ...

  2. LVS负载均衡集群服务搭建详解(一)

    LVS概述 1.LVS:Linux Virtual Server 四层交换(路由):根据请求报文的目标IP和目标PORT将其转发至后端主机集群中的某台服务器(根据调度算法): 不能够实现应用层的负载均 ...

  3. Nginx+Tomcat+Memcached负载均衡集群服务搭建

    操作系统:CentOS6.5  本文档主要讲解,如何在CentOS6.5下搭建Nginx+Tomcat+Memcached负载均衡集群服务器,Nginx负责负载均衡,Tomcat负责实际服务,Memc ...

  4. LVS负载均衡集群服务搭建详解(二)

    lvs-nat模型构建 1.lvs-nat模型示意图 本次构建的lvs-nat模型的示意图如下,其中所有的服务器和测试客户端均使用VMware虚拟机模拟,所使用的CentOS 7 VS内核都支持ipv ...

  5. Linux平台上搭建apache+tomcat负载均衡集群

    传统的Java Web项目是通过tomcat来运行和发布的.但在实际的企业应用环境中,采用单一的tomcat来维持项目的运行是不现实的.tomcat 处理能力低,效率低,承受并发小(1000左右).当 ...

  6. LB(Load balance)负载均衡集群--{LVS-[NAT+DR]单实例实验+LVS+keeplived实验} 菜鸟入门级

    LB(Load balance)负载均衡集群 LVS-[NAT+DR]单实例实验 LVS+keeplived实验 LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一 ...

  7. 高性能Linux服务器 第11章 构建高可用的LVS负载均衡集群

    高性能Linux服务器 第11章 构建高可用的LVS负载均衡集群 libnet软件包<-依赖-heartbeat(包含ldirectord插件(需要perl-MailTools的rpm包)) l ...

  8. LVS负载均衡集群

    回顾-Nginx反向代理型负载 负载均衡(load balance)集群,提供了一种廉价.有效.透明的方法,来扩展网络设备和服务器的负载.带宽.增加吞吐量.加强网络数据处理能力.提高网络的灵活性和可用 ...

  9. 通过LVS+Keepalived搭建高可用的负载均衡集群系统

    1. 安装LVS软件      (1)安装前准备操作系统:统一采用Centos6.5版本,地址规划如下: 服务器名 IP地址 网关 虚拟设备名 虚拟ip Director Server 192.168 ...

随机推荐

  1. 识别手写数字增强版100% - pytorch从入门到入道(一)

    手写数字识别,神经网络领域的“hello world”例子,通过pytorch一步步构建,通过训练与调整,达到“100%”准确率 1.快速开始 1.1 定义神经网络类,继承torch.nn.Modul ...

  2. oracle直接调用web services

    oracle调用C#开发web services 1,  去oracle官网上下载dbws-callout-utility-10131.zip 地址:https://oracle-base.com/a ...

  3. golang 服务诡异499、504网络故障排查

    事故经过 排查 总结 事故经过 11-01 12:00 中午午饭期间,手机突然收到业务网关非200异常报警,平时也会有一些少量499或者网络抖动问题触发报警,但是很快就会恢复(目前配置的报警阈值是5% ...

  4. Reporting service个人使用经验

    (此文章是从自己写的Word文档里复制过来的,图没有了,文字也有些乱,凑合看吧) 部署环境 Windows server 2012 R2 软件环境 安装完整的sqlsever2012,IIS服务 需要 ...

  5. nyoj 55-懒省事的小明(priority_queue)

    55-懒省事的小明 内存限制:64MB 时间限制:3000ms Special Judge: No accepted:8 submit:62 题目描述:       小明很想吃果子,正好果园果子熟了. ...

  6. 力扣(LeetCode)翻转字符串里的单词 个人题解

    给定一个字符串,逐个翻转字符串中的每个单词. 示例 1: 输入: "the sky is blue" 输出: "blue is sky the" 示例 2: 输 ...

  7. 领扣(LeetCode)N叉树的层序遍历 个人题解

    给定一个 N 叉树,返回其节点值的层序遍历. (即从左到右,逐层遍历). 例如,给定一个 3叉树 : 返回其层序遍历: [ [1], [3,2,4], [5,6] ] 说明: 树的深度不会超过 100 ...

  8. 深入ObjC GCD中的dispatch group工作原理。

    本文是基于GCD的支持库libdispatch的源代码分析的结果或是用于作为源代码阅读的参考,尽量不帖代码,力求用UML图来说明工作流. 本文参考的源代码版本为v501.20.1,如有兴趣请自行到苹果 ...

  9. Linux菜鸟——搭建虚拟机环境

    最近在学习Linux搭建服务器,但本人对于Linux一无所知,所以花了两天时间把安装,命令,控制,搭建环境等一系列操作都囫囵吞枣了一遍,但又怕自己记不住太多,所以记录下以前搭建的所有步骤,希望能提醒自 ...

  10. Flex带CheckBox的Tree(修改ItemRenderer)

    此文代码参考了:http://summerofthatyear-gmail-com.iteye.com/blog/326302 在此表示感谢! 前文提到了,实现带CheckBox的Tree有两种方法: ...