Nacos集群部署

2024-08-07 13:46:07 浏览数 (2)

介绍

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

0 人点赞