1.流程:
服务器启动时从zookeeper中读取加密后的字符串,从启动容器目录下的/root/.ssh/serivce_sign_rsa_private_key.pem 中读取私钥,使用RSA私钥解密的方式(各种语言中有自己的方法)解密出数据库密码,然后用解密密码创建数据库连接。
2. zookeeper:
zookeeper 各种环境集群地址和秘钥使用方式
以测试环境配置为例说明:
zookeeper是一个类似Redis的分布式存储的集群,以树形方式存储节点
Add Node:可以在父节点下添加新的子节点
Add Property: 在当前Node下添加KEY-VALUE键值对存储信息
Delete:可删除键值对和节点
Export:可导出该节点下所有信息
Import: 可以把导出的信息放在text中,导入到里面
例子:
zookeeper可以使用代码对数据进行增删改查 这里以查询为例
string test = ZooKeeper();
var conf = new ZookeeperClient(ZooKeeper(), timeout);
try
{
conf.QueryPath = GetQueryPath();
Console.WriteLine("客户端开始连接zookeeper服务器...");
Console.WriteLine($"连接状态:{conf.ZK.getState()}");
Thread.Sleep(3000);//注意:为什么要加上这行代码,如果不加会出现什么问题
Console.WriteLine($"连接状态:{conf.ZK.getState()}");
if ( conf.ZK.existsAsync(conf.QueryPath, false) == null)
{
return String.Empty;
}
string configData = conf.ReadConfigDataAsync().Result;
Console.WriteLine("节点【{0}】目前的值为【{1}】。", conf.QueryPath, configData);
return configData;
}
catch (Exception ex)
{
if (conf.ZK == null)
{
Console.WriteLine("已关闭ZooKeeper的连接。");
return String.Empty;
}
Console.WriteLine("抛出异常:{0}【{1}】。", Environment.NewLine, ex.ToString());
}
finally
{
conf.Close();
Console.WriteLine("已关闭ZooKeeper的连接。");
//Console.ReadLine();
}
RSA解密:
不同语言有不同的RSA解密类库, 本次加密方式是带签名的加密,如果在例子中解密没问题而使用运维的解密有问题请参考数字签名的问题。