分类 Paas 下的文章

nacos的集群搭建和负载均衡


nacos集群概念

统一种软件服务的多个节点对一个系统提供服务称之为这个软件服务集群

imge

预备环境准备

  • 64 bit OS Linux/Unix/Mac,推荐使用Linux系统。

  • 64 bit JDK 1.8+;

  • Maven 3.2.x+;

  • 3个或3个以上Nacos节点才能构成集群。

nacos集群搭建

集群规划

  • nacos01 端口号8845

  • nacos02 端口号8846

  • nacos03 端口号8847

  • mysql 端口号3306

  • nginx 端口号8999

搭建nacos集群注意事项:数据持久化必须配置为mysql数据持久化

1、把前面的nacos原始数据清空

rm -rf nacos/data/

2、复制三份nacos

cp -r nacos nacos01
cp -r nacos nacos02
cp -r nacos nacos03

image

3、清空nacos持久化到mysql的数据(删除所有表和字段,重新导入原数据)。注意:数据库中不能存在原始数据

4、把nacos conf目录中cluster.conf.example文件修改成cluster.conf

mv nacos01/conf/cluster.conf.example nacos01/conf/cluster.conf
mv nacos02/conf/cluster.conf.example nacos02/conf/cluster.conf
mv nacos03/conf/cluster.conf.example nacos03/conf/cluster.conf

5、修改nacos conf目录中cluster.conf文件添加所有集群节点(先删除里面所有信息)

vim nacos01/conf/cluster.conf
vim nacos02/conf/cluster.conf
vim nacos03/conf/cluster.conf

添加内容

#ip地址加端口号47.106.105:8845
47.106.105:8846
47.106.105:8847

6、查看是否修改成功,保证三个nacos服务器都有所有的集群节点

cat nacos01/conf/cluster.conf
cat nacos02/conf/cluster.conf
cat nacos03/conf/cluster.conf

7、修改所有nacos各自的端口号和指定启动ip

vim nacos01/conf/application.properties #8845
vim nacos02/conf/application.properties #8846
vim nacos03/conf/application.properties #8847

image

8、因为根据linux运行内存修改

image

9、启动以集群方式启动所有nacos服务,查看启动日志

启动8845端口

./nacos01/bin/startup.sh
tail -f nacos01/logs/nacos.log

启动8846端口

./nacos02/bin/startup.sh
tail -f nacos02/logs/nacos.log

启动8847端口

./nacos03/bin/startup.sh
tail -f nacos03/logs/nacos.log

image

nginx实现负载均衡

1、安装nginx

https://www.cnblogs.com/luoxiao1104/p/14978515.html

2、在sbin目录下停止nginx

./nginx -s stop

3、进入nginx的conf目录,编辑nginx.conf配置文件

vim nginx.conf

image

4、进入到sbin目录 执行nginx,必须要带上绝对路径

image

5、查看是否启动成功和加载配置文件

image

测试访问网页
image

6、项目修改

image


nacos的mysql持久化


nacos 持久化

持久化:管理的配置信息持久化
注意:默认nacos存在的配置信息持久化,默认的持久化方式为内嵌数据库derby
缺点:无法展示数据

官方建议:在生产情况下推荐将配置存入mysql数据库 注意:nacos到目前为止仅仅支持mysql

mysql安装

1、输入vi /etc/yum.repos.d/mysql-community.repo添加官方的yum源创建并编辑mysql-community.repo文件

vi /etc/yum.repos.d/mysql-community.repo

2、粘贴以下内容到源文件中

[mysql57-community]name=MySQL 5.7 Community Serverbaseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/$basearch/enabled=1gpgcheck=0gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

3、安装mysql

yum install mysql-community-server -y

4、启动mysql数据库

systemctl start mysqld

5、修改mysql数据库密码

grep 'temporary password' /var/log/mysqld.log         获取初始密码
mysqladmin -u root -p password                        回车 输入原始密码 在输入新的密码

6、登录mysql

mysql -uroot -p密码

7、修改远程连接

grant all privileges on *.* to 'root'@'%' identified by '密码' with grant option;
flush privileges;          刷新权限

8、测试连接
image

nacos持久化数据库

1、创建一个数据库nacos
image

2、添加表,可以在linux服务器里面去出来添加到windows系统中
image

3、用sqlyog打开,把sql语句执行一遍得到表
image

