目录
Nacos简介
Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
一、nacos安装和启动
1.1、上传linux解压安装包
[root@localhost ~]# cd /usr/upload
[root@localhost upload]# tar -zxvf nacos-server-1.4.1.tar.gz -C /usr/local
1.2、启动和关闭
启动:
[root@localhost local]# cd nacos/bin/
[root@localhost bin]# ./startup.sh -m standalone #非集群模式启动
... ...
nacos is starting with standalone
nacos is starting,you can check the /usr/java/nacos/logs/start.out
关闭:
[root@localhost bin]# ./shutdown.sh
The nacosServer(3543) is running...
Send shutdown request to nacosServer(3543) OK
[root@localhost bin]
1.3、访问
浏览器访问:http://192.168.***.***:8848/nacos,默认用户名/密码为: nacos/nacos
二、nacos注册中心(存放服务)
2.1、服务注册
2.1.0.启动nacos
2.1.1.工程引入依赖
spring-cloud-starter-alibaba-nacos-discovery
pom.xml
<!--nacos客户端-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
2.1.2.配置文件添加nacos配置
配置nacos地址和端口号,设置注册服务名称
application.yml
spring:
cloud:
nacos:
discovery:
server-addr: 192.168.209.129:8848 #nacos服务的地址
application:
name: nacos-provider #向注册中心注册的名字
2.1.3.Springboot启动类添加注解
@EnableDiscoveryClient //向注册中心注册该服务,并可以获取其他服务的调用地址
@SpringBootApplication
@EnableDiscoveryClient//向注册中心注册该服务,并可以获取其他服务的调用地址
public class ProviderApp {
public static void main(String[] args) {
SpringApplication.run(ProviderApp.class);
}
}
2.1.4.启动测试
效果:
2.2、服务调用
2.2.1.IOC容器注入RestTemplate
@Configuration
public class ConfigBean {
@Bean
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
2.2.2.controller注入DiscoveryClient
通过DiscoveryClient获取nacos中注册服务信息,调用服务
@RestController
@RequestMapping(value = "/consumer")
public class ConsumerController {
//访问Rest服务的客户端
@Autowired
private RestTemplate restTemplate;
@Autowired
private DiscoveryClient discoveryClient;
@RequestMapping(value="/getUserById/{id}")
public User getUserById(@PathVariable Integer id){
//获取nacos中注册的所有服务信息
List<String> serviceList = discoveryClient.getServices();
for (String service : serviceList) {
System.out.println(service);
}
//获取nacos中注册的指定服务信息
ServiceInstance instance = discoveryClient.getInstances("nacos-provider").get(0);
String serviceUrl = instance.getHost() + ":" + instance.getPort();
//调用服务
String url = "http://" + serviceUrl + "/provider/getUserById/"+id;
return restTemplate.getForObject(url, User.class);
}
}
注册中心作用
①解决地址硬编码
②进行负载均衡
三、naocs配置中心(存放配置文件)
3.1、在 Nacos 平台中添加配置信息
配置管理==>配置列表==>新建配置
示例:
3.2、项目工程中获取配置
3.2.1.工程引入依赖
spring-cloud-starter-alibaba-nacos-config
pom.xml
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
3.2.2.配置文件添加nacos配置
bootstrap.yml
注意:
客户端配置文件的名称必须为
bootstrap.yml
bootstrap/ application 的应用场景:
bootstrap.yml
比applicaton.yml
优先加载,应用于系统级别参数配置,一般不会变动;
application.yml
应用于SpringBoot项目的自动化配置;
示例:
spring:
cloud:
nacos:
config:
server-addr: 192.168.5.131:8848 #nacos服务的地址
file-extension: yaml #后缀名,只支持 properties 和 yaml 类型
prefix: nacos-config #文件名,如果没有配置则默认为 ${spring.appliction.name}
3.2.3.Springboot启动类添加注解
@EnableDiscoveryClient //向注册中心注册该服务,并可以获取其他服务的调用地址
@SpringBootApplication
@EnableDiscoveryClient//向注册中心注册该服务,并可以获取其他服务的调用地址
public class ProviderApp {
public static void main(String[] args) {
SpringApplication.run(ProviderApp.class);
}
}
3.2.4.编写配置类读取nacos中的设置的配置信息
@RefreshScope //重新从BeanFactory获取一个新的实例(该实例使用新的配置)
@RestController
@RefreshScope //重新从BeanFactory获取一个新的实例(该实例使用新的配置)
public class ConfigController {
@Value("${spring.datasource.driver-class-name}")
private String driverClassName;
@Value("${spring.datasource.url}")
private String url;
@Value("${spring.datasource.username}")
private String username;
@Value("${spring.datasource.password}")
private String password;
@Value("${spring.datasource.type}")
private String type;
@GetMapping("/config/info")
public String getConfigInfo() {
System.out.println(this);
String configInfo = driverClassName+"<br>"+url+"<br>"+username+"<br>"
+password+"<br>"+type;
return configInfo;
}
}
配置中心作用:
①集中管理配置文件
②动态更新配置文件
四、配置、服务隔离
获取配置集需要指定:
nacos服务地址,必须指定
namespace,如不指定默认public
group,如不指定默认 DEFAULT_GROUP
dataId,必须指定
五、Nacos集群和持久化
Nacos默认有自带嵌入式数据库derby,但是如果做集群模式的话,就不能使用自己的数据库不然每个节点一个数据库,那么数据就不统一了,需要使用外部的mysql
5.1、Ncaos持久化
nacos集群的前置准备,作用:统一数据
5.1.1.切换数据库
打开nacos安装目录,修改conf/application.properties文件,增加支持mysql数据源配置
[root@localhost ~]# vim /usr/local/nacos/conf/application.properties
增加以下配置
### If use MySQL as datasource:
spring.datasource.platform=mysql
### Count of DB:
db.num=1
### Connect URL of DB:
db.url.0=jdbc:mysql://192.168.5.128:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=1111
5.1.2.初始化数据库
mysql中创建nacos数据库并导入nacos-mysql.sql
nacos-mysql.sql在nacos安装目录conf文件夹下
5.1.3.测试
重启nacos测试nacos所有写到嵌入式数据库的数据是否都写到了mysql:
5.2、Ncaos集群
5.2.1.部署架构图
5.2.2.集群搭建
1.找到conf/cluster.conf.example ,将其复制改名为 conf/cluster.conf ,并修改内容如下:
[root@localhost ~]# cd /usr/local/nacos/conf
[root@localhost conf]# cp cluster.conf.example cluster.conf[root@localhost conf]# vim cluster.conf
单机模拟集群:
1、复制3份naocs
[root@localhost bin]# cd /usr/local
[root@localhost local]# mkdir nacos_cluster
[root@localhost local]# cp -r nacos nacos_cluster/nacos_8848
[root@localhost local]# cp -r nacos nacos_cluster/nacos_8849
[root@localhost local]# cp -r nacos nacos_cluster/nacos_8850
2、修改3个节点的ip,端口号
将
conf/application.properties
中的端口号分别改为
vim /usr/local/nacos_cluster/nacos_8849/conf/application.properties
server.port=8849
vim /usr/local/nacos_cluster/nacos_8850/conf/application.properties
server.port=8850
3、启动3个节点
cd /usr/local/nacos_cluster/nacos_8848/bin
./startup.sh
... ...
4.测试
5.2.3.配置代理服务
5.2.3.1.安装nginx
安装c语言环境
yum -y install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel
下载nginx
[root@localhost upload]# wget -c https://nginx.org/download/nginx-1.12.0.tar.gz
解压
[root@localhost upload]# tar -zxvf nginx-1.12.0.tar.gz
配置安装路径
[root@localhost upload]# cd nginx-1.12.0
[root@localhost nginx-1.12.0]# ./configure --prefix=/usr/local/nginx
编译并安装
[root@localhost nginx-1.12.0]# make && make install
启动和关闭
启动:
[root@localhost sbin]# ./nginx查看日志文件夹,出现nginx.pid文件启动成功
关闭:
[root@localhost sbin]# ./nginx -s stop
重启:
[root@localhost sbin]# ./nginx -s reload
5.2.3.2.配置nginx代理nacos集群
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
upstream nacos {
server 192.168.5.131:8848;
server 192.168.5.131:8849;
server 192.168.5.131:8850;
}
server {
listen 80;
server_name localhost;
location / {
# root html;
# index index.html index.htm;
proxy_pass http://nacos;
}
}
5.2.4.测试
1.启动nacos集群
[root@localhost upload]# cd /usr/local/nacos_cluster/nacos_8848/bin [root@localhost bin]# ./startup.sh [root@localhost bin]# cd /usr/local/nacos_cluster/nacos_8849/bin [root@localhost bin]# ./startup.sh [root@localhost bin]# cd /usr/local/nacos_cluster/nacos_8850/bin [root@localhost bin]# ./startup.sh
2.启动nginx
[root@localhost nginx]# cd /usr/local/nginx/sbin/ [root@localhost sbin]# ./nginx
3.将微服务注册到Nacos集群
spring:
cloud:
nacos:
discovery:
server-addr: 192.168.5.131 #nginx绑定的域名
application:
name: nacos-provider #向注册中心注册的名字
4.访问nacos集群
启动服务,并通过nginx访问nacos集群:http://192.168.5.131/nacos
六、nacos开机启动(了解)
1、编写开机启动文件
[root@localhost ~]# vim /lib/systemd/system/nacos.service
内容:
[Unit]
Description=nacos
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/nacos/bin/startup.sh -m standalone
ExecReload=/usr/local/nacos/bin/shutdown.sh
ExecStop=/usr/local/nacos/bin/shutdown.sh
PrivateTmp=true
[Install]
WantedBy=multi-user.target
2、修改nacos的bin目录下的starup.sh
#[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=$HOME/jdk/java
[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/usr/local/jdk1.8.0_191
#[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/usr/java
#[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/opt/taobao/java
#[ ! -e "$JAVA_HOME/bin/java" ] && unset JAVA_HOME
3、设置开机自起
[root@localhost ~]# systemctl daemon-reload #重新加载服务配置
[root@localhost ~]# systemctl enable nacos.service #设置为开机启动
[root@localhost ~]# systemctl start nacos.service #启动nacos服务
[root@localhost ~]# systemctl stop nacos.service #停止nacos服务