RHEL6 搭建LVS/NAT 負載均衡叢集 案例

實驗拓撲圖:

操作流程:

Director Server :     192.168.4.50 pc50

安裝并啟用ipvsadm

建立虛拟伺服器

向虛拟伺服器上加入節點

Real Server :     192.168.4.51 pc51     192.168.4.52 pc52

配置WEB 伺服器

Clinet :     192.168.2.253 pc253

連接配接虛拟伺服器測試

具體步驟:

環境準備:

    配置yum源

    # service iptables stop            //關閉防火牆

    # chkconfig iptables off            //關閉開機自啟

    # setenforce 0                            //設定SELinux 為寬松模式

網站伺服器     pc51 /  pc52 :

    # yum -y install httpd

    [root@pc51 ~]# echo '192.168.4.51' > /var/www/html/test.html

    [root@pc52 ~]# echo "192.168.4.52" > /var/www/html/test.html

    # service httpd start

    # chkconfig httpd on

    # yum -y install elinks

    [root@pc51 ~]# elinks --dump http://localhost/test.html

       192.168.4.51

    [root@pc52 ~]# elinks --dump http://localhost/test.html

       192.168.4.52

配置分發器 pc50:

        # mount /dev/cdrom /mnt/

        //安裝 ipvsadm   rpm 包在CD光牒挂載檔案下的LoadBalancer目錄下

        #cd /mnt/LoadBalancer/

        #yum -y install ipvsadm-1.26-4.el6.x86_64.rpm 

        //開啟核心的路由轉發功能

        # sed -i '7s/0/1/' /etc/sysctl.conf

        # sed -n '7p' /etc/sysctl.conf 

        net.ipv4.ip_forward = 1

網站伺服器 pc51 / pc52 :

        指定網關位址 192.168.4.50

        # route -n//檢視路由

        # route add default gw 192.168.4.50//臨時配置網關 網卡重新開機後生效

        //永久配置網關

        # vim /etc/sysconfig/network-scripts/ifcfg-eth0

        # sed -n '7p' /etc/sysconfig/network-scripts/ifcfg-eth0

        GATEWAY=192.168.4.50

        # ifdown eth0 ; ifup eth0      //重新加載網卡

用戶端 192.168.2.253 配置

        指定網關位址 192.168.2.50 :

        # vim /etc/sysconfig/network-scripts/ifcfg-eth1

        # sed -n '7p' /etc/sysconfig/network-scripts/ifcfg-eth1

        GATEWAY=192.168.2.50

        # ifdown eth1 ; ifup eth1

        # ping -c 2 192.168.4.51

        PING 192.168.4.51 (192.168.4.51) 56(84) bytes of data.

        64 bytes from 192.168.4.51: icmp_seq=1 ttl=63 time=0.322 ms

        64 bytes from 192.168.4.51: icmp_seq=2 ttl=63 time=0.503 ms

        --- 192.168.4.51 ping statistics ---

        2 packets transmitted, 2 received, 0% packet loss, time 1000ms

        rtt min/avg/max/mdev = 0.322/0.412/0.503/0.092 ms

        # yum -y install elinks

配置分發器 pc50 :

        # yum -y install ipvsadm-1.26-4.el6.x86_64.rpm

        # rpm -q ipvsadm

        ipvsadm-1.26-4.el6.x86_64

添加虛拟服務

        # ipvsadm -L  //檢視 IPVS

        IP Virtual Server version 1.2.1 (size=4096)

        Prot LocalAddress:Port Scheduler Flags

          -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

        # ipvsadm -A -t 192.168.2.50:80 -s rr//添加虛拟服務 排程算法為Round Robin

        # ipvsadm -L

        TCP  192.168.2.50:http rr

        # ipvsadm -Ln   //- n  數字顯示

        TCP  192.168.2.50:80 rr

                //向虛拟伺服器中加入節點

        # ipvsadm -a -t 192.168.2.50:80 -r 192.168.4.51:80 -m

        # ipvsadm -a -t 192.168.2.50:80 -r 192.168.4.52:80 -m

        # ipvsadm -Ln

          -> 192.168.4.51:80              Masq    1      0          0         

          -> 192.168.4.52:80              Masq    1      0          0   

        # /etc/init.d/ipvsadm save//使配置永久生效

        ipvsadm: Saving IPVS table to /etc/sysconfig/ipvsadm:      [确定]

        # cat /etc/sysconfig/ipvsadm

        -A -t 192.168.2.50:80 -s rr

        -a -t 192.168.2.50:80 -r 192.168.4.51:80 -m -w 1

        -a -t 192.168.2.50:80 -r 192.168.4.52:80 -m -w 1

