第十七周作业

1、结合图形描述LVS的工作原理;

工作方式:

LVS由前端的负载均衡器(Load Balancer,LB)和后端的真实服务器(Real Server,RS)群组成。RS间可通过局域网或广域网连接。LVS的这种结构对用户是透明的,用户只能看见一台作为LB的虚拟服务器(Virtual Server),而看不到提供服务的RS群。当用户的请求发往虚拟服务器,LB根据设定的包转发策略和负载均衡调度算法将用户请求转发给RS。RS再将用户请求结果返回给用户。

工作原理:

第十七周作业

1.当客户端的请求到达负载均衡器的内核空间时,首先会到达PREROUTING链。
2.当内核发现请求数据包的目的地址是本机时,将数据包送往INPUT链。
3.LVS由用户空间的ipvsadm和内核空间的IPVS组成,ipvsadm用来定义规则,IPVS利用ipvsadm定义的规则工作,IPVS工作在INPUT链上,当数据包到达INPUT链时,首先会被IPVS检查,如果数据包里面的目的地址及端口没有在规则里面,那么这条数据包将被放行至用户空间。
4.如果数据包里面的目的地址及端口在规则里面,那么这条数据报文将被修改目的地址为事先定义好的后端服务器,并送往POSTROUTING链。
5.最后经由POSTROUTING链发往后端服务器。

几种常用模型:

第十七周作业

①.客户端将请求发往前端的负载均衡器,请求报文源地址是CIP,目标地址为VIP。
②.负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将客户端请求报文的源MAC地址改为自己DIP的MAC地址,目标MAC改为了RIP的MAC地址,并将此包发送给RS。
③.RS发现请求报文中的目的MAC是自己,就会将次报文接收下来,处理完请求报文后,将响应报文通过lo接口送给eth0网卡直接发送给客户端。
优点:返回请求无需经过调度器,效率高
缺点:
1.配置复杂,需要修改内核参数使lo接口的VIP不能响应本地网络内的arp请求;
2.负载均衡器的DIP网卡与各RS必须在一个局域网中,不能跨网段;
3.无法做端口转换。


第十七周作业

①.客户端将请求发往前端的负载均衡器,请求报文源地址是CIP(客户端IP),后面统称为CIP),目标地址为VIP(负载均衡器前端地址,后面统称为VIP)。
②.负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将客户端请求报文的目标地址改为了后端服务器的RIP地址并将报文根据算法发送出去。
③.报文送到Real Server后,由于报文的目标地址是自己,所以会响应该请求,并将响应报文返还给LVS。
④.然后lvs将此报文的源地址修改为本机并发送给客户端。

优点:
1.RS端配置简单,只需配置私网IP即可;
2.支持端口转换。
缺点:由于请求与响应都经过调度器,所以性能较差,容易出现瓶颈;


第十七周作业

①.客户端将请求发往前端的负载均衡器,请求报文源地址是CIP,目标地址为VIP。
②.负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将在客户端请求报文的首部再封装一层IP报文,将源地址改为DIP,目标地址改为RIP,并将此包发送给RS。
③.RS收到请求报文后,会首先拆开第一层封装,然后发现里面还有一层IP首部的目标地址是自己lo接口上的VIP,所以会处理次请求报文,并将响应报文通过lo接口送给eth0网卡直接发送给客户端。
优点:
1.返回请求无需经过调度器,效率高;
2.负载均衡器与RS之间可以跨网段,甚至跨公网。
缺点:
1.配置复杂,需要修改内核参数使lo接口的VIP不能响应本地网络内的arp请求;
2.无法做端口转换。

2、搭建一套LVS-DR模型的高性能集群,并实现以下功能:
   (1)、wordpress程序通过nfs共享给各个realserver;
   (2)、后端realserver中的nginx和php分离

第十七周作业

1. 在两台rs节点上分别安装nginx

]# yum install nginx nfs-utils -y                                    #安装nfs-utils是为了后面能够正常挂在nfs分区

2. 安装Mariadb

]# yum install mariadb-server -y

3. 安装php-fpm和nfs

]# yum install php-fpm php-mysql php-mbstring php-gd php-xml nfs-utils -y 

