前言
eureka注册中心是AP模式,需要设置心跳机制,Eureka默认开启自我保护机制,如果出现大量的服务实例过期被剔除,注册中心进入自我保护模式,注册表中信息不再被剔除。目的是提高Eureka的可用性,线上更新服务时,并不能及时的把服务给剔除,导致调用不成功,设置enableSelfPreservation=false关闭自我保护机制 也能解决问题,然后找到nacos注册中心
nacos可以CP模式/AP模式切换。可以手动剔除服务实例,通过消息通知客户端跟新缓存的实例信息。相比之下Nacos有以下优点
Nacos可以在CP模式/AP模式切换,Eureka则是AP模式
Nacos在自动或手动下线服务,使用消息机制通知客户端,服务实例的修改很快响应;Eureka只能通过任务定时剔除无效的服务。
Nacos可以根据namespace命名空间,DataId,Group分组,来区分不同环境(dev,test,prod),不同项目的配置。
一.Nacos下载篇
下载 在nacos的release notes找到合适的版本和介绍 https://github.com/alibaba/nacos/releases 下载合适的版本 附件也可下载这里我使用的是 1.1.3
二.Nacos安装篇
单机安装
准备安装包
unzip nacos-server-1.1.3.zip mkdir /www/server/ -p mv nacos /www/server/nacos-server-1.1.3 cd /www/server
启动Nacos
./startup.sh -m standalone
检查是否启动成功
ps -ef|grep 8848 lsof -i:8848 netstat -ntlp |grep 8848
浏览器访问
http://ip:8848/nacos/#/login
初始登录信息 nacos/nacos
数据库配置
创建数据库nacos
create database nacos DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
创建用户名和密码
CREATE USER 'nacos'@'%' IDENTIFIED BY '123456';
赋权
grant ALL PRIVILEGES on nacos.* to 'nacos'@'%';
初始化数据库文件
在Nacos的conf目录下找到nacos-mysql.sql文件,在创建的nacos库中执行sql文件
mysql> use nacos; Database changed mysql> show tables; +----------------------+ | Tables_in_nacos | +----------------------+ | config_info | | config_info_aggr | | config_info_beta | | config_info_tag | | config_tags_relation | | group_capacity | | his_config_info | | roles | | tenant_capacity | | tenant_info | | users | +----------------------+ 11 rows in set (0.00 sec)
修改nacos server application.properties配置文件
修改conf/application.properties文件,增加支持mysql数据源配置(目前只支持mysql),添加mysql数据源的url、用户名和密码
#database mysql spring.datasource.platform=mysql db.num=1 db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true db.user=nacos db.password=123456
三.配置系统服务篇
设置开机启动
vim /lib/systemd/system/nacos.service
[Unit] Description=nacos After=network.target [Service] Type=forking ExecStart=/www/server/nacos/bin/startup.sh -m standalone ExecReload=/www/server/nacos/bin/shutdown.sh ExecStop=/www/server/nacos/bin/shutdown.sh PrivateTmp=true [Install] WantedBy=multi-user.target
ExecStart这里是单机模式启动命令
如果正常模式需要修改为ExecStart=/www/server/nacos/bin/startup.sh
保存以后执行以下命名
systemctl daemon-reload systemctl enable nacos.service systemctl start nacos.service
四.解决错误篇
错误描述
● nacos.service - nacos Loaded: loaded (/usr/lib/systemd/system/nacos.service; enabled; vendor preset: disabled) Active: failed (Result: exit-code) since Wed 2021-11-03 23:42:07 CST; 5min ago Process: 1064 ExecStart=/www/server/nacos/nacos/bin/startup.sh -m standalone (code=exited, status=1/FAI> Nov 03 23:42:07 VM-16-13-centos systemd[1]: Starting nacos... Nov 03 23:42:07 VM-16-13-centos startup.sh[1064]: which: no javac in (/usr/local/sbin:/usr/local/bin:/usr> Nov 03 23:42:07 VM-16-13-centos startup.sh[1064]: readlink: missing operand Nov 03 23:42:07 VM-16-13-centos startup.sh[1064]: Try 'readlink --help' for more information. Nov 03 23:42:07 VM-16-13-centos startup.sh[1064]: dirname: missing operand Nov 03 23:42:07 VM-16-13-centos startup.sh[1064]: Try 'dirname --help' for more information. Nov 03 23:42:07 VM-16-13-centos startup.sh[1064]: ERROR: Please set the JAVA_HOME variable in your enviro> Nov 03 23:42:07 VM-16-13-centos systemd[1]: nacos.service: Control process exited, code=exited status=1 Nov 03 23:42:07 VM-16-13-centos systemd[1]: nacos.service: Failed with result 'exit-code'. Nov 03 23:42:07 VM-16-13-centos systemd[1]: Failed to start nacos.
错误原因
因为nacos是由java开发而成,在启动的时候需要JDK版本1.8,在系统环境中已经配置了JAVA_HOME,但是在service脚本中,会从(/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin这些路径中寻找javac,只需要将我们自己的java目录软链接到/usr/bin/java即可 或者在nacos/bin/startup.sh 中修改参数指定目录即可
方法一
查看java安装位置
[root@VM-8-11-centos server]# which javac /www/server/jdk1.8.0_281/bin/javac
建立软链接
ln -s /www/server/jdk1.8.0_281/bin/javac /usr/bin/javac
如果还是无法启动找不到javac,将javac设置为可执行
chmod +x /www/server/jdk1.8.0_281/bin/javac
方法二
cd /www/server/nacos-server-1.1.3/bin vim startup.sh
修改此处为java位置
修改为