Etcd集群搭建过程和命令总结
什么是etcd?etcd是CoreOS团队于2013年6月发起的开源项目,它的目标是构建一个高可用的分布式键值数据库,基于Go语言实现。主要解决分布式系统中各种服务的配置信息的管理分享,服务的发现。 一、Etcd三节点集群配置:10.100.50.12310.100.50.12410.100.50.125https://github.com/coreos/etcd/releases/下载1、解压缩、运行etcd[root@Etcd01 /]# tar -zvxf etcd-v3.2.4-linux-amd64.tar.gz [root@Etcd01 /]# mv etcd-v3.2.4-linux-amd64 etcd[root@Etcd01 /]# cd etcd[root@Etcd01 etcd]# lsDocumentation etcd etcdctl README-etcdctl.md README.md READMEv2-etcdctl.md[root@Etcd01 etcd]# ./etcd 2、添加环境变量在"/etc/profile" 中添加环境变量 Etcd export PATH="$PATH:/etcd"export ETCDCTL_API=33、添加systemctl的服务[root@Etcd01 etcd]# vi /etc/systemd/system/etcd.service[Unit]Description=etcd[Service]ExecStart=/etcd/etcd [Install]WantedBy=multi-user.target4、关闭防火墙[root@Etcd01 etcd]# systemctl stop firewalld[root@Etcd01 etcd]# systemctl disable firewalld关闭SElinux[root@Etcd01 etcd]#sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config以上三步在其他两个节点重复操作。 5、运行脚本 etcd --name infra0 --initial-advertise-peer-urls http://10.100.50.123:2380 \ --listen-peer-urls http://0.0.0.0:2380 \ --listen-client-urls http://0.0.0.0:2379 \ --advertise-client-urls http://10.100.50.123:2379 \ --initial-cluster-token etcd-cluster-1 \ --initial-cluster infra0=http://10.100.50.123:2380,infra1=http://10.100.50.124:2380,infra2=http://10.100.50.125:2380 \ --initial-cluster-state new etcd --name infra1 --initial-advertise-peer-urls http://10.100.50.124:2380 \ --listen-peer-urls http://0.0.0.0:2380 \ --listen-client-urls http://0.0.0.0:2379 \ --advertise-client-urls http://10.100.50.124:2379 \ --initial-cluster-token etcd-cluster-1 \ --initial-cluster infra0=http://10.100.50.123:2380,infra1=http://10.100.50.124:2380,infra2=http://10.100.50.125:2380 \ --initial-cluster-state new etcd --name infra2 --initial-advertise-peer-urls http://10.100.50.125:2380 \ --listen-peer-urls http://0.0.0.0:2380 \ --listen-client-urls http://0.0.0.0:2379 \ --advertise-client-urls http://10.100.50.125:2379 \ --initial-cluster-token etcd-cluster-1 \ --initial-cluster infra0=http://10.100.50.123:2380,infra1=http://10.100.50.124:2380,infra2=http://10.100.50.125:2380 \ --initial-cluster-state new 后台运行: nohup /path/to/start_etcd.sh &6、命令参数解释https://coreos.com/etcd/docs/latest/op-guide/configuration.html官网解释etcd --name infra0节点名称--initial-advertise-peer-urls http://HOST-IP:2380 通知其他Etcd实例地址--listen-peer-urls http://0.0.0.0:2380 监听其他Etcd实例地址--listen-client-urls http://0.0.0.0:2379 监听客户端地址--advertise-client-urls http://HOST-IP:2379 通知客户端地址--initial-cluster-token etcd-cluster-1 初始化集群Token,同一个集群Token必须相同。--initial-cluster infra0=http://HOST-IP:2380,infra1=http://HOST-IP:2380,infra2=http://HOST-IP:2380 初始化集群节点地址--initial-cluster-state new新建集群,如果是已经存在的集群将new更改为existing 二、使用etcdctl命令操作数据库set指定某个键的值 格式:set -- OPTIONS: --ttl value key time-to-live in seconds (default: 0) --swap-with-value value previous value --swap-with-index value previous index (default: 0) 例1:设置键值[root@Etcd01 ~]# etcdctl set key1 value1value1[root@Etcd01 ~]# etcdctl get key1value1[root@Etcd01 ~]# 例2:设置键值的超时时间[root@Etcd01 ~]# etcdctl set --ttl 10 key2 value2value2[root@Etcd01 ~]# etcdctl get key2Error: 100: Key not found (/key2) [10][root@Etcd01 ~]# 例3:若该键现在的值是 value,则进行设置操作[root@Etcd01 ~]# etcdctl set key1 value1value1[root@Etcd01 ~]# etcdctl get key1value1[root@Etcd01 ~]# etcdctl set key1 "value2" --swap-with-value "value1" 如果value=value1则 ,把key1的键值改为value2。value2[root@Etcd01 ~]# get获取键值格式: get 选项:--sort 对结果进行排序--consistent 将请求发给主节点,保证获取内容的一致性例1:获取键值[root@Etcd01 ~]# etcdctl set key1 value1value1[root@Etcd01 ~]# etcdctl get key1value1 update更新键值格式:etcdctl update 选项:--ttl ‘0’ 超时时间默认为0,永不超时。 [root@Etcd01 ~]# etcdctl set key1 value1value1[root@Etcd01 ~]# etcdctl update --ttl '5' key1 value2 更新key1的键值为value2,并设置5秒超时时间。value2[root@Etcd01 ~]# etcdctl get key1value2[root@Etcd01 ~]# etcdctl get key1 超过5秒钟后键值自动删除。Error: 100: Key not found (/key1) [22][root@Etcd01 ~]# rm删除某个键值格式:etcdctl rm 选项:--dir 如果键是个空目录或者键值对则删除--recursive 删除目录和所有子键--with-value 检查现有的值是否匹配--with-index '0' 检查现有的 index 是否匹配 例1:删除键值[root@Etcd01 ~]# etcdctl set key1 valuevalue[root@Etcd01 ~]# etcdctl rm key1PrevNode.Value: value[root@Etcd01 ~]# etcdctl get key1Error: 100: Key not found (/key1) [24][root@Etcd01 ~]# mk如果给定的键不存在,则创建一个新的键值格式: etcdctl mk 选项:--ttl '0' 超时时间(单位为秒),不配置(默认为 0)则永不超时 例:当键值不存在时[root@Etcd01 ~]# etcdctl mk key2 value1value1[root@Etcd01 ~]# etcdctl get key2value1 例:当键值存在时会报错[root@Etcd01 ~]# etcdctl mk key1 value2Error: 105: Key already exists (/key1) [25] mkdir如果给定的目录不存在,则创建一个新的键目录格式:etcdctl mkdir 选项:--ttl '0' 超时时间(单位为秒),不配置(默认为 0)则永不超时 例:[root@Etcd01 ~]# etcdctl mkdir keydir 创建一个mkdir的目录[root@Etcd01 ~]# etcdctl set mkdir/key1 value1 在mkdir目录下创建一个key1的键且值为value1value1[root@Etcd01 ~]# etcdctl ls /mkdir 使用ls命令查看mkdir下的键/mkdir/key1 setdir创建一个目录,无论存在与否格式:etcdctl setdir --ttl '0' 超时时间(单位为秒),不配置(默认为 0)则永不超时 例:[root@Etcd01 ~]# etcdctl setdir keydir2[root@Etcd01 ~]# etcdctl ls/keydir1/keydir2 updatedir更新一个已经存在的目录(仅在目录中设置了TTL或生存时间时才有用)格式: etcdctl updatedir 选项:--ttl '0' 超时时间(单位为秒),不配置(默认为 0)则永不超时 例:设置TTL时间表示keydir的存活时间。[root@Docker01 ~]# etcdctl ls /keydir[root@Docker01 ~]# etcdctl updatedir keydir --ttl '10' 设置超时时间为10秒[root@Docker01 ~]# etcdctl ls /keydir[root@Docker01 ~]# etcdctl ls 十秒中后目录自动删除,如果为0则永不超时。[root@Docker01 ~]# rmdir删除一个目录,或者键值对格式:etcdctl rmdir 或 例1:删除目录[root@Docker01 ~]# etcdctl ls/keydir[root@Docker01 ~]# etcdctl rmdir /keydir[root@Docker01 ~]# etcdctl ls[root@Docker01 ~]# 例2:删除键值对[root@Docker01 ~]# etcdctl set key1 value1value1[root@Docker01 ~]# etcdctl rmdir key1 删除键值对,格式可以是etcdctl rmdir 而不用加键对应的值。PrevNode.Value: value1[root@Docker01 ~]# etcdctl get key1Error: 100: Key not found (/key1) [22][root@Docker01 ~]# etcdctl ls[root@Docker01 ~]# ls 列出目录(默认为根目录)下的键或者子目录,默认不显示子目录中的内容格式:etcdctl ls 例:[root@Docker01 ~]# etcdctl mkdir /keydir1/key1 value1[root@Docker01 ~]# etcdctl mkdir /keydir2/[root@Docker01 ~]# etcdctl ls/keydir1/keydir2[root@Docker01 ~]# 三、非数据库操作 backup备份 etcd 的数据。选项--data-dir etcd 的数据目录--backup-dir 备份到指定路径 watch检测一个键值的变化格式:etcdctl watch --forever 一直监测,直到用户按 CTRL+C 退出--after-index '0' 在指定 index 之前一直监测--recursive 返回所有的键值和子键值 exec-watch检测一个键值的变化,一旦键值发生更新,就执行给定命令格式:etcdctl exec-watch -- 选项:--after-index '0' 在指定 index 之前一直监测--recursive 返回所有的键值和子键值 member通过list、add、remove命令列出、添加、删除etcd实例到etcd集群中。[root@Docker01 ~]# etcdctl member list8e9e05c52164694d: name=default peerURLs=http://localhost:2380 clientURLs=http://localhost:2379 isLeader=true[root@Docker01 ~]# 四、命令选项: --debug 输出 cURL 命令,显示执行命令的时候发起的请求--no-sync 发出请求之前不同步集群信息--output, -o 'simple' 输出内容的格式 (simple 为原始信息,json 为进行json格式解码,易读性好一些)--peers, -C 指定集群中的同伴信息,用逗号隔开 (默认为: "127.0.0.1:4001")--cert-file HTTPS 下客户端使用的 SSL 证书文件--key-file HTTPS 下客户端使用的 SSL 密钥文件--ca-file 服务端使用 HTTPS 时,使用 CA 文件进行验证--help, -h 显示帮助命令信息--version, -v 打印版本信息 https://yeasy.gitbooks.io/docker_practice/content/etcd/intro.html资料: