0
点赞
收藏
分享

微信扫一扫

Spring Cloud Alibaba:搭建Nacos集群


博主准备搭建由三个​​Nacos​​​节点组成的集群,先需要创建三台虚拟机(​​VirtualBox​​​可以复制虚拟机),系统为​​CentOS7​​​,每台虚拟机配置相同,内存​​2G​​​以及磁盘​​8G​​。如何创建虚拟机请参考这篇博客:

  • ​​VirtualBox安装CentOS7​​

还需要使用​​XShell​​​来连接虚拟机,毕竟在​​VirtualBox​​​上操作虚拟机比较麻烦。先使用​​VirtualBox​​​进入虚拟机,查询该虚拟机的​​IP​​​地址(使用​​ip addr​​​或者​​ifconfig​​​命令),然后使用​​XShell​​来连接它。

  • ​​ip addr命令介绍​​

静态IP地址

为了避免动态分配​​IP​​​地址而造成的麻烦,将每台虚拟机的​​IP​​​地址设置为静态​​IP​​​地址,这样以后使用​​XShell​​​连接虚拟机,就不需要每次使用​​VirtualBox​​​进入虚拟机查询新分配的​​IP​​地址了。

cd /etc/sysconfig/network-scripts/

Spring Cloud Alibaba:搭建Nacos集群_spring cloud


该配置文件对应虚拟机的网卡名,如下图所示:

Spring Cloud Alibaba:搭建Nacos集群_云原生_02


先在虚拟机中安装​​vim​​,用来编辑这些配置文件:

yum install -y vim

修改配置文件,设置静态​​IP​​地址:

vim ifcfg-enp0s3

Spring Cloud Alibaba:搭建Nacos集群_spring cloud_03

BOOTPROTO="static"     # 静态IP地址,默认为动态分配
ONBOOT="yes" # 是否开机启用
IPADDR=192.168.1.195 # 设置的静态IP地址
NETMASK=255.255.255.0 # 子网掩码
GATEWAY=192.168.1.1 # 网关
DNS1=192.168.1.1 # DNS服务器

​IP​​​地址就设置成使用​​VirtualBox​​​进入虚拟机查询到的​​IP​​​地址,子网掩码一般都是​​24​​​位(​​255.255.255.0​​​,和本地电脑是一样的),为了简单,将​​GATEWAY​​​和​​DNS​​​设置成本地电脑(​​Windows10​​)的网关即可:

ipconfig

Spring Cloud Alibaba:搭建Nacos集群_cloud native_04


将三台虚拟机都设置静态​​IP​​​地址之后,就可以将​​VirtualBox​​​上的虚拟机关闭,再使用无界面启动方式启动这些虚拟机,然后使用​​XShell​​连接即可。

Spring Cloud Alibaba:搭建Nacos集群_云原生_05

搭建Nacos集群

博主将用​​shell​​​脚本来实现​​Nacos​​​集群的搭建(博主就是想偷懒,脚本的流程使用​​echo​​​命令进行了说明,稍微修改也可用于创建单机​​Nacos​​服务):

#!/bin/bash

# author: itkaven
# input: nacos_version ip1 ip2 ip3 port

# 工具包存放路径
path="/usr/local"

# JDK解压后的目录名、压缩包名
jdk_work="jdk1.8.0_202"
jdk_file="jdk-8u202-linux-x64.tar.gz"

# nacos版本号、解压后的目录名、压缩包名
nacos_version="$1"
nacos_work="nacos"
nacos_file="nacos-server-$nacos_version.tar.gz"

# nacos集群的ip地址、运行端口
ip1="$2"
ip2="$3"
ip3="$4"
port="$5"
cluster=("$ip1:$port" "$ip2:$port" "$ip3:$port")

install_jdk() {
if [ ! -e "$path/$jdk_work" ]; then
echo "没有安装JDK,准备安装JDK($jdk_work)!"
if [ ! -e "$path/$jdk_file" ]; then
echo "请上传JDK压缩包($jdk_file)!"
else
echo "JDK压缩包($jdk_file)已经上传!"
echo "开始解压!"
tar -zxvf "$path/$jdk_file" -C "$path"
echo "删除压缩包!"
rm -f "$path/$jdk_file"
echo "配置JDK环境变量!"
echo "export JAVA_HOME=$path/$jdk_work" >> /etc/profile
source /etc/profile
echo "export CLASSPATH=.:$JAVA_HOME/lib/" >> /etc/profile
echo "export PATH=$JAVA_HOME/bin:$PATH" >> /etc/profile
source /etc/profile
fi
else
echo "已经安装JDK($jdk_work)!"
fi
}