用戶端測試

        # elinks --dump http://192.168.2.50/test.html

           192.168.4.51

           192.168.4.52

        //用戶端 輪詢到不同的後端真實伺服器        

        [root@pc50 ~]# ipvsadm -Ln --stats

        Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes

          -> RemoteAddress:Port

        TCP  192.168.2.50:80                 2       10       10      846     1098

          -> 192.168.4.51:80                     1        5        5        423      549

          -> 192.168.4.52:80                     1        5        5        423      549

        模拟pc51 web服務故障:

        [root@pc51 ~]# service httpd stop

        [root@pc50 ~]# ipvsadm -Z

         //用戶端測試

           192.168.4.52

        TCP  192.168.2.50:80                 3       11       11      906     1138

          -> 192.168.4.51:80                     1        1        1         60       40

          -> 192.168.4.52:80                     2       10       10      846     1098

        會發現 LVS/NAT 單點故障時 并不能健康性檢查

        可以 編寫一個腳本 監測兩台Real Server 的服務 是否正常 如果監測到故障  将對應的服務在排程伺服器 停掉

        使用周期性計劃任務 定時運作監測腳本 到達 健康檢查的目的

本文轉自 Xuenqlve 51CTO部落格,原文連結:http://blog.51cto.com/13558754/2060385,如需轉載請自行聯系原作者

負載均衡 網絡協定 perl 排程 開發工具 網絡安全 算法 網絡爬蟲網頁算法 rhel搭建負載均衡叢集 環境搭建rhel rhel搭建 網絡爬蟲算法
最近更新

RHEL6 搭建LVS/NAT 負載均衡叢集 案例

實驗拓撲圖:

操作流程:

Director Server :     192.168.4.50 pc50

安裝并啟用ipvsadm

建立虛拟伺服器

向虛拟伺服器上加入節點

Real Server :     192.168.4.51 pc51     192.168.4.52 pc52

配置WEB 伺服器

Clinet :     192.168.2.253 pc253

連接配接虛拟伺服器測試

具體步驟:

環境準備:

    配置yum源

    # service iptables stop            //關閉防火牆

    # chkconfig iptables off            //關閉開機自啟

    # setenforce 0                            //設定SELinux 為寬松模式

網站伺服器     pc51 /  pc52 :

    # yum -y install httpd

    [root@pc51 ~]# echo '192.168.4.51' > /var/www/html/test.html

    [root@pc52 ~]# echo "192.168.4.52" > /var/www/html/test.html

    # service httpd start

    # chkconfig httpd on

    # yum -y install elinks

    [root@pc51 ~]# elinks --dump http://localhost/test.html

       192.168.4.51

    [root@pc52 ~]# elinks --dump http://localhost/test.html

       192.168.4.52

配置分發器 pc50:

        # mount /dev/cdrom /mnt/

        //安裝 ipvsadm   rpm 包在CD光牒挂載檔案下的LoadBalancer目錄下

        #cd /mnt/LoadBalancer/

        #yum -y install ipvsadm-1.26-4.el6.x86_64.rpm 

        //開啟核心的路由轉發功能

        # sed -i '7s/0/1/' /etc/sysctl.conf

        # sed -n '7p' /etc/sysctl.conf 

        net.ipv4.ip_forward = 1

網站伺服器 pc51 / pc52 :

        指定網關位址 192.168.4.50

        # route -n//檢視路由

        # route add default gw 192.168.4.50//臨時配置網關 網卡重新開機後生效

        //永久配置網關

        # vim /etc/sysconfig/network-scripts/ifcfg-eth0

        # sed -n '7p' /etc/sysconfig/network-scripts/ifcfg-eth0

        GATEWAY=192.168.4.50

        # ifdown eth0 ; ifup eth0      //重新加載網卡

