虚拟机模板禁用了ipv6,创建了虚拟机
启动nfs报错,报错如下
rpcbind service fails to start with below error message in /var/log/messages
|
|
I got this error the other day while working on Red Hat Enterprise Linux 7.3 and after digging for a while I got to know there is a sort of a BUG in RHEL 7.3.
I found a BUG reported for this issue and I was facing the exact one.
https://bugzilla.redhat.com/show_bug.cgi?id=1402961
As explained by one of the engineers on the above page
|
|
Just to summarise if you have disabled ipv6 using your sysctl configurations then it is disabled only on kernel level but not via GRUB so it is not disabled completely hence systemd will attempt to make a connection on port 111 on any ipv6 address, [::]:111 during the boot up.
To know more on how to disable ipv6 follow below link
How to disable or enable ipv6 in Linux
/etc/sysctl.conf
|
|
grub级别禁用ipv6
|
|
NFS(Network File System)即网络文件系统,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。
RPC(NFS服务需要依赖RPC服务,这个比较重要) 要想了解NFS,必然要提到RPC这个服务。 因为NFS支持的功能还是比较多的,并且不同的功能都会使用不同的程序来启动。每启动一个功能就会启用一些端口来传输数据,因此NFS的功能所对应的端口才没有固定,而是采用随机取用一些未被使用的小于1024的端口来作为传输之用。但如此一来又造成客户端要连接服务器时的困扰,因为客户端要知道服务器端的相关端口才能够联机,此时我们需要远程过程调用(RPC)的服务。 RPC最主要的功能就是指定每个NFS功能所对应的端口号,并且回报给客户端,让客户端可以连接到正确的端口上。当服务器在启动NFS时会随机选用数个端口,并主动地向RPC注册。因此RPC可以知道每个端口对应的NFS功能。然后RPC固定使用端口111来监听客户端的请求并回报客户端正确的端口,所以可以让NFS的启动更为容易。 注意,启动NFS之前,要先启动RPC服务;否则NFS无法向RPC注册。另外,重新启动RPC时原本注册的数据会不见,因此RPC重新启动后它管理的所有程序都需要重新启动以重新向RPC注册,比如NFS服务。
其实,我们可以简单的理解为:NFS当作RPC服务中的一种,同时将RPC服务当作NFS服务器与NFS客户端的中间接口人,就是说NFS客户端访问NFS服务器,必须经过RPC这个接口人,才可以去访问。
1、由程序在NFS客户端发起存取文件的请求,客户端本地的RPC(rpcbind)服务会通过网络向NFS服务端的RPC的111端口发出文件存取功能的请求。`
2、NFS服务端的RPC找到对应已注册的NFS端口,通知客户端RPC服务。
3、客户端获取正确的端口,并与NFS daemon联机存取数据。
4、存取数据成功后,返回前端访问程序,完成一次存取操作。
安装rpcbind、nfs-utils
|
|
设置开机自启动
|
|
查看当前服务状态(暂时不要启动nfs-server, 等下面固定好nfs服务端口后再启动,可以避免重启电脑)
|
|
看nfs服务向rpc注册的端口信息(当前nfs-server 没有启动,所有没有注册端口)
|
|
如果你此时启动nfs,可以发现nfs 随机注册的端口如下(暂时不要启动nfs-server, 等下面固定好nfs服务端口后再启动,可以避免重启电脑)
|
|
NFS 的防火墙特别难设定规则,为什么呢?因为除了固定的port 111, 2049 之外, 还有很多不固定的端口是由rpc.mountd, rpc.rquotad 等服务所开启的。因此我们需要在/etc/sysconfig/nfs 指定特定的端口,这样每次启动nfs 时,相关服务启动的端口就会固定,如此一来, 我们就能够设定正确的防火墙了!
固定端口nfs 2049、portmapper111 ,另外3个服务端口可设置为mountd 892、rpc.statd 662、 nlockmgr 32803、32769
具体配置:
1.修改/etc/sysconfig/nfs文件,将下列内容的注释去掉,如果没有则添加:
|
|
2. vim /etc/modprobe.d/lockd.conf
|
|
固定之后,启动nfs-server服务,后执行rpcinfo -p
命令,查看nfs向rpc注册的端口
(如果你已经启动过nfs-server服务,则光重启NFS服务不能解决问题,需要重启电脑,才能将端口固定)
|
|
编辑firewalld中nfs服务的配置文件:
|
|
将刚才固定的那几个端口加入配置文件:
|
|
开启nfs
|
|
|
|
说明:
NFS共享目录:
|
|
NFS客户端地址:
|
|
参数:
参数值 | 内容说明 |
---|---|
rw ro | 该目录分享的权限是可擦写(read-write) 或只读(read-only),但最终能不能读写,还是与文件系统的rwx 及身份有关。 |
sync async | sync 代表数据会同步写入到内存与硬盘中,async 则代表数据会先暂存于内存当中,而非直接写入硬盘! |
no_root_squash root_squash | 客户端使用NFS 文件系统的账号若为 root 时,系统该如何判断这个账号的身份?预设的情况下,客户端root 的身份会由root_squash 的设定压缩成nfsnobody, 如此对服务器的系统会较有保障。但如果你想要开放客户端使用root 身份来操作服务器的文件系统,那么这里就得要开 no_root_squash 才行! |
all_squash | 不论登入NFS 的使用者身份为何, 他的身份都会被压缩成为匿名用户,通常也就是 nobody(nfsnobody) 啦! |
anonuid anongid | anon 意指anonymous (匿名者) 前面关于*_squash 提到的匿名用户的UID 设定值,通常为nobody(nfsnobody),但是你可以自行设定这个UID 的值!当然,这个UID 必需要存在于你的/etc/passwd 当中!anonuid 指的是UID 而anongid 则是群组的GID 啰。 |
假如uid=1001 gid=1001是应用用户
|
|
重新加载nfs配置
|
|
客户端查看nfs服务器挂载情况
|
|
挂载测试
|
|
写入fstab
|
|
因为ID不一致的问题 建议Client端新建相同uid和gid的用户
参考:autofs
|
|
将192.168.0.103:/data目录挂载到192.168.0.104的/dir1/dir2目录
查看服务端共享
|
|
修改客户端vim /etc/auto.master
,添加以下内容, 意思是系统访问dir1下面的文件的时候,去/etc/auto.nfs 去查找nfs的配置
|
|
/etc/auto.nfs 内容如下,文件需要新建
|
|
修改客户端vim /etc/auto.master
,添加以下内容,
|
|
/etc/auto.nfs 内容如下,文件需要新建
|
|
1 . 在CentOS7服务器上配置NFS服务并共享出目录后,发现客户端不能Mount共享出的目录,错误提示:
|
|
关闭服务器端的防火墙后,问题解决,说明是防火墙端口的问题。
2 client端无法读写
CHAPTER 8. NETWORK FILE SYSTEM (NFS)
https://www.howtoforge.com/tutorial/setting-up-an-nfs-server-and-client-on-centos-7/
]]>A typical Keepalived high-availability configuration consists of one master server and one or more backup servers. One or more virtual IP addresses, defined as VRRP instances, are assigned to the master server’s network interfaces so that it can service network clients. The backup servers listen for multicast VRRP advertisement packets that the master server transmits at regular intervals. The default advertisement interval is one second. If the backup nodes fail to receive three consecutive VRRP advertisements, the backup server with the highest assigned priority takes over as the master server and assigns the virtual IP addresses to its own network interfaces. If several backup servers have the same priority, the backup server with the highest IP address value becomes the master server.
The following example uses Keepalived to implement a simple failover configuration on two servers. One server acts as the master, the other acts as a backup, and the master server has a higher priority than the backup server.
the virtual IP address 10.0.0.100 is initially assigned to the master server (10.0.0.71). When the master server fails, the backup server (10.0.0.72) becomes the new master server and is assigned the virtual IP address 10.0.0.100.
/etc/keepalived/keepalived.conf
on the master server:
|
|
/etc/keepalived/keepalived.conf
The configuration of the backup server is the same except for the values of notification_email_from
, state
, priority
, and possibly interface
if the system hardware configuration is different:
|
|
查看IP 绑定
|
|
另外切换时 /var/log/messages
记录了主从切换的信息
(Configuring Simple Virtual IP Address Failover Using Keepalived](https://docs.oracle.com/cd/E52668_01/E54669/html/section_uxg_lzh_nr.html)
]]>随着Internet的发展,人们对网络的可靠性的要求越来越高。对于局域网用户来说,能够时刻与外部网络保持联系是非常重要的。
我们知道,为了实现不同子网之间的设备通信,需要配置路由。
目前常用的指定路由方法有两种:
这两种路由各有各的优缺点:
第一种路由可以自动寻找最优路径,邻居路由也可以通过学习来获得路由表,但是动态路由占用线路带宽和CPU处理时间。
第二种路由是不需要CPU处理时间同样也不占用线路带宽,但是这个路由需要对终端的PC机进行配置网关来实现,工作量是比较大的。内部网络中的所有主机都设置一条相同的缺省路由,指向出口网关,实现主机与外部网络的通信。
对于以上的两种路由在现在来说都是广泛应用的。我们现在只来分析静态路由的缺点,因为VRRP技术就是使用在静态路由上,而不是动态路由上。
对于静态路由来说,对终端PC机配置默认网关。如果作为默认网关的路由器出现故障,所有使用该网关为下一跳的主机的通信是要中断的。如下图所示;
在上图中,主机A—D都配置了一个默认的网关:10.1.1.1,网关路由的下一跳指向主机所在网段内的一个路由器RouterA,RouterA将报文发送到外网,但是如果现在RouterA坏掉了,那么所有的主机将无法与其他网段进行通信了。
配置多个出口网关是提高系统可靠性的常见方法,但局域网内的主机设备通常不支持动态路由协议,如何在多个出口网关之间进行选路是个问题。
为了解决以上的问题,将可以承担网关功能的路由器加入到备份组中,形成一台虚拟路由器,由VRRP的选举机制决定哪台路由器承担转发任务,局域网内的主机只需将虚拟路由器配置为缺省网关。我们可以加一个路由器RouterB,当RouterA坏掉时,所有的PC机将网关切换到RouterB上的网关。这样就实现了路由器的备份。这个技术就是VRRP技术—虚拟路由器冗余协议。
VRRP(Virtual Router Redundancy Protocol)虚拟路由冗余协议,IETF(Internet Engineering Task Force,因特网工程任务组)推出,用来解决局域网主机访问外部网络的可靠性问题。VRRP协议的实现有VRRPv2和VRRPv3两个版本,VRRPv2于IPv4,VRRPv3基于IPv6。Vrrp协议在linux上的实现(软件实现)是keepalived。
VRRP是一种容错协议,它通过把几台路由设备联合组成一台虚拟的路由设备,并通过一定的机制来保证当主机的下一跳设备出现故障时,可以及时将业务切换到其它设备,从而保持通讯的连续性和可靠性。使用VRRP的优势在于:既不需要改变组网情况,也不需要在主机上配置任何动态路由或者路由发现协议,就可以获得更高可靠性的缺省路由。如下图所示: 有两个路由器,从两个路由器中选举出一个路由器作为主路由器,其他的都是备份路由器,主路由器负责发转发数据报,而备份路由器处于空闲状态,当主路由器出现故障后,备份路由器会成为主路由器,代替主路由器实现转发功能。
概念 | 解释 |
---|---|
VRRP路由器(VRRP Router | 所有运行VRRP协议的路由器就叫做VRRP路由器,它可能属于一个或多个虚拟路由器。 |
虚拟路由器(Virtual Router) | 虚拟路由器是VRRP备份组中所有路由器的集合,它是一个逻辑概念,并不是正真存在的。从备份组外面看备份组中的路由器,感觉组中的所有路由器就像一个 一样,你可以理解为 在一个组中: 主路由器+所有备份路由器=虚拟路由器。虚拟路由器有一个虚拟的IP地址和MAC地址。如果虚拟IP和备份组中的某台路由器的IP相同的话,那么这台路由器称为IP地址拥有者,并且作为备份组中的主路由器。 |
虚拟IP地址(Virtual IP Address) | 虚拟路由器的IP地址,一个虚拟路由器可以有一个或多个IP地址,由用户配置。 |
IP地址拥有者(IP Address Owner) | 如果一个VRRP路由器将虚拟路由器的IP地址作为真实的接口地址,则该设备是IP地址拥有者。 当这台设备正常工作时,它会响应目的地址是虚拟IP地址的报文,如ping、TCP连接等。 |
虚拟MAC地址 | 是虚拟路由器根据虚拟路由器ID生成的MAC地址。 一个虚拟路由器拥有一个虚拟MAC地址,格式为:00-00-5E-00-01-{VRID}。 VRID为VRRP组的编号,范围是0~255. 当虚拟路由器回应ARP请求时,使用虚拟MAC地址,而不是接口的真实MAC地址。 |
主IP地址(Primary IP Address) | 虚拟路由器的 IP 地址可以是备份组所在网段中未被分配的IP 地址,也可以和备份组内的某个路由器的接口IP 地址相同。从接口的真实IP地址中选出来的一个主用IP地址,通常选择配置的第一个IP地址。 VRRP广播报文使用主IP地址作为IP报文的源地址。 |
Master路由器(Virtual Router Master) | 是承担转发报文或者应答ARP请求的VRRP路由器,转发报文都是发送到虚拟IP地址的。 如果IP地址拥有者是可用的,通常它将成为Master。 |
Backup路由器(Virtual Router Backup) | 一组没有承担转发任务的VRRP路由器,当Master设备出现故障时,它们将通过竞选成为新的Master。 |
抢占模式 | 在抢占模式下,如果Backup的优先级比当前Master的优先级高,将主动将自己升级成Master。 |
如下图所示: RA、RB和RC都是VRRP路由器,他们构成了一个VRRP备份组,RA为主路由器,RB和RC为备份路由器,这三台路由器从外界来看就像一台一样,这样构成一个虚拟路由器Router Group,虚拟路由器有一个虚拟的IP地址为10.1.1.1(RA主路由器的IP)。RA是IP地址拥有者,也是主路由器。
VRRP将局域网的一组路由器构成一个备份组,相当于一台虚拟路由器。局域网内的主机只需要知道这个虚拟路由器的IP地址,并不需知道具体某台设备的IP地址,将网络内主机的缺省网关设置为该虚拟路由器的IP地址,主机就可以利用该虚拟网关与外部网络进行通信。
VRRP将该虚拟路由器动态关联到承担传输业务的物理路由器上,当该物理路由器出现故障时,再次选择新路由器来接替业务传输工作,整个过程对用户完全透明,实现了内部网络和外部网络不间断通信。
如图所示,虚拟路由器的组网环境如下:
VRRP协议中定义了三种状态机:初始状态(Initialize)、活动状态(Master)、备份状态(Backup)。其中,只有处于活动状态的设备才可以转发那些发送到虚拟IP地址的报文。
Initialize
设备启动时进入此状态,当收到接口Startup的消息,将转入Backup或Master状态(IP地址拥有者的接口优先级为255,直接转为Master)。在此状态时,不会对VRRP报文做任何处理。
Master
当路由器处于Master状态时,它将会做下列工作:
Backup
当路由器处于Backup状态时,它将会做下列工作:
VRRP使用选举机制来确定路由器的状态,运行VRRP的一组路由器对外构成了一个虚拟路由器,其中一台路由器处于Master状态,其他处于Backup状态。所以主路由器又叫做Master路由器,备份路由器又叫做Backup路由器。
优先级选举:
如下图所示: 虚拟IP为10.1.1.254,在VRRP组中没有IP地址拥有者,则比较优先级,很明显RB和RA的优先级要大于RC,则比较RA和RB的IP地址,RB的IP地址大。所以RB为组中的主路由器。
VRRP只使用VRRP通告报文。
VRRP通告报文使用Ip组播数据包进行封装,组播地址为223.0.0.18,IANA给其分配的协议号为112。
VRRP通告报文的TTL值必须是255,如果VRRP路由器接受到TTL值不为255的VRRP通告报文,必须丢弃。
VRRP组中的主路由器会定期发送通告报文,备份路由器接受,他们通过这种方式来交流选举
在一组VRRP组中,主路由器承担数据转发任务的同时,备份路由器的链路将处于空闲状态,这必然造成了带宽资源的浪费。为了避免这种浪费,使用VRRP负载均衡。
VRRP并不具备对流量进行监控的机制,它的负载均衡只是通过使用多个VRRP组来实现的。VRRP负载均衡是通过实现将路由器加入到多个VRRP组实现的,使VRRP路由器在不同的组中担任不同的角色。
如上图所示:RA为组35的主路由器,同时又是组36的备份路由器。 RB为组36的主路由器,同时又是组35的备份路由器。
在正常状态下,PC1和PC2走RA,PC3和PC4走RB,但是两个路由器一旦出现故障,就将网关切换到备份路由器。RA和RB可以说是相辅相成的。
负载分担方式具有以下特点。
如图所示:
配置两个备份组:组1和组2;
RouterA在备份组1中作为Master,在备份组2中作为Backup;
RouterB在备份组1和2中都作为Backup;
RouterC在备份组2中作为Master,在备份组1中作为Backup。
一部分主机使用备份组1作网关,另一部分主机使用备份组2作为网关。
这样,以达到分担数据流,而又相互备份的目的。
对于安全程度不同的网络环境,可以在报头上设定不同的认证方式和认证字。
VRRP提供了三种认证方式:
1.无认证:不进行任何 VRRP 报文的合法性认证,不提供安全性保障。一般不要用这种。
2.简单字符认证:在一个有可能受到安全威胁的网络中,可以将认证方式设置为简单字符认证。发送 VRRP 报文的路由器将认证字填入到
VRRP 报文中,而收到 VRRP 报文的路由器会将收到的 VRRP 报文中的认证字和本地配置的认证字进行比较。如果认证字相同,则认为接收到的报文是合法的 VRRP 报文;否则认为接收到的报文是一个非法报文。
一般用的就是这种。
VRRP可以监视所有接口的状态。当被监视的接口Down或Up时,该路由器的优先级会自动降低或升高一定的数值,使得备份组中各设备优先级高低顺序发生变化,VRRP路由器重新进行Master竞选。
RFC3768并没有规定虚拟IP地址应不应该Ping通。不能Ping通虚拟IP地址,会给监控虚拟路由器的工作情况带来一定的麻烦,能够Ping通虚拟IP地址可以比较方便的监控虚拟路由器的工作情况,但是带来可能遭到ICMP攻击的隐患。控制Ping通虚拟IP地址的开关命令,用户可以选择是否打开。
① VRRP通告报文时间间隔定时器
② VRRP抢占延迟时间定时器
VRRP简单的讲,就是利用心跳信息实现高可用。主节点不断的向备用节点广播信息,信息包含自己的心跳和优先级。不光如此,还可以在主节点上安装一个监控,来监控其他资源,如果这些资源运行正常,就可以给其他客户端发送心跳信息(包含优先级),一旦监控的资源出现问题了,就降低自己的优先级(降低后的优先级要低于备用节点的优先级,自己设置)。这时候,备用节点可以在主节点未出现故障的时候,就抢占主节点的资源(工作在抢占模式的备用节点)。备用节点发现自己的优先级比主节点的优先级高,就触发一次选举。将主节点变为备用节点,备用节点变为主节点。主节点拥有VIP.
Virtual Router Redundancy Protocol
Virtual Router Redundancy Protocol (VRRP) Version 3 for IPv4 and IPv6
]]>keepalived只有一个配置文件keepalived.conf,里面主要包括以下几个配置区域,分别是global_defs、static_ipaddress、static_routes、vrrp_script、vrrp_instance和virtual_server。
主要是配置故障发生时的通知对象以及机器标识
|
|
static_ipaddress和static_routes区域配置的是是本节点的IP和路由信息。如果你的机器上已经配置了IP和路由,那么这两个区域可以不用配置。其实,一般情况下你的机器都会有IP地址和路由信息的,因此没必要再在这两个区域配置。
|
|
以上分别表示启动/关闭keepalived时在本机执行的如下命令:
|
|
注意: 请忽略这两个区域,因为我坚信你的机器肯定已经配置了IP和路由。
用来做健康检查的,当时检查失败时会将vrrp_instance
的priority
减少相应的值。
|
|
以上意思是如果script
中的指令执行失败,那么相应的vrrp_instance
的优先级会减少10个点。
vrrp_instance用来定义对外提供服务的VIP区域及其相关属性。
vrrp_rsync_group用来定义vrrp_intance组,使得这个组内成员动作一致。举个例子来说明一下其功能:
两个vrrp_instance同属于一个vrrp_rsync_group,那么其中一个vrrp_instance发生故障切换时,另一个vrrp_instance也会跟着切换(即使这个instance没有发生故障)。
|
|
注意: 同一网段中virtual_router_id的值不能重复,否则会出错,相关错误信息如下。
|
|
可以用这条命令来查看该网络中所存在的vrid:tcpdump -nn -i any net 224.0.0.0/8
首先nopreemt必须在state为BACKUP的节点上才生效(因为是BACKUP节点决定是否来成为MASTER的),其次要实现类似于关闭auto failback的功能需要将所有节点的state都设置为BACKUP,或者将master节点的priority设置的比BACKUP低。我个人推荐使用将所有节点的state都设置成BACKUP并且都加上nopreempt选项,这样就完成了关于autofailback功能,当想手动将某节点切换为MASTER时只需去掉该节点的nopreempt选项并且将priority改的比其他节点大,然后重新加载配置文件即可(等MASTER切过来之后再将配置文件改回去再reload一下)。
当使用track_script
时可以不用加nopreempt
,只需要加上preempt_delay 5
,这里的间隔时间要大于vrrp_script
中定义的时长。
nopreempt
选项。virtual_server_group一般在超大型的LVS中用到,一般LVS用不过这东西,因此不多说。
|
|
其他选项暂时不作说明。
###参考
]]>Keepalived provides simple and robust facilities for load-balancing and high-availability. The load-balancing framework relies on well-known and widely used Linux Virtual Server (IPVS) kernel module providing Layer4 load-balancing. Keepalived implements a set of checkers to dynamically and adaptively maintain and manage load-balanced server pool according their health. Keepalived also implements the VRRPv2 protocol to achieve high-availability with director failover.
keepalived是集群管理中保证集群高可用的一个服务软件,其功能类似于heartbeat,用来防止单点故障。
keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。
虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了。
keepalived主要有三个模块,分别是core、check和vrrp。core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式。vrrp模块是来实现VRRP协议的。
yum 安装
|
|
|
|
Add firewall rules to allow VRRP communication using the multicast IP address 224.0.0.18 and the VRRP protocol (112) on each network interface that Keepalived will control, for example:
VRRP communication between routers uses multicast IP address 224.0.0.18[1] and IP protocol number 112[2].
Thus, you only need to allow incoming and outgoing traffic with these specific parameters for VRRP to work correctly. The firewall rules that are usually mentioned are redundant and unnecessarily widely formulated.
记得改掉网卡名称,此处我绑定的是enp0s3,其他的不需要改
|
|
默认的配置文件/etc/keepalived/keepalived.conf
默认情况下由节点A提供服务,当节点A不可用时,由节点B提供服务(即虚拟IP漂移至节点B)。
节点 | IP |
---|---|
主节点 | 192.168.0.104 |
备节点 | 192.168.0.105 |
VIP | 192.168.0.106 |
节点A上的配置文件
|
|
节点B上的配置文件(router_id 、state 、priority 不同),其它项不必修改。
|
|
节点A启动keepalived后,查看IP
|
|
节点B启动keepalived后,查看IP
|
|
测试及验证:拔掉节点A的网线,就发现虚拟IP已经绑定到节点B上,再恢复A节点的网线,虚拟IP又绑定回节点A之上。
说明:
Installing and Configuring Keepalived
http://tools.ietf.org/html/rfc5798#section-5.1.1.2
http://tools.ietf.org/html/rfc5798#section-5.1.1.4
https://serverfault.com/questions/634903/vip-not-dropping-from-backup-keepalived
]]>cut根据指定的定界符,切分文件,并将选中的列输出到标准输出。
cut [选项]… [文件]…
打印输入行的选中的parts 到标准输出
以密码/etc/passwd为例
打印用户名
打印用户名、home目录、shell
打印用户ID和组ID
|
|
打印除了密码、用户id 和组id 之外的所有列
dig命令是常用的域名查询工具,可以用来测试域名系统工作是否正常。
|
|
|
|
例子1. 查询域名
|
|
例子2. 指定域名服务器
|
|
cat (concatenate,连接)命令将[文件]或标准输入组合输出到标准输出,如果没有指定文件,或者文件为”-“,则从标准输入读取。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
按ctrl+D结束输入or EOF(End Of File)
|
|
|
|
touch命令将每个文件的访问时间和修改时间改为当前时间。
|
|
|
|
|
|
|
|
|
|
|
|
mv(Move file)将源文件重命名为目标文件,或将源文件移动至指定目录。。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
rm(Remove file 删除目录或文件)删除文件,对于链接文件,只是删除整个链接文件,而原有文件保持不变。
|
|
|
|
|
|
|
|
|
|
|
|
每个Linux使用者在安装linux时都会遇到这样的困境:在为系统分区时,如何精确评估和分配各个硬盘分区的容量,因为系统管理员不但要考虑到当前某个分区需要的容量,还要预见该分区以后可能需要的容量的最大值。因为如果估计不准确,当遇到某个分区不够用时管理员可能甚至要备份整个系统、清除硬盘、重新对硬盘分区,然后恢复数据到新分区。
虽然现在有很多动态调整磁盘的工具可以使用,例如Partation Magic等等,但是它并不能完全解决问题,因为某个分区可能会再次被耗尽;另外一个方面这需要重新引导系统才能实现,对于很多关键的服务器,停机是不可接受的,而且对于添加新硬盘,希望一个能跨越多个硬盘驱动器的文件系统时,分区调整程序就不能解决问题。
因此完美的解决方法应该是在零停机前提下可以自如对文件系统的大小进行调整,可以方便实现文件系统跨越不同磁盘和分区。幸运的是Linux提供的逻辑盘卷管理(LVM,Logical Volume Manager)机制就是一个完美的解决方案。
LVM是逻辑盘卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。通过LVM系统管理员可以轻松管理磁盘分区,如:将若干个磁盘分区连接为一个整块的卷组(volume group),形成一个存储池。管理员可以在卷组上随意创建逻辑卷组(logical volumes),并进一步在逻辑卷组上创建文件系统。管理员通过LVM可以方便的调整存储卷组的大小,并且可以对磁盘存储按照组的方式进行命名、管理和分配,例如按照使用用途进行定义:“development”和“sales”,而不是使用物理磁盘名“sda”和“sdb”。而且当系统添加了新的磁盘,通过LVM管理员就不必将磁盘的文件移动到新的磁盘上以充分利用新的存储空间,而是直接扩展文件系统跨越磁盘即可。
传统的文件系统是基于分区的,一个文件系统对应一个分区。这种方式比较直观,但不易改动:
1.不同的分区相对独立,无相互联系,各分区空间非常易利用不平衡,空间不能充分利用;
2.当一个文件系统/分区已满时,无法对其扩充,只能采用重新分区/建立文件系统,非常麻烦;或把分区中的数据移到另一个更大的分区中;或采用符号连接的方式使用其他分区的空间。
3.如果要把硬盘上的多个分区合并在一起使用,只能采用再分区的方式,这个过程需要数据的备份和恢复。
当采用LVM时,情况有所不同:
1.硬盘的多个分区由LVM统一为卷组管理,能方便的加入或移走分区以扩大或减小卷组的可用容量,充分利用硬盘空间;
2.文件系统建立在逻辑卷上,而逻辑卷可根据需要改动大小(在卷组容量范围内)以满足需求;
3.当系统空间不足而加入新的硬盘时,不必把用户的数据从原硬盘迁移到新硬盘,而只须把新的分区加入卷组并扩充逻辑卷即可。
前面谈到,LVM是在磁盘分区和文件系统之间添加的一个逻辑层,来为文件系统屏蔽下层磁盘分区布局,提供一个抽象的盘卷,在盘卷上建立文件系统。首先我们讨论以下几个LVM术语:
首先可以看到,物理卷(PV)被由大小等同的基本单元PE组成。
一个卷组由一个或多个物理卷组成,
从上图可以看到,PE和LE有着一一对应的关系。逻辑卷建立在卷组上。逻辑卷就相当于非LVM系统的磁盘分区,可以在其上创建文件系统。
下图是磁盘分区、卷组、逻辑卷和文件系统之间的逻辑关系的示意图:
和非LVM系统将包含分区信息的元数据保存在位于分区的起始位置的分区表中一样,逻辑卷以及卷组相关的元数据也是保存在位于物理卷起始处的VGDA(卷组描述符区域)中。VGDA包括以下内容: PV描述符、VG描述符、LV描述符、和一些PE描述符 。
系统启动LVM时激活VG,并将VGDA加载至内存,来识别LV的实际物理存储位置。当系统进行I/O操作时,就会根据VGDA建立的映射机制来访问实际的物理位置。
首先确定系统中是否安装了lvm工具:
|
|
如果命令结果输入类似于上例,那么说明系统已经安装了LVM管理工具;如果命令没有输出则说明没有安装LVM管理工具,则需要从网络下载或者从光盘装LVM rpm工具包。安装了LVM的RPM软件包以后,要使用LVM还需要配置内核支持LVM。RedHat默认内核是支持LVM的
1.为运行的虚拟机增加一块磁盘,在虚拟机中fdisk -l,可以看到新增加磁盘sdb
2.创建物理卷PV
创建物理卷的命令为pvcreate,利用该命令将希望添加到卷组的分区或者整个磁盘创建为物理卷。
将整个磁盘创建为物理卷的命令为:
|
|
查看创建好的PV
|
|
3.创建卷组VG
(如果已近存在逻辑卷组,可以直接省去此步,直接到4,当然也可以继续创建)
vgcreate命令第一个参数是指定该卷组的逻辑名:vg_name。后面参数是指定希望添加到该卷组的物理卷PV。vgcreate在创建卷组 vg_name以外,还设置使用大小为4 MB的PE(默认为4MB),这表示卷组上创建的所有逻辑卷都以 4 MB 为增量单位来进行扩充或缩减。由于内核原因,PE大小决定了逻辑卷的最大大小,4 MB 的PE决定了单个逻辑卷最大容量为 256 GB,若希望使用大于256G的逻辑卷则创建卷组时指定更大的PE。PE大小范围为8 KB 到 512 MB,并且必须总是 2 的倍数(使用-s指定,具体请参考man vgcreate)。
|
|
通过vgdisplay
查看,可以看到包含2559个PE,大小 10.00 GiB,未分配的PE数
|
|
4.创建逻辑卷
|
|
-L指定最终大小大小,或者-l指定PE的个数均可
5.创建文件系统
|
|
6.挂载在系统直接使用(需要/etc/fstab)
|
|
1.新增磁盘vdc
2.创建物理卷
|
|
3.扩展物理卷至卷组vg_name
|
|
查看新的VG
|
|
5.增加逻辑卷
|
|
-L指定要扩展到的目标大小,或者-l指定PE的个数均可,也可以使用+号,表示增加的大小
|
|
6.调整文件系统大小
ext4 文件系统
|
|
如果是xfs格式的文件系统 需要使用 xfs_growfs
|
|
增加是先增容量,再resize,减小是先resize,再reduce
使用lvreduce即可缩小逻辑卷的容量,同样需要首先将文件系统卸载:
|
|
删除逻辑卷以前首先需要将其卸载
|
|
Supervisor是一个Python开发的client/server系统,可以管理和监控类unix上面的进程。类似daemontools
什么情况下我们需要进程管理呢?就是执行一些需要以守护进程方式执行的程序,比如一个后台任务,如经常会碰到要写一些守护进程,简单做法放入后台:
|
|
除此之外,Supervisor 还能很友好的管理程序在命令行上输出的日志,可以将日志重定向到自定义的日志文件中,还能按文件大小对日志进行分割。
方便
为啥简单呢?因为咱们通常管理linux进程的时候,一般来说都需要自己编写一个能够实现进程start/stop/restart/reload功能的脚本,然后丢到/etc/init.d/下面。这么做有很多不好的地方,第一我们要编写这个脚本,这就很耗时耗力了。第二,当这个进程挂掉的时候,linux不会自动重启它的,想要自动重启的话,我们还要自己写一个监控重启脚本。而supervisor则可以完美的解决这些问题。supervisor管理进程,是通过fork/exec的方式把这些被管理的进程,当作supervisor的子进程来启动。这样的话,我们只要在supervisor的配置文件中,把要管理的进程的可执行文件的路径写进去就OK了。这样就省下了我们如同linux管理进程的时自己写控制脚本的麻烦了。第二,被管理进程作为supervisor的子进程,当子进程挂掉的时候,父进程可以准确获取子进程挂掉的信息的,所以当然也就可以对挂掉的子进程进行自动重启了,当然重启还是不重启,也要看你的配置文件里面有木有设置autostart=true了。
精确
Supervisord将进程作为子进程启动,因此可以一直知晓子进程的状态,可以方便查询。而基于pid文件文件获取进程状态有时候不靠谱
权限代理
某些进程需要root或者sudo权限运行,而又不方便把机器的root权限和sudo权限开放给用户的时候,普通用户可以借助supervisor的命令和web UI进行进程的启动和关闭
进程组
linux系统没有批量启动关闭进程的功能,我们想要停止多个进程,只能一个一个的去停止,要么就自己写个脚本去批量停止。Supervisor 允许赋予进程优先级,可以使用supervisorctl 的“start all”, and “restart all”,按照优先级顺序启动。并且进程可以分组,相关的进程可以作为一个单元启动。
|
|
会自动安装成服务形式,可以使用systemctl进行管理
|
|
或者
|
|
|
|
yum 安装方式不需要此步骤,因为已经自动生产了supervisord.conf 和supervisord.d文件夹
安装完 supervisor 之后,可以运行echo_supervisord_conf
命令输出默认的配置项,也可以重定向到一个配置文件里:
|
|
|
|
上面我们已经把 supervisrod 运行起来了,现在可以添加我们要管理的进程的配置文件。可以把所有配置项都写到 supervisord.conf 文件里,但并不推荐这样做,而是通过 include 的方式把不同的程序(组)写到不同的配置文件里。yum方式安装,会自动配置。
|
|
/etc/supervisord.conf 参数说明
|
|
我们假如有一个hello.py
|
|
所以直接在命令行启动的方式可能是这样的:(需要先安装web.py easy_install web.py
)
|
|
现在编写一份配置文件/etc/supervisord.d/hello.ini
来管理这个进程
|
|
一份配置文件至少需要一个 [program:x]
部分的配置,来告诉 supervisord 需要管理那个进程。[program:x]
语法中的 x
表示 program name,会在客户端(supervisorctl 或 web 界面)显示,在 supervisorctl 中通过这个值来对程序进行 start、restart、stop 等操作。
|
|
Supervisorctl 是 supervisord 的一个命令行客户端工具,启动时需要指定与 supervisord 使用同一份配置文件,否则与 supervisord 一样按照顺序查找配置文件。supervisorctl 这个命令会进入 supervisorctl 的 shell 界面,然后可以执行不同的命令了,也可以直接在 bash 终端运行。
|
|
输入help,可以查看支持的命令及用法
|
|
常用命令
|
|
除了 supervisorctl 之外,还可以配置 supervisrod 启动 web 管理界面,这个 web 后台使用 Basic Auth 的方式进行身份认证。将supervisord.conf中[inet_http_server]部分做相应配置,在supervisorctl中reload即可启动web管理界面
|
|
在浏览器中输入http://127.0.0.1:9001,可进入web管理界面
Supervisor 同时还提供了另外一种进程组的管理方式,通过这种方式,可以使用 supervisorctl 命令来管理一组进程。跟 [program:x] 的进程组不同的是,这里的进程是一个个的 [program:x] 。
|
|
当添加了上述配置后,progname1
和 progname2
的进程名就会变成 thegroupname:progname1
和 thegroupname:progname2
以后就要用这个名字来管理进程了,而不是之前的 progname1
。
以后执行 supervisorctl stop thegroupname:
就能同时结束 progname1
和 progname2
,执行 supervisorctl stop thegroupname:progname1
就能结束 progname1
。如下所示
/etc/supervisord.d/hello.ini
文件
|
|
进程状态
|
|
nslookup命令是常用域名查询工具,就是查DNS信息用的命令。
|
|
nslookup有两种工作模式,即“交互模式”和“非交互模式”。在“交互模式”下,用户可以向域名服务器查询各类主机、域名的信息,或者输出域名中的主机列表。而在“非交互模式”下,用户可以针对一个主机或域名仅仅获取特定的名称或所需信息。
进入交互模式,总共有两种方法。
第一种方法,直接输入nslookup命令,不加任何参数,则直接进入交互模式,此时nslookup会连接到默认的域名服务器(即/etc/resolv.conf的第一个dns地址)。
|
|
如果想更换DNS, 使用Server
|
|
第二种方法,是支持选定不同域名服务器的。需要设置第一个参数为“-”,然后第二个参数是设置要连接的域名服务器主机名或IP地址。
|
|
直接在nslookup命令后加上所要查询的IP或主机名,那么就进入了非交互模式。当然,这个时候你也可以在第二个参数位置设置所要连接的域名服务器。
|
|
DNS | 地址 | 说明 |
---|---|---|
Google DNS | 8.8.8.8 | |
114 DNS | 114.114.114.114 | 国内用户量巨大的DNS,访问速度快,各省都有节点,同时满足电信、联通、移动各运营商用户,可以有效预防劫持 |
阿里DNS | 223.5.5.5 223.6.6.6 | 全球数百台服务器组成的集群 稳定性好 |
cp(Copy file):将源文件复制至目标文件,或将多个源文件复制至目标目录。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
安装完sysbench后,/usr/share/sysbench
下对数据库压力测试的lua文件:
|
|
数据库测试分为3步:prepare(准备测试数据),run(开始测试),cleanup(清除测试数据)
参数解析:
–db-driver:用到的数据库类型
–mysql-host:数据库的IP
–mysql-port:数据库的端口
–mysql-socket:socket的路径
–mysql-user:数据库用户名
–mysql-password:用户密码
–mysql-db:数据库名字,默认为sysbench,需要提前创建创好
–tables:生成表的个数
–table-size:每个表的行数
–report-interval:每隔多久在屏幕打印一次信息
–time:压测时间
–threads:启动多少个线程,即模拟多少个用户
创建测试数据库
|
|
准备测试数据: 在本地数据库的dba_test库中,初始化10张表(sbtest1~sbtest10),存储引擎是innodb,每张表50万数据。
|
|
压测数据库:
|
|
删除测试数据:
|
|
sysbench cpu help
|
|
测试结果
|
|
|
|
测试结果
|
|
|
|
1,prepare阶段,生成需要的测试文件,完成后会在当前目录下生成很多小文件。
|
|
2,run阶段
|
|
3,清理测试时生成的文件
|
|
执行过程如下:
|
|
|
|
|
|
|
|
执行过程
|
|
sysbench is a scriptable multi-threaded benchmark tool based on LuaJIT. It is most frequently used for database benchmarks, but can also be used to create arbitrarily complex workloads that do not involve a database server.
sysbench 支持如下的基准测试:
oltp_*.lua
: a collection of OLTP-like database benchmarks (OLTP数据库 如MySQL、Oracle、PostgreSQL)fileio
: a filesystem-level benchmark (文件I/O性能)cpu
: a simple CPU benchmark (CPU性能测试)memory
: a memory access benchmark (内存访问)threads
: a thread-based scheduler benchmark (基于线程的调度性能)mutex
: a POSIX mutex benchmarkDebian/Ubuntu
|
|
RHEL/CentOS:
|
|
Fedora:
|
|
macOS:
|
|
推荐使用二进制安装
Debian/Ubuntu
|
|
RHEL/CentOS
|
|
Fedora
|
|
macOS
**Assuming you have Xcode (or Xcode Command Line Tools) and Homebrew installed:
|
|
|
|
The above will build sysbench with MySQL support by default. If you have MySQL headers and libraries in non-standard locations (and no mysql_config
can be found in the PATH
), you can specify them explicitly with --with-mysql-includes
and --with-mysql-libs
options to ./configure
.
To compile sysbench without MySQL support, use --without-mysql
. If no database drivers are available database-related scripts will not work, but other benchmarks will be functional.
See README-Oracle.md for instructions on building with Oracle client libraries.
|
|
通用语法
|
|
testname is an optional name of a built-in test (e.g.
fileio
,memory
,cpu
, etc.), or a name of one of the bundled Lua scripts (e.g.oltp_read_only
), or a path to a custom Lua script. If no test name is specified on the command line (and thus, there is no command too, as in that case it would be parsed as a testname), or the test name is a dash (“-
“), then sysbench expects a Lua script to execute on its standard input.
fileio
,memory
, cpu
,threads
, mutex
.), oltp_read_only
), command is an optional argument that will be passed by sysbench to the built-in test or script specified with testname. command defines the action that must be performed by the test. The list of available commands depends on a particular test. Some tests also implement their own custom commands.
Below is a description of typical test commands and their purpose:
prepare
: performs preparative actions for those tests which need them, e.g. creating the necessary files on disk for the fileio
test, or filling the test database for database benchmarks.run
: runs the actual test specified with the testname argument. This command is provided by all tests.cleanup
: removes temporary data after the test run in those tests which create one.help
: displays usage information for the test specified with the testname argument. This includes the full list of commands provided by the test, so it should be used to get the available commands.options 包括通用的选项,另外不同的testname也包含特定的option,如mysql测试包含的数据库连接信息。特定测试的option可以通过sysbench testname help
查看。sysbench --help
可以查看通用的option
The table below lists the supported common options, their descriptions and default values:
Option | Description | Default value | ||
---|---|---|---|---|
--threads |
The total number of worker threads to create | 创建测试线程的数目。默认为1. | 1 | |
--events |
Limit for total number of requests. 0 (the default) means no limit | 请求的最大数目。0代表不限制 | 0 | |
--time |
Limit for total execution time in seconds. 0 means no limit | 最大执行时间,单位是s。 | 10 | |
–forced-shutdown=STRING | number of seconds to wait after the –time limit before forcing shutdown, or ‘off’ to disable [off] | 超过–time强制中断。默认是off | off | |
--thread-stack-size |
Size of stack for each thread | 每个线程的堆栈大小。 | 64K | |
--rate |
Average transactions rate. The number specifies how many events (transactions) per seconds should be executed by all threads on average. 0 (default) means unlimited rate, i.e. events are executed as fast as possible | 0 | ||
--report-interval |
periodically report intermediate statistics with a specified interval in seconds. 0 disables intermediate reports [0] | 执行过程中,显示执行结果的时间间隔 | 0 | |
--debug |
Print more debug info | 是否显示debug信息 | off | |
--validate |
Perform validation of test results where possible | 在可能情况下执行验证检查。 | off | |
--help |
Print help on general syntax or on a specified test, and exit | 查看帮助 | off | |
--verbosity |
verbosity level {5 - debug, 0 - only critical messages} [3] | 日志详细级别 | 3 | |
--percentile |
percentile to calculate in latency statistics (1-100). Use the special value of 0 to disable percentile calculations [95] | 表示设定采样比例,默认是 95%,即丢弃5%的长请求,在剩余的99%里取最大值 | 95 | |
–histogram[=on\ | off] | print latency histogram in report [off] | report延迟直方图 | off |
--luajit-cmd |
perform a LuaJIT control command. This option is equivalent to luajit -j . See LuaJIT documentation for more information |
可以通过sysbench testname help
查看
sysbench fileio help
|
|
sysbench cpu help
|
|
sysbench memory help
|
|
sysbench threads help
|
|
sysbench mutex help
|
|
|
|
rmdir (Remove Directory删除目录): 用来删除空目录,删除某目录时也必须具有对父目录的写权限。
|
|
|
|
|
|
|
|
|
|
|
|