Redis重新加载configuration更改,而不重新启动服务

当我通过puppet更改redisconfiguration时,除了重新启动redis服务之外,还有更好的方式来加载configuration吗?

是的,你可以做到这一点,但它会涉及到在Puppet中编写自己的客户提供者。 这不是微不足道的,但如果你愿意减less你关心的设置会更简单。

一个简单的情况可能只是dynamic地设置主从设备。 我们将这些parameter passing给你的Redis类。 当然,我们将模板redis.conf,并将这些设置放在当前相同的位置。 那么你需要一些类似下面的语法,通过语义应该可能更具有performance力。

redisconf { 'master': enable => 'true', } 

redisconf将会是你用Ruby编写的自定义提供者。 它需要连接到Redis服务器的端口(这是另一个input和默认设置)。 一旦你连接你需要发出一个信息,并获取结果作为一个散列。

第一步是确定你有什么版本的Redis。 如果它是2.4 / 2.6,你可以使用config set和config get ,否则你将使用我们已经有的散列,并手动运行命令。 在我们的例子中,你会检查angular色的价值。 如果是主人,什么也不要做。 如果它是一个奴隶,那么执行“奴隶没有人”,并生成一个Puppet事件。 假设有不同,redisconf Puppet提供程序需要进行更改并理想地validation或抛出错误。 把整个东西包装在木偶主义中,你就会被设定好。

如果你决定采取的话,这将是一个不错的小项目。

不,configuration重新加载(当前)是不可能的。

如果你操作可通过CONFIG SET调整的设置,你可以在运行的实例中设置它们,并跳过重新启动。
我不会build议在正常情况下这样做,因为您可能会破坏configuration文件,并且只有在下次重新启动该实例时才会注意到这一点。

只要您通过保存指令设置了持久性,重新启动(大部分)是非破坏性的。

如果redis进程没有持久性,可以用CONFIG SET将其打开

 telnet 127.0.0.1 1234 CONFIG SET SAVE "900 1 300 10 60 10000" 

检查是否通过转到由dir config值指定的目录并查找等于dbfilenameconfiguration值的文件来创build数据备份。 一旦创build完成,您可以编辑configuration并重新启动redis,您将在日志中看到如下所示的内容:

 [17296] 18 Nov 00:38:32.253 * DB loaded from disk: 0.158 seconds 

Viola,你已经重新启动了redis并保存了大部分数据,我排除了备份文件创build和重启之间发生的事情。