使用Ansible playbooks快速构建etcd集群
2017-08-30 00:00
459 查看
本篇文章记录一下使用
以上节点详情信息用来规划集群规模以及名称角色,配置文件中
等待正确执行完成之后,三个节点的etcd就已经安装好了,由于是集群,所以各个节点上的配置还是有专属的部分,暂时没有想到如何进行一次性安装启动,将安装、修改配置、启动作为三部分操作.
77节点上的配置如下(其他两个节点修改对应的etcd_name):
如此,可以发现我们的etcd集群已经迅速运行起来了!
原文地址
ansible-playbooks进行快速构建一个可用的etcd集群。在阅读并实践本文章之前,请确保您有一个可用的
ansible环境。
一、集群规划
注意:本文档基于centos7+的操作系统上进行构建,在rhel7+系列也可用使用,其他发行版本可酌情参考
etcd_name | 节点 | 端口 |
---|---|---|
etcd1 | 10.0.0.77 | 2379/2380 |
etcd2 | 10.0.0.78 | 2379/2380 |
etcd3 | 10.0.0.79 | 2379/2380 |
ETCD_INITIAL_CLUSTER选项中的
etcd_name和地址需要和主机规划中一致
二、etcd集群部署
环境前提:已经配置过ansible相关的环境,并且可以免密登录1.etcd集群相关的配置文件
$ tree . . ├──etcd-install.yml #ansible-playbook 脚本 ├──etcd.conf.j2 #etcd主配置文件 ├──etcd.service #systemd服务启动文件 ├──host #etcd集群主机列表 # ansible-playbooks 脚本 $ cat etcd-install.yml --- - hosts: "{{ host }}" remote_user: root vars: hostip: "{{ ansible_all_ipv4_addresses[0] }}" ipv6: "{{ ansible_all_ipv6_addresses[0].split(':')[-1] }}" packagedir: /tmp/ serverdir: /export/servers/ download: https://github.com/coreos/etcd/releases/ etcd_version: etcd-v3.1.5-linux-amd64 tasks: - name: "test ping" ping: - name: "init env" shell: "mkdir -p /export/servers /etc/etcd/ /export/Data/etcd/ " - name: "wget {{ etcd_version }}" get_url: url: "{{ item.url }}" dest: "{{ item.dest }}" mode: 0644 owner: root group: root with_items: - { url: "{{ download }}{{ etcd_version }}.tar.gz" , dest: "{{ packagedir }}" } - name: "untar the {{ etcd_version }}" unarchive: src: "{{ item.src }}" dest: "{{ item.dest }}" owner: root group: root remote_src: yes with_items: - { src: "{{ packagedir }}{{ etcd_version }}.tar.gz", dest: "{{ serverdir }}" } - name: "copy the etcd execfile" shell: "cp -rp {{ serverdir }}{{ etcd_version }}/etcd* /usr/bin/" - name: "init the es configuration!" template: src: "{{ item.src }}" dest: "{{ item.dest }}" mode: 0755 owner: root group: root with_items: #dest后面的引号与大括号中间一定不能有空格,还有后面引号的空格也要取消掉,不然文件会有空格 - { src: "etcd.conf.j2", dest: "/etc/etcd/etcd.conf" } - { src: "etcd.service", dest: "/etc/systemd/system/" } # etcd主配置文件模板,这里采用jinja2模板引擎 $ cat etcd.conf.j2 # [member] BASE_DIR="/export" # 由于etcd_name变量比较特殊,需要和ETCD_INITIAL_CLUSTER中的值一一对应,暂时写为etcd1,配置下发后需要将该值替换成对应节点的名称 ETCD_NAME="etcd1" ETCD_DATA_DIR="/export/Data/etcd" ETCD_LISTEN_PEER_URLS="http://{{ hostip }}:2380" ETCD_LISTEN_CLIENT_URLS="http://{{ hostip }}:2379" #[cluster] ETCD_INITIAL_ADVERTISE_PEER_URLS="http://{{ hostip }}:2380" ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster" ETCD_ADVERTISE_CLIENT_URLS="http://{{ hostip }}:2379" #[initial-cluster] # 需要按照etcd集群规划节点来填写 ETCD_INITIAL_CLUSTER="etcd1=http://10.0.0.77:2380,etcd2=http://10.0.0.78:2380,etcd3=http://10.0.0.79:2380" # systemd 启动脚本 $ cat etcd.service [Unit] Description=Etcd Server After=network.target After=network-online.target Wants=network-online.target Documentation=https://github.com/coreos [Service] Type=notify # 数据目录,需要提前进行创建 WorkingDirectory=/export/Data/etcd/ EnvironmentFile=-/etc/etcd/etcd.conf ExecStart=/usr/bin/etcd \ --name ${ETCD_NAME} \ --initial-advertise-peer-urls ${ETCD_INITIAL_ADVERTISE_PEER_URLS} \ --listen-peer-urls ${ETCD_LISTEN_PEER_URLS} \ --listen-client-urls ${ETCD_LISTEN_CLIENT_URLS},http://127.0.0.1:2379 \ --advertise-client-urls ${ETCD_ADVERTISE_CLIENT_URLS} \ --initial-cluster-token ${ETCD_INITIAL_CLUSTER_TOKEN} \ --initial-cluster ${ETCD_INITIAL_CLUSTER} \ --initial-cluster-state new \ --data-dir=${ETCD_DATA_DIR} Restart=on-failure RestartSec=5 LimitNOFILE=65536 [Install] WantedBy=multi-user.target $ cat hosts [etcd] 10.0.0.77 10.0.0.78 10.0.0.79
2.使用ansible-playbooks进行部署etcd集群
$ ansible-playbook -i host -e host=etcd etcd-install.yml
等待正确执行完成之后,三个节点的etcd就已经安装好了,由于是集群,所以各个节点上的配置还是有专属的部分,暂时没有想到如何进行一次性安装启动,将安装、修改配置、启动作为三部分操作.
3.登录每个节点进行修改etcd_name
修改每个节点上的/etc/etcd/etcd.conf文件:
注意:需要将各个节点ip和etcd_name对应起来(etcd1->77 etcd2->78 etcd->79)
77节点上的配置如下(其他两个节点修改对应的etcd_name):
ETCD_NAME="etcd1" ETCD_INITIAL_CLUSTER="etcd1=http://10.0.0.77:2380,etcd2=http://10.0.0.78:2380,etcd3=http://10.0.0.79:2380"
4.检测配置文件并进行启动集群
$ ansible -i host all -m shell -a 'systemctl daemon-reload && systemctl start etcd && systemctl enable etcd'
注意:由于etcd采用集群模式,在启动第一个实例的时候会一直监听其他实例,这个时候需要尽快启动其他实例,以完成集群发现,否则第一个实例会在一定时间内挂掉
5.集群状态监测
$ etcdctl cluster-health member 4d946fabd2e1eb9f is healthy: got healthy result from http://10.0.0.79:2379 member 805150a1f1a44604 is healthy: got healthy result from http://10.0.0.77:2379 member 81ddc2f4095fe8a1 is healthy: got healthy result from http://10.0.0.78:2379 cluster is healthy $ etcdctl member list 4d946fabd2e1eb9f: name=etcd3 peerURLs=http://10.0.0.79:2380 clientURLs=http://10.0.0.79:2379 isLeader=true 805150a1f1a44604: name=etcd1 peerURLs=http://10.0.0.77:2380 clientURLs=http://10.0.0.77:2379 isLeader=false 81ddc2f4095fe8a1: name=etcd2 peerURLs=http://10.0.0.78:2380 clientURLs=http://10.0.0.78:2379 isLeader=false
如此,可以发现我们的etcd集群已经迅速运行起来了!
三、etcd集群的基本使用
注意1:由于是集群模式,所以可用在任何一个节点进行写入操作,用户也可用使用etcd的http接口进行使用
注意2:etcd v2和v3的API是完全不同的两个存储实现,所以用户在使用的时候需要注意
在etcd v2版本中是采用set存数据的,v3版本中采用put方式
指定API版本 $ export ETCDCTL_API=3 $ etcdctl put foo "Hello World!" $ etcdctl get foo 以json格式输出 $ etcdctl --write-out="json" get foo
1.通过前缀获取数据
$ etcdctl --endpoints=$ENDPOINTS put web1 value1 $ etcdctl --endpoints=$ENDPOINTS put web2 value2 $ etcdctl --endpoints=$ENDPOINTS put web3 value3 $ etcdctl --endpoints=$ENDPOINTS get web --prefix web1 value1 web2 value2 web3 value3
2.删除数据
$ etcdctl --endpoints=$ENDPOINTS put key myvalue $ etcdctl --endpoints=$ENDPOINTS del key $ etcdctl --endpoints=$ENDPOINTS put k1 value1 $ etcdctl --endpoints=$ENDPOINTS put k2 value2 $ etcdctl --endpoints=$ENDPOINTS del k --prefix
3.集群状态信息
v3 的API才有这个功能
$ etcdctl --write-out=table --endpoints=${HOST_1}:2379,${HOST_2}:2379,${HOST_3}:2379 endpoint status +-------------------+------------------+---------+---------+-----------+-----------+------------+ | ENDPOINT | ID | VERSION | DB SIZE | IS LEADER | RAFT TERM | RAFT INDEX | +-------------------+------------------+---------+---------+-----------+-----------+------------+ | 10.0.0.77:2379 | 805150a1f1a44604 | 3.1.5 | 1.2 MB | false | 639 | 188421 | | 10.0.0.78:2379 | 81ddc2f4095fe8a1 | 3.1.5 | 1.2 MB | false | 639 | 188421 | | 10.0.0.79:2379 | 4d946fabd2e1eb9f | 3.1.5 | 1.2 MB | true | 639 | 188421 | +-------------------+------------------+---------+---------+-----------+-----------+------------+
原文地址
相关文章推荐
- 使用Ambari-2.2.2快速构建大数据处理集群
- 使用ansible快速配置RHCS 集群 实现WEB站负载均衡高可用(手记)
- 自动化运维工具Ansible之Playbooks变量的使用
- Ansible Playbooks的使用
- 在 Web 项目中使用 Redis 快速构建系统缓存(单机版/集群版)
- Ansible Playbooks基本使用
- 使用 Ansible 在树莓派上构建一个基于 Linux 的高性能计算系统
- 分分钟快速构建一个单机版测试 codis 集群
- 使用Spring Boot快速构建应用
- 使用Docker快速部署Ceph集群
- 通过Kubernetes Minikube&Docker Swarm快速构建最小可行容器集群
- 使用Intellij中的Spring Initializr来快速构建Spring Boot/Cloud工程
- 使用Docker swarm构建wordpress集群 推荐
- 使用Gradle 快速构建项目
- 快速构建Windows 8风格应用23-App Bar概述及使用规范
- 使用DataGridView数据窗口控件,构建用户快速输入体验
- 使用Spring Boot快速构建应用
- 使用OData快速构建REST服务
- 使用 Spring Boot 快速构建 Spring 框架应用--转