上一篇进行了手动安装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. Android项目结构介绍

    src/存放Java源代码gen/中存放系统自动生成的配置文件Android 4.4.2下包含android.jar文件,这是一个Java归档文件,其中包含构建应用程序所需的所有的Android SD ...

  2. poj_3579 二分法

    题目大意 给定N个数,这些数字两两求差构成C(N,2)(即N*(N-1)/2)个数值,求这C(N,2)个数的中位数.N <= 100000. 题目分析 根据数据规模N最大为100000,可知不能 ...

  3. scss的安装使用

    Ruby的安装 如果是Window系统,请打开:http://rubyinstaller.org/downloads/ ,下载当前稳定版本的exe文件.界面如下所示: Step(2): 接下来,在系统 ...

  4. ios UITableView默认选中第一行

    NSIndexPath *ip = [NSIndexPath indexPathForRow:0inSection:0]; [titleTableViewselectRowAtIndexPath:ip ...

  5. Gallery 里面怎么设置ImageView的OnClick事件

    Gallery g=this.findViewById(R.id.gallery); g.setOnItemClickListener(new OnItemClickListener(){ @Over ...

  6. rest_framework之序列化详解 06

    拿到所有的角色数据 1.urls.py 2.models.py  假设只有3个角色 3.views.py from api import models import json json只能序列化pyt ...

  7. postgresql----数据库表约束----FOREIGN KEY

    六.FOREIGN KEY ---- 外键约束 外键可以是单个字段,也可以是多个字段.所谓的外键约束就是引用字段必须在被引用字段中存在,除非引用字段部分为NULL或全部为NULL(由MATCH TYP ...

  8. Spring源码学习之IOC容器实现原理(一)-DefaultListableBeanFactory

    从这个继承体系结构图来看,我们可以发现DefaultListableBeanFactory是第一个非抽象类,非接口类.实际IOC容器.所以这篇博客以DefaultListableBeanFactory ...

  9. Oracle下select语句

    先看scott下自带的emp表 empno:编号  ename:名字  Job:职位  mgr:上级编号 hiredate:入职时间 sal:薪水 comm:奖金 deptno:部门编号 部门表dep ...

  10. SQLPlus的两种登录方式的不同效果

    Windows 8,Oralce11g,命令行 1.输入“sqlplus”,回车,提示:请输入用户名,输入用户名,回车,提示,请输入口令,输入口令后,回车,报ORA-12560:TNS:协议适配器错误 ...