Nacos学习,Linux安装Nacos集群配置,Nacos启动设置最大内存

springCloud之Nacos学习

nacos是什么: 官网介绍–Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。


提示:本文章为本人学习使用,如有不足请多多指教!


前言

提示:这里可以添加本文要记录的大概内容:

  1. nacos参考学习文档
  2. 如何使用nacos
  3. 单机环境及集群环境配置nacos

提示:以下是本篇文章正文内容,下面案例可供参考

一、Nacos官方参考文档

  1. Nacos文档:
    https://nacos.io/zh-cn/docs/what-is-nacos.html
  2. NacosGit地址
    https://github.com/alibaba/nacos
  3. Nacos各个版本下载地址
    https://github.com/alibaba/nacos/tags
    点击版本号,下拉到最后,选择版本
    备注:这里使用了1.1.4版本的Windows及linux版

    在这里插入图片描述

接下来将先使用windows版直接安装nacos

二、使用步骤

1. 解压Windows压缩包,解压后如下所示:

在这里插入图片描述

双击bin目录下startup.cmd:
代码如下(示例):

在这里插入图片描述

访问 http://localhost:8848/nacos/#/login 显示如下界面:

在这里插入图片描述
以上就是nacosWindows版启动单机版的步骤


2. springCloud 集成Nacos的服务治理与服务发现

父pom引入jar包

	<!--   版本为-->
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <junit.version>4.12</junit.version>
        <log4j.version>1.2.17</log4j.version>
        <lombok.version>1.16.22</lombok.version>
        <mysql.version>5.1.47</mysql.version>
        <druid.version>1.1.16</druid.version>
        <mybatis.spring.boot.version>1.3.0</mybatis.spring.boot.version>
        <spring-cloud.version>Hoxton.SR1</spring-cloud.version>
    </properties>
 <dependencyManagement>
        <dependencies>
            <!--   springBoot  2.2.2 -->
            <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>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter</artifactId>
                <version>2.2.2.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
<!--            spring-cloud-alibaba-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.1.0.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--        mysql-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql.version}</version>
            </dependency>
            <!-- alibaba的druid数据库连接池 -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>${druid.version}</version>
            </dependency>
            <!-- alibaba的druid数据库连接池 -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid-spring-boot-starter</artifactId>
                <version>${druid.version}</version>
            </dependency>
            <!--    mybatis-->
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>${mybatis.spring.boot.version}</version>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>${lombok.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

新建子项目cloud-alibaba-provider-payment-9001
pom引入jar包为:

<name>alibaba-nocas-客户端-9001</name>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>cloud-alibaba-provider-payment-9001</artifactId>
    <dependencies>
        <!-- nacos注册中心依赖  -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<!--            <version>2.1.0.RELEASE</version>-->
        </dependency>
        <!--        web项目-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--		健康监控)配置和使用-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>  <!--实现springboot的热加载-->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
            <scope>runtime</scope>
        </dependency>
    </dependencies>

application.yml 配置为:

server:
  port: 9001
spring:
  application:
    name: nocas-payment-provider
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848  #指定服务注册地址
management:
  endpoints:
    web:
      exposure:
        include: '*'

启动类:

/**
 * @author mgy
 * @version 1.0
 * @date 2020/9/24
 * {@link @EnableDiscoveryClient 服务注册与发现}
 */
@SpringBootApplication
@EnableDiscoveryClient
public class NacosCenter {

    public static void main(String[] args) {
        SpringApplication.run(NacosCenter.class,args);
    }
}

测试访问接口 controller.PaymentController:

@RestController
@Slf4j
public class PaymentController {

    @Value("${server.port}")
    private String port;

    @GetMapping("/payment/nacos/{id}")
    public String getPort(@PathVariable("id") Integer id){
      return "nacos success ok port:"+port+" value :"+id;
    }

}

启动该服务: 并查看Nacos管理中心,会发现我们的nocas-payment-provider已经注册成功
在这里插入图片描述
以该项目为模板,新建相同项目端口为9002,注意

spring:
  application:
    name: nocas-payment-provider

