etcd+confd+nginx实现服务注册及自动发现

etcd:etcd是一个高可用的键值存储系统,主要用于共享配置和服务发现。
confd:confd是一个配置管理工具。通过查询etcd,结合配置模板引擎生成正式配置文件,同时具备定期探测机制(根据参数手动指定间隔秒数)来生成新的配置,配置变更自动重载。

# 安装 etcd 单机版,直接github下载二进制版本即可运行。

nohup etcd --listen-client-urls http://0.0.0.0:2379 --advertise-client-urls http://0.0.0.0:2379 > etcd.log &

# 安装 confd 直接github下载二进制版
# 创建配置文件目录及模板目录

mkdir -p /etc/confd/{conf.d,templates}

# 配置文件内容,注意后缀名

[root@localhost confd]# cat conf.d/test2.toml
[template]
src = "nginx2.conf.tpl"
dest = "/tmp/nginx2.conf"
keys = [
 "/myapp/web/nginx2/user",
 "/myapp/web/nginx2/root",
 "/myapp/web/nginx2/upstream"
]

check_cmd = "/usr/sbin/nginx -t -c {{.dest}}"
reload_cmd = "/usr/sbin/nginx -s reload"

如果有多个,可以写多个 [template]

注释:
src 模板文件路径
dest 生成的配置文件路径
keys 去etcd抓取的key
check_cmd 可以检测配置文件是否有问题
reload_cmd 是检测成功才执行的命令

# 模板文件内容

aaa
bbb
ccc
user = {{getv "/myapp/web/nginx2/user"}}
root = {{getv "/myapp/web/nginx2/root"}}
ddd
eee

upstream aaa {
 {{range getvs "/myapp/web/nginx2/upstream/*"}}
 server {{.}}
 {{end}}
}

#这里随便写了点东西测试效果
这样通过读src的模板路径,生成到dest路径下,根据定义的keys去etcd抓取回来后,赋值给模板中。
可以看到有getv和getvs,前面是抓取单个key,getvs是批量抓取,根据定义的前缀(key的前缀)循环写入模板。(比如nginx的upstream会用到多个server)

# 往 etcd 中添加key

etcdctl set /myapp/web/nginx2/user www
etcdctl set /myapp/web/nginx2/root /home/www2
etcdctl set /myapp/web/nginx2/upstream/s1 1.1.1.1:80
etcdctl set /myapp/web/nginx2/upstream/s1 1.1.1.2:80
etcdctl set /myapp/web/nginx2/upstream/s1 1.1.1.3:80

# 运行 confd ,每隔1秒抓取一次etcd

confd -interval=1 -backend etcd -node http://192.168.10.64:2379

# 运行 confd ,单次

confd -onetime -backend etcd -node http://192.168.10.64:2379

# 查看生成结果

[root@localhost ~]# cat /tmp/nginx2.conf
aaa
bbb
ccc
user = www
root = /home/www2
ddd
eee

upstream aaa {

 server 1.1.1.2:80

 server 1.1.1.3:80

 server 1.1.1.3:80

}

这样就自动生成想要的配置文件了。

评论关闭

windows远程桌面提示 CredSSP加密Oracle修正 问题

win10远程连接server2008提示出现错误:
出现身份验证错误
要求的函数不受支持
这可能是由于 CredSSP加密Oracle修正
原因可能是win10更新以后出现的,版本大都是 Microsoft Windows [Version 10.0.17134.48] 这个版本。

解决方法一,修改组策略,但是家庭版win10还打不开组策略,可能有其它方法调出来,这里不用这个方法。
本地组策略:
计算机配置>管理模板>系统>凭据分配>加密Oracle修正
选择启用并选择易受攻击。

解决方法二,修改注册表。保存以下内容为 .reg 文件,导入注册表。

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\CredSSP\Parameters]
"AllowEncryptionOracle"=dword:00000002

再次连接即可。

评论关闭

mysql打开普通日志

打开普通日志比较耗资源,所以一般只开启错误日志。

普通日志里可以看到sql语句。可以用来协助排错。

# 查看general_log开关状态
SHOW VARIABLES LIKE ‘%general%’;
会返回两条数据,一个是开关状态,一个是日志路径。

# 临时打开general_log日志
SET GLOBAL general_log=’ON’;

# 关闭
SET GLOBAL general_log=’OFF’;

评论关闭