当前位置: 首页 > news >正文

如何使用Ansible一键部署Nacos集群?

使用ansible完成Nacos集群一键部署

利用ansible实现3节点nacos集群一键部署。

hosts文件定义

[root@localhost ansible]# cat inventory/hosts 
[all:vars]
# ansible_ssh_pass: 主机密码
# ansible_user: 主机账号ansible_become=true
ansible_ssh_pass=123456
ansible_ssh_user=weihu
ansible_become_pass=123456
ansible_become_user=root
ansible_become_method=sudo[nacos]
192.168.10.150 nacos_db_init=true
192.168.10.151
192.168.10.152

全局变量文件定义

[root@localhost ansible]# cat inventory/all.yml 
all:vars:     mysql_nacos_host: "192.168.10.128"mysql_nacos_port: "3306"mysql_nacos_db: "nacos"mysql_nacos_user: "nacos"mysql_nacos_passwd: "Rb992334%"

systemd服务配置文件定义

[root@ansible ansible]# cat roles/nacos/files/nacos
cat: roles/nacos/files/nacos: No such file or directory
[root@ansible ansible]# cat roles/nacos/files/nacos
nacos-server-2.5.0.zip  nacos.service           
[root@ansible ansible]# cat roles/nacos/files/nacos.service 
[Unit]
Description=nacos
After=network.target[Service]
Environment="JAVA_HOME=/usr/local/jdk1.8.0_202"
Type=forking
ExecStart=/opt/nacos/bin/startup.sh
ExecReload=/opt/nacos/bin/shutdown.sh
ExecStop=/opt/nacos/bin/shutdown.sh[Install]
WantedBy=multi-user.target

集群配置文件定义

[root@localhost ansible]# cat roles/nacos/templates/cluster.conf 
# ip:port
{{ play_hosts[0] }}:8848
{{ play_hosts[1] }}:8848
{{ play_hosts[2] }}:8848

application.properties 文件定义

主要就是增加支持MySQL数据源配置,添加MySQL数据源的url、用户名和密码。

[root@localhost ansible]# cat roles/nacos/templates/application.properties 
......spring.sql.init.platform=mysql### Count of DB:db.num=1### Connect URL of DB:db.url.0=jdbc:mysql://{{ mysql_nacos_host }}:{{ mysql_nacos_port }}/{{ mysql_nacos_db }}?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghaidb.user.0={{ mysql_nacos_user }}db.password.0={{ mysql_nacos_passwd }}
......

数据库环境初始化配置

nacos搭建所需的MySQL数据库环境准备,数据库文件初始化

[root@localhost ansible]# cat roles/nacos/tasks/nacos_db_init.yml 
---
- block:- name: Create Nacos databaseshell: |mysql -h{{ mysql_nacos_host }} -p{{ mysql_nacos_port }} -u{{ mysql_user }} -p{{ mysql_passwd }} -e "CREATE DATABASE IF NOT EXISTS {{ mysql_nacos_db }};"- name: Create Nacos usershell: |mysql -h{{ mysql_nacos_host }} -p{{ mysql_nacos_port }} -u{{ mysql_user }} -p{{ mysql_passwd }} -e "CREATE USER '{{ mysql_nacos_user }}'@'%' IDENTIFIED BY '{{ mysql_nacos_passwd }}';"- name: Grant all privileges on Nacos database to Nacos usershell: |mysql -h{{ mysql_nacos_host }} -p{{ mysql_nacos_port }} -u{{ mysql_user }} -p{{ mysql_passwd }} -e "GRANT ALL PRIVILEGES ON {{ mysql_nacos_db }}.* TO '{{ mysql_nacos_user }}'@'%';"- name: Flush privileges to apply changesshell: |mysql -h{{ mysql_nacos_host }} -p{{ mysql_nacos_port }} -u{{ mysql_user }} -p{{ mysql_passwd }} -e "FLUSH PRIVILEGES;"- name: Copy SQL schema file to target machinecopy:src: mysql-schema.sqldest: /tmp/mode: '0644'- name: Import Nacos schema SQL fileshell: |mysql -h{{ mysql_nacos_host }} -p{{ mysql_nacos_port }} -u{{ mysql_user }} -p{{ mysql_passwd }} {{ mysql_nacos_db }} < /tmp/mysql-schema.sqlwhen: nacos_db_init is defined

Nacos集群环境部署安装

[root@localhost ansible]# cat roles/nacos/tasks/install.yml
---
- name: 下发nacos安装包到/opt目录copy:src: nacos-server-2.5.0.zipdest: /opt/- name: 解压nacos安装包到/opt目录unarchive:src: /opt/nacos-server-2.5.0.zipdest: /optremote_src: yes- name: 下发集群配置文件cluster.conftemplate:src: cluster.confdest: /opt/nacos/conf/mode: 0644- name: 下发配置文件application.propertiestemplate:src: application.propertiesdest: /opt/nacos/conf/mode: 0644- name: 下发systemd配置文件copy:src: nacos.service  dest: /usr/lib/systemd/system/mode: 0600- name: 配置nacos开机自启动systemd: name: nacosenabled: yesdaemon_reload: yes- import_tasks: start.yml

脚本执行

#nacos搭建所需的MySQL数据库环境准备
ansible-playbook -i inventory/ -e operation=nacos_db_init nacos.yml
#3节点Nacos集群环境部署
ansible-playbook -i inventory/ -e operation=install nacos.yml

配置检查

#针对nacos集群,进行服务的启停,节点状态检查
ansible-playbook -i inventory/ -e operation=start|stop|status nacos.yml
http://www.dtcms.com/a/291545.html

相关文章:

  • Sentinel-2 卫星 轨道编号及数据下载
  • 影刀 RPA:批量修改 Word 文档格式,高效便捷省时省力
  • Unity 渲染管线详解与实战分析
  • ANSYS 2025 R1软件下载及安装教程|附安装文件
  • 数据结构之克鲁斯卡尔算法
  • GeoTools 自定义坐标系
  • React基础(1)
  • RS485和Modbus
  • Python 基础语法与数据类型(十五) - 异常处理
  • 把sudo搞坏了怎么修复:报错sudo: /etc/sudo.conf is owned by uid 1000, should be 0
  • 小孙学变频学习笔记(十一)关于V/F曲线的讨论
  • vue3+element-plus,el-autocomplete远程搜索,解决下拉框闪一下的问题
  • 概率论与数理统计(八)
  • Java IO 流详解:从基础到实战,彻底掌握输入输出编程
  • 自定义命令行解释器shell
  • Android开发中Crash治理方案
  • C++中的detach
  • Python打卡Day20 常见的特征筛选算法
  • C 语言的指针复习笔记
  • 圆柱电池自动分选机:全流程自动化检测的革新之路
  • 大模型中的Actor-Critic机制
  • 嵌入式学习笔记--MCU阶段--DAY08总结
  • 【Java基础03】Java变量2
  • seata at使用
  • 自然语言推理技术全景图:从基准数据集到BERT革命
  • 设备虚拟化技术-IRF
  • 利用DeepSeek编写批量输出多个主机的磁盘状况的脚本
  • 携“养鲜”魔法赴中卫,容声冰箱让石头缝里的鲜甜走得更远
  • 前端之学习后端java小白(一)之SDKMAN及helloword
  • EcoVadis评估:为企业带来的多重价值与竞争优势