上一篇进行了手动安装etcd集群,此篇利用自动化工具ansible为三个节点构建etcd集群

环境:

  master:192.168.101.14,node1:192.168.101.15,node2:192.168.101.19

1、首先查看该role(etcd集群)的目录树结构:

[root@master ansible]# tree
.
├── ansible.cfg
├── hosts
├── roles
│   └── etcd
│   ├── files
│   │   ├── etcd
│   │   └── etcdctl
│   ├── handlers
│   ├── meta
│   ├── tasks
│   │   └── main.yaml
│   ├── templates
│   │   └── etcd.service.j2
│   └── vars
└── work_dir
├── install_etcd_cluster.retry
└── install_etcd_cluster.yaml

首先在hosts文件中定义节点:

[root@master ansible]# egrep -v "^#|^$" hosts
[etcd_cluster]
192.168.101.14
192.168.101.15
192.168.101.19

在roles目录下面创建了etcd这个角色,角色目录下面为个节点提供了命令文件etcd、etcdctl,然后查看tasks下面的main.yaml:

[root@master ansible]# cat roles/etcd/tasks/main.yaml
- name: copy etcd to nodes
copy:
src: ../files/etcd
dest: /usr/local/bin/etcd
mode: - name: copy etcdctl to nodes
copy:
src: ../files/etcdctl
dest: /usr/local/bin/etcdctl
mode: - name: create data directory for etcd
file:
path: /var/lib/etcd
state: directory - name: provide etcd.service to nodes
template:
src: etcd.service.j2
dest: /usr/lib/systemd/system/etcd.service
register: result - name: start etcd service
systemd:
daemon_reload: true
name: etcd
state: started
enabled: true
when: result|success

前面三个任务是copy命令文件到各节点,和在各节点上创建数据目录,在下面的任务中定义了template,首先查看template下面的j2文件:

[root@master ansible]# cat roles/etcd/templates/etcd.service.j2
[Unit]
Description=etcd server
After=network.target
After=network-online.target
Wants=network-online.target [Service]
Type=notify
WorkingDirectory=/var/lib/etcd/
EnvironmentFile=-/etc/etcd/etcd.conf
ExecStart=/usr/local/bin/etcd --name {{ ansible_hostname }} --initial-advertise-peer-urls http://{{ ansible_ens33.ipv4.address }}:2380 --listen-peer-urls http://{{ ansible_ens33.ipv4.address }}:2380 --listen-client-urls http://{{ ansible_ens33.ipv4.address }}:2379,http://127.0.0.1:2379 --advertise-client-urls http://{{ ansible_ens33.ipv4.address }}:2379 --initial-cluster-token etcd-cluster-1 --initial-cluster master=http://192.168.101.14:2380,node1=http://192.168.101.15:2380,node2=http://192.168.101.19:2380 --initial-cluster-state new --data-dir=/var/lib/etcd Restart=on-failure
RestartSec=
LimitNOFILE= [Install]
WantedBy=multi-user.target

可以看见上面的j2文件里面运用了变量{{ ansible_hostname }}和{{ ansible_ens33.ipv4.address }},这两个变量可以根据模块setup进行获得(获取各节点的hostname和ip地址)

在运用了template模板下面,在j2文件中定义了变量,于是ansible将该j2文件分发给各节点上,然后各节点根据自己的hostname和ip进行相应修改,于是创建的配置文件与自己的hostname和ip是一一对应的

在配置文件中使用变量可以使用template模块,创建对应的j2文件

[root@master ansible]# cat work_dir/install_etcd_cluster.yaml
- hosts: etcd_cluster
remote_user: root
roles:
- etcd
[root@master ansible]# ansible-playbook work_dir/install_etcd_cluster.yaml 

PLAY [etcd_cluster] ***********************************************************************************************************************************

TASK [Gathering Facts] ********************************************************************************************************************************
ok: [192.168.101.19]
ok: [192.168.101.14]
ok: [192.168.101.15] TASK [etcd : copy etcd to nodes] *********************************************************************************************************************
ok: [192.168.101.15]
ok: [192.168.101.19]
ok: [192.168.101.14] TASK [etcd : copy etcdctl to nodes] *******************************************************************************************************************
ok: [192.168.101.15]
ok: [192.168.101.19]
ok: [192.168.101.14] TASK [etcd : create data directory for etcd] **********************************************************************************************************
ok: [192.168.101.15]
ok: [192.168.101.19]
ok: [192.168.101.14] TASK [etcd : provide etcd.service to nodes] ***********************************************************************************************************
ok: [192.168.101.19]
ok: [192.168.101.15]
ok: [192.168.101.14] TASK [etcd : start etcd service] **********************************************************************************************************************
changed: [192.168.101.15]
changed: [192.168.101.19]
changed: [192.168.101.14] PLAY RECAP ********************************************************************************************************************************************
192.168.101.14 : ok= changed= unreachable= failed=
192.168.101.15 : ok= changed= unreachable= failed=
192.168.101.19 : ok= changed= unreachable= failed=

