当前位置: 首页 > 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.lryc.cn/news/594920.html

相关文章:

  • Android 蓝牙通讯全解析:从基础到实战
  • 【STM32】485接口原理
  • 元图 CAD:PDF 与 CAD 格式互转的完美解决方案
  • 部署 Zabbix 企业级分布式监控
  • WPF 初始界面启动时播放背景音乐
  • 合并pdf工具下载
  • Redis进阶--缓存
  • 如何使用python网络爬虫批量获取公共资源数据
  • 微软CEO Satya Nadella提出AI重构法则:从范式跃迁到社会盈余
  • 本地生活服务 app 同城信息发布系统搭建
  • delphi disqlite3 操作sqlite
  • C# 计算梯形面积和周长的程序(Program to calculate area and perimeter of Trapezium)
  • 在Windows Server 2012 R2中安装与配置IIS服务并部署mssql靶机教程
  • 【世纪龙科技】新能源汽车概论-汽车教学数字课程资源
  • 如何编写假设和约束---SRS软件需求规格指南系列
  • 概率论与数理统计(八)
  • 【跨国数仓迁移最佳实践2】MaxCompute SQL执行引擎对复杂类型处理全面重构,保障客户从BigQuery平滑迁移
  • java和ptyhon对比
  • C# Lambdab表达式 Var 类
  • PyQt5—QInputDialog 学习笔记
  • Iridium Certus 9704 卫星物联网开发套件
  • uniapp app pdf.js报错:Uncaught SyntaxError:Unexpected token ‘{‘
  • UART串口
  • 学习日志7.21
  • QT6 源,七章对话框与多窗体(6) 颜色对话框 QColorDialog :本类的属性,信号函数,静态成员函数,以及源代码
  • 使用AI把普通的条形柱状图,丰富成“好看高大上”的条形柱状图
  • Three.js实现银河流光粒子星空特效原理与实践
  • 基于ECharts的电商销售可视化系统(数据预测、WebsSocket实时聊天、ECharts图形化分析、缓存)
  • 【LINUX操作系统】搭建web网络服务器
  • Softhub软件下载站实战开发(二十):Docker部署全攻略