4. 在两个rs节点上分别修改nginx配置文件,添加下面内容:

]# vim /etc/nginx/nginx.conf
...
location / {
            root           /data/www;                                 #定义根目录
            index          index.php index.html index.htm;            #将index.php放在第一位置
        }

        location ~ \.php$ {
            root           /data/www;
            fastcgi_pass   192.168.0.24:9000;                         #指定php服务器地址和端口
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
...

5.在php服务器上修改php-fpm配置文件

]# vim /etc/php-fpm.d/www.conf                                                                
listen = 192.168.0.24:9000                                            #设置监听地址和端口
#listen.allowed_clients = 127.0.0.1                                   #默认只允许本机访问,注释该行后表示允许所有地址到本机的连接
]# systemctl start php-fpm.service

6. 在php服务器上配置nfs服务

]# mkdir -p /data/www
]# vim /etc/exports
/data/www 192.168.0.0/24(rw,no_root_squash)                           #将/data/www通过nfs服务共享出去
]# systemctl start nfs.service

7.在两个rs节点上创建共享目录并挂在共享盘

]# mkdir -p /data/www/
]# mount -t nfs 192.168.0.24:/data/www /data/www
]# systemctl start nginx.service

8.在php服务器上创建测试页,并在浏览器上分别打开rs1和rs2的主页,检查nginx和php的联动

]# vim /data/www/index.php
<?php
        phpinfo();
?>

9. 在MySQL服务器上设置必要的优化参数并重新初始化数据文件目录

]# vim /etc/my.cnf
[mysqld]
...
datadir = /mydata/data
innodb_file_per_table = ON
skip_name_resolve = ON

]# mkdir -p /mydata/data
]# mysql_install_db --user=mysql --datadir=/mydata/data
]# systemctl start mariadb.service

10.测试php与Mariadb联动

]# mysql
MariaDB [(none)]> grant all on *.* to 'root'@'192.168.0.%' identified by 'magedu';                 #在mysql中创建远程连接账号用于联动测试
MariaDB [(none)]> flush privileges;

]# vim /data/www/index.php              #在php服务器上创建测试页面
<?php
        $conn = mysql_connect('192.168.0.25','root','magedu');
        if ($conn)
                echo "OK";
        else
                echo "Failure";
?>

11. 在MySQL中创建wordpress数据库和用户

MariaDB [(none)]> create database wpdb;                                                  
MariaDB [(none)]> grant all on wpdb.* to wpuser@'192.168.0.%' identified by 'magedu';   
MariaDB [(none)]> flush privileges;

12.在php服务器上部署wordpress

]# cd /data/www
]# unzip wordpress-3.3.1-zh_CN.zip
]# cd wordpress
]# cp wp-config-sample.php wp-config.php          #生成wordpress配置文件
]# vim wp-config.php
define('DB_NAME', 'wpdb');                        #修改为实际库名

/** MySQL 数据库用户名 */
define('DB_USER', 'wpuser');                      #修改为实际用户名

/** MySQL 数据库密码 */
define('DB_PASSWORD', 'magedu');                  #修改为实际密码

/** MySQL 主机 */
define('DB_HOST', '192.168.0.25');               #修改为实际IP

13.使用浏览器完成后续的图形化安装步骤

浏览器输入:http://192.168.0.21/wordpress/wp-admin/install.php

第十七周作业

14. 在lvs服务器上安装lvs

]# yum install ipvsadm -y

15. 在lvs物理网卡上配置VIP

]# ifconfig eno16777736:0 192.168.0.20 netmask 255.255.255.255 broadcast 192.168.0.20

16.在两台rs上修改内核参数,禁止lo对VIP的广播做响应

]# echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore
]# echo 1 >/proc/sys/net/ipv4/conf/lo/arp_ignore
]# echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce 
]# echo 2 >/proc/sys/net/ipv4/conf/lo/arp_announce

17.在两台rs的lo网卡上配置VIP并添加到lvs的vip的路由

]# ifconfig lo:0 192.168.0.20 netmask 255.255.255.255 broadcast 192.168.0.20
]# route add -host 192.168.0.20 dev lo:0

18.在lvs上配置ipvsadm规则

]# ipvsadm -A -t 192.168.0.20:80 -s rr
]# ipvsadm -a -t 192.168.0.20:80 -r 192.168.0.22 -g -w 1 
]# ipvsadm -a -t 192.168.0.20:80 -r 192.168.0.23 -g -w 1 
]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.0.20:80 rr
  -> 192.168.0.22:80              Route   1      0          0         
  -> 192.168.0.23:80              Route   1      0          0     

19.在浏览器中访问lvs的vip,测试是否成功

第十七周作业

3、基于heartbeat v2 crm实现HA LAMP组合;要求,部署wordpress,用于编辑的文章中的任何数据在节点切换后都能正常访问;

第十七周作业

1. 在两台rs节点上分别安装httpd,php并配置

]# yum install httpd php php-mysql php-mbstring php-gd php-xml nfs-utils -y 
]# vim /etc/httpd/conf/httpd.conf
...
<IfModule dir_module>
    DirectoryIndex index.php index.html
</IfModule>
...
AddType application/x-httpd-php .php
]# /etc/init.d/httpd start

2.配置nfs服务器

]# mkdir -p /data/www
]# vim /etc/exports
/data/www 192.168.0.0/24(rw,no_root_squash)                          
]# systemctl start nfs.service

3.安装并配置mariadb服务器

]# vim /etc/my.cnf
[mysqld]
...
datadir = /mydata/data
innodb_file_per_table = ON
skip_name_resolve = ON

]# mkdir -p /mydata/data
]# mysql_install_db --user=mysql --datadir=/mydata/data
]# systemctl start mariadb.service
]# mysql
MariaDB [(none)]> create database wpdb;                                                  
MariaDB [(none)]> grant all on wpdb.* to wpuser@'192.168.0.%' identified by 'magedu';   
MariaDB [(none)]> flush privileges;

4.在nfs服务器上修改wordpress配置文件

]# cd /data/www
]# unzip wordpress-3.3.1-zh_CN.zip
]# cd wordpress
]# cp wp-config-sample.php wp-config.php          
]# vim wp-config.php
define('DB_NAME', 'wpdb'); 

/** MySQL 数据库用户名 */
define('DB_USER', 'wpuser');    

/** MySQL 数据库密码 */
define('DB_PASSWORD', 'magedu');

/** MySQL 主机 */
define('DB_HOST', '192.168.0.25'); 

5.在两个rs上分别挂在nfs目录

]# mount -t nfs 192.168.0.24:/data/www /var/www/html

6.使用浏览器完成后续的图形化安装步骤,确保通过每个rs节点都能正常访问wordpress

7.配置heartbeat v2 crm的准备工作

1)各节点hosts中添加自己和对端节点的名称解析

2)各节点之间建立ssh互信关系

3)各节点之间时间同步

8.在各rs节点安装heartbeat

]# yum install net-snmp-libs libnet PyXML libtool-ltdl gnutls gettext -y
]# rpm -ivh heartbeat-2.1.4-12.el6.x86_64.rpm heartbeat-pils-2.1.4-12.el6.x86_64.rpm heartbeat-stonith-2.1.4-12.el6.x86_64.rpm

9.在两个rs节点上分别配置heartbeat

]# cp /usr/share/doc/heartbeat-2.1.4/{ha.cf,authkeys} /etc/ha.d/
]# cd /etc/ha.d/
]# chmod 600 authkeys
]# vim authkeys
auth2
#1 crc
2 sha1 1q2w3e4R
#3 md5 Hello!

]# vim /etc/ha.d/ha.cf
logfile /var/log/ha-log                 #只用heartbeat日志
#logfacility    local0                  #禁用rsyslog的local0
mcast eth0 225.23.190.1 694 1 0         #设定组播地址
keepalive 2                             #监听频率为2秒
deadtime 30                             #死亡判定时间为30秒
warntime 10                             #异常警告时间为10秒
auto_failback on                        #修复后自动上线
node node1.magede.com                   #设置节点1
node node2.magedu.com                   #设置节点2
ping 192.168.0.1                        #设定第三方仲裁设备
crm on                                  #开启crm,同时也会禁用haresources

10.打开hb_gui图形界面

]# echo "magedu"|passwd --stdin hacluster                           #为hacluster设定密码,用于后面图形化登录时身份验证
]# service heartbeat start;ssh node2 service heartbeat start
]# hb_gui &

 输入hacluster密码后进入hb_gui主界面

第十七周作业

创建资源组ha_wordpress

第十七周作业

创建资源webip,用于启停VIP

第十七周作业

创建资源nfs,用于挂载nfs共享磁盘

第十七周作业

创建资源webserver,用于启停httpd服务

第十七周作业

创建colocation约束,用于将不同资源绑定在一起

第十七周作业

创建约束nfs_with_webip,即nfs服务必须与webip在同一个节点上

第十七周作业

创建约束webserver_with_nfs,即webserver必须与nfs在同一个节点上

第十七周作业

创建顺序约束,用来指定资源服务的启停顺序

第十七周作业

创建约束nfs_after_webip,即nfs必须在webip启动之后才能启动

第十七周作业

创建约束webserver_after_nfs,即webserver服务必须在nfs服务启动之后才能启动

第十七周作业

启动资源ha_wordpress之后,可以发现所有节点均启动在节点2上,此时访问http://192.168.0.20/wordpress正常。

第十七周作业

将节点2置为standby

第十七周作业

可以发现所有的资源均已漂移到节点1上,再次访问http://192.168.0.20/wordpress,依然正常,说明高可用实现成功。

第十七周作业

原创文章,作者:N26-西安-方老喵,如若转载,请注明出处:http://www.178linux.com/76289

(0)
N26-西安-方老喵N26-西安-方老喵
上一篇 2017-05-27 13:39
下一篇 2017-05-28 16:58

相关推荐

  • Nginx之ngx_http_fastcgi_module模块详解

    一、ngx_http_fastcgi_module模块:       nginx支持FastCGI模式       CGI:Common GateWay Interface 公共网管接口,可以理解其为HTTP服务器与其他主机上运行的程序进行通信的接口。       CG…

    2017-06-25
  • LVS实现负载均衡wordpress

    项目构建: LVS实现基于https wordpress 组建 必需软件: nfs-utils-1.2.3-70.el6.x86_64 配置步骤: 1.在D主机设置NFS共享目录 /app/nfsdata #mkdir /app/nfsdata //最好用LVM 实现在线扩展 #chown mysql: /app/data //确认该主机mysql用户存在 …

    2017-05-12
  • 2016-10-18作业

    2016-10-17 课后作业  1. 生产环境发现一台服务器系统时间产生偏差,造成服务异常,请帮忙校正。     1)首先,查看本地硬件时间是否正确,命令如下:       hwclock       如果该时间是正确的,使用该时间来更新系统时间。命令如下: &nbs…

    Linux干货 2016-10-20
  • 让运维工程师不再蓝瘦、香菇

    最近广西一小哥失恋后录的视频风靡互联网,也让“蓝瘦、香菇”这两个词火了一把。虽然原故事男主角是因为失恋才蓝瘦、香菇,但想想作为运维“狗”的我们也时常因强大的工作压力而蓝瘦,常常在晚上睡得香呼呼的时候因为要处理故障从温暖的被窝爬起来,看着铝朋友鄙视的眼神,真的好香菇……本来作为技术大牛的我们,工作应该是很酷的事情,享受的应该是小白美铝们崇拜的眼神,可现在却那么…

    系统运维 2017-01-09
  • 看了还想看—普通权限及umask

        权限在操作系统是尤为重要的,无论是windows和linux中,都少不了权限这么一说,权限的大小决定了你能操作些什么,在linux中,权限对目录和文件的意义是不同的,并且还有特殊权限。今天,我们就来说说一说权限在linux中的重要性以及权限操作命令。     权限:权限决…

    Linux干货 2016-08-03
  • 设计模式 ( 十四 ) 迭代器模式Iterator(对象行为型)

    1.概述 类中的面向对象编程封装应用逻辑。类,就是实例化的对象,每个单独的对象都有一个特定的身份和状态。单独的对象是一种组织代码的有用方法,但通常你会处理一组对象或者集合。 集合不一定是均一的。图形用户界面框架中的 Window 对象可以收集任意数量的控制对象 - Menu、Slider 和 Button。并且,集合的实现可以有多种方式:PHP 数字是一个集…

    Linux干货 2015-07-19

评论列表(1条)

  • luoweiro
    luoweiro 2017-06-26 22:33

    非常赞,尤其是lvs集中模型的数据流走向,其实理清楚里面的网络地址和mac地址转换过程,对于以后排查lvs相关的故障就轻而易举了。