基于linux7的ectd安装与部署

  1. 系统环境

    iostat
    Linux 3.10.0-693.17.1.el7.x86_64 (swarm1)   2018年03月28日     _x86_64_    (2 CPU)
    cat /etc/redhat-release
    CentOS Linux release 7.4.1708 (Core)
    getenforce
    Disabled
  2. etcd简介
    etcd是CoreOS团队于2013年6月发起的开源项目,它的目标是构建一个高可用的分布式键值(key-value)数据库。etcd内部采用raft协议作为一致性算法,etcd基于Go语言实现。
    etcd作为服务发现系统,有以下的特点:
    (1)简单:安装配置简单,而且提供了HTTP API进行交互,使用也很简单
    (2)安全:支持SSL证书验证
    (3)快速:根据官方提供的benchmark数据,单实例支持每秒2k+读操作
    (4)可靠:采用raft算法,实现分布式系统数据的可用性和一致性
    etcd项目地址:https://github.com/coreos/etcd/
  3. etcd应用场景
    etcd比较多的应用场景是用于服务发现,服务发现(Service Discovery)要解决的是分布式系统中最常见的问题之一,即在同一个分布式集群中的进程或服务如何才能找到对方并建立连接。
    从本质上说,服务发现就是要了解集群中是否有进程在监听upd或者tcp端口,并且通过名字就可以进行查找和链接。
    要解决服务发现的问题,需要下面三大支柱,缺一不可。
    (1)一个强一致性、高可用的服务存储目录。
    基于Ralf算法的etcd天生就是这样一个强一致性、高可用的服务存储目录。
    (2)一种注册服务和健康服务健康状况的机制。
    用户可以在etcd中注册服务,并且对注册的服务配置key TTL,定时保持服务的心跳以达到监控健康状态的效果。
    (3)一种查找和连接服务的机制。
    通过在etcd指定的主题下注册的服务业能在对应的主题下查找到。为了确保连接,我们可以在每个服务机器上都部署一个proxy模式的etcd,这样就可以确保访问etcd集群的服务都能够互相连接。
  4. etcd安装
    etcd在生产环境中一般推荐集群方式部署。etcd目前默认使用2379端口提供HTTP API服务,2380端口和peer通信(这两个端口已经被IANA官方预留给etcd);在之前的版本中可能会分别使用4001和7001,在使用的过程中需要注意这个区别。
    因为etcd是go语言编写的,安装只需要下载对应的二进制文件,并放到合适的路径就行。
  5. etcd下载与启动
    ##etcd下载
    mkdir -p /opt/etcd && cd /opt/etcd
    curl -L https://github.com/coreos/etcd/releases/download/v3.3.2/etcd-v3.3.2-linux-amd64.tar.gz -o etcd-v3.3.2-linux-amd64.tar.gz
    ##解压后是一些文档和两个二进制文件etcd和etcdctl。etcd是server端,etcdctl是客户端。
    tar zxf etcd-v3.3.2-linux-amd64.tar.gz
    mv etcd-v3.3.2-linux-amd64 etcd
    pwd
    /opt/etcd
    cd etcd
    ls
    etcd  etcdctl  README-etcdctl.md  README.md  READMEv2-etcdctl.md
    ##如果在测试环境,启动一个单节点的etcd服务,只需要运行etcd命令就行。
    ./etcd
    如下:
    ##前台运行,直接占用了当前终端。
    2018-03-28 17:46:23.082655 I | etcdmain: etcd Version: 3.3.2
    2018-03-28 17:46:23.082753 I | etcdmain: Git SHA: c9d46ab37
    2018-03-28 17:46:23.082769 I | etcdmain: Go Version: go1.9.4
    2018-03-28 17:46:23.082783 I | etcdmain: Go OS/Arch: linux/amd64
    2018-03-28 17:46:23.082817 I | etcdmain: setting maximum number of CPUs to 2, total number of available CPUs is 2
    。。。。。。
    ##从上面的输出中,我们可以看到很多信息。以下是几个比较重要的信息:
    (1)name表示节点名称,默认为default。
    (2)data-dir 保存日志和快照的目录,默认为当前工作目录default.etcd/目录下。
    (3)在http://localhost:2380和集群中其他节点通信。
    (4)在http://localhost:2379提供HTTP API服务,供客户端交互。
    (5)heartbeat为100ms,该参数的作用是leader多久发送一次心跳到followers,默认值是100ms。
    (6)election为1000ms,该参数的作用是重新投票的超时时间,如果follow在该时间间隔没有收到心跳包,会触发重新投票,默认为1000ms。
    (7)snapshot count为10000,该参数的作用是指定有多少事务被提交时,触发截取快照保存到磁盘。
    (8)集群和每个节点都会生成一个uuid。
    (9)启动的时候会运行raft,选举出leader。
    ##添加etcd启动路径
    cat >> /etc/profile << EOF
    ##etcd
    export PATH=/opt/etcd/etcd:$PATH
    export ETCDCTL_API=3
    EOF
    source /etc/profile
    ##查看下etcd路径
    echo $PATH
    /opt/etcd/etcd:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
    说明:如果不设置 ETCDCTL_API=3,则默认是的API版本是2:
    etcdctl version
    etcdctl version: 3.3.2
    API version: 2
    正确设置后,API版本变成3:
    etcdctl version
    etcdctl version: 3.3.2
    API version: 3.3
    ##上面的方法只是简单的启动一个etcd服务,但要长期运行的话,还是做成一个服务好一些。下面将以systemd为例,介绍如何建立一个etcd服务。
  6. 建立etcd服务
    ##设定etcd配置文件,建立相关目录
    mkdir -p /var/lib/etcd/
    mkdir -p /opt/etcd/config/
    ##创建etcd配置文件
    cat <<EOF | sudo tee /opt/etcd/config/etcd.conf
    #节点名称
    ETCD_NAME=$(hostname -s)
    #数据存放位置
    ETCD_DATA_DIR=/var/lib/etcd
    EOF
    ##创建systemd配置文件
    cat <<EOF |  tee /etc/systemd/system/etcd.service
    [Unit]
    Description=Etcd Server
    Documentation=https://github.com/coreos/etcd
    After=network.target
    [Service]
    User=root
    Type=notify
    EnvironmentFile=/opt/etcd/config/etcd.conf
    ExecStart=/opt/etcd/etcd/etcd
    Restart=on-failure
    RestartSec=10s
    LimitNOFILE=40000
    [Install]
    WantedBy=multi-user.target
    ##启动etcd
    systemctl daemon-reload && systemctl enable etcd && systemctl start etcd
  7. etcd基本使用
    etcdctl是一个命令行客户端,它能提供一些简洁的命令,供用户直接跟etcd服务打交道,而无需基于 HTTP API方式。可以方便我们在对服务进行测试或者手动修改数据库内容。建议刚刚接触etcd时通过etdctl来熟悉相关操作。这些操作跟HTTP API基本上是对应的。
    etcd项目二进制发行包中已经包含了etcdctl工具,etcdctl支持的命令大体上分为数据库操作和非数据库操作两类。
    ##查看etcd版本
    etcd --version
    etcd Version: 3.3.2
    Git SHA: c9d46ab37
    Go Version: go1.9.4
    Go OS/Arch: linux/amd64
    ##etcdctl参数和选项
    etcdctl -h
    ##数据库操作
    数据库操作围绕对键值和目录的CRUD完整生命周期的管理。
    etcd在键的组织上采用了层次化的空间结构(类似于文件系统中目录的概念),用户指定的键可以为单独的名字,如:testkey,此时实际上放在根目录/下面,也可以为指定目录结构,如/cluster1/node2/testkey,则将创建相应的目录结构。
    说明:CRUD即Create,Read,Update,Delete是符合REST风格的一套API操作。
    (1)put
    etcdctl put foo "hello world"
    OK
    etcdctl put /root/wtf "datagrand"
    OK
    (2)get
    etcdctl get foo
    foo
    hello world
    etcdctl get /root/wtf
    /root/wtf
    datagrand
    ##当键不存在时,则会报错。例如:
    etcdctl get /testdir/testkey2
    Error:  100: Key not found (/testdir/testkey2) [5]
  8. 集群及go安装优化
    ##单独集群:只有一台服务器的集群。
    部署etcd集群作为单独集群是直截了当的。仅用一个命令启动它
    etcd或
    systemctl daemon-reload && systemctl enable etcd && systemctl start etcd
    ##本地多成员集群
    多成员集群:有多台台服务器的集群。
    提供 Procfile 用于简化搭建本地多成员集群。通过少量命令来启动多成员集群:
    ##使用go get **** 命令安装程序
    yum install -y go
    系统会安装golang-1.8.3-1.el7.x86_64(按实际版本)
    ##执行 go version,查看当前 go 的当前版本
    go version
    go version go1.8.3 linux/amd64
    ##执行 go env,查看当前 go 的环境变量
    go env
    GOARCH="amd64"
    GOBIN=""
    GOEXE=""
    GOHOSTARCH="amd64"
    GOHOSTOS="linux"
    GOOS="linux"
    GOPATH="/root/go"
    GORACE=""
    GOROOT="/usr/lib/golang"
    GOTOOLDIR="/usr/lib/golang/pkg/tool/linux_amd64"
    说明:golang1.8默认情况下,在 GOPATH 没有设置的情况下,使用的默认路径是 /root/go 。这个是非常不好的,因为 /root 目录权限非常特殊。
    因此最好能自己设置 GOPATH,比如设置到自己的工作区目录。
    ##修改 /etc/profile,将go加入到path中
    cat >> /etc/profile << EOF
    export GOPATH=/usr/local/go
    export PATH=/usr/local/go/bin:$PATH
    EOF
    source /etc/profile
    ##执行 go env,查看当前 go 的GOPATH
    GOPATH="/usr/local/go"
    说明:之后再通过 go get **** 命令安装程序时,新的程序就会被安装到 GOPATH/bin 下,然后由于GOPATH/bin 已经加入到 PATH,因此就可以很方便的使用新安装的程序。
  9. 多成员集群
    ##安装goreman
    go get github.com/mattn/goreman
    ##查看下安装路径
    which goreman
    /usr/local/go/bin/goreman
    ##编辑Procfile文件
    cat >> Procfile << EOF
    ##Use goreman to run `go get github.com/mattn/goreman`
    etcd1: etcd --name infra1 --listen-client-urls http://127.0.0.1:12379 --advertise-client-urls http://127.0.0.1:12379 --listen-peer-urls http://127.0.0.1:12380 --initial-advertise-peer-urls http://127.0.0.1:12380 --initial-cluster-token etcd-cluster-1 --initial-cluster ‘infra1=http://127.0.0.1:12380,infra2=http://127.0.0.1:22380,infra3=http://127.0.0.1:32380‘ --initial-cluster-state new --enable-pprof
    etcd2: etcd --name infra2 --listen-client-urls http://127.0.0.1:22379 --advertise-client-urls http://127.0.0.1:22379 --listen-peer-urls http://127.0.0.1:22380 --initial-advertise-peer-urls http://127.0.0.1:22380 --initial-cluster-token etcd-cluster-1 --initial-cluster ‘infra1=http://127.0.0.1:12380,infra2=http://127.0.0.1:22380,infra3=http://127.0.0.1:32380‘ --initial-cluster-state new --enable-pprof
    etcd3: etcd --name infra3 --listen-client-urls http://127.0.0.1:32379 --advertise-client-urls http://127.0.0.1:32379 --listen-peer-urls http://127.0.0.1:32380 --initial-advertise-peer-urls http://127.0.0.1:32380 --initial-cluster-token etcd-cluster-1 --initial-cluster ‘infra1=http://127.0.0.1:12380,infra2=http://127.0.0.1:22380,infra3=http://127.0.0.1:32380‘ --initial-cluster-state new --enable-pprof
    EOF
    ##查看当前监控端口
    etstat -lnp|grep etcd
    tcp        0      0 127.0.0.1:2379          0.0.0.0:*               LISTEN      32618/etcd
    tcp        0      0 127.0.0.1:2380          0.0.0.0:*               LISTEN      32618/etcd
    ##启动多成员集群
    goreman -f /root/Procfile start
    ##查看监控端口
    netstat -lnp|grep etcd
    tcp        0      0 127.0.0.1:22379         0.0.0.0:*               LISTEN      53932/etcd
    tcp        0      0 127.0.0.1:2379          0.0.0.0:*               LISTEN      32618/etcd
    tcp        0      0 127.0.0.1:22380         0.0.0.0:*               LISTEN      53932/etcd
    tcp        0      0 127.0.0.1:2380          0.0.0.0:*               LISTEN      32618/etcd
    tcp        0      0 127.0.0.1:32379         0.0.0.0:*               LISTEN      53926/etcd
    tcp        0      0 127.0.0.1:12379         0.0.0.0:*               LISTEN      53925/etcd
    tcp        0      0 127.0.0.1:32380         0.0.0.0:*               LISTEN      53926/etcd
    tcp        0      0 127.0.0.1:12380         0.0.0.0:*               LISTEN      53925/etcd
    说明:启动的成员各自在 localhost:12379, localhost:22379, 和 localhost:32379 上监听客户端请求。
    ##通过使用 etcdctl 来查看已经启动的集群
    etcdctl --write-out=table --endpoints=localhost:12379 member list

  10. etcd的容错性
    ##kill某个成员
    goreman run stop etcd2
    说明:
    使用etcdctl --write-out=table --endpoints=localhost:12379 member list查看时,etcd2还在,但netstat -lnp|grep etcd监控的端口已经停掉了,使用ps -ef | grep etcd | grep 127.0.0.1:22379查看下ectd2的pid为空。
    ##put数据
    etcdctl --endpoints=localhost:12379 put key hello
    OK
    ##get数据
    etcdctl --endpoints=localhost:12379 get key
    hello
    ##试图从被杀掉的成员获取key
    etcdctl --endpoints=localhost:22379 get key
    报错:Error: dial tcp [::1]:22379: getsockopt: connection refused
    ##重启被杀掉的成员
    goreman run restart etcd2
    ##从重启的成员获取key
    etcdctl --endpoints=localhost:22379 get key
    hello