download_nacos() {
if [ -e "$path/$nacos_work" ]; then
echo "nacos文件已经存在!"
else
echo "nacos文件不存在,等待下载!"
yum install -y wget
echo "准备从Github下载nacos压缩包(可能因为网络原因导致下载失败,再重新执行脚本即可)!"
wget -P "$path" --no-check-certificate "https://github.com/alibaba/nacos/releases/download/$nacos_version/$nacos_file"
echo "nacos压缩包下载完成!"
echo "开始解压nacos压缩包!"
tar -zxvf "$path/$nacos_file" -C "$path"
echo "删除nacos压缩包!"
rm -f "$path/$nacos_file"
fi
}

config_and_run_nacos() {
# shellcheck disable=SC2164
cd "$path/$nacos_work/conf"
echo "修改nacos的application.properties(根据用户输入的端口,配置nacos在指定端口上运行)!"
sed -i "s#server.port=.*#server.port=$port#g" ./application.properties
echo "添加nacos的集群配置(根据用户输入的三台虚拟机的IP地址和运行端口)!"
echo "" > ./cluster.conf
# shellcheck disable=SC2068
for config in ${cluster[@]} ; do
echo "$config" >> ./cluster.conf
done
echo "为了方便,关闭防火墙,让nacos集群可以通信,nacos通信会使用多个端口!"
systemctl stop firewalld
echo "以集群方式启动nacos(使用内置数据源)!"
# shellcheck disable=SC2164
cd "$path/$nacos_work/bin"
./startup.sh -p embedded
}

