云计算 / 配置中心

Nacos生产集群模式部署

浅时光 · 9月13日 · 2020年 11103次已读

一、Nacos介绍


Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、文章来源(Source):https://www.dqzboy.com服务元数据及流量管理。

Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

Nacos 的关键特性包括:

服务发现和服务健康监测

Nacos 支持基于 DNS 和文章来源(Source):https://www.dqzboy.com基于 RPC 的服务发现。服务提供者使用 原生SDKOpenAPI、或一个独立的Agent TODO注册 Service 后,服务消费者可以使用DNS TODO 或HTTP&API查找和发现服务。

Nacos 提供对服务的实时的健康检查,阻止向不健康的主机或服务实例发送请求。Nacos 支持传输层 (PING 或 TCP)和应用层 (如 HTTP、MySQL、用户自定义)的健康检查。 对于复杂的云环境和网文章来源(Source):https://www.dqzboy.com络拓扑环境中(如 VPC、边缘网络等)服务的健康检查,Nacos 提供了 agent 上报模式和服务端主动检测2种健康检查模式。Nacos 还提供了统一的健康检查仪表盘,帮助您根据健康状态管理服务的可用性及流量。

动态配置服务

动态配置服务可以让您以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置。

动态配置消除了配置变更时重新部署应用和服务的需要,让配置管理变得更加高效和敏捷。

配置中心化管理让实现无状态服务变得更简单,让服务按需弹性扩展变得更容易。

Nacos 提供了一个简洁易用的UI (控制台样例 Demo) 帮助您管理所有的服务和应用的配置。Nacos 还提供包括配置版本跟踪、金丝雀发布、一键回滚配置以及客户端配置更新状态跟踪在内的一系列开箱即用的配置管理特性,帮助您更安全地在生产环境中管理配置变更和降低配置变更带来的风险。

动态 DNS 服务

动态 DNS 服务支持权重路由,让您更容易地实现中间层负载均衡、更灵活的路由策略、流量控制以及数据中心内网的简单DNS解析服务。动态D文章来源(Source):https://www.dqzboy.comNS服务还能让您更容易地实现以 DNS 协议为基础的服务发现,以帮助您消除耦合到厂商私有服务发现 API 上的风险。

Nacos 提供了一些简单的 DNS APIs TODO 帮助您管理服务的关联域名和可用的 IP:PORT 列表

服务及其元数据管理

Nacos 能让您从微服务平台建设的视角管理数据中心的所有服务及元数据,包括管理服务的描述、生命周期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由及安全策略、服务的 SLA 以及最首要的 metrics 统计数据。


二、环境描述


主机名服务器IP部署组件
Nacos-node1192.168.66.15 192.168.66.100(VIP)Nacos1.3.1、JDK1.8、MySQL5.7+、keepalived
Nacos-node2192.168.66.16Nacos1.3.1、JDK1.8、MySQL5.7+、keepalived
Nacos-node3192.168.66.17Nacos1.3.1、JDK1.8、MySQL5.7+、keepalived

官方推荐安装部署方式为:域名 + VIP模式,可读性好,而且换ip方便;这里我们也采用该方式进行搭建部署

Nacos生产集群模式部署-浅时光博客

三、环境初始化


1、配文章来源(Source):https://www.dqzboy.com置主机名

[[email protected] ~]# hostnamectl set-hostname nacos-node1
[[email protected] ~]# hostnamectl set-hostname nacos-node2
[[email protected] ~]# hostnamectl set-hostname nacos-node3

2、配置主机名解析

[[email protected] ~]# vi /etc/hosts
192.168.66.15   nacos-node1
192.168.66.16   nacos-node2
192.168.66.17   nacos-node3
  • node1节点实现ssh免密登入其他节点
[[email protected] ~]# ssh-keygen -t rsa
[[email protected] ~]# ssh-copy-id [email protected]
[[email protected] ~]# ssh-copy-id [email protected]
[[email protected] ~]# ssh-copy-id [email protected]
  • hosts文件传给各节点,实现通过主机名解析
[[email protected] ~]# for i in 192.168.66.{16,17}; do echo ">>> $i";scp /etc/hosts [email protected]$i:/etc/; done

