您的位置:首页 > 运维架构 > Linux

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

2016-12-25 18:30 573 查看
本文是由于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/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.105    rhel2.localdomain       rhel2
192.168.1.103    rhel1.chb.hdp   rhel1


2、
/etc/sysconfig/network
:

[root@rhel2 ~]# cat /etc/sysconfig/network
NETWORKINT=yes
HOSTNAME=rhel2


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

修改后
/etc/sysconfig/network


#/etc/hosts中内容
[root@rhel2 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

#/etc/sysconfig/network内容:
[root@rhel2 ~]# cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=localhost.localdomain   #由rhel2改为新值
[root@rhel2 ~]#


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

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


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

[root@localhost ~]# hostname
localhost.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 -m

if [ -f /etc/sysconfig/network ]; then

. /etc/sysconfig/network

fi

if [ -z "$HOSTNAME" -o "$HOSTNAME" = "(none)" ]; then

HOSTNAME=localhost

fi


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 ~]# hostname

DB-Server

[root@DB-Server ~]# more /proc/sys/kernel/hostname

DB-Server

[root@DB-Server ~]# more /etc/sysconfig/network

NETWORKING=yes

NETWORKING_IPV6=yes

HOSTNAME=localhost.localdomain


六、总结

1、 修改主机名

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


2、修改hosts

vi /etc/hosts
127.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 restart
Service network restart
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux