启动
启动从源码 /etcdmain/main.go 中的main函数开始
func Main() {
checkSupportArch() // 检查系统是否支持
if len(os.Args) > 1 { // 获取入参
cmd := os.Args[1] // 获取启动命令
if covArgs := os.Getenv("ETCDCOV_ARGS"); len(covArgs) > 0 {
args := strings.Split(os.Getenv("ETCDCOV_ARGS"), "\xe7\xcd")[1:]
rootCmd.SetArgs(args)
cmd = "grpc-proxy"
}
switch cmd {
case "gateway", "grpc-proxy":
if err := rootCmd.Execute(); err != nil {
fmt.Fprint(os.Stderr, err)
os.Exit(1)
}
return
}
}
startEtcdOrProxyV2()
}
上面仔细去看,前面是根据命令行输入的第一个参数去启动不同的代码逻辑
后面的startEtcdOrProxyV2()则是启动etcd server的函数
命令行输入
我们来查看一下etcd命令的使用帮助:
$ ./etcd -help
Usage:
etcd [flags]
Start an etcd server.
etcd --version //查看版本
Show the version of etcd.
etcd -h | --help //获取帮助
Show the help information about etcd.
etcd --config-file //设置配置文件
Path to the server configuration file.
etcd gateway //启动 L4 TCP网关代理
Run the stateless pass-through etcd TCP connection forwarding proxy.
etcd grpc-proxy //L7 grpc 代理
Run the stateless etcd v3 gRPC L7 reverse proxy.
可以看到有三个启动命令
./etcd //启动etcd服务
./etcd gateway start //启动tcp网关代理
./etcd grpc-proxy start //启动grpc网关代理
其中,代码中的rootCmd,这个是一个叫corba的在github上的开源库,它的设计目的是提供一个编写/生成交互式命令程序的框架.
简单的说,它就是可以添加命令和子命令的插件库,查看 gateway.go的源码可以发现
var (
rootCmd = &cobra.Command{ (1)
Use: "etcd",
Short: "etcd server",
SuggestFor: []string{"etcd"},
}
)