[[email protected] ~]# ssh-copy-id [email protected]
[[email protected] ~]# ssh-copy-id [email protected]
[[email protected] ~]# ssh-copy-id [email protected]

3、关闭防火墙

[[email protected] ~]# for i in 192.168.66.{15..17}; do echo ">>> $i";ssh [email protected]$i "systemctl stop firewalld && systemctl disable firewalld && systemctl status firewalld"; done

4、关闭SELINUX

[[email protected] ~]# for i in 192.168.66.{15..17}; do echo ">>> $i";ssh [email protected]$i "sed -ri 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config"; done

[[email protected] ~]# for i in 192.168.66.{15..17}; do echo ">>> $i";ssh [email protected]$i "setenforce 0 && getenforce"; done

5、安装常用命令

[[email protected] ~]# for i in 192.168.66.{15..17};do echo ">>> $i";ssh [email protected]$i "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";done

[[email protected] ~]# for i in 192.168.66.{15..17};do echo ">>> $i";ssh [email protected]$i "yum install -y epel-release";done

6、配置时间同步

  • node1节点与互联网时间服务器进行同步,其他节点则于node1节点进行时间同步
文章来源(Source):https://www.dqzboy.com
[[email protected] ~]# systemctl start ntpd && systemctl enable ntpd
[[email protected] ~]# vim /etc/chrony.conf
Nacos生产集群模式部署-浅时光博客
  • 启动服务
[[email protected] ~]# systemctl start chronyd.service 
[[email protected] ~]# systemctl enable chronyd.service
[[email protected] ~]# systemctl status chronyd.service
  • 检查主节点时间同步信息
[[email protected] ~]# timedatectl
Nacos生产集群模式部署-浅时光博客
  • 其他节点关闭ntpd服务,我们这里使用chronyd服务
[[email protected] ~]# for i in 192.168.66.{16,17};do echo ">>> $i";ssh [email protected]$i "systemctl stop ntpd && systemctl disable ntpd && systemctl status ntpd";done
  • 登入各个节点服务器进行手动修改chronyd
~]# vim /etc/chrony.conf
server 192.168.66.15 iburst
Nacos生产集群模式部署-浅时光博客
  • 另外2个节点启动服务,在node1节点操作
[[email protected] ~]# for i in 192.168.66.{16,17};do echo ">>> $i";ssh [email protected]$i "systemctl restart chronyd.service && systemctl enable chronyd.service && systemctl status chronyd.service";done
  • 检查时间同步状态 ^* 表示已经同步
[[email protected] ~]# for i in 192.168.66.{16,17};do echo ">>> $i";ssh [email protected]$i "chronyc sources ";done
Nacos生产集群模式部署-浅时光博客

7、所有节点安装JDK

  • 安装方式通过RPM方式安装,版本1.8
rpm -ivh jdk-8u231-linux-x64.rpm

四、MySQL主从


官方建议数据库最好是主备模式,这里我就先搭建个一主多从的模式;由于我这边资源问题,MySQL就与Nacos安装在一块

1、下载安装

  • 安装方式为RPM包安装,3台机器都需要进行安装部署,所需安装包如下:
  • MySQL官网地址:https://downloads.mysql.com/archives/community/
  • mysql-community-servermysql-community-clientmysql-community-commonmysql-community-libsmysql-community-develmysql-community-libs-compat
  • 安装服务,所有机器执行
#卸载掉系统默认的mariadb
[[email protected] ~]# rpm -qa|grep mariadb|xargs rpm -e --nodeps

[[email protected] ~]# mkdir -p /opt/soft && cd /opt/soft
[[email protected] soft]# yum install mysql-community-*
  • 启动MySQL服务(三节点都要启动)
[[email protected] ~]# systemctl start mysqld
[[email protected] ~]# systemctl enable mysqld
[[email protected] ~]# systemctl status mysqld
  • 重置ROOT密码(三节点都需要)
[[email protected] ~]# cat /var/log/mysqld.log |grep password
[[email protected] ~]# mysql -uroot -p
Enter password:

#修改密码策略
mysql> set global validate_password_policy=0;
Query OK, 0 rows affected (0.00 sec)