if [ $# -ne "5" ]; then
echo "请依次输入nacos的版本号、三台虚拟机的IP地址以及启动端口(指定一个即可)!"
else
install_jdk
download_nacos
config_and_run_nacos
fi

脚本的意图:

  • 安装​​JDK​​​,需要提前将​​JDK​​​压缩包放到虚拟机的​​/usr/local/​​​路径下,博主不喜欢使用​​yum​​​安装​​JDK​​​,但使用​​wget​​​命令下载​​JDK​​​压缩包得到的是缺损包,因为​​Oracle​​​官方有验证;所以博主采取了折中的方式,手动上传​​JDK​​压缩包,文件解压和配置环境变量就通过脚本完成。
  • 下载​​Nacos​​​(从​​Github​​),再进行解压。
  • 配置与运行​​Nacos​​​,修改默认配置文件​​application.properties​​​中的​​server.port​​​为指定的端口,并且将集群配置写入配置文件​​cluster.conf​​​中(根据指定的三台虚拟机​​IP​​​地址和启动端口)。关闭防火墙(方便​​Nacos​​​集群相互通信),以集群方式启动​​Nacos​​​,并且使用内置数据源,其实是博主懒,不想搭​​Mysql​​集群了,之后再补上。

将下载好的​​JDK​​​压缩包放到每台虚拟机的​​/usr/local/​​路径下:

Spring Cloud Alibaba:搭建Nacos集群_spring cloud_06


如果​​JDK​​版本和博主不相同,需要修改脚本的这两个变量:

# JDK解压后的目录名、压缩包名
jdk_work="jdk1.8.0_202"
jdk_file="jdk-8u202-linux-x64.tar.gz"

​Nacos​​的单机使用可以参考这篇博客:

  • ​​Spring Cloud Alibaba:Nacos服务注册与发现​​

其实集群和单机的搭建方式是类似的,只不过搭建​​Nacos​​​集群需要修改集群的配置文件(​​cluster.conf​​​),以及需要使用集群方式运行​​Nacos​​​(默认方式就是集群运行,单机运行还需要加​​-m standalone​​参数)。因此集群和单机搭建方式的不同之处就在于下面这个函数的相关部分:

config_and_run_nacos() {
# shellcheck disable=SC2164
cd "$path/$nacos_work/conf"
echo "修改nacos的application.properties(根据用户输入的端口,配置nacos在指定端口上运行)!"
sed -i "s#server.port=.*#server.port=$port#g" ./application.properties
echo "添加nacos的集群配置(根据用户输入的三台虚拟机的IP地址和运行端口)!"
echo "" > ./cluster.conf
# shellcheck disable=SC2068
for config in ${cluster[@]} ; do
echo "$config" >> ./cluster.conf
done
echo "为了方便,关闭防火墙,让nacos集群可以通信,nacos通信会使用多个端口!"
systemctl stop firewalld
echo "以集群方式启动nacos(使用内置数据源)!"
# shellcheck disable=SC2164
cd "$path/$nacos_work/bin"
./startup.sh -p embedded
}

先将该​​shell​​脚本复制到三台虚拟机上。

vim nacos_server.sh

Spring Cloud Alibaba:搭建Nacos集群_spring cloud_07

保存后再退出:

  • ​​怎么保存退出 vim 编辑​​

修改​​nacos_server.sh​​脚本的权限(不然没有运行权限):

chmod 700 nacos_server.sh

运行​​nacos_server.sh​​脚本(报错就重新运行,一般是网络问题,毕竟博主把坑基本上踩了):

./nacos_server.sh 1.4.2 192.168.1.195 192.168.1.196 192.168.1.197 9000

​1.4.2​​​是​​Nacos​​​的版本号,三个​​IP​​​地址就是三台虚拟机的​​IP​​​地址,并且将​​Nacos​​​运行在虚拟机的​​9000​​端口上(参数顺序固定)。

192.168.1.195
192.168.1.196
192.168.1.197

等待​​nacos_server.sh​​​脚本执行完成(失败请重新运行脚本,从​​Github​​下载文件可能会因为网络问题导致失败)。

Spring Cloud Alibaba:搭建Nacos集群_spring_08


Spring Cloud Alibaba:搭建Nacos集群_ip地址_09

​nacos_server.sh​​​脚本执行完成后,集群配置文件​​cluster.conf​​会被创建,并且添加指定的集群配置信息。

Spring Cloud Alibaba:搭建Nacos集群_cloud native_10


配置文件​​application.properties​​​中的​​server.port​​也被设置为指定的端口。

Spring Cloud Alibaba:搭建Nacos集群_云原生_11


可以查看​​Nacos​​的日志文件:

vim /usr/local/nacos/logs/start.out

Spring Cloud Alibaba:搭建Nacos集群_云原生_12

很明显​​Nacos​​集群启动成功了。

Spring Cloud Alibaba:搭建Nacos集群_spring cloud_13


Spring Cloud Alibaba:搭建Nacos集群_spring_14


Spring Cloud Alibaba:搭建Nacos集群_spring cloud_15


此时,如果在某一个​​Nacos​​​节点上创建一个配置文件,其他​​Nacos​​节点也会被同步创建该配置文件。

Spring Cloud Alibaba:搭建Nacos集群_ip地址_16


刷新,其他​​Nacos​​节点也会出现该配置文件。

Spring Cloud Alibaba:搭建Nacos集群_cloud native_17


Spring Cloud Alibaba:搭建Nacos集群_spring cloud_18


当然可以在任一​​Nacos​​节点上删除该配置文件。

Spring Cloud Alibaba:搭建Nacos集群_cloud native_19


刷新,其他​​Nacos​​节点该配置文件也会被删除。

Spring Cloud Alibaba:搭建Nacos集群_spring cloud_20


Spring Cloud Alibaba:搭建Nacos集群_云原生_21

服务注册

创建​​alibaba maven​​​工程作为父​​module​​​,再创建​​nacos​​​子​​module​​。

Spring Cloud Alibaba:搭建Nacos集群_ip地址_22


​​alibaba module

​pom.xml​​:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.kaven</groupId>
<artifactId>alibaba</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>

<description>Spring Cloud Alibaba</description>
<modules>
<module>nacos</module>
</modules>

<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<spring-cloud-version>Hoxton.SR9</spring-cloud-version>
<spring-cloud-alibaba-version>2.2.6.RELEASE</spring-cloud-alibaba-version>
</properties>

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.2.RELEASE</version>
</parent>

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>

<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud-version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba-version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>

nacos module

​pom.xml​​:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>alibaba</artifactId>
<groupId>com.kaven</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

<artifactId>nacos</artifactId>

<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>

<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
</project>

​application.yml​​:

server:
port: 8080

spring:
application:
name: nacos
cloud:
nacos:
discovery:
server-addr: "192.168.1.195:9000,192.168.1.196:9000,192.168.1.197:9000"

​NacosApplication​​启动类:

package com.kaven.alibaba;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableDiscoveryClient
public class NacosApplication {
public static void main(String[] args) {
SpringApplication.run(NacosApplication.class);
}
}

​@EnableDiscoveryClient​​注解要加上。

启动​​nacos​​服务:

Spring Cloud Alibaba:搭建Nacos集群_ip地址_23


​nacos​​​服务成功注册在​​Nacos​​集群上。

Spring Cloud Alibaba:搭建Nacos集群_spring_24


Spring Cloud Alibaba:搭建Nacos集群_cloud native_25


Spring Cloud Alibaba:搭建Nacos集群_spring cloud_26


到这里就结束了,如果博主有说错的地方或者大家有不同的见解,欢迎大家评论补充。


举报

相关推荐

0 条评论