我们在工作中经常会遇到创建云主机的情况,但是很少遇到给云主机改主机名的情况。

一台云主机的 hostname  一旦确定可能会涉及到很多东西,有些应用是依赖hostname的。

今天devops组的同学发来一个消息,说他想改一台云主机的 hostname,但是改不成功。当时第一个想法就是 为啥要改hostname?难道在创建之前没想好? 看了一下这台云主机所在的环境,发现是Ultimate环境的,心想,折腾折腾也是可以的。

这台云主机使用的系统是 centos7,该同学使用的是直接修改配置文件的方法来修改的主机名

  1. # 编辑 /etc/hostname 文件
  2. NewVMHostname # 这里写的是hostname

改完之后,他重启了vm,重启之后发现过了一小会,大概十几秒之后,主机名变成了 原来的主机名 OldVmHostname 。试了几次发现都是这样。(幸亏是虚拟机,一分钟之内就可以完成重启,要是像物理机每次都要十几分钟完成重启,估计要疯了。)

过去看了一下,感觉好奇怪,这样的话,应该是有一个进程去修改了配置文件,这样的话 我应该用 lsof 查看,然而并没有看出什么,估计是进程操作的太快,在我发现之前已经完成了操作,退出了,

那么去看看系统日志吧,在 /var/log/messages中看到了这么几行:

  1. Dec 20 06:19:44 localhost journal: [CLOUDINIT] stages.py[INFO]: Loaded datasource DataSourceOpenStack - DataSourceOpenStack [net,ver=2]
  2. Dec 20 06:19:44 localhost dracut: *** Stripping files done ***
  3. Dec 20 06:19:44 localhost dracut: *** Generating early-microcode cpio image ***
  4. Dec 20 06:19:44 localhost dracut: *** Constructing GenuineIntel.bin ****
  5. Dec 20 06:19:44 localhost dracut: *** Store current command line parameters ***
  6. Dec 20 06:19:44 localhost dracut: *** Creating image file ***
  7. Dec 20 06:19:45 localhost journal: [CLOUDINIT] cc_growpart.py[INFO]: '/' resized: changed (/dev/vda, 1) from 8588886016 to 10732941824
  8. Dec 20 06:19:45 localhost dbus-daemon: dbus[451]: [system] Activating via systemd: service name='org.freedesktop.hostname1' unit='dbus-org.freedesktop.hostname1.service'
  9. Dec 20 06:19:45 localhost dbus[451]: [system] Activating via systemd: service name='org.freedesktop.hostname1' unit='dbus-org.freedesktop.hostname1.service'
  10. Dec 20 06:19:45 localhost systemd: Starting Hostname Service...
  11. Dec 20 06:19:45 localhost dbus-daemon: dbus[451]: [system] Successfully activated service 'org.freedesktop.hostname1'
  12. Dec 20 06:19:45 localhost dbus[451]: [system] Successfully activated service 'org.freedesktop.hostname1'
  13. Dec 20 06:19:45 localhost systemd: Started Hostname Service.
  14. Dec 20 06:19:45 localhost systemd-hostnamed: Changed static host name to 'test7.localdomain'
  15. Dec 20 06:19:45 localhost systemd-hostnamed: Changed host name to 'test7.localdomain'

从日志来看,应该是 systemd-hostnamed 启动后,修改了主机名。

那么就这个服务disable掉好了。

  1. systemctl disable systemd-hostnamed.service

接着继续改主机名、重启。结果发现还是不行,在messages里还是看到了 systemd-hostnamed 服务启动了,那么应该是有其他的进程调用了  systemd-hostnamed 服务。

最可能的应该就是 cloudinit 进程了。

查了一下,发现cloudinit 进程可以做的事情中包含这么几件事情。

  • setting a default locale
  • setting hostname   # 看这里
  • generate ssh private keys
  • adding ssh keys to user's .ssh/authorized_keys so they can log in
  • setting up ephemeral mount points

cloudinit 是有一个配置文件的,在其中可以发现这么几行:

  1. cloud_init_modules:
  2. - migrator
  3. - bootcmd
  4. - write-files
  5. - growpart
  6. - resizefs
  7. - set_hostname
  8. - update_hostname # 看到这里 我心里感觉舒心了很多
  9. - update_etc_hosts
  10. - rsyslog
  11. - users-groups
  12. - ssh

系统启动后,cloudinit 会进行初始化,初始化的时候,会更新主机名,那么这就会导致每次我们重启云主机之后 hostname都会被cloudinit 重设。

我们 只要将  - update_hostname 这一行注释掉就好了。问题解决。

注意:

  有的同学可能会想到,nova rename 可以修改VM的名字。但是你会发现即使你用了nova rename 修改了 VM 的名字,VM 内部的hostname 并没有变化。这是为什么呢?

这里给你们看一下数据库就明白了:

  1. mysql> select hostname,host,display_name from instances where hostname="Test7"\G
  2. *************************** 1. row ***************************
  3. hostname: test7
  4. host: compute10
  5. display_name: test-test

在nova库中的instances 表中,我们会发现这么两个字段 一个是hostname 一个是display_name ,我们使用 nova rename 修改的是 display_name的指,hostname 的值并不会变化。

聪明的你想到了没?

openstack cloudinit 遇坑记的更多相关文章

  1. Cat搭建遇坑记

    1. Cat搭建遇坑记 1.1. 报错 服务端启动 Unable to get component: class com.dianping.cat.analysis.TcpSocketReceiver ...

  2. mysql-5.7.9-winx64遇坑记

    昨天在mysql5.0上导入sql文件时,一直卡在一个地方报错,也没仔细分析,认为应该是mysql版本太低不支持这个语法而已.遂决心下载一个最新版本的mysql,却浑然不知前面无数的坑已经埋伏好了在等 ...

  3. layui表单引入ueditor遇坑记

    1. 错误示例:表单容器是div标签则无法获取ueditor的内容 注:对于普通的表单元素表单容器是div也都能获取 <!DOCTYPE html> <html> <he ...

  4. Spark踩坑记——Spark Streaming+Kafka

    [TOC] 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark strea ...

  5. Spark踩坑记——数据库(Hbase+Mysql)

    [TOC] 前言 在使用Spark Streaming的过程中对于计算产生结果的进行持久化时,我们往往需要操作数据库,去统计或者改变一些值.最近一个实时消费者处理任务,在使用spark streami ...

  6. .NET Core爬坑记 1.0 项目文件

    前言: 之所以要写这个系列是因为在移植项目到ASP.NET Core平台的过程中,遇到了一些“新变化”,这些变化有编译方面的.有API方面的,今天要讲的是编译方面的一些问题.我把它们整理后分享出来,以 ...

  7. 【踩坑记】从HybridApp到ReactNative

    前言 随着移动互联网的兴起,Webapp开始大行其道.大概在15年下半年的时候我接触到了HybridApp.因为当时还没毕业嘛,所以并不清楚自己未来的方向,所以就投入了HybridApp的怀抱. Hy ...

  8. Spark踩坑记——共享变量

    [TOC] 前言 Spark踩坑记--初试 Spark踩坑记--数据库(Hbase+Mysql) Spark踩坑记--Spark Streaming+kafka应用及调优 在前面总结的几篇spark踩 ...

  9. Spark踩坑记——从RDD看集群调度

    [TOC] 前言 在Spark的使用中,性能的调优配置过程中,查阅了很多资料,之前自己总结过两篇小博文Spark踩坑记--初试和Spark踩坑记--数据库(Hbase+Mysql),第一篇概况的归纳了 ...

随机推荐

  1. Dapper学习笔记(4)-事务

    Dapper中对事务的处理也非常简单,如下代码所示: private void DapperTransaction() { using (IDbConnection con = OpenConnect ...

  2. WebAPI返回数据类型解惑[转]

    最近开始使用WebAPI,上手很容易,然后有些疑惑 1.WebAPI默认返回什么数据类型,json还是xml? 2.怎么修改WebAPI的返回数据类型,我用IE浏览器请求返回的数据都是JSON格式的, ...

  3. jQuery性能优化

    1. 优化选择器执行的速度 优先使用ID与标记选择器 在jQuery中,访问DOM元素的最快方式是通过元素ID号,其次是通过元素的标记.因为前者源于JavaScript中的document.getEl ...

  4. Spring3.0 与 MyBatis框架 整合小实例

    本文将在Eclipse开发环境下,采用Spring MVC + Spring + MyBatis + Maven + Log4J 框架搭建一个Java web 项目. 1. 环境准备: 1.1 创建数 ...

  5. 网页for循环get测试

    for(var i=0;i<10000;i++) { var request = new XMLHttpRequest(); request.open("GET"," ...

  6. 实验一、熟悉DOS命令

    实验一.熟悉DOS命令 实验一.熟悉DOS命令 一.        实验目的 1.从操作系统理论的观点来了解和掌握DOS有关用户接口的特点: 2.熟悉常用DOS操作命令(md.cd.rd.copy.m ...

  7. POJ 2976

    http://poj.org/problem?id=2976 01分数规划问题,可以舍掉k组 01分数规划用于解决的经典问题是最优比率生成树 解法见http://www.cnblogs.com/lot ...

  8. SQL server2000更改数据库名称

    如果是SQL Server 2005可以直接右键重命名,但是SQL Server 2000中不能直接改,可以用sp_renamedb. 1.方法一(物理法): 把Old数据库改为New数据库 打开“企 ...

  9. asp.net fileupload上传大文件时提示404.13错误

    IIS 7 默认文件上传大小时30M 要突破这个限制,需要做如下操作: 1. 修改IIS的applicationhost.config     打开 %windir%\system32\inetsrv ...

  10. A - 迷宫问题

      Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Status Pra ...