mysql> set global validate_password_mixed_case_count=0;
Query OK, 0 rows affected (0.00 sec)

mysql> set global validate_password_number_count=3;
Query OK, 0 rows affected (0.00 sec)

mysql> set global validate_password_special_char_count=0;
Query OK, 0 rows affected (0.00 sec)

mysql> set global validate_password_length=3;

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'dqz123456';

2、修改配置

  • 修改MySQL配置(三节点都需要修改)
#------------node1节点------------#
[[email protected] ~]# vim /etc/my.cnf
#添加如下信息
#gtid
server-id = 1
gtid-mode = ON
enforce-gtid-consistency = ON
log-slave-updates = ON
#binlog
expire_logs_days = 30
max_binlog_size  = 100M
log_bin = /data/mysql/mysql-bin
binlog-format = Row
#elay log
skip_slave_start= ON

#------------node2节点------------#
[[email protected] ~]# vim /etc/my.cnf
#添加如下信息
#gtid
server-id = 2
gtid-mode = ON
enforce-gtid-consistency = ON
log-slave-updates = ON
#binlog
expire_logs_days = 30
max_binlog_size  = 100M
log_bin = /data/mysql/mysql-bin
binlog-format = Row
#elay log
skip_slave_start= ON

#------------node3节点------------#
[[email protected] ~]# vim /etc/my.cnf
#添加如下信息
#gtid
server-id = 3
gtid-mode = ON
enforce-gtid-consistency = ON
log-slave-updates = ON
#binlog
expire_logs_days = 30
max_binlog_size  = 100M
log_bin = /data/mysql/mysql-bin
binlog-format = Row
#elay log
skip_slave_start= ON


#所有节点创建binlog日志存储目录并授权
mkdir -p /data/mysql
chown -R mysql. /data/

#所有节点重启MySQL服务
systemctl restart mysqld

3、配置主从

3.1、创建同步账号

  • 在主库执行;基于 GTID 的复制会自动地将没有在从库执行过的事务重放,所以不要在其它从库上建立相同的账号。 如果建立了相同的账户,有可能造成复制链路的错误。
[[email protected] ~]# mysql -uroot -p

#修改密码策略
mysql> set global validate_password_policy=0;
mysql> set global validate_password_mixed_case_count=0;
mysql> set global validate_password_number_count=3;
mysql> set global validate_password_special_char_count=0;
mysql> set global validate_password_length=3;


mysql> grant replication slave on *.* to 'slave'@'192.168.66.%' identified by 'dqz123456';
mysql> flush privileges;
  • 查看主库与从库的GTID是否开启
mysql> show variables like "%gtid%";
+----------------------------------+-----------+
| Variable_name                    | Value     |
+----------------------------------+-----------+
| binlog_gtid_simple_recovery      | ON        |
| enforce_gtid_consistency         | ON        |
| gtid_executed_compression_period | 1000      |
| gtid_mode                        | ON        |
| gtid_next                        | AUTOMATIC |
| gtid_owned                       |           |
| gtid_purged                      |           |
| session_track_gtids              | OFF       |
+----------------------------------+-----------+
8 rows in set (0.00 sec)

mysql> show variables like '%gtid_next%';
+---------------+-----------+
| Variable_name | Value     |
+---------------+-----------+
| gtid_next     | AUTOMATIC |
+---------------+-----------+
1 row in set (0.00 sec)

3.2、主库查看状态

mysql> show master status;
+------------------+----------+--------------+------------------+------------------------------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                        |
+------------------+----------+--------------+------------------+------------------------------------------+
| mysql-bin.000001 |      601 |              |                  | a4c5734e-d16e-11ea-b7c1-000c29b0226c:1-2 |
+------------------+----------+--------------+------------------+------------------------------------------+
1 row in set (0.00 sec)

3.3、从库链接主库

  • 在2台从节点执行
[[email protected] ~]# mysql -uroot -p
Enter password:

mysql> CHANGE MASTER TO MASTER_HOST='192.168.66.15',MASTER_USER='slave',MASTER_PASSWORD='dqz123456',MASTER_AUTO_POSITION=1;

3.4、从库启动复制

mysql> START SLAVE;

