l  系统环境: RHEL7  

l  硬件环境:虚拟机

l  项目描述:为解决网站访问压力大的问题,需要搭建高可用、负载均衡的 web集群。

l  架构说明:整个服务架构采用功能分离的方式部署。后端采用2台mysql 数据库,实现主从结构以及读写分离。中间LAMP网站服务器共有2台, 前端 2台LVS服务器通过keepalived实现高可用负载均衡。  

l  关键技术:keepalived 、lvs DR模式 、mysql主从 、maxscale 读写 分离

l  项目拓扑图:

blob.png


 

 

 

 


@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

注:所有系统 环境 禁用selinux和防火墙

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

理论疏理:

(1).LBLoad Balancing):负载均衡集群

负载均衡集群中有一个分发器或者叫调度器,我们将其称之为Director,它处在多台服务器的上面,分发器根据内部锁定义的规则或调度方式从下面的服务器群中选择一个以此来响应客户端发送的请求。

 

(2).HAHigh Availability 高可用集群

高可用集群是服务的可用性比较高,当我们某台服务器死机后不会造成我们的服务不可用。其工作模式则是将一个具有故障的服务转交给一个正常工作的服务器,从而达到服务不会中断。一般来说我们集群中工作在前端(分发器)的服务器都会对我们的后端服务器做一个健康检查,如果发现我们服务器当机就不会对其在做转发。

 

LVSlinux虚拟服务器) 是章文嵩在国防科技大学就读博士期间创建的

LVS集群组成:前端负载均衡层                   ——由一台或多台负载调度器构成

                           中间服务器群组层                     ——由一组实际运行应用服务的服务器组成

  低端:属数据共享存储层        ——提供共享存储空间的存储区域

 

LVS术语:

         Director Server 调度服务器

         Real Server 真实服务器

         VIP 虚拟ip地址

         RIP 真实ip地址

         DIP 调度器连接节点服务器的ip地址

LVS工作模式:

         *NAT模式

          TUN模式

         *DR 模式

 

LVS调度算法:

         轮询         (RR)

         加权轮询        (WRR)

         最少连接        (LC)

         加权最少连接        (WLC)

 

***************************************************************************************************

***************************************************************************************************

 

<部署2台网站服务器,2LVS服务器,实现LB负载均衡和HA高可用>

 

在这里,我们将配置2LAMP网站服务器

(Linux+Apache+Mysql/MariaDB+Perl/PHP/Python一组常用来搭建动态网站或者服务器的开源软件,本身都是各自独立的程序,但是因为常被放在一起使用,拥有了越来越高的兼容度,共同组成了一个强大的Web应用程序平台。)

blob.png

 

blob.png

 

blob.png

 

blob.png

 

l  步骤一:部署192.168.4.33与192.168.4.44的LAMP网站服务器

blob.png

l  [root@web_33 ~]# yum -y install mariadb-server php httpd mariadb php-mysql

 

l  启动服务:

[root@web_33 ~]# systemctl start httpd

[root@web_33 ~]# systemctl enable httpd  ——》设置开机自启

[root@web_33 ~]# systemctl start mariadb

[root@web_33 ~]# systemctl enable mariadb ——》设置开机自启

 

l  设置数据库管理员本机登陆密码

[root@web_33 ~]# mysqladmin -hlocalhost -uroot password "123456"

 

l  创建数据库(库.表),授权连接用户,测试验证PHP能否连接本机的数据库服务器

[root@web_33 ~]# mysql -uroot -p123456

MariaDB [(none)]> create database lampdb;

MariaDB [lampdb]> create table lampdb.aaa(id int);

MariaDB [lampdb]> insert into lampdb.aaa values(31),(32);

MariaDB [lampdb]> grant all on lampdb.* to harry@'localhost' identified by "123456";

 

[root@web_33 ~]# vim /var/www/html/test.php

<?php

$db=mysql_connect("localhost","harry","123456");

if($db){echo "ok";}else{echo "err";};

?>

[root@web_33 ~]# elinks --dump http://192.168.4.33/test.php  #证明LAMP部署成功

         ok

 

备注:mysql_connect() 函数打开非持久的mysql连接

 

l  192.168.4.44部署lamp步骤同上

 

 



l  步骤二:部署192.168.4.88192.168.4.99lvs服务器,,,,分发器模式是LVS/DR

 

Keepalived高可用故障切换转移原理

  Keepalived高可用服务对之间的故障切换转移,是通过 VRRP (Virtual Router Redundancy Protocol ,虚拟路由器冗余协议)来实现的。

 

l  [root@lvs_88 ~]# yum -y install keepalived

修改配置文件

[root@lvs_88 ~]# rpm -qc keepalived

/etc/keepalived/keepalived.conf

/etc/sysconfig/keepalived

 

[root@lvs_88 ~]# vim /etc/keepalived/keepalived.conf

…… ……

 15 vrrp_instance VI_1 {

 16     state MASTER   ————》 声明(定义)是主LVS分发器

 17     interface eth0

 18     virtual_router_id 51

 19     priority 150   ————》优先级高于备用的LVS分发器

 20     advert_int 1

 21     authentication {

 22         auth_type PASS

 23         auth_pass 1111

 24     }

 25     virtual_ipaddress {

 26         192.168.4.253    ——》虚拟vip地址

 27     }

 28 }

 29

 30 virtual_server 192.168.4.253 80 {

 31     delay_loop 6

 32     lb_algo rr   ——————》rr轮询调度算法

 33     lb_kind DR   ——————》DR模式

 34     nat_mask 255.255.255.0

 35    #persistence_timeout 50

 36     protocol TCP

 37     connect_timeout 3

 38     nb_get_retry 3

 39     delay_before_retry 3

 40

 41     real_server 192.168.4.33 80 {   ——》真实web服务器

 42         weight 1

 43 }

 44     real_server 192.168.4.44 80 {

 45         weight 1

 46 }

 47 }

启动服务,并设置开机自启

[root@lvs_88 ~]#  systemctl start keepalived  ——》启动服务

[root@lvs_88 ~]#  systemctl enable keepalived  ————》设置开机自启

blob.png

 

 

 

 

 

 

 

l  [root@lvs_99 ~]# yum -y install keepalived

修改配置文件

[root@lvs_99 ~]# rpm -qc keepalived

/etc/keepalived/keepalived.conf

/etc/sysconfig/keepalived

 

[root@lvs_99 ~]# vim /etc/keepalived/keepalived.conf

 15 vrrp_instance VI_1 {

 16     state BACKUP    ————》声明是备用的LVS分发器

 17     interface eth0

 18     virtual_router_id 51

 19     priority 100   ————》优先级低于主分发器

 20     advert_int 1

 21     authentication {

 22         auth_type PASS

 23         auth_pass 1111

 24     }

 25     virtual_ipaddress {   ——》虚拟vip地址

 26         192.168.4.253

 27     }

 28 }

 29

 30 virtual_server 192.168.4.253 80 {

 31     delay_loop 6

 32     lb_algo rr    ——————》rr轮询调度算法

 33     lb_kind DR    ——————》DR模式

 34     nat_mask 255.255.255.0

 35    #persistence_timeout 50

 36     protocol TCP

 37     connect_timeout 3

 38     nb_get_retry 3

 39     delay_before_retry 3

 40

 41

 42     real_server 192.168.4.33 80 {

 43         weight 1

 44         }

 45     real_server 192.168.4.44 80 {

 46         weight 1

 47         }

 48 }

启动服务,并设置开机自启

[root@lvs_99 ~]# systemctl start keepalived  ——》启动服务

[root@lvs_99 ~]# systemctl enable keepalived ——————》设置开机自启

blob.png

 

 


 

l  步骤三:配置网站服务器

192.168.4.33

[root@web_33 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore

[root@web_33 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

[root@web_33 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

[root@web_33 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

[root@web_33 ~]# ifconfig lo:1 192.168.4.253/32

[root@web_33 ~]# echo "web33" > /var/www/html/test.html

 

192.168.4.44

[root@web_44 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore

[root@web_44 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

[root@web_44 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

[root@web_44 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

[root@web_44 ~]# ifconfig lo:1 192.168.4.253/32

[root@web_44 ~]# echo "web44" > /var/www/html/test.html

 

以上的配置除了test.htmlwai外都是临时的,若想要永久的,就需要在/etc/rc.local 内写入。

[root@web_33 ~]#  vim /etc/rc.local

[root@web_44 ~]#  vim /etc/rc.local

 

 


l  步骤四:测试

客户端:192.168.4.254

[root@room8pc205 桌面]# elinks -dump http://192.168.4.253/test.html

   web33

[root@room8pc205 桌面]# elinks -dump http://192.168.4.253/test.html

   web44

[root@room8pc205 桌面]# elinks -dump http://192.168.4.253/test.html

   web33

[root@room8pc205 桌面]# elinks -dump http://192.168.4.253/test.html

   web44

 

 

确认是轮询,访问网站的请求平均的分发给主机33和44

 

 

192.168.4.88

[root@lvs_88 ~]# systemctl stop keepalived

客户端192.168.4.254:

[root@room8pc205 桌面]# elinks -dump http://192.168.4.253/test.html

   web33

[root@room8pc205 桌面]# elinks -dump http://192.168.4.253/test.html

   web44

[root@room8pc205 桌面]# elinks -dump http://192.168.4.253/test.html

   web33

[root@room8pc205 桌面]# elinks -dump http://192.168.4.253/test.html

   web44

 

 

192.168.4.99

[root@lvs_99 ~]#  systemctl stop keepalived

客户端192.168.4.254:

[root@room8pc205 桌面]# elinks -dump http://192.168.4.253/test.html

ELinks: 没有到主机的路由

 

访问无反馈,确认集群正确,具备主LVS分发器,和备用LVS分发器

 

 

 

 

 未完待续。。。