hadoop安装和维护09--深入理解Linux修改hostname

来源:互联网 发布:java中set集合的用法 编辑:程序博客网 时间:2024/05/17 08:51

本文是由于Ambari安装HDP时, 选择FDQN, 一致出现问题,需要深入了解hostname, FDQN.

http://blog.chinaunix.net/uid-561779-id-3154203.html
http://www.cnblogs.com/kerrycode/p/3595724.html

一、与hostname 有关的文件,一般修改hostname, 就是修改/etc/hosts/etc/sysconfig/network这两个文件

1、/etc/hosts:

[root@rhel2 ~]# cat /etc/hosts127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6192.168.1.105    rhel2.localdomain       rhel2192.168.1.103    rhel1.chb.hdp   rhel1

2、/etc/sysconfig/network:

[root@rhel2 ~]# cat /etc/sysconfig/networkNETWORKINT=yesHOSTNAME=rhel2

二、修改/etc/sysconfig/network中的hostname:

修改后/etc/sysconfig/network

#/etc/hosts中内容[root@rhel2 ~]# cat /etc/hosts127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6#/etc/sysconfig/network内容:[root@rhel2 ~]# cat /etc/sysconfig/networkNETWORKING=yesHOSTNAME=localhost.localdomain   #由rhel2改为新值[root@rhel2 ~]# 

再来查看hostname:hostname并没有该为localhost.localdomain

[root@rhel2 ~]# hostnamerhel2.chb.hdp[root@rhel2 ~]#

重启系统: hostname 改变了, 那么 是修改/etc/sysconfig/network中的hostname, 需要重启系统,才可生效?

[root@localhost ~]# hostnamelocalhost.localdomain

Google了一些英文文档资料才知道,hostname是Linux系统下的一个内核参数,它保存在/proc/sys/kernel/hostname下,但是它的值是Linux启动时从rc.sysinit读取的。

/etc/rc.d/rc.sysinit中HOSTNAME的取值来自/etc/sysconfig/network下的HOSTNAME,代码如下所示:

HOSTNAME=`/bin/hostname`HOSTTYPE=`uname -m`unamer=`uname -r`set -mif [ -f /etc/sysconfig/network ]; then. /etc/sysconfig/networkfiif [ -z "$HOSTNAME" -o "$HOSTNAME" = "(none)" ]; then    HOSTNAME=localhostfi
hostname is a kernel parameter which stores hostname of the system. Its location is"/proc/sys/kernel/hostname"The value for this parameter is loaded to kernel by rc.sysinit file during the boot process.

三、修改/proc/sys/kernael/hostname

这里写图片描述

重启系统后:
这里写图片描述

四、hostname跟/etc/hosts 下配置有关系吗?

   如果从我上面的实验来看,其实hostname跟/etc/hosts下的配置是没有关系的。hostname的修改、变更完全不依赖hosts文件。 其实hosts文件的作用相当如DNS,提供IP地址到hostname的对应。早期的互联网计算机数量少,单机hosts文件里足够存放所有联网计算机。不过随着互联网的发展,这就远远不够了。于是就出现了分布式的DNS系统。由DNS服务器来提供类似的IP地址到域名的对应。具体可以man hosts查看相关信息。
  Linux系统在向DNS服务器发出域名解析请求之前会查询/etc/hosts文件,如果里面有相应的记录,就会使用hosts里面的记录。/etc/hosts文件通常里面包含这一条记录:

127.0.0.1 localhost.localdomain localhost

hosts文件格式是一行一条记录,分别是IP地址 、hostname、 aliases,三者用空白字符分隔,aliases可选。

127.0.0.1到localhost这一条建议不要修改,因为很多应用程序会用到这个,比如sendmail,修改之后这些程序可能就无法正常运行。

但是呢,其实hostname也不是说跟/etc/hosts一点关系都没有。在/etc/rc.d/rc.sysinit中,有如下逻辑判断,当hostname为localhost或localhost.localdomain时,将会使用接口IP地址对应的hostname来重新设置系统的hostname。

# In theory there should be no more than one network interface active# this early in the boot process -- the one we're booting from.# Use the network address to set the hostname of the client. This# must be done even if we have local storage.ipaddr=if [ "$HOSTNAME" = "localhost" -o "$HOSTNAME" = "localhost.localdomain" ]; then        ipaddr=$(ip addr show to 0/0 scope global | awk '/[[:space:]]inet / { print gensub("/.*","","g",$2) }')         if [ -n "$ipaddr" ]; then                 eval $(ipcalc -h $ipaddr 2>/dev/null)                 hostname ${HOSTNAME}                fi fi      

这里写图片描述
重启后:
这里写图片描述

/etc/sysconfig/network中的hostname由localhost.localdomain改为rhel, 重启系统后:hostname 和/etc/sysconfig/network中一致
这里写图片描述

五、修改了hostname后,如何使其立即生效而不用重启操作系统。

5.1、方法1:修改了/etc/sysconfig/network下的HOSTNAME后,然后使用echo servername > /proc/sys/kernel/hostname

 修改了`/etc/sysconfig/network`下的HOSTNAME后 [root@rhel ~]# echo Test >/proc/sys/kernel/hostname

注意当前会话还是不会变化,但是后续新建会话则会生效。

5.2、方法2:修改了/etc/sysconfig/network下的HOSTNAME后,然后使用sysctl kernel.hostname命令使其立即生效:

  修改了/etc/sysconfig/network下的HOSTNAME后 [root@DB-Server ~]# echo Test >/proc/sys/kernel/hostname

注意当前会话还是不会变化,但是后续新建

5.3、方法3:修改了/etc/sysconfig/network下的HOSTNAME后,然后使用hostname命令使其生效

 修改了/etc/sysconfig/network下的HOSTNAME后 [root@Test ~]# hostname DB-Server

注意当前会话还是不会变化,但是后续新建会话会生效。

其实,这几种方式只是结合永久性修改和临时性修改hostname,使其不必重启Linux服务器,

修改hostname有几种方式?

1:  hostname DB-Server                                   --运行后立即生效(新会话生效),但是在系统重启后会丢失所做的修改2:  echo DB-Server  > /proc/sys/kernel/hostname          --运行后立即生效(新会话生效),但是在系统重启后会丢失所做的修改3: sysctl kernel.hostname=DB-Server                      --运行后立即生效(新会话生效),但是在系统重启后会丢失所做的修改4: 修改/etc/sysconfig/network下的HOSTNAME变量             --需要重启生效,永久性修改。

如何查看hostname值, 以那个为准?
more /proc/sys/kernel/hostname

[root@DB-Server ~]# hostnameDB-Server[root@DB-Server ~]# more /proc/sys/kernel/hostnameDB-Server[root@DB-Server ~]# more /etc/sysconfig/networkNETWORKING=yesNETWORKING_IPV6=yesHOSTNAME=localhost.localdomain

六、总结

1、 修改主机名

vi /etc/sysconfig/network            NETWORKING=yesHOSTNAME=NEWHOSTNAME       #修改该值作为主机名,如:NEWPC

2、修改hosts

vi /etc/hosts127.0.0.1 localhost.localdomain localhost#该行强烈建议保留192.168.0.1 rhel.lpwr.net rhel       #必须有三个字段:IP、FQDN、HOSTNAME

3、修改ip

vi /etc/sysconfig/network-scripts/eth0     #编辑指定网络接口配置文件DEVICE=eth0              #指定接口名称ONBOOT=yes               #系统启动时加载BOOTPROTO=static        #IP地址静态配置,若该值为“dhcp”则为动态获得IPADDR=192.168.0.1      #设置IP地址NETMASK=255.255.255.0   #设置子网掩码GATEWAY=192.168.0.254   #设置默认网关

4.修改网关(可选)

vim /etc/sysconfig/network增加一条网关信息GATEWAY=192.168.1.1

5,修改DNS

vi /etc/resolv.conf        #指定当前主机的DNS服务器,最多可指定三个search lpwr.net             #设置当前主机的默认查找域nameserver 192.168.0.100   #指定首选DNS服务器nameserver 172.16.254.2

6.重新加载网络配置

/etc/init.d/network restartService network restart
0 0
原创粉丝点击