执行完成后,在任意节点上查看member列表:

[root@master ~]# etcdctl member list
192d36c71643c39d: name=node2 peerURLs=http://192.168.101.19:2380 clientURLs=http://192.168.101.19:2379 isLeader=false
5f3835545a5f41e4: name=master peerURLs=http://192.168.101.14:2380 clientURLs=http://192.168.101.14:2379 isLeader=false
77c1ac60c5100363: name=node1 peerURLs=http://192.168.101.15:2380 clientURLs=http://192.168.101.15:2379 isLeader=true

验证集群的监控状态:

[root@master ~]# etcdctl cluster-health
member 192d36c71643c39d is healthy: got healthy result from http://192.168.101.19:2379
member 5f3835545a5f41e4 is healthy: got healthy result from http://192.168.101.14:2379
member 77c1ac60c5100363 is healthy: got healthy result from http://192.168.101.15:2379
cluster is healthy

于是etcd集群基于ansible的无TSL认证的搭建成功完成

附上当配置文件change之后触发handler:

[root@master ansible]# cat roles/etcd/handlers/main.yaml
- name: restart etcd
systemd:
name: etcd
state: restarted
[root@master ansible]# cat roles/etcd/tasks/main.yaml
- name: copy etcd to nodes
copy:
src: ../files/etcd
dest: /usr/local/bin/etcd
mode: - name: copy etcdctl to nodes
copy:
src: ../files/etcdctl
dest: /usr/local/bin/etcdctl
mode: - name: create data directory for etcd
file:
path: /var/lib/etcd
state: directory - name: provide etcd.service to nodes
template:
src: etcd.service.j2
dest: /usr/lib/systemd/system/etcd.service
register: result - name: start etcd service
systemd:
daemon_reload: true
name: etcd
state: started
enabled: true
when: result|success - name: provide configfile changed to etcd
template:
src: etcd.service_https_auto.j2
dest: /usr/lib/systemd/system/etcd.service
notify: restart etcd

改变后的配置文件:

[root@master ansible]# cat roles/etcd/templates/etcd.service_https_auto.j2
[Unit]
Description=etcd server
After=network.target
After=network-online.target
Wants=network-online.target [Service]
Type=notify
WorkingDirectory=/var/lib/etcd/
EnvironmentFile=-/etc/etcd/etcd.conf
ExecStart=/usr/local/bin/etcd --name {{ ansible_hostname }} --auto-tls --peer-auto-tls --initial-advertise-peer-urls https://{{ ansible_ens33.ipv4.address }}:2380 --listen-peer-urls https://{{ ansible_ens33.ipv4.address }}:2380 --listen-client-urls https://{{ ansible_ens33.ipv4.address }}:2379,https://127.0.0.1:2379 --advertise-client-urls https://{{ ansible_ens33.ipv4.address }}:2379 --initial-cluster-token etcd-cluster-1 --initial-cluster master=https://192.168.101.14:2380,node1=https://192.168.101.15:2380,node2=https://192.168.101.19:2380 --initial-cluster-state new --data-dir=/var/lib/etcd Restart=on-failure
RestartSec=
LimitNOFILE= [Install]
WantedBy=multi-user.target

