学习淘淘商城第七十八课(LVS+Nginx负载均衡(包括两种开机启动方法)----中篇)

110 篇文章 383 订阅
9 篇文章 1 订阅

          上节课我们一起了解了一下LVS+Nginx负载均衡的理论知识,这节课我们一起学习下如何搭建LVS-DR模式的负载均衡环境。

          首先我们还是看一下LVS-DR负载均衡图,如下所示。


          我们用三台虚拟机,一台虚拟机安装lvs-director,另外两台服务器安装nginx。并且我们要配置一个虚拟IP供外界用户访问。

          下面我们便来安装lvs-director。新建一台虚拟机,关于VMWare12安装CentOS6大家可以参考http://blog.csdn.net/u012453843/article/details/68947589这篇博客进行学习,建完虚拟机后需要配置静态IP地址并且要能上网,大家可以参考http://blog.csdn.net/u012453843/article/details/52839105这篇博客进行学习。我习惯使用XShell工具来操作服务器,关于如何使用XShell来操作服务器大家可以参考http://blog.csdn.net/u012453843/article/details/54293774这篇博客进行学习。

         CentOS6.8自带lvs,检查linux内核是否集成lvs模块,使用的命令是"modprobe -l | grep ipvs",如下所示。

[root@lvs-DR ~]# modprobe -l | grep ipvs
kernel/net/netfilter/ipvs/ip_vs.ko
kernel/net/netfilter/ipvs/ip_vs_rr.ko
kernel/net/netfilter/ipvs/ip_vs_wrr.ko
kernel/net/netfilter/ipvs/ip_vs_lc.ko
kernel/net/netfilter/ipvs/ip_vs_wlc.ko
kernel/net/netfilter/ipvs/ip_vs_lblc.ko
kernel/net/netfilter/ipvs/ip_vs_lblcr.ko
kernel/net/netfilter/ipvs/ip_vs_dh.ko
kernel/net/netfilter/ipvs/ip_vs_sh.ko
kernel/net/netfilter/ipvs/ip_vs_sed.ko
kernel/net/netfilter/ipvs/ip_vs_nq.ko
kernel/net/netfilter/ipvs/ip_vs_ftp.ko
kernel/net/netfilter/ipvs/ip_vs_pe_sip.ko
[root@lvs-DR ~]# 
         我们还需要安装lvs管理工具ipvsadm,安装前需要先安装如下依赖

yum install -y gcc gcc-c++ makepcre pcre-devel kernel-devel openssl-devel libnl-devel popt*
         下一步是下载lvs管理管理工具所需要的源码包,大家可以到http://download.csdn.net/detail/u012453843/9854573这个地址下载。下载的源码包要上传到服务器上,我习惯在服务器的/usr/local目录下新建一个software目录,如下所示

[root@lvs-DR ~]# mkdir /usr/local/software
        我们进入到/usr/local/software目录下,要使用XShell工具上传文件的话,需要先安装rzsz命令,如下

[root@lvs-DR ~]# yum install -y lrzsz
         然后输入命令rz上传ipvsadm-1.26.tar.gz到/usr/local/software目录下,上传完后使用ls命令查看是否已经上传成功了,如下所示。

[root@lvs-DR software]# rz

[root@lvs-DR software]# ls
ipvsadm-1.26.tar.gz
        下面解压该文件,解压到/usr/local目录下,如下所示。

[root@lvs-DR software]# tar -zxvf ipvsadm-1.26.tar.gz -C /usr/local/

        进入到/usr/local/ipvsadm-1.26目录,在使用make命令之前要先安装vim-enhanced命令(因为最小化安装的CentOS6是没有安装过vim命令模块的)

[root@lvs-DR ipvsadm-1.26]# yum install -y vim-enhanced
        下面便可以使用make命令进行编译

[root@lvs-DR ipvsadm-1.26]# make
         下面便是安装,使用make install进行安装

[root@lvs-DR ipvsadm-1.26]# make install
         下面检验ipvsadm安装是否成功,使用命令ipvsadm -h,如下图所示,说明安装成功。


          下面我们我们来搭建两个nginx服务器。关于nginx的安装,大家可以参考http://blog.csdn.net/u012453843/article/details/72584388这篇博客进行学习。

           下面我们接着配置ipvs-director服务器,在eth0上绑定虚拟IP,使用命令ifconfig eth0:0 192.168.156.110 broadcast 192.168.156.110 netmask 255.255.255.255 up,如下图所示。绑定完之后使用ifconfig查看IP信息,可以看到多了一个IP为192.168.156.110的虚拟IP。


           接着添加路由规则,如下所示。

[root@lvs-DR ipvsadm-1.26]# route add -host 191.168.156.110 dev eth0:0
         接着启用系统的包转发功能,如下所示。

[root@lvs-DR ipvsadm-1.26]# echo "1" >/proc/sys/net/ipv4/ip_forward
        清除原有转发规则,如下所示。
[root@lvs-DR ipvsadm-1.26]# ipvsadm --clear
        添加虚拟IP规则,如下所示。其中-s rr表示采用轮询策略。:80表示负载转发的端口是80

[root@lvs-DR ipvsadm-1.26]# ipvsadm -A -t 192.168.156.110:80 -s rr
        在虚拟IP中添加服务规则,如下所示。在新加虚拟IP记录中添加两条新的Real Server记录,-g表示指定LVS 的工作模式为直接路由模式。
lvs进行负载转发需要保证lvs负载的端口要和nginx服务的端口的一致,这里都为80。

[root@lvs-DR ipvsadm-1.26]# ipvsadm -a -t 192.168.156.110:80 -r 192.168.156.36:80 -g
[root@lvs-DR ipvsadm-1.26]# ipvsadm -a -t 192.168.156.110:80 -r 192.168.156.37:80 -g
        下面重启ipvsadm,如下所示。

[root@lvs-DR ipvsadm-1.26]# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.156.110:http rr
  -> 192.168.156.36:http          Route   1      0          0         
  -> 192.168.156.37:http          Route   1      0          0         
[root@lvs-DR ipvsadm-1.26]# 
         配置Real Server(两台nginx服务器)在lvs的DR和TUn模式下,用户的访问请求到达真实服务器后,是直接返回给用户的,而不再经过前端的Director Server,因此,就需要在每个Real server节点上增加虚拟的VIP地址,这样数据才能直接返回给用户。

        在回环设备上绑定一个虚拟IP地址,如下所示

[root@lvs-nginx1 sbin]# ifconfig lo:0 192.168.156.110 broadcast 192.168.156.110 netmask 255.255.255.255 up
[root@lvs-nginx1 sbin]# /sbin/route add -host 192.168.156.110 dev lo:0
       绑定后使用ifconfig查看IP信息,如下图所示。


          下面关闭arp解析

arp_announce :定义不同级别:当ARP请求通过某个端口进来是否利用这个接口来回应。
         0 -利用本地的任何地址,不管配置在哪个接口上去响应ARP请求;
         1 - 避免使用另外一个接口上的mac地址去响应ARP请求;
         2 - 尽可能使用能够匹配到ARP请求的最佳地址。
arp_ignore:当ARP请求发过来后发现自己正是请求的地址是否响应;
      0 - 利用本地的任何地址,不管配置在哪个接口上去响应ARP请求;
      1 - 哪个接口上接受ARP请求,就从哪个端口上回应。

         如下所示

[root@lvs-nginx1 conf]# echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore 
[root@lvs-nginx1 conf]# echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce  
[root@lvs-nginx1 conf]# echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
[root@lvs-nginx1 conf]# echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce  
[root@lvs-nginx1 conf]# sysctl -p
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
[root@lvs-nginx1 conf]# 
        上面只是配置了一台nginx服务器,另外一台也一样配置一下。

         配置完之后,我们来进行测试一下,预期目标:由于lvs设置为rr轮询策略,当访问虚IP http://192.168.101.100,每次刷新请求通过lvs负载到不同的服务器。有两条注意事项:

1、测试时需要在nginx的http中设置keepalive_timeout  0; 取消使用http持久连接模式,保证每次客户端发起请求都需要向服务端建立连接,这样做是为了每次刷新页面都要经过lvs负载转发。(注意:nginx2也要将keepalive_timeout设置为0)。
2、lvs进行负载转发需要保证lvs负载的端口要和nginx服务的端口的一致,这里都为80。
     keepalive_timeout说明:
在nginx中keepalive_timeout的默认值是75秒,默认使用http持久连接模式,可使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,可避免建立或重新建立连接。生产环境建议keepalive_timeout不要设置为0。keepalive_timeout位置如下图所示

 

           为了区分nginx,修改下index.html,其中lvs-nginx1的修改如下图所示。同理修改下lvs-nginx2.


         下面启动两个nginx服务

[root@lvs-nginx1 nginx]# sbin/nginx
[root@lvs-nginx2 nginx]# sbin/nginx
         我们在地址栏输入http://192.168.156.110/index.html,刚开始看到访问的是lvs-nginx1,刷新一次便可以看到访问的是lvs-nginx2。再刷新就又是36了,如此循环往复。


           注意:由于配置虚拟IP等操作重启后会失效,因此需要将一些命令设置为开机就自动执行。我们先设置lvs-director服务器的开机启动,在/usr/local/ipvsadm-1.26目录下新建一个startup.sh文件,并在文件中添加如下内容。

cd /usr/local/ipvsadm-1.26
ifconfig eth0:0 192.168.156.110 broadcast 192.168.156.110 netmask 255.255.255.255 up
route add -host 191.168.156.110 dev eth0:0
echo "1" >/proc/sys/net/ipv4/ip_forward
ipvsadm --clear
ipvsadm -A -t 192.168.156.110:80 -s rr
ipvsadm -a -t 192.168.156.110:80 -r 192.168.156.36:80 -g
ipvsadm -a -t 192.168.156.110:80 -r 192.168.156.37:80 -g
ipvsadm
         由于新建的startup.sh文件没有执行权限,因此要给它添加执行权限

[root@lvs-DR ipvsadm-1.26]# chmod +x startup.sh
         添加完执行权限后startup.sh文件的颜色会变化,如下图所示,并且可以看到文件的权限"-rwxr-xr-x"当中有"x"(执行权限了)。


         要想让设备启动的时候就执行这个脚本,我们需要修改/etc/rc.local文件,在该文件中添加一行内容,如下所示。

/usr/local/ipvsadm-1.26/startup.sh
         这样,ipvs-director服务器的开机启动就配置好了,现在我们再给lvs-nginx1和lvs-nginx2两台服务器配置开机启动。在/usr/local/nginx目录下使用vim startup.sh命令新建一个startup.sh,并且在该文件中输入如下内容:

cd /usr/local/nginx/sbin
ifconfig lo:0 192.168.156.110 broadcast 192.168.156.110 netmask 255.255.255.255 up
/sbin/route add -host 192.168.156.110 dev lo:0
cd ../conf
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore   
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce    
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore  
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce    
sysctl -p
          由于startup.sh文件默认没有执行权限,因此我们使用命令chmod +x startup.sh来添加执行权限。

[root@lvs-nginx1 nginx]# chmod +x startup.sh
          下面在/etc/rc.local文件中添加执行脚本的命令和nginx启动命令,如下所示。

[root@lvs-nginx1 nginx]# vim /etc/rc.local 

#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.

touch /var/lock/subsys/local
/usr/local/nginx/startup.sh
/usr/local/nginx/sbin/nginx
         这样,lvs-nginx1服务器便配置好了, 同样,nginx2也需要像ninx1配置一样配置一下。

         下面我们便重启lvs-director、lvs-nginx1、lvs-nginx2三台服务器,重启后我们访问http://192.168.156.110/index.html,多刷新几次,可以看到访问的首页在lvs-nginx1、lvs-nginx2之间互相均匀切换。这说明我们配置的开机自启动是没问题的。

          我们还可以将lvs-director和lvs-nginx做成系统服务。为了避免上面开机自启动的影响,我们暂且把lvs-director和lvs-nginx1、lvs-nginx2的/etc/rc.local文件中新添加的内容注释掉。




          首先在lvs-director服务器的/etc/rc.d/init.d目录下新建一个名为lvsdr的文件,可以直接在/etc/rc.d/init.d目录上右键,点击"Create new file",如下图所示。


        在弹出的对话框中输入名称lvsdr然后点击"OK"


          在粘贴配置内容之前,要先确保该文件的编码格式是UTF-8无BOM格式,如下图所示。


          把脚本内容粘贴到lvsdr脚本文件中,如下所示。