原文地址:http://blog.51cto.com/wutengfei/2092141

时间: 2024-10-19 04:36:40

基于linux7的ectd安装与部署的相关文章

CentOS 7中基于rpm包方式安装部署apm(php-fpm) + xcache

CentOS 7, 基于rpm包方式安装部署apm(php-fpm) + xcache:a) httpd, php, mariadb分别部署在一个单独的主机上:b) 一个虚拟主机提供phpMyAdmin,另一个虚拟主机提供wordpress:c) 为phpMyAdmim提供https服务: 一.环境配置:关闭防火墙和设置SELinux:使用httpd+FastCGI的方式实现整合:1.php-5.3.3+版本中才能默认实现:2.httpd支持proxy_fcgi_module,默认httpd-2

Lucene/Solr搜索引擎开发系列 - 第2章 Solr安装与部署(Tomcat篇)

一.安装环境 图1-1 Tomcat和Solr的版本     我本机目前使用的Java版本为JDK 1.8,因为Solr 4.9要求Java版本为1.7+,请注意. 二.Solr部署到Tomcat流程 图1-2 Tomcat安装目录     1.如图1-2所示,为Tomcat的解压目录: 图1-3 Tomcat首页     2.在目录E:\apache-tomcat-8.0.9\bin中,找到startup.bat文件,双击该文件,启动Tomcat服务器,等待几秒钟后,在浏览器中输入http:/