需要相同,因为即将我们要测试Nacos的负载均衡
接下来我们启动cloud-alibaba-provider-payment-9002项目,并查看服务列表,显示如下:
在这里插入图片描述
然后我们测试接口是否畅通: 访问 http://localhost:9001/payment/nacos/1
http://localhost:9002/payment/nacos/1
查看返回信息:
在这里插入图片描述

在这里插入图片描述
以上,我们的两个服务提供者就已经创建好了。接下来我们测试Nacos的负责均衡

3. Nacos负载均衡

新建项目名为cloud-alibaba-consumer-nacos-order-83
pom.xml

<artifactId>cloud-alibaba-consumer-nacos-order-83</artifactId>

    <dependencies>
        <!-- nacos注册中心依赖  -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <!--            <version>2.1.0.RELEASE</version>-->
        </dependency>
        <!--        web项目-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--		健康监控)配置和使用-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>  <!--实现springboot的热加载-->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
            <scope>runtime</scope>
        </dependency>
    </dependencies>

application.yml

  port: 83
spring:
  application:
    name: nocas-order-consumer
  cloud:
    nacos:
      discovery:
        #注册地址
        server-addr: localhost:8848

配置RestTemplate

@Configuration
@Slf4j
public class ApplicationConfig {

    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate(){
        log.info("注册RestTemplate.....");
        return new RestTemplate();
    }
}

启动类

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

请求接口controller

@Slf4j
@RestController
public class OrderPaymentController {

    public static final String URL = "http://nocas-payment-provider";

    @Resource
    private RestTemplate restTemplate;


    /**
     * 测试nacos 负载均衡
     * @param id
     * @return
     */
    @GetMapping("/consumer/payment/nacos/{id}")
    public String paymentInfo(@PathVariable("id") Integer id) {
        return restTemplate.getForObject(URL + "/payment/nacos/" + id, String.class);
    }
}

启动该服务,访问接口 http://localhost:83/consumer/payment/nacos/1
在这里插入图片描述
在这里插入图片描述
对此,服务的负载均衡测试成功

4. Nacos持久化

目前只持久化到mysql并推荐mysql使用主备模式
修改conf目录下application.properties
最后处增加以下配置–请使用本机配置

# db mysql
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://localhost:3306/nacos-mysql?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=root

本机执行该sql文件
https://github.com/alibaba/nacos/blob/master/distribution/conf/nacos-mysql.sql
或者在conf下nacos-mysql.sql文件执行–请注意匹配的数据库名称

4.1. Nacos配置中心

新增cloud-alibaba-config-nacos-client-3377项目测试
pom文件

<!--        nacos-config-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <!-- nacos注册中心依赖  -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <!--            <version>2.1.0.RELEASE</version>-->
        </dependency>
        <!--        web项目-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--		健康监控)配置和使用-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>  <!--实现springboot的热加载-->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
            <scope>runtime</scope>
        </dependency>
    </dependencies>

配置文件–这里有bootstrap.yml【系统级】application.yml【用户级】
bootstrap.yml

server:
  port: 3377
spring:
  application:
    name: nacos-config-client
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848  #指定服务注册地址
      config:
        server-addr:  localhost:8848 #指定配置中心地址
        file-extension: yaml
#        group: TEST_GROUP #分组
#        namespace: 25363260-45ee-45b0-8d19-10a0a8d08c4d #命名空间

application.yml

spring:
  profiles:
    active: dev
#    active: test
#    active: info

启动类

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

controller层

@RestController
@RefreshScope  //支持nacos的动态刷新
public class NacosCenterController {


    @Value("${config.info}")
    private String configInfo;


    @GetMapping("config/info")
    public String getConfigInfo(){
        return configInfo;
    }

}

这里的controller层获取了config.info的配置信息,我们以上yml中都没有该配置的信息,那么我们将需要在Nacos管理界面中新增该配置信息
点击配置列表:点击+号 data id输入

spring:
  application:
    name:

的值 也就是nacos-config-client 再加上

spring:
  profiles:
    active:

的值加上 file-extension:的值
也就是以下这种格式

${prefix}-${spring.profiles.active}.${file-extension}