利用ansible进行自动化构建etcd集群的更多相关文章

  1. Kubernetes-3.3:ETCD集群搭建及使用(https认证+数据备份恢复)

    etcd集群搭建 环境介绍 基于CentOS Linux release 7.9.2009 (Core) ip hostname role 172.17.0.4 cd782d0a790b etcd1 ...

  2. [k8s]kubespray(ansible)自动化安装k8s集群

    kubespray(ansible)自动化安装k8s集群 https://github.com/kubernetes-incubator/kubespray https://kubernetes.io ...

  3. Ansible自动化部署K8S集群

    Ansible自动化部署K8S集群 1.1 Ansible介绍 Ansible是一种IT自动化工具.它可以配置系统,部署软件以及协调更高级的IT任务,例如持续部署,滚动更新.Ansible适用于管理企 ...

  4. 学习Hadoop+Spark大数据巨量分析与机器学习整合开发-windows利用虚拟机实现模拟多节点集群构建

    记录学习<Hadoop+Spark大数据巨量分析与机器学习整合开发>这本书. 第五章 Hadoop Multi Node Cluster windows利用虚拟机实现模拟多节点集群构建 5 ...

  5. [自动化]基于kolla-ceph的自动化部署ceph集群

    kolla-ceph来源: 项目中的部分代码来自于kolla和kolla-ansible kolla-ceph的介绍: 1.镜像的构建很方便, 基于容器的方式部署,创建.删除方便 2.kolla-ce ...

  6. [自动化]基于kolla的自动化部署ceph集群

    kolla-ceph来源: 项目中的部分代码来自于kolla和kolla-ansible kolla-ceph的介绍: 1.镜像的构建很方便, 基于容器的方式部署,创建.删除方便 2.kolla-ce ...

  7. ​在Docker中部署GreatSQL并构建MGR集群

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 为了方面社区用户体验GreatSQL,我们同时还提供Docker镜像,本文详细介绍如何在Docker中部署GreatSQL ...

  8. windows+nginx+iis+redis+Task.MainForm构建分布式架构 之 (nginx+iis构建服务集群)

    本次要分享的是利用windows+nginx+iis+redis+Task.MainForm组建分布式架构,由标题就能看出此内容不是一篇分享文章能说完的,所以我打算分几篇分享文章来讲解,一步一步实现分 ...

  9. Centos7下Etcd集群搭建

    一.简介 "A highly-available key value store for shared configuration and service discovery." ...

随机推荐

  1. MyBatis——Mapper XML 文件

    Mapper XML 文件 MyBatis 的真正强大在于它的映射语句,也是它的魔力所在.由于它的异常强大,映射器的 XML 文件就显得相对简单.如果拿它跟具有相同功能的 JDBC 代码进行对比,你会 ...

  2. Ubuntu 如何更改用户密码

    你需要为第一个帐户创建一个密码.这可以用 passwd 命令来完成. 系统会提示输入你的旧密码一次,输入你的新密码两次.用 root 用户更改用户 paul 的密码[root@bigboy root] ...

  3. Fatal error Using $this when not in object context in

    大致意思是 $this 没有上下文,原因是没有对此类进行实例化. 出现此错误的原因是:在FileCommand.php中使用 $this->方法/属性. $this 不是不可以用,而是要看情况用 ...

  4. C++,一些常用的知识点

    用typedef定义数组.指针.结构等类型将带来很大的方便,不仅使程序书写简单而且使意义更为明确,因而增强了可读 性. C++中是用关键字typedef定义一个标识符来代表一种数据类型,该标识符可以象 ...

  5. Java中的文件和流相关知识

    1. File File类可以使用文件路径字符串来创建File实例,该文件路径可以是绝对路径或相对路径 File类的list()方法中可以接收一个FilenameFilter参数,通过该参数可以只列出 ...

  6. talib 中文文档(九):Volume Indicators 成交量指标

    Volume Indicators 成交量指标 AD - Chaikin A/D Line 量价指标 函数名:AD 名称:Chaikin A/D Line 累积/派发线(Accumulation/Di ...

  7. Spongebob and Squares---cf599D(数学公式1 + (1+2) + (1+2+3) +....)

    题目链接:http://codeforces.com/contest/599/problem/D 一个3×5(m×n)的长方形,里面包含15个边长为1的正方形,有8个边长为2的正方形,有3个边长为3的 ...

  8. 洛谷P1858 多人背包 多人背包板子题/多人背包学习笔记

    ,,,本来自以为,我dp学得还挺好的 然后今天一考发现都不会啊QAQ 连最基础的知识点都不清楚啊QAQ 所以就来写个题解嘛! 先放下板子题 其实我jio得,这题只要大概了解方法就不是很难鸭,,,毕竟是 ...

  9. Day02 html回顾和CSS介绍

    昨天内容回顾     1.html的操作思想         ** 使用标签把要操作的数据包起来,通过修改标签的属性值来实现标签内数据样式的变化         *** <font size=& ...

  10. POJ -1062 昂贵的聘礼(前向星 &amp;&amp; SPFA)

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u013497151/article/details/30299671 题目链接:id=1062&qu ...