#!/bin/sh
# 定义虚拟ip
VIP=192.168.156.110 #虚拟 ip根据需求修改
# 定义realserver,并已空格分开,根据需求修改
RIPS="192.168.156.36 192.168.156.37"

# 定义提供服务的端口
SERVICE=80

# 调用init.d脚本的标准库
. /etc/rc.d/init.d/functions
case $1 in
        start)
        echo "Start LVS of DR Mode"
        # 开启ip转发
        echo "1" > /proc/sys/net/ipv4/ip_forward
        # 绑定虚拟ip
        ifconfig eth0:0 $VIP broadcast $VIP netmask 255.255.255.255 up
        route add -host $VIP dev eth0:0
        # 清除lvs规则
        ipvsadm -C
        # 添加一条虚拟服务器记录
    # -p指定一定的时间内将相同的客户端分配到同一台后端服务器
    # 用于解决session的问题,测试时或有别的解决方案时建议去掉
        ipvsadm -A -t $VIP:$SERVICE -s rr

        # 添加真实服务器记录
        for RIP in $RIPS
	do
		echo $RIP:$SERVICE;
                ipvsadm -a -t $VIP:$SERVICE -r $RIP:$SERVICE -g
        done
        # 设置tcp tcpfin  udp的超时连接值
        ipvsadm --set 30 120 300
        ipvsadm
        ;;

        stop)
        echo "Stop LVS DR"
        ifconfig eth0:0 down
        ipvsadm -C
        ;;
        *)
        echo "Usage:$0 {start | stop}"
        exit 1
esac
          添加完内容后,修改lvsdr文件的执行权限

[root@lvs-DR rc.d]# chmod +x /etc/rc.d/init.d/lvsdr

         到这里还没完,由于脚本是我们利用NodePad++工具新建并添加内容的,Windows系统与Linux系统对回车的字符解释不一样,对Windows系统来说,文件的格式是dos,对Linux系统来说,文件的格式应该是unix,我们可以使用vim lvsdr打开该文件并且输入:set ff便可以看到此时lvsdr文件的格式为dos,如下图所示。


       要把它变成unix格式可以使用命令set ff=unix,回车即可执行该命令。如下图所示。

       执行完set ff=unix命令后,我们按Shift键并且连续两次按Z键来保存。为了确认此时文件的格式是否是unix,我们按照上面说的方式查看该文件格式,发现此时已经是"unix"了。


         写完了脚本文件内容,我们现在来测试下我们添加的lvs服务是否成功。由于我们的ipvs-director处于运行状态,我们把它们都重启(由于我们已经把开机自启动文件中的相关内容注释掉了,因此不会开机自启动了)重启lvs-director服务器之后,我们使用命令service lvsdr start来启动lvs服务,如下所示,发现可以正常启动lvs服务了。

[root@lvs-DR ~]# service lvsdr start
Start LVS of DR Mode
192.168.156.36:80
192.168.156.37:80
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.156.110:http rr
  -> 192.168.156.36:http          Route   1      0          0         
  -> 192.168.156.37:http          Route   1      0          0         
[root@lvs-DR ~]#
        使用ifconfig来查看IP信息,如下所示,可以看到虚拟IP(192.168.156.110的信息)

[root@lvs-DR init.d]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:55:74:53  
          inet addr:192.168.156.35  Bcast:192.168.156.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe55:7453/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:550 errors:0 dropped:0 overruns:0 frame:0
          TX packets:382 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:51261 (50.0 KiB)  TX bytes:54611 (53.3 KiB)

eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:55:74:53  
          inet addr:192.168.156.110  Bcast:192.168.156.110  Mask:255.255.255.255
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

        下面我们一起来把nginx来做成服务,我们用上面同样的方式,在lvs-nginx1和lvs-nginx2两台服务器的/etc/rc.d/init.d目录下新建一个lvsdr文件,在文件中添加如下内容。要注意像上面那样将文件的格式由dos转变为unix格式。