Flume1.5.0的安装、部署、简单应用(含分布式、与hadoop2.2.0、hbase0.96的案例)

目录: 一.什么是Flume? 1)flume的特点 2)flume的可靠性 3)flume的可恢复性 4)flume 的 一些核心概念 二.flume的官方网站在哪里? 三.在哪里下载? 四.如何安装? 五.flume的案例 1)案例1:Avro 2)案例2:Spool 3)案例3:Exec 4)案例4:Syslogtcp 5)案例5:JSONHandler 6)案例6:Hadoop sink 7)案例7:File Roll Sink 8)案例8:Replicating Channel Sel

Zabbix的安装与部署

Zabbix的安装与部署 一.Zabbix简介 1.zabbix是一个基于WEB界面的,并提供分布式系统监视以及网络监视功能的企业级的开源解决方案. zabbix能监视各种网络参数,保证服务器系统的安全运营:并提供柔软的通知机制以让运维人员能够快速定位. 2.zabbix通过C/S模型来收集数据,通过B/S模型模式在web端展示和进行配置. 被监控端:主机设备通过安装agent收集数据并发送给server端,网络设备通过SNMP收集数据并发送给server端. server端:通过收集SNMP和

Hue的安装与部署

Hue的安装与部署 hadoop hue Hue 简介 Hue是一个开源的Apache Hadoop UI系统,最早是由Cloudera Desktop演化而来,由Cloudera贡献给开源社区,它是基于Python Web框架Django实现的.通过使用Hue我们可以在浏览器端的Web控制台上与Hadoop集群进行交互来分析处理数据,例如操作HDFS上的数据,运行MapReduce Job等等.很早以前就听说过Hue的便利与强大,一直没能亲自尝试使用,下面先通过官网给出的特性,通过翻译原文简单