4、修改nacos配置文件持久化信息到mysql中

  • 1.linux服务器进入到nacos/conf文件夹

  • 2.输入vim application.properties编辑配置文件

  • 3.image

  • 4.退出到nacos目录输入./bin/shutdown.sh停止nacos服务

  • 5.再输入./bin/startup.sh -m standalone启动nacos单机服务

  • 6.输入tail -f logs/nacos.log查看日志,查看nacos是否启动成功

5、打开nacosweb管理页面发现配置列表没有配置了,因为nacos把数据持久化到mysql里面,需要重新编写配置文件,并且修改bootstrap.proerties的命名空间id


配置中心及自动刷新


配置中心configclient开发

nacos作为统一配置中心:
1.它管理的配置文件方式是在自己所在的服务器上形成一个版本库,因此不需要再创建远程版本库
2.nacos作为统一配置中心管理配置文件时,同样也存在版本控制

1、创建一个config客户端子模块springcloudAlibaba-config-client-8888

image

2、导入相关依赖

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!--nacos config client-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
    </dependencies>

3、编写主启动类

package com.study.springcloud;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class ConfigClientApplication_8888 {    public static void main(String[] args) {
        SpringApplication.run(ConfigClientApplication_8888.class,args);
    }
}

4、进入nacos管理页面添加配置文件

  • 1.新建命名空间
    image

  • 2.输入命名空间信息
    image

  • 3.点击 配置管理,再点击 配置列表
    image

  • 4.选择study命名空间
    image

  • 5.点击+按钮
    image

  • 6.编辑配置文件
    image

  • 7.编辑完成点 发布
    image

5、编写bootstrap.properties配置文件,拉取远端配置

#告诉config server地址spring.cloud.nacos.server-addr=localhost:8848#告诉从哪个命名空间获取配置spring.cloud.nacos.config.namespace=f15dc566-c615-4dbe-88f9-0c812ea6e2f6#告诉从哪个组进行配置获取spring.cloud.nacos.config.group=DEFAULT_GROUP#第一种拉取远端配置文件方式#从哪个组拉取哪个配置文件spring.cloud.nacos.config.name=configclient-dev#拉取这个名字的哪个后缀文件spring.cloud.nacos.config.file-extension=properties#第一种拉取远端配置文件方式#spring.cloud.nacos.config.prefix=configclient#spring.profiles.active=dev#spring.cloud.nacos.config.file-extension=properties

6、编写controller层

package com.study.springcloud.controller;import org.springframework.beans.factory.annotation.Value;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;@RestControllerpublic class DemoController {    @Value("${constomer.username}")
    private String username;    @GetMapping("/demo")
    public String demo(){        return "demo ok!!!"+username;
    }
}

7、启动测试

image

配置自动刷新

1、在controller层添加@RefreshScope实现自动刷新

image

2、修改远端配置文件

image

3、重新访问

image


Nacos客户端开发和openfeign服务间通信


nacos客户端开发

1、新建一个模块springclouAlibaba-nacos-client-8989

image

2、导入相关依赖

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency></dependencies><!--引入nacos client的依赖--><dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency>

3、编写application.properties配置文件

server.port=8989spring.application.name=NACOSCLIENT#指定服务名称spring.cloud.nacos.server-addr=47.106.105.80:8848

4、编写主启动类

package com.study.springcloudAlibaba;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.client.discovery.EnableDiscoveryClient;@SpringBootApplication@EnableDiscoveryClient   //开启服务的注册(可以省略不写)public class NacosClientApplication {    public static void main(String[] args) {
        SpringApplication.run(NacosClientApplication.class,args);
    }
}

5、启动测试

image

openfeign服务间的通信

一、消费者模块

1、新建一个提供者模块springcloudAlibaba-products-9090

image

2、导入相关依赖

 <dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency></dependencies>

3、编写application.properties配置文件

server.port=9090spring.application.name=PRODUCTS#指定nacos server地址spring.cloud.nacos.server-addr=47.106.105.80:8848

4、编写主启动类

package com.sutdy.springcloudAlibaba;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class ProductsApplication_9090 {    public static void main(String[] args) {
        SpringApplication.run(ProductsApplication_9090.class,args);
    }
}

5、编写controller层

