Ansible:一键部署Keepalived高可用集群(待实践)
使用Ansible工具一键部署Keepalived服务
1.需求分析
使用ansible部署keepalived服务的过程中,需要实现:
1.1 多系统支持
根据不同的系统,自动选择对应的安装方式。可通过相关的环境变量结合 when
实现。
1.2 源码安装
考虑到rpm安装的方式会需要依赖一些基础环境,以及版本较低,将采用源码编译的方式进行安装。
1.3 可选版本
为保证适用更多的应用场景,将以环境变量的方式指定版本号,使用时修改变量值为对应版本即可。
1.4 多机支持
支持两个节点以上的集群,以第一个节点作为MASTER
,其余的均作为BACKUP
。
2.编写Ansible Role
2.1 初始化role
创建相关的目录存放对应的yml清单文件。
1 | $ mkdir -p keepalived- install -role/{files,tasks,vars,templates} |
2.2 设置环境变量
在keepalived-install-role/vars/main.yml
文件中设定相关的环境变量,使用时只需要修改值即可。
1 2 3 4 5 6 7 8 9 10 | $ cat keepalived- install -role /vars/main .yml --- #Keepalived版本 keepalived_version: 2.2.7 #安装目录 install_path: /etc/keepalived #VIP地址: virtual_ipaddress: 192.168.2.88 /24 #虚拟路由ID号(主备必须一致),每个实例唯一 virtual_router_id: 216 |
2.3 下载文件
从官网下载源码包,放入keepalived-install-role/files/
目录下。
1 2 3 4 | $ cd keepalived- install -role /files/ $ wget https: //keepalived .org /software/keepalived-2 .2.7. tar .gz $ md5sum keepalived-2.2.7. tar .gz 5f310b66a043a1fb31acf65af15e95bc keepalived-2.2.7. tar .gz |
2.4 编写tasks
在keepalived-install-role/tasks
目录下创建对应的tasks任务文件。
2.41 在main.yml中导入两个tasks文件
1 2 3 4 | $ cat keepalived- install /tasks/main .yml --- - include_tasks: host-init.yml - include_tasks: install -keepalived.yml |
2.42 定义主机初始化任务
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | $ cat keepalived- install /tasks/host-init .yml --- #配置主机环境,如安装依赖包等 - name: "安装依赖包(Debian系统)" when: ansible_os_family == "Debian" apt: name: - build-essential #编译所需的基本工具 - libssl-dev #可能需要的 SSL 库 - libnl-3-dev #libnl 库 - libnl-genl-3-dev #libnl-genl 库 state: present - name: "安装依赖包(CentOS系统)" when: ansible_distribution == "CentOS" yum: name: - gcc - gcc -c++ - make - openssl - openssl-devel - iproute - libnl - libnl-devel - libnfnetlink-devel state: present #设置环境变量 - name: "收集目标主机IP清单" set_fact: target_hosts: "{{ ansible_play_hosts | map('extract', hostvars, 'ansible_host') | list }}" - debug: msg: "{{ target_hosts }}" - name: "生成环境变量(集群列表)" set_fact: nacos_servers: "{{ target_hosts | map('regex_replace', '^(.*)$', '\\1:8848') | join(',') }}" #设定MASTER(第一台host) - name: "设定MASTER(第一台host)" set_fact: master_host: "{{ target_hosts[0] }}" - debug: msg: "MASTER节点为:{{ master_host }}" #查找 internal IP 所在网卡并设置为环境变量 - name: "查找 internal IP 所在网卡" shell: "ip a s to {{ ansible_host }} | awk -F ': ' 'NF > 1 {print $2}'" register: ip_address_result - name: "设置变量" set_fact: network_interface: "{{ ip_address_result.stdout | regex_replace('@.*', '') }}" - debug: msg: "IP对应的网卡为:{{ network_interface }}" |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | $ tree keepalived- install / keepalived- install / ├── files │ ├── keepalived-2.2.7. tar .gz │ └── keepalived.service ├── tasks │ ├── host-init.yml │ ├── install -keepalived.yml │ └── main.yml ├── templates │ └── keepalived.conf.j2 └── vars └── main.yml 4 directories, 7 files |
定义安装install任务 在keepalived-install/tasks/install-keepalived.yml
文件中定义部署keepalived服务的相关任务。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | $ cat keepalived- install /tasks/install-keepalived .yml --- #源码编译安装keepalived #若已经安装,则跳过安装 - name: "检查服务是否安装 <keepalived>" command : which keepalived register: keepalived_check ignore_errors: true - name: "判断服务安装则进行安装操作" when: keepalived_check.rc != 0 block: - name: "创建安装目录 <{{ install_path }}>" file : name: "{{ install_path }}" state: directory - name: "分发安装包" unarchive: src: "keepalived-{{ keepalived_version }}.tar.gz" dest: "{{ install_path }}" - name: "编译并安装Keepalived" shell: cmd: "./configure --prefix=/usr/local/keepalived" chdir: "{{ install_path }}/keepalived-{{ keepalived_version }}" - name: "制作并安装Keepalive" shell: cmd: "make && make install" chdir: "{{ install_path }}/keepalived-{{ keepalived_version }}" - name: "分发配置文件" template: src: keepalived.conf.j2 dest: /etc/keepalived/keepalived .conf - name: "启动服务<keepalived>" systemd: name: keepalived state: started enabled: true daemon_reload: yes |
2.5 定制配置文件模板
基于Jinja2
模板文件,根据变量自动配置MASTER
和BACKUP
节点的配置参数,默认将第一个host
作为MASTER
,其余的均为BACKUP
。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | $ cat keepalived- install /templates/keepalived .conf.j2 ! Configuration File for keepalived global_defs { smtp_server localhost smtp_connect_timeout 30 router_id {{ ansible_host }} vrrp_skip_check_adv_addr vrrp_strict vrrp_garp_interval 0 vrrp_gna_interval 0 } # VRRP 实例定义 vrrp_instance VI_1 { {% if ansible_host == master_host %} state MASTER priority 100 {% else %} state BACKUP priority 80 {% endif %} nopreempt interface {{ network_interface }} virtual_router_id {{ virtual_router_id }} advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { {{ virtual_ipaddress }} } track_script { check_nginx } } #健康检查 vrrp_script check_nginx { script "/etc/keepalived/check_nginx.sh" interval 5 weight -60 fall 2 rise 2 } |
注:相关参数可根据实际业务环境进行调整!
3. 调用role部署任务
在编写上述role完成后,就可以调用roles进行实际的部署应用了。
- 定义hosts 在hosts中定义目标主机有哪些,即安装keepalived的主机。
1 2 3 4 5 6 7 8 9 10 11 | $ cat /etc/ansible/hosts [lidabai] 192.168.2.61 192.168.2.62 192.168.2.63 [lidabai:vars] ansible_ssh_user=root ansible_ssh_pass=1 ansible_ssh_port=22 #ansible_python_interpreter=/usr/bin/python2 |
调用role
1 2 3 4 5 6 | $ cat run-keepalived.yml --- - hosts: lidabai become: yes roles: - keepalived- install |
运行
1 | $ ansible-plabook run-keepalived.yml |
——————————————————————————————————————————————————————————————————————————
无敌小马爱学习
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!