ISA2006安装和部署基础(虚拟机非域环境)

0x00. 为了测试基于HTTP隧道的绕过ISA,必须搭建模拟环境,为了不麻烦,我们这里不配合域环境认证.本次实验利用Vmware 10.0搭建环境,实现ISA2006安装和部署,同时设定基于HTTP代理访问的问题.  本人在ISA的应用上也算是新手,查找了不少资料,有不对的还望批评指正. 搭建环境说明: Vmware Workstation 10.0 Window 2003 ( ISA_SERVER) Window 2003 (客户机) 0x01.各台机器配置: [Win2003-ISA200

基于Windows Server 2012 r2环境部署 SharePoint 2013 SP1

在安装SharePoint 2013 服务器之前,请先了解硬件和软件要求 http://technet.microsoft.com/library/cc262485(office.15)?ocid=fwlink#section4 Microsoft SharePoint 产品准备工具会为具有内置数据库的单台服务器安装以下必备软件: Web 服务器 (IIS) 角色 应用程序服务器角色 Microsoft .NET Framework 4.5 SQL Server 2008 R2 SP1 Nati

Linux下svn的安装与部署

最近工作碰到一个问题,我和一个同伙负责开发一个管理系统,基于原来的代码上进行修改,每当他修改之后,我要再修改都要和他确定是不是最新的文件,才能进行修改.非常影响工作的效率,所以在网上找了关于svn的使用.下面开始svn的安装和部署,解决开发中代码的同步问题. 在Linux上安装很简单. 第一.先查看yum 有没有被占用,被占用就 kill 掉,再进行 yum install -y subversion [[email protected] ~]# ps aux |grep yum root   

FastDFS安装、配置、API使用(一)-安装和部署

FastDFS是一个开源的,高性能的的分布式文件系统,他主要的功能包括:文件存储,同步和访问,设计基于高可用和负载均衡,FastDFS非常适用于基于文件服务的站点,例如图片分享和视频分享网站 FastDFS有两个角色:跟踪服务(tracker)和存储服务(storage),跟踪服务控制,调度文件以负载均衡的方式访问:存储服务包括:文件存储,文件同步,提供文件访问接口,同时以key value的方式管理文件的元数据 跟踪和存储服务可以由1台或者多台服务器组成,同时可以动态的添加,删除跟踪和存储服务