准备
为了模拟真实的环境 准备三台虚拟机
我的虚拟机ip分别为
192.168.200.131
192.168.200.132
192.168.200.133
不会改端口的朋友详见这篇文章
linux的ip改为固定值(解决linux虚拟机ip每次都更换的问题)
官方文章的vip 指的就是类似于nginx的反向代理服务器 这里其他集群改单体 方便测试
ps:这里mysql 和nginx我也弄在一台虚拟机里面的 大家知道意思即可
下载nacos
首先每台虚拟机安装nacos 这里使用的是稳定版1.4.1
下载地址
这里要插一句 默认启动就是集群般 如果不用集群 看官方文档
数据库配置
Nacos默认自带的是嵌入式数据库derby 我们需要改成mysql 让数据持久化
该文件导入到对应的数据库就可以了 我这里使用的是
ip:192.168.200.131
的虚拟机
新建nacos数据库 导入即可
application.properties配置
对应的修改下 然后在该文件新增就可以了
注意 三台机器都要这么改 连接同一台数据库
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://192.168.200.131:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&serverTimezone=Asia/Shanghai
db.user=root
db.password=123456
集群cluster.conf配置
复制一份新的文件 改成 cluster.conf 不改名不确定行不行 最好改一下 当做备份
cp cluster.conf.example cluster.conf
三个虚拟机的文件都要这么配 有相互守望的意思吧 大家改成不同的ip 端口相同就可以了
小总结 三台虚拟机 改application.properties和cluster.conf即可 然后各自启动
注意打开对应端口 或者粗暴点 直接关闭防火墙 否则会出错
既然是虚拟机 直接关闭就是了
systemctl status firewalld
查看防火墙状态
systemctl stop firewalld
关闭防火墙
shutdown 就是关闭nacos
startup就是开启nacos
cmd是windows下的启动命令
sh是linux下的启动命令
修改启动的jvm配置
修改对应的startup.sh
vim startup.sh
ps:如果虚拟机内存较小 建议修改jvm参数
如下 默认Xms 和Xmx都是2g 我改成了512m 毕竟虚拟机内存才2g 减少不必要的错误(建议修改)
nginx相关配置
这里用到的是ip后缀为133的虚拟机
装在哪里其实无所谓 主要是这台上刚好有 就用了。。。。
安装就不赘述了 直接上配置
这里有一点要说一下 之前为了图方便 使用了windows版的nginx 报了许多错误
希望大家就统一即可 使用linux版的nginx
这里有个小技巧 直接启动nginx 确保nginx能正常启动 再刷新配置
在/usr/local/nginx/sbin/
目录下 ./nginx
或者直接/usr/local/nginx/sbin/nginx
启动nginx
如果访问出现 欢迎来到nginx 则进行下一步 注意ip别打错哦
建议大家备份一下
vim nginx.conf
负载均衡配置
刷新nginx
/usr/local/nginx/sbin/nginx -s reload
建议多刷几次哦
访问成功!
用户名密码都是nacos 登录即可
还没完 测试开始
测试
依赖什么的我也不说了
说点关键的 开了nginx 直接访问对应的ip即可
bootstrap.yml
application.yml
添加配置 与上面对应
访问测试
启动类别忘了服务发现的注解
@EnableDiscoveryClient
@SpringBootApplication
public class NacosConfigClientMain3377
{
public static void main(String[] args) {
SpringApplication.run(NacosConfigClientMain3377.class, args);
}
}
@RestController
@Slf4j
@RefreshScope//实现自动更新
public class ConfigController {
@Value("${config.info}")
private String configInfo;//这个变量是从nacos那里设置的 所以无法识别
@GetMapping("/config/info")
public String getConfigInfo() {
return configInfo;
}
}
访问成功
在修改一下配置
数据库的数据也修改了
启动另一个服务 看是否有服务发现的功能
重点在yml配置这里 改变配置的ip地址即可
注意 当服务启动 不为自动发现 只有访问了对应的接口 才会显示
完美解决
此次遇到的坑是windows的nginx貌似不大适配nacos还是什么 报了这个错
failed to req API:/nacos/v1/ns/instance after all servers xxx
还有些解决办法是加大虚拟机内存或删除nacos的data文件降低jvm的启动内存设置
大家都可以去试试