根据以上条件 以下输入
在这里插入图片描述
然后我们启动cloud-alibaba-config-nacos-client-3377该项目
访问我们编写的测试接口 http://localhost:3377/config/info
显示如下:
在这里插入图片描述
以上就是该配置中心的测试 备注:分组及命名空间的测试暂不进行编写,请自行查阅哦

三、Linux下的Nacos集群环境搭建

1. 准备环境

1.1 该环境为Linux + nginx + Nacos * 3

1.2 将我们下载好的nacos 1.1.4上传到linux中

我上传的路径为: /opt/myNacos
解压后如下所示:
在这里插入图片描述
编辑conf下的cluster.conf
修改为: 这里我们启动三分Nacos 端口分别为 3333 3344 3355

#it is ip
#example
ip:3333
ip:3344
ip:3355

ip的查看命令为:
hostname -i
在这里插入图片描述
选择67的ip复制上去–结果如下:

#it is ip
#example
172.17.165.67:3333
172.17.165.67:3344
172.17.165.67:3355

1.3 修改启动文件命令:startup.sh

找到while getopts ":m:f:s:" opt 57行处
修改为:

while getopts ":m:f:s:p:" opt
do
    case $opt in
        m)
            MODE=$OPTARG;;
        f)
            FUNCTION_MODE=$OPTARG;;
        s)
            SERVER=$OPTARG;;
            #设置端口传参
        p)
            PORT=$OPTARG;;
        ?)
        echo "Unknown parameter"
        exit 1;;
    esac
done

原格式为:

while getopts ":m:f:s:" opt
do
    case $opt in
        m)
            MODE=$OPTARG;;
        f)
            FUNCTION_MODE=$OPTARG;;
        s)
            SERVER=$OPTARG;;
        ?)
        echo "Unknown parameter"
        exit 1;;
    esac
done

第132行处也要进行修改:
原:nohup $JAVA ${JAVA_OPT} nacos.nacos >> ${BASE_DIR}/logs/start.out 2>&1 &
修改为:

#设置启动端口
nohup $JAVA -Dserver.port=${PORT} ${JAVA_OPT} nacos.nacos >> ${BASE_DIR}/logs/start.out 2>&1 &

因为目前是测试服务器,内存比较小,而nacos默认设置做大2g左右,最小1g左右,而我们要启动3份,所以我们要设置内存限制
原设置:
JAVA_OPT="${JAVA_OPT} -server -Xms2g -Xmx2g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
修改后:
JAVA_OPT="${JAVA_OPT} -server -Xms300m -Xmx300m -Xmn100m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=160m"
这里我们设置最大为300m最小为100m。可根据自身情况进行设定。 如果内存大的请忽略该修改。

1.4 nginx进行配置。

请先安装nginx,我这里使用的版本为 1.18 安装参考博客https://blog.csdn.net/grhlove123/article/details/47834673
先不要启动,因为我们还需要修改配置文件
修改/usr/local/nginx/conf/nginx.conf配置文件
1. #gzip on; 下增加以下配置

    #gzip  on;
#    集群nacos
    upstream cluster{
		server 127.0.0.1:3333;
    	server 127.0.0.1:3344;
    	server 127.0.0.1:3355;
    }

修改访问端口为 1111
location修改成以下:

    server {
#    访问端口
        listen       1111;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
#            root   html;
#            index  index.html index.htm;
		proxy_pass http://cluster;
        }

以上为nginx修改的地方

2. 进行测试

/opt/myNacos/nacos/bin下依次执行该命令

./startup.sh -p 3333
./startup.sh -p 3344
./startup.sh -p 3355

/usr/local/nginx/sbin路径执行该命令

./nginx -c /usr/local/nginx/conf/nginx.conf

备注: /opt/myNacos为我的目录,请注意与本机匹配 /usr/local/nginx为nginx安装地址, 集群环境下也可以通过修改application.properties进行持久化步骤,可参考4. Nacos持久化
启动后我们访问我们linux ip+ 1111
http://ip:1111/nacos/#/login使用默认账号密码进行登录如果你看到该界面,那么您的nacos集群化部署就成功啦。。。

总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了nacos的使用,而nacos提供了大量能使我们快速处理方法。

友情提示:
道路千万条,安全第一条
代码不规范,亲人两行泪

要是喜欢就点个赞呗!谢谢亲

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值