3.5、检查SLAVE状态

mysql> SHOW SLAVE STATUS\G
  • 确认 Slave_IO_Running 和 Slave_SQL_Running 两个参数都为 Yes 状态
Nacos生产集群模式部署-浅时光博客

3.6、主库检查从库信息

mysql> SHOW SLAVE HOSTS;
Nacos生产集群模式部署-浅时光博客

3.7、检查GTID复制

  • 在主库创建一个库,查看从库是否复制过去
#主库创建新库
mysql> CREATE DATABASE TESTDB;

#从库查看复制情况
mysql> SHOW DATABASES;
Nacos生产集群模式部署-浅时光博客

五、部署Nacos


1、下载Nacos

[[email protected] ~]# cd /opt/soft/
[[email protected] soft]# unzip nacos-server-1.3.1.zip -d /usr/local/

2、修改配置

  • 所有nacos节点都需要配置;
  • nacos 的默认服务端口是 8848
[[email protected] soft]# cd /usr/local/nacos/conf

[[email protected] conf]# vim cluster.conf
# ip:port
192.168.66.15:8848
192.168.66.16:8848
192.168.66.17:8848

3、数据源配置

  • 创建Nacos连接用户和库,在主库执行即可;
  • 注意这里的库名,后面配置nacos连接数据库时需要更改为此数据库
[[email protected] conf]# mysql -uroot -p
Enter password:

mysql> CREATE DATABASE `nacos_config` CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

mysql> CREATE USER 'nacos'@'%' IDENTIFIED BY 'dqz123456';

mysql> grant all privileges on nacos_config.* to [email protected]'%';

mysql> flush privileges;
  • 导入数据;sql文件存储在nacos安装路径下的conf目录中;只需在主库执行即可
mysql> use nacos_config
mysql> source /usr/local/nacos/conf/nacos-mysql.sql;

所有nacos节点修改nacos连接数据库的配置文件;

  • db.num 为数据库实例数量
  • db.url.0 指定文章来源(Source):https://www.dqzboy.com不同的数据库连接
  • 如果有多个数据库实例通过 db.url.0、db.url.1… 指定不同的数据库连接
[[email protected] ~]# cd /usr/local/nacos/conf/
[[email protected] conf]# vim application.properties
Nacos生产集群模式部署-浅时光博客
#拷贝给其他节点
[[email protected] conf]# scp application.properties [email protected]:/usr/local/nacos/conf/

[[email protected] conf]# scp application.properties [email protected]:/usr/local/nacos/conf/

4、启动Nacos

  • 所有节点执行以下命令启动
[[email protected] ~]# cd /usr/local/nacos/bin/
[[email protected] bin]# ./startup.sh
  • 启动日志查看
tailf /usr/local/nacos/logs/start.out

5、访问Nacos

Nacos生产集群模式部署-浅时光博客
Nacos生产集群模式部署-浅时光博客

六、安装keepalived


这里我们使用keepalived来实现nacos的高可用,通过keepalived进行虚拟IP并绑定Nacos真实地址

详细的Keepalived安装部署和配置详解,请点击下面链接中的文章进行阅读:

Keepalived源码安装与实践

文章来源(Source):https://www.dqzboy.com 2020-2-25 0

1、编译安装

[[email protected] ~]# cd /opt/soft/
[[email protected] soft]# wget https://www.keepalived.org/software/keepalived-2.0.20.tar.gz


#所有节点都需要安装依赖
[[email protected] script]# for i in 192.168.66.{15..17}; do echo ">>> $i"; ssh [email protected]$i "yum -y install libnl libnl-devel libnfnetlink-devel openssl-devel"; done

[[email protected] soft]# tar -xf keepalived-2.0.20.tar.gz
[[email protected] soft]# cd keepalived-2.0.20
[[email protected] keepalived-2.0.20]# ./configure --prefix=/usr/local/keepalived

[[email protected] keepalived-2.0.20]# make && make install

2、修改配置

[[email protected] ~]# cd /usr/local/keepalived/etc/keepalived/
[[email protected] keepalived]# cp keepalived.conf{,_bak}
[[email protected] keepalived]# vim keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
     [email protected]
     [email protected]
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id nacos-node1		//唯一值,一般为所在服务器主机名
   vrrp_skip_check_adv_addr
   # vrrp_strict         //注释该参数
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

