正文
一、什么是nacos
具体内容就不巴巴了,看官网Nacos官方文档
二、Nacos作为服务中心的配置
spring: application: name: xiaojie-member cloud: nacos: discovery: #注册地址 server-addr: 127.0.0.1:8848 #是否开启nacos注册 enabled: true #账号 username: xiaojie #密码 password: nacos #命名空间 namespace: 28eb29ea-5a04-4714-8ae8-77d37c01166a #分组 group: DEV_GROUP
三、Nacos作为配置中心配置
spring: cloud: nacos: config: #前缀 prefix: xiaojie-member #地址 server-addr: 127.0.0.1:8848 #扩展名 file-extension: yaml #命名空间 namespace: 28eb29ea-5a04-4714-8ae8-77d37c01166a #分组 group: DEV_GROUP #开关 enabled: true #动态刷新配置 refresh-enabled: true
四、Nacos 持久化到本地MySQL
将下载的nacos-server修改application.properties
添加如下数据库
spring.datasource.platform=mysql ### Count of DB: db.num=1 ### Connect URL of DB: db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC db.user.0=root db.password.0=root
五、Nacos集群配置
将Nacos解压后的文件复制3份,在conf文件下添加cluster.conf,内容如下
#2021-07-12T09:26:22.487 ip:8848 ip:8849 ip:8850 #一定写ip不要写localhost
修改每个配置文件的端口号,对应,然后进入bin,目录下执行
#集群方式启动 startup.cmd -m cluster #单机模式 startup.cmd -m standalone
六、集群访问
官网推荐这种模式部署。http://nacos.com:port/openAPI 域名 + SLB模式(内网SLB,不可暴露到公网,以免带来安全风险),可读性好,而且换ip方便,推荐模式
我们按照下图部署
nginx配置如下
#user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; upstream nacos_config{ #实际服务器 server 127.0.0.1:8848; server 127.0.0.1:8849; server 127.0.0.1:8850; } server { listen 80; #监听域名 server_name nacos.xiaojie.com; #charset koi8-r; #access_log logs/host.access.log main; location / { proxy_pass http://nacos_config; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } }
由于是在自己的环境测试用的,需要修改host文件添加如下
127.0.0.1 nacos.xiaojie.com
然后访问nacos.xiaojie.com 即可。
七、Lvs+Keepalived实现集群高可用
访问变成这种模式
7.1、安装Keepalived
下载安装包上传服务器,然后解压
[root@localhost local]# tar -zxvf keepalived-2.2.2.tar.gz -C /usr/local/
下载插件openssl
[root@localhost local]# yum install openssl openssl-devel -y
编译
[root@localhost keepalived-2.2.2]# cd keepalived-2.2.2/ && ./configure --prefix=/usr/local/keepalived
安装
[root@localhost keepalived-2.2.2]# make && make install
7.2、设置为开机启动
#创建文件 [root@bogon keepalived-2.2.2]# mkdir /etc/keepalived #复制配置文件 [root@bogon keepalived-2.2.2]# cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived [root@bogon keepalived-2.2.2]# cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/ [root@bogon keepalived-2.2.2]# cp /usr/local/keepalived/sbin/keepalived /usr/sbin/ #设置开机启动 [root@localhost etc]# systemctl enable keepalived.service #启动 [root@localhost keepalived]# systemctl start keepalived.service 停止 [root@localhost keepalived]# systemctl stop keepalived.service
7.3、修改配置文件内容如下
[root@bogon keepalived-2.2.1]# cd /etc/keepalived/
! Configuration File for keepalived vrrp_script chk_nginx { script "/etc/keepalived/nginx_check.sh" #运行脚本 interval 2 #检测时间间隔 weight -20 #如果条件成立的话,则权重 -20 } # 定义虚拟路由,VI_1 为虚拟路由的标示符,自己定义名称 vrrp_instance VI_1 { ###MASTER 主的意思 BACKUP 从 state MASTER #来决定主从 interface ens32 # 绑定虚拟 IP 的网络接口 virtual_router_id 110 # 虚拟路由的 ID 号, 两个节点设置必须一样 mcast_src_ip 192.168.139.153 #填写本机ip priority 100 # 节点优先级,主要比从节点优先级高 nopreempt # 优先级高的设置 nopreempt 解决异常恢复后再次抢占的问题 advert_int 1 # 主从信息发送间隔,两个节点设置必须一样,默认 1s authentication { auth_type PASS auth_pass 1111 } # 将 track_script 块加入 instance 配置块 track_script { chk_nginx #执行 Nginx 监控的服务 } virtual_ipaddress { 192.168.139.110 # 虚拟ip,可配置多个。 } }
启动keepalived 看到如下多了个ip,配置成功
重启nginx 的脚本
#授权脚本文件 chmod +x /etc/keepalived/nginx_check.sh
#!/bin/bash set -x COUNT=$(ps -C nginx --no-header |wc -l) echo $COUNT #判断Nginx 是否都挂掉了 if [ $COUNT -eq 0 ] then #如果挂掉了,就启动nginx #/usr/local/nginx/sbin/nginx docker start mynginx echo "重启nginx" #等2秒钟后,再次查看是否 启动成功 sleep 2 #如果nginx没有启动起来,就直接干掉keepalived COUNT=$(ps -C nginx --no-header |wc -l) if [ $COUNT -eq 0 ] then echo "干掉keepalived" #如果killall命令不能使用,就需要安装psmisc工具了 #yum install -y psmisc killall keepalived fi fi
参考Nginx之Keepalived实现高可用(双机热备+自动切换)-yellowcong_yelllowcong的专栏-CSDN博客_nginx 热切换
备用服务器跟这个几乎相同,只需要修改备用服务器的配置文件
! Configuration File for keepalived vrrp_script chk_nginx { script "/etc/keepalived/nginx_check.sh" #运行脚本 interval 2 #检测时间间隔 weight -20 #如果条件成立的话,则权重 -20 } # 定义虚拟路由,VI_1 为虚拟路由的标示符,自己定义名称 vrrp_instance VI_1 { ###MASTER 主的意思 BACKUP 从 state BACKUP #来决定主从 interface ens32 # 绑定虚拟 IP 的网络接口 virtual_router_id 110 # 虚拟路由的 ID 号, 两个节点设置必须一样 mcast_src_ip 192.168.6.135 #填写本机ip priority 100 # 节点优先级,主要比从节点优先级高 nopreempt # 优先级高的设置 nopreempt 解决异常恢复后再次抢占的问题 advert_int 1 # 主备信息发送间隔,两个节点设置必须一样,默认 1s authentication { auth_type PASS auth_pass 1111 } # 将 track_script 块加入 instance 配置块 track_script { chk_nginx #执行 Nginx 监控的服务 } virtual_ipaddress { 192.168.6.100 # 虚拟ip,可配置多个。 } }
最后附上 测试代码 nacos: nacos分布式配置中心