#!/bin/sh
VIP=192.168.156.110 #虚拟ip,根据需求修改
. /etc/rc.d/init.d/functions
case $1 in
        start)
        echo "lo:0 port starting"
        # 为了相应lvs调度器转发过来的包,需在本地lo接口上绑定vip
        ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
        # 限制arp请求
        echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
        echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
        echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
        echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
        ;;
        stop)
        echo "lo:0 port closing"
        ifconfig lo:0 down
        echo "0" > /proc/sys/net/ipv4/conf/lo/arp_ignore
    echo "0" > /proc/sys/net/ipv4/conf/lo/arp_announce
    echo "0" > /proc/sys/net/ipv4/conf/all/arp_ignore
    echo "0" > /proc/sys/net/ipv4/conf/all/arp_announce
        ;;
        *)
        echo "Usage: $0 {start ¦ stop}"
        exit 1
esac
      需要给lvsdr文件添加执行权限,如下

[root@lvs-nginx1 init.d]# chmod +x /etc/rc.d/init.d/lvsdr

[root@lvs-nginx2 rc.d]# chmod +x /etc/rc.d/init.d/lvsdr

      为了测试我们做成的服务是否成功,我们先把lvs-nginx1和lvs-nginx2两台服务器重启(因为lvs在这两台服务器上已经处于运行状态,由于我们把开机自动动文件中的内容注释掉了,因此开机不会自动启动)。两台nginx服务器重启后,我们使用service lvsdr start ,启动服务后使用ifconfig来查看IP信息,如下所示,说明正常启动了。同样,我们启动lvs-nginx2的lvs服务。

[root@lvs-nginx1 init.d]# service lvsdr start
lo:0 port starting
[root@lvs-nginx1 init.d]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:13:7C:39  
          inet addr:192.168.156.36  Bcast:192.168.156.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe13:7c39/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:379 errors:0 dropped:0 overruns:0 frame:0
          TX packets:260 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:35057 (34.2 KiB)  TX bytes:54631 (53.3 KiB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

lo:0      Link encap:Local Loopback  
          inet addr:192.168.156.110  Mask:255.255.255.255
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          虽然我们把lvs做成了服务,但是我们的lvs-ngiinx1和lvs-nginx2两台服务器的nginx服务还没开启,我们要测试的话就要开启nginx服务。

[root@lvs-nginx1 init.d]# /usr/local/nginx/sbin/nginx
[root@lvs-nginx2 init.d]# /usr/local/nginx/sbin/nginx
         然后我们重新刷新地址http://192.168.156.110/index.html,可以看到页面在Welcome to nginx!--36和Welcome to nginx!--37之间来回切换。说明负载正常。

         服务既然可以启动,当然可以关闭,我们可以使用service lvsdr stop来关闭所有服务器上的lvs服务,如下所示。

[root@lvs-DR init.d]# service lvsdr stop
Stop LVS DR
[root@lvs-DR init.d]# 
[root@lvs-nginx1 init.d]# service lvsdr stop
lo:0 port closing
[root@lvs-nginx1 init.d]#
[root@lvs-nginx2 init.d]# service lvsdr stop
lo:0 port closing
[root@lvs-nginx2 init.d]#

         上面把LVS做成了系统服务,如果我们想把Nginx也做成系统服务的话,跟上面很类似,在/etc/init.d(/etc/rc.d/init.d目录与/etc/init.d目录实际是同一个目录,由软链接进行关联)目录下新建一个脚本文件,名称就叫nginx。为了排版方便,我还是习惯性的用NodePad++,不过要记得在粘贴脚本内容之前要确认脚本文件的编码格式是UTF-8无BOM格式!


          脚本内容如下:

#! /bin/bash
# chkconfig: 35 22 22  
# description: Nginx is an HTTP(S) server, HTTP(S) reverse
set -e
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DESC="nginx daemon"
NAME=nginx
DAEMON=/usr/local/nginx/sbin/$NAME
SCRIPTNAME=/etc/init.d/$NAME
test -x $DAEMON || exit 0
d_start(){
    $DAEMON || echo -n " already running"
}
d_stop() {
    $DAEMON -s quit || echo -n " not running"
}
d_reload() {
    $DAEMON -s reload || echo -n " counld not reload"
}
case "$1" in
start)
    echo -n "Starting $DESC:$NAME"
    d_start
    echo "."
