使用Ansible实现多节点互备高可用集群配置与管理实践指南

引言

在当今的IT环境中,高可用性(HA)是确保关键业务连续性的关键因素。无论是金融、电信还是其他关键行业,系统的高可用性都是不可或缺的。多节点互备高可用集群通过冗余节点和自动故障转移机制,显著提升了系统的可靠性和稳定性。本文将详细介绍如何使用Ansible这一强大的自动化工具,来实现多节点互备高可用集群的配置与管理。

一、准备工作

1.1 环境概述

在开始之前,我们需要准备以下环境:

  • 操作系统:建议使用Ubuntu 22.04 LTS或openEuler 24.03 LTS。
  • 节点规划:至少包括3个主节点(master)和多个工作节点(worker)。
  • 网络配置:确保所有节点之间网络连通性良好。
1.2 安装Ansible

首先,在管理节点上安装Ansible:

sudo apt update
sudo apt install ansible -y
1.3 配置免密登录

为了方便管理,需要在所有节点上配置免密登录:

  1. 生成SSH密钥:
ssh-keygen -t rsa -b 4096
  1. 将公钥复制到所有节点:
ssh-copy-id user@node1
ssh-copy-id user@node2
# 重复以上命令直到所有节点都配置完毕

二、集群规划与配置

2.1 主机名与IP地址规划

假设我们有以下节点:

  • master1:192.168.152.200
  • master2:192.168.152.201
  • master3:192.168.152.202
  • node1:192.168.152.210
  • node2:192.168.152.211
2.2 修改主机名

在每个节点上修改主机名:

sudo hostnamectl set-hostname master1
# 在其他节点上重复此步骤,修改为对应的主机名
2.3 配置hosts文件

在所有节点的/etc/hosts文件中添加以下内容:

192.168.152.200 master1
192.168.152.201 master2
192.168.152.202 master3
192.168.152.210 node1
192.168.152.211 node2

三、使用Ansible进行集群部署

3.1 创建Ansible配置文件

在管理节点上创建hosts.ini文件,定义节点分组:

[masters]
master1 ansible_host=192.168.152.200
master2 ansible_host=192.168.152.201
master3 ansible_host=192.168.152.202

[workers]
node1 ansible_host=192.168.152.210
node2 ansible_host=192.168.152.211

[all:vars]
ansible_user=root
3.2 编写Ansible Playbook

创建一个名为ha_cluster.yml的Playbook文件,内容如下:

---
- name: Deploy HA Cluster
  hosts: all
  become: yes
  tasks:
    - name: Update apt cache
      apt:
        update_cache: yes

    - name: Install required packages
      apt:
        name:
          - haproxy
          - keepalived
        state: present

    - name: Configure HAProxy
      template:
        src: templates/haproxy.cfg.j2
        dest: /etc/haproxy/haproxy.cfg
      notify:
        - Restart HAProxy

    - name: Configure Keepalived
      template:
        src: templates/keepalived.conf.j2
        dest: /etc/keepalived/keepalived.conf
      notify:
        - Restart Keepalived

  handlers:
    - name: Restart HAProxy
      service:
        name: haproxy
        state: restarted

    - name: Restart Keepalived
      service:
        name: keepalived
        state: restarted
3.3 创建模板文件

templates目录下创建haproxy.cfg.j2keepalived.conf.j2模板文件。

haproxy.cfg.j2

global
    log 127.0.0.1 local0
    maxconn 4096

defaults
    log global
    mode http
    option httplog
    option dontlognull
    retries 3
    timeout connect 5000
    timeout client 50000
    timeout server 50000

frontend http-in
    bind *:80
    default_backend servers

backend servers
    balance roundrobin
    server master1 192.168.152.200:80 check
    server master2 192.168.152.201:80 check
    server master3 192.168.152.202:80 check

keepalived.conf.j2

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        192.168.152.250
    }
}
3.4 执行Playbook

运行以下命令执行Playbook:

ansible-playbook -i hosts.ini ha_cluster.yml

四、验证与测试

4.1 验证服务状态

在所有节点上检查HAProxy和Keepalived服务的状态:

systemctl status haproxy
systemctl status keepalived
4.2 测试故障转移

模拟主节点故障,检查虚拟IP是否成功转移到备用节点:

ip a

五、常见问题与解决方案

5.1 免密登录失败

确保SSH密钥正确分发到所有节点,并检查/etc/hosts文件中的主机名和IP地址配置。

5.2 HAProxy配置错误

检查haproxy.cfg文件中的服务器地址和端口配置是否正确。

5.3 Keepalived无法启动

检查keepalived.conf文件中的虚拟IP地址和网络接口配置。

六、总结

通过本文的实践指南,我们成功使用Ansible实现了多节点互备高可用集群的配置与管理。Ansible的强大自动化能力大大简化了集群部署的复杂度,提高了工作效率。希望本文能为读者在实际项目中部署高可用集群提供有价值的参考。

参考文献

  • Ansible官方文档
  • Kubernetes官方文档
  • 高可用集群技术相关论文