介绍
Nacos 用于配置、管理微服务,提供了一组简单易用的特性,快速实现服务发现、服务配置、服务元数据及流量管理。
环境
主机名 | 服务器IP | 组件 |
---|---|---|
nacos-node01 | 192.168.1.101、192.168.1.100(VIP) | nacos、jdk、mysql、keepalived |
nacos-node02 | 192.168.1.102 | nacos、jdk、mysql、keepalived |
nacos-node03 | 192.168.1.103 | nacos、jdk、mysql、keepalived |
初始化环境
配置主机名(三个节点都配置)
代码语言:javascript复制hostnamectl set-hostname nacos-node01
hostnamectl set-hostname nacos-node02
hostnamectl set-hostname nacos-node03
配置主机名解析(三个节点都配置)
代码语言:javascript复制vim /etc/hosts
192.168.1.101 nacos-node01
192.168.1.102 nacos-node02
192.168.1.103 nacos-node03
配置免密登录(三个节点都配置)
代码语言:javascript复制ssh-keygen -t rsa
ssh-copy-id 192.168.1.101
ssh-copy-id 192.168.1.102
ssh-copy-id 192.168.1.103
安装依赖(三个节点都配置)
代码语言:javascript复制yum -y install gcc gcc-c libaio make cmake zlib-devel openssl-devel pcre pcre-devel wget git curl lynx lftp mailx mutt rsync ntp net-tools vim lrzsz screen sysstat yum-plugin-security yum-utils createrepo bash-completion zip unzip bzip2 tree tmpwatch pinfo man-pages lshw pciutils gdisk system-storage-manager git gdbm-devel sqlite-devel chrony
配置时间同步(所有节点都配置)
代码语言:javascript复制systemctl enable --now chrony
所有节点安装jdk(所有节点都安装)
部署 MySQL(三个节点都要部署,部署成一主两从)
部署 Nacos
下载、解压 Nacos(所有节点都安装)
代码语言:javascript复制https://github.com/alibaba/nacos/releases
unzip nacos-server-2.3.1.zip -d /data/
修改配置(所有节点都要配置)
代码语言:javascript复制# nacos 默认端口是8848
vim /data/nacos/conf/cluster.conf
192.168.1.101:8848
192.168.1.102:8848
192.168.1.103:8848
数据源配置(所有节点都要配置)
代码语言:javascript复制# 创建 Nacos 连接用户和数据库,在主库执行
# 导入数据
use nacos;
source /data/nacos/conf/nacos-mysql.sql;
# 所有 Nacos 节点修改 Nacos 连接数据库的配置文件
vim /data/nacos/conf/application.properties
Spring.datasource.platform=mysql # MySQL 作为外部连接数据库
db.num=3 # 数据库实例数
db.url.0= # 多个数据库实例
db.url.1= # 多个数据库实例
db.url.2= # 多个数据库实例
db.user=nacos # 数据库账号
db.passsowrd=123456 # 数据库密码
启动 Nacos(所有节点都要配置)
代码语言:javascript复制cd /data/nacos/bin/
./startup.sh
访问 Nacos(所有节点都要配置)
代码语言:javascript复制http://192.168.1.101:8848/nacos
用户名/密码:nacos/nacos
安装 keepalived
安装(三个节点都安装)
修改配置(三个节点都配置)
nacos-node01 配置:
代码语言:javascript复制vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email_from xxx@qq.com
smtp_server smtp.qq.com
smtp_connect_timeout 30
router_id nacos-node01 # 唯一值,一般为所在服务器主机名
vrrp_skip_check_adv_addr
# vrrp_strict # 注释该参数
vrrp_garp_interval 0
vrrp_gna_interval 0
}
#注意此处添加nacos服务健康检查
vrrp_script check_nacos {
script "/bin/bash /etc/keepalived/check_nacos.sh" # nacos健康检查脚本路径
interval 5 # 健康检查周期,每隔5秒执行一次脚本
}
vrrp_instance VI_1 {
state MASTER
interface ens33 # 绑定的网卡名称
virtual_router_id 51 # 主备ID必须保证一致
priority 100 # 优先级
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.100/24 # VIP地址,虚拟IP
}
track_script { # 调用脚本
check_nacos # 这里的名称必须与vrrp_scrip写的保证一致
}
}
nacos-node02 配置:
代码语言:javascript复制! Configuration File for keepalived
global_defs {
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id nacos-node2
vrrp_skip_check_adv_addr
# vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script check_nacos {
script "/bin/bash /etc/keepalived/check_nacos.sh"
interval 5
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.100/24
}
track_script {
check_nacos
}
}
nacos-node03 配置:
代码语言:javascript复制! Configuration File for keepalived
global_defs {
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id nacos-node3
vrrp_skip_check_adv_addr
# vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script check_nacos {
script "/bin/bash /etc/keepalived/check_nacos.sh"
interval 5
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 80
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.100/24
}
track_script {
check_nacos
}
}
健康检查脚本(三个节点都配置)
代码语言:javascript复制vim /etc/keepalived/check_nacos.sh
#!/bin/bash
network=`ifconfig ens33 |grep -w inet |awk '{print $2}'`
nacos=`netstat -tnlp|grep 8848|wc -l`
if [ "$nacos" -eq 0 ];then
#这里调用消息通知脚本,并配置需要发送的消息
/data/script/nacos.py "主机:$(hostname)--主机IP:$network:nacos服务心跳检测异常,>>> 请登入服务器查看;VIP已切换,请注意"
systemctl stop keepalived.service
fi
消息推送脚本
代码语言:javascript复制vim /data/script/nacos.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
import requests
import json
import sys
import os
headers = {'Content-Type': 'application/json;charset=utf-8'}
api_url = "企业微信机器人或者钉钉机器人的webhook地址"
def msg(text):
json_text= {
"msgtype": "text",
"text": {
"content": text
},
}
print requests.post(api_url,json.dumps(json_text),headers=headers).content
if __name__ == '__main__':
text = sys.argv[1]
msg(text)
安装 pip 和 requests 模块(所有节点都安装)
代码语言:javascript复制curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
授予权限
代码语言:javascript复制chmod x /etc/keepalived/check_nacos.sh /data/script/nacos.py
启动 keepalived 服务(所有节点都启动)
代码语言:javascript复制systemctl enable --now keepalived
通过 VIP 访问 Nacos
代码语言:javascript复制http://192.168.1.100:8848/nacos