;;
stop)
    echo -n "Stopping $DESC:$NAME"
    d_stop
    echo "."
;;
reload)
    echo -n "Reloading $DESC configuration..."
    d_reload
    echo "reloaded."
;;
restart)
    echo -n "Restarting $DESC: $NAME"
    d_stop
    sleep 2
    d_start
    echo "."
;;
*)
    echo "Usage: $SCRIPTNAME {start|stop|restart|reload}" >&2
    exit 3
;;
esac
exit 0
        接着一定要像添加LVS服务时那样,将nginx文件的格式由dos变为unix格式!!否则将提示找不到该脚本文件。

       下面要给nginx这个脚本文件添加执行权限

[root@lvs-nginx1 nginx]# chmod +x /etc/init.d/nginx
        下面我们先测试下我们添加的服务是否正确,如果当前nginx正在运行的话,先把它关掉,如果当前nginx没有运行的话,就可以直接使用命令:service nginx start来测试了,如下所示。说明我们的nginx系统服务正常。

[root@lvs-nginx1 nginx]# service nginx start
Starting nginx daemon:nginx.
[root@lvs-nginx1 nginx]# ps -ef|grep nginx
root       1427      1  0 19:03 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
nobody     1428   1427  0 19:03 ?        00:00:00 nginx: worker process      
root       1430   1359  0 19:03 pts/0    00:00:00 grep nginx
[root@lvs-nginx1 nginx]# 
         那如果我们想要将LVS服务和nginx服务都做成开机自启动(这样毕竟可以省我们不少时间)的话,可以使用chkconfig --add lvsdr和chkconfig --add nginx来添加到开机启动当中。但这里有个问题,就是添加lvsdr到开机启动时会报如下错误。

[root@lvs-DR ~]# chkconfig --add lvsdr
lvsdr 服务不支持 chkconfig
         这是由于我们在lvsdr脚本的头部没有添加# chkconfig和# description导致的,那么我们便添加一下,如下图所示。关于chkconfig: 35 21 21是什么意思,大家可以参考http://blog.csdn.net/u012453843/article/details/72801558这篇博客进行学习。


         添加的头部内容如下:

# chkconfig: 35 21 21  
# description: LVS is a virtual server cluster system
        添加完头部内容后,我们再将lvsdr添加开机启动服务当中,如下图所示,可以看到正常添加到开机启动服务列表当中了。


          lvs-director已经将服务添加到开机启动服务列表当中了,lvs-nginx1和lvs-nginx2上的lvsdr服务也要添加到开机服务列表当中,当然了,前提也需要在lvsdr脚本文件中添加上面两行头部信息,如下图所示。注意:lvs-nginx1和lvs-nginx2都在lvsdr脚本文件头部添加这两行内容。之后就像上面操作那样,将lvsdr添加到开机自启动服务列表当中。


          # chkconfig: 35 21 21三个数字的意思分别是,35代表在第3和第5种情况开机自启(lvsdr          0:关闭1:关闭2:关闭3:启用4:关闭5:启用6:关闭)。第一个21代表服务启动的顺序,第二个21代表服务关闭的顺序,这个要根据你服务器上服务的数量而定,而且要根据服务的启动顺序来定,如果服务启动要有先后顺序的话,这个数字就一定要排好序,上面我们把lvsdr的启动顺序定为了21,那么nginx的启动顺序我们便定义为22吧(它和lvsdr倒是没有什么先后顺序,谁在前谁在后无所谓)。nginx服务的头部信息如下图所示。


          添加nginx到开机自启动服务列表中,如下图所示。


        同理,我们把lvs-nginx2服务器上的nginx服务也添加到开机自启动服务列表当中


       好,开机启动我们都配置好了,现在我们便重新启动三台服务器,重启后,我们来刷新下http://192.168.156.110/index.html这个地址,可以看到访问的nginx首页在36和37之间均匀切换,这说明负载均衡没有问题。


         附:如果要将某服务从开机启动服务列表中去掉的话,可以使用如下命令(这里以nginx服务为例),删除完之后,在服务列表中便没有nginx了。

[root@lvs-nginx1 nginx]# chkconfig --del nginx


  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值