#注意此处添加nacos服务健康检查
vrrp_script check_nacos {
    script "/bin/bash /script/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.66.100/24	#VIP地址,虚拟IP
    }
    track_script {   #调用脚本
       check_nacos   #这里的名称必须与vrrp_scrip写的保证一致
    }
}
  • keepaliv文章来源(Source):https://www.dqzboy.comed默认会读取/etc/keepalived/keepalived.conf配置文件,所有需要将配置文件移至该目录下
[[email protected] ~]# mkdir /etc/keepalived/
[[email protected] ~]# cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/

3、编写脚本

  • 编写nacos健康检查脚本
  • 编写nacos健康状态消息推送脚本
  • 注意:脚本存储目录跟名称要与上面配置文件中配置的检测脚本一致

3.1:健康检测脚本

[[email protected] ~]# mkdir /script
[[email protected] ~]# vim /script/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
    #这里调用消息通知脚本,并配置需要发送的消息
    /script/qywx_nacos.py "主机:$(hostname)--主机IP:$network:nacos服务心跳检测异常,>>> 请登入服务器查看;VIP已切换,请注意"
    systemctl stop keepalived.service
fi

3.2:消息推送脚本

[[email protected] ~]# vim /script/qywx_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模块,所有节点安装
[[email protected] ~]# curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py

[[email protected] ~]# for i in 192.168.66.{16,17}; do echo ">>> $i";scp /root/get-pip.py [email protected]$i:/root/; done

[[email protected] ~]# for i in 192.168.66.{15..17}; do echo ">>> $i"; ssh [email protected]$i python /root/get-pip.py; done

[[email protected] ~]# for i in 192.168.66.{15..17}; do echo ">>> $i"; ssh [email protected]$i pip install requests; done

3.3:授予执行权限

[[email protected] ~]# chmod +x /script/check_nacos.sh /script/qywx_nacos.py
  • 脚本测试:将nacos停止后查看机器人是否收到推送消息
Nacos生产集群模式部署-浅时光博客

4、拷贝文件

[[email protected] ~]# for i in 192.168.66.{16,17}; do echo ">>> $i"; scp -r /usr/local/keepalived [email protected]$i:/usr/local/ && scp -r /script [email protected]$i:/ && scp -r /etc/keepalived [email protected]$i:/etc/ && scp /usr/lib/systemd/system/keepalived.service [email protected]$i:/usr/lib/systemd/system/; done

5、备修改配置

  • 登入到另外2个备节点进行修改配置
  • 注意:三节点的router_id一定不要重复最好以当前主机名;virtual_router_id一定要一致;priority值依次为15节点MASTER(100)—16节点BACKUP(90)—17节点BACKUP(80)

5.1:Nacos-node2

[[email protected] ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
     [email protected]
     [email protected]
     [email protected]
   }
   notification_email_from [email protected]
   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 /script/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.66.100/24
    }
    track_script {
       check_nacos
    }
}

5.2:Nacos-node3

[[email protected] ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
     [email protected]
     [email protected]
     [email protected]
   }
   notification_email_from [email protected]
   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 /script/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.66.100/24
    }
    track_script {
       check_nacos
    }
}

6、启动服务

[[email protected] ~]# for i in 192.168.66.{15..17}; do echo ">>> $i"; ssh [email protected]$i systemctl daemon-reload && systemctl start keepalived && systemctl status keepalived|grep Active; done

7、查看当前VIP

[[email protected] ~]# for i in 192.168.66.{15..17}; do echo ">>> $i"; ssh [email protected]$i "ip a show ens33"; done
Nacos生产集群模式部署-浅时光博客
  • 可以看到当前VIP在15这台主机上

8、通过VIP进行访问

浏览器输入VIP地址+端口进行访问:http://192.168.66.100:8848/nacos/#/login
Nacos生产集群模式部署-浅时光博客
Nacos生产集群模式部署-浅时光博客
0 条回应
    本站已安全运行: | 耗时 0.498 秒 | 查询 115 次 | 内存 22.42 MB