package com.sutdy.springcloudAlibaba.controller;import org.springframework.beans.factory.annotation.Value;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RestController;@RestControllerpublic class ProductsController {    @Value("${server.port}")
    private int port;    @GetMapping("/product/{id}")
    public String products(@PathVariable("id") Integer id){        return "调用商品服务返回:"+id+",当前提供服务的端口为:"+port;
    }
}

二、消费者模块

1、新建一个消费者模块springcloudAlibaba-users-8989

image

2、导入相关依赖

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--引入nacos client的依赖-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!--导入openfeign-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
    </dependencies>

3、编写application.properties配置文件

server.port=8989spring.application.name=USERS#指定nacos server地址spring.cloud.nacos.server-addr=47.106.105.80:8848

4、编写主启动类,添加@EnableFeignClients注解开启Openfeign

package com.study.springcloudAlibaba;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.openfeign.EnableFeignClients;@SpringBootApplication@EnableFeignClients //开启Openfeign调用支持public class UserApplication_8989 {    public static void main(String[] args) {
        SpringApplication.run(UserApplication_8989.class,args);
    }
}

5、编写openfeign客户端接口,添加@FeignClient("PRODUCTS")注解调用名称为"PRODUCTS"的微服务,实现服务之间的通信。

package com.study.springcloudAlibaba.feignclients;import org.springframework.cloud.openfeign.FeignClient;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;@FeignClient("PRODUCTS")public interface ProductClient {    @RequestMapping("/product/{id}")
    String product(@PathVariable("id") Integer id);
}

6、编写controller层实现服务通信接口

package com.study.springcloudAlibaba.controller;import com.study.springcloudAlibaba.feignclients.ProductClient;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;@RestControllerpublic class UserController {    @Autowired
    private ProductClient productClient;    @GetMapping("/invoke")
    public String invokeProduct(){        String result = productClient.product(21);        return "调用用户服务成功.....调用商品服务结果:{}"+result;
    }
}

三、启动测试

1、点击 编辑配置

image

2、选择ProductsApplication_9090,再点击复制

image

3、点击复制出来的ProductsApplication_9091,再点击配置,修改名称和端口号

image

4、启动服务提供者9090和9091,再启动消费者8989

image

5、进入 http://localhost:8989/invoke 页面

image

刷新
image


Nacos组件:环境配置


Nacos组件简介

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

Nacos就是微服务架构中服务注册中心以及统一配置中心,用来替换原来的(eureka,consul)以及config组件

使用nacos必须安装JDK和maven

image

JDK安装

1、安装Nacos必须安装jdk,把rpm安装包的jdk上传到linux服务器上

image

2、输入rpm -ivh jdk-11.0.11_linux-x64_bin.rpm安装jdk

3、输入find / -name java查看java安装目录,进入bin目录,查看

image

4、输入vim /etc/profile配置linux系统环境变量,光标移到最后面按i键编辑添加环境变量

export JAVA_HOME=/usr/java/jdk-11.0.11
export PATH=$PATH:$JAVA_HOME/bin

image
按ESC,再按:wq保存退出

5、退出之后输入source /etc/profile重新加载环境变量

6、输入java -sersion查看是否配置成功

image

Maven安装

1、下载apache-maven-3.6.3-bin.tar.gz https://downloads.apache.org/maven/maven-3/

2、把tar包上传到linux系统的 /usr 目录下

3、输入tar -xvzf apache-maven-3.6.3-bin.tar.gz解压maven

image

4、输入vim /etc/profile命令打开环境变量配置

5、拉到最后面按i键配置环境变量

export MAVEN_HOME=/usr/apache-maven-3.6.3export PATH=$PATH:$MAVEN_HOME/bin

image

6、按ESC,再输入:wq保存并退出

7、执行source /etc/profile命令重新加载配置文件

8、输入mvn -v查看是否安装成功

image

Nacos安装

![image](uploading...)

输入cd返回root目录

1、下载Nacos安装包 https://nacos.io/zh-cn/index.html

2、把Nacos安装包上传到linux服务器上(我上传的是root文件夹)

image

3、nacaos是gz压缩包,输入tar -zxvf nacos-server-1.3.1.tar.gz解压缩到当前目录

image

4、查看nacos目录结构

image

5、启动nacos服务

ncaos默认集群启动,启动时单机启动,必须在bin目录中执行./startup.sh -m standalone
image

6、输入cd ..返回上一级目录,再输入tail -f logs/nacos.log查看日志,是否启动成功

7、访问nacos web地址 http://ip地址/8848/nacos

image

image