如何使用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