用戶端 192.168.2.253 配置

        指定網關位址 192.168.2.50 :

        # vim /etc/sysconfig/network-scripts/ifcfg-eth1

        # sed -n '7p' /etc/sysconfig/network-scripts/ifcfg-eth1

        GATEWAY=192.168.2.50

        # ifdown eth1 ; ifup eth1

        # ping -c 2 192.168.4.51

        PING 192.168.4.51 (192.168.4.51) 56(84) bytes of data.

        64 bytes from 192.168.4.51: icmp_seq=1 ttl=63 time=0.322 ms

        64 bytes from 192.168.4.51: icmp_seq=2 ttl=63 time=0.503 ms

        --- 192.168.4.51 ping statistics ---

        2 packets transmitted, 2 received, 0% packet loss, time 1000ms

        rtt min/avg/max/mdev = 0.322/0.412/0.503/0.092 ms

        # yum -y install elinks

配置分發器 pc50 :

        # yum -y install ipvsadm-1.26-4.el6.x86_64.rpm

        # rpm -q ipvsadm

        ipvsadm-1.26-4.el6.x86_64

添加虛拟服務

        # ipvsadm -L  //檢視 IPVS

        IP Virtual Server version 1.2.1 (size=4096)

        Prot LocalAddress:Port Scheduler Flags

          -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

        # ipvsadm -A -t 192.168.2.50:80 -s rr//添加虛拟服務 排程算法為Round Robin

        # ipvsadm -L

        TCP  192.168.2.50:http rr

        # ipvsadm -Ln   //- n  數字顯示

        TCP  192.168.2.50:80 rr

                //向虛拟伺服器中加入節點

        # ipvsadm -a -t 192.168.2.50:80 -r 192.168.4.51:80 -m

        # ipvsadm -a -t 192.168.2.50:80 -r 192.168.4.52:80 -m

        # ipvsadm -Ln

          -> 192.168.4.51:80              Masq    1      0          0         

          -> 192.168.4.52:80              Masq    1      0          0   

        # /etc/init.d/ipvsadm save//使配置永久生效

        ipvsadm: Saving IPVS table to /etc/sysconfig/ipvsadm:      [确定]

        # cat /etc/sysconfig/ipvsadm

        -A -t 192.168.2.50:80 -s rr

        -a -t 192.168.2.50:80 -r 192.168.4.51:80 -m -w 1

        -a -t 192.168.2.50:80 -r 192.168.4.52:80 -m -w 1

用戶端測試

        # elinks --dump http://192.168.2.50/test.html

           192.168.4.51

           192.168.4.52

        //用戶端 輪詢到不同的後端真實伺服器        

        [root@pc50 ~]# ipvsadm -Ln --stats

        Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes

          -> RemoteAddress:Port

        TCP  192.168.2.50:80                 2       10       10      846     1098

          -> 192.168.4.51:80                     1        5        5        423      549

          -> 192.168.4.52:80                     1        5        5        423      549

        模拟pc51 web服務故障:

        [root@pc51 ~]# service httpd stop

        [root@pc50 ~]# ipvsadm -Z

         //用戶端測試

           192.168.4.52

        TCP  192.168.2.50:80                 3       11       11      906     1138

          -> 192.168.4.51:80                     1        1        1         60       40

          -> 192.168.4.52:80                     2       10       10      846     1098

        會發現 LVS/NAT 單點故障時 并不能健康性檢查

        可以 編寫一個腳本 監測兩台Real Server 的服務 是否正常 如果監測到故障  将對應的服務在排程伺服器 停掉

        使用周期性計劃任務 定時運作監測腳本 到達 健康檢查的目的

本文轉自 Xuenqlve 51CTO部落格,原文連結:http://blog.51cto.com/13558754/2060385,如需轉載請自行聯系原作者

《Unity 5.x游戏开发实战》一2.2 Unity中的C#脚本

本节书摘来异步社区《unity 5.x游戏开发实战》一书中的第2章,第2.2节,作者: alan thorn 译者: 李华峰 责编: 胡俊英,更多章节内容可以访问云栖社区“异步社区”公众号查看。

为游戏定义逻辑、规则和行为的时候,往往需要使用到脚本。如果想将那些静态的、无生命的场景和对象转换成为可以进行交互的环境和对象,那么开发人员就需要编写代码。这些代码定义了这些物体在遇到了指定情况之后,应该做出什么样的反应。金币采集游戏也需要编写代码才能实现所有的功能。这个游戏需要实现3个主要的 功能:

能够感知玩家是否收集到金币;

在游戏进行中,能够及时了解到玩家收集的金币数量;

能确定游戏时间是否已经结束。

在unity中并没有包含一个能实现上述功能的模块。所以必须自己来编写一些代码来实现这些功能。unity中支持两种语言,即unityscript语言(有时候称之为javascript语言)和c#语言。这两种语言功能都很强大,但是本书中主要采用的是c#语言。这是因为从发展的趋势来看,javascript的使用率将会逐渐下降。现在开始对这个主要功能进行编程。首先在项目(project)面板的空白区域单击鼠标右键,然后在弹出的上下文菜单中依次选择“create | c# script”,就可以创建一个新的脚本文件。另外,也可以从应用程序菜单处依次选择“assets | create | c# script”来创建一个新的脚本文件,如图2.11所示。

《Unity 5.x游戏开发实战》一2.2 Unity中的C#脚本

当创建了脚本之后,需要为脚本起一个描述性的名字。本书起的名字为“coin.cs”。在unity中,每一个脚本文件都对应一个与其同名的类。因此,“coin.cs”文件对应的就是“coin”类。这个“coin”类将封装一个金币的所有行为,并最终会附加到场景中的金币上,如图2.12所示。

《Unity 5.x游戏开发实战》一2.2 Unity中的C#脚本

在对象检查(inspector)面板中双击coin.cs,就可以使用monodevelop打开这个文件。monodevelop是一款unity自带的第三方ide应用,它可以实现对游戏中的代码进行编写和修改。当一个文件在monodevelop中打开之后,它的内容就会如代码示例2.1所示的在monodevelop中显示出来。

注意 代码示例的下载

可以按照如下步骤来下载这些文件:

使用电子邮箱地址在页面上注册,如果已经注 册过了,那么直接登录即可;

找到并使用鼠标单击位于页面顶端的“support”;

单击“code downloads & errata”;

在搜索search框中输入要下载资源的书的名字;

选择要下载资源的书;

在下拉菜单中选中购买本书的地点;

单击“code download”。

将这些文件下载了之后,要确定解压缩软件已经更新到了最新的版本:

winrar / 7-zip for windows;

zipeg / izip / unrarx for mac;

7-zip / peazip for linux。

默认情况下,所有新创建的类都派生自“monobehavior”类,这个类中定义了一些对所有组件都通用的函数。“coin”类具有两个自动生成的函数,也就是start()和update()。这些函数都是由unity自动调用的事件。当游戏对象(关联了这个游戏脚本)在场景中创建时,就会调用start()函数。update()函数会在每一帧被附加了游戏脚本的对象中调用一次。start()函数主要用来实现代码的初始化,update()函数主要用来实现那些随着事件推移的行为,例如运动和变化。现在,将新创建的脚本文件与场景中的金币对象进行管理,可以从项目(project)面板处将“coin.cs”文件拖曳到金币对象上。当完成以后,一个新的金币组件就被添加到了游戏对象上。这意味着这个脚本已经关联到了游戏对象上,如图2.13所示,一个关联了脚本的游戏对象。

《Unity 5.x游戏开发实战》一2.2 Unity中的C#脚本

当一个脚本与一个游戏对象关联到一起之后,这个脚本就作为这个游戏对象的一个组件而存在。一个脚本文件可以添加到多个游戏对象上,甚至可以被多次添加到同一个游戏对象上。每个组件都代表着一个单独而且不同的类的实例化。当一个脚本以这种方式添加进来之后,unity会自动地调用它的函数,例如start()和update()。可以在start()函数中加入一个debug.log语句来确认脚本是否能正常工作,这个语句在场景中的游戏对象被创建时在命令行窗口输出一个调试信息。查看如下所示的代码示例2.2。

如果按下工具栏上的“play”键,或者按下键盘上的“ctrl + p”组合键,来运行这个向游戏对象上添加了前面的那个脚本的游戏,就会在控制台窗口中看到一条内容为“object created”的信息,每当这个类进行实例化的时候,都会输出一次(见图2.14)。

《Unity 5.x游戏开发实战》一2.2 Unity中的C#脚本

现在已经为coin类创建了最基本的脚本,并且已经将这个脚本成功附加到了金币对象上。接下来,继续编写一些函数,这些函数将会记录采集过的金币信息。