基于LAMP架构实现web网站高可用集群

Posted 林夕相心459

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于LAMP架构实现web网站高可用集群相关的知识,希望对你有一定的参考价值。

1.安装7台主机,配置主机名网络,关闭防火墙和selinux

2.两台nginx主机,配置网络源安装Nginx  和  keeplived(热备)

3.两台apache主机,配置本地源安装,httpd和php  php-mysql

4.两台mysql主机,配置raid5,创建目录并挂载到/var/lib/mysql  再安装mariadb*

5.一台nfs主机,配置raid5,创建并挂载到/luntan目录中,安装nfs-utils*,配置软件

(可省略) /打开网卡配置文件

Vi   /etc/sysconfig/network-scripts/ifcfg-ens33

修改参数

BOOTPROTO=static

ONBOOT=yes

IPADDR=IP地址

NETMASK=对应子网掩码

GATEWAY=对应网关

注:如果是在vmware虚拟机上配置静态IP,如果主机网络类型是仅主机模式或者NAT模式请注意查看虚拟网络编辑器中对应网段与网关。

原因:当前的虚拟网络编辑器就是我们的模拟路由器,所以网段必须统一。

NFS

安装mdadm:   yum install -y mdadm

创建raid5:      mdadm  -C  /dev/md5  -l  5  -n 3 -x 1  /dev/sdb,c,d,e

格式化:     mkfs  -t ext4 /dev/md5

挂载:      mount /dev/md5 /luntan

安装软件:  yum install -y  nfs-utils*

安装NFS   yum install -y install nfs

关闭防火墙, systemctl stop firewalld

selinux        setenforce 0

先启动守护进程  systemctl start rpcbind

再启动运行程序  systemctl start nfs

更换到/目录   cd /

创建创建共享目录/luntan   mkdir /luntan

更换目录 /luntan     cd /luntan

上传需要被共享的文件到这个目录中去

wget  http://download.comsenz.com/DiscuzX/3.2/Discuz_X3.2_SC_UTF8.zip

修改配置文件:vi /etc/exports

文件内容:共享目录的绝对路径 客户端(权限)

例如: /luntan *(rw,no_root_squash)

4.切换到客户端主机上进行挂载挂载共享目录到指定挂载点:

mount -t 文件系统类型 服务端IP:共享目录绝对路径本机挂点

例如: mount -t nfs 服务端 IP:/luntan /var/www/html

常见错误:

(1)提示文件系统类型不存在。解决方式:yum install -y nfs*

(2)提示挂载点目录路径或共享目录不存在错误。解决方式:确认本机挂载点正确,确认共享目录路径书写正确。

(3)提示Norouteto host。解决方式:关闭客户端服务器的防火墙和selinux

(4)提示拒绝被挂载。解决方式:服务端使用命令 exportfs +直看配置文件语法是否有误。

5.验证挂载成功

Showmount -e 本机IP地址

Apache

配置yum源 复制yum  在NFS上输入  scp /本地文件路径  root@目标主机IP:目标路径

安装NFS   yum install -y nfs*

安装httpd* yum install -y httpd*

安装php*  yum install -y php*

4.切换到客户端主机上进行挂载挂载共享目录到指定挂载点:

mount -t 文件系统类型 服务端IP:共享目录绝对路径本机挂点

例如: mount -t nfs 服务端IP:/luntan  /var/www/html

常见错误:

(1)提示文件系统类型不存在。解决方式:yum install -y nfs*

(2)提示挂载点目录路径或共享目录不存在错误。解决方式:确认本机挂载点正确,确认共享目录路径书写正确。

(3)提示Norouteto host。解决方式:关闭客户端服务器的防火墙和selinux

(4)提示拒绝被挂载。解决方式:服务端使用命令 exportfs +直看配置文件语法是否有误。

5.验证挂载成功

Showmount -e 本机IP地址

下载wget 安装 wget  http://download.comsenz.com/DiscuzX/3.2/Discuz_X3.2_SC_UTF8.zip

安装unzip*:   yum install -y unzip*

切换目录:     cd /var/www/html

解压:        unzip D......[将NFS里面下载的Dis.......解 压到httpd里面

Unzip Discuz_X3.2_SC_UTF8\\(1\\).zip -d /var/www/html/

移动:       mv /var/www/html/upload/*  /var/www/html

修改权限:    chmod -R 757 data config uc*

关闭防火墙:  systemctl stop firewalld

关闭selinux:    setenforce 0

重新启动httpd;     systemctl restart httpd

MySQL【配置数据库开启远程服务】

下载mdadm:yum install -y mdadm

创建raid5:    mdadm  -C  /dev/md5  -l  5  -n 3 -x 1  /dev/sdb,c,d,e

格式化:    mkfs  -t ext4 /dev/md5

创建挂载点:   mkdir /var/lib/md5

挂载:      mount /dev/md5  /var/lib/mysql/

配置yum源  复制yum  在NFS上输入  scp /本地文件路径  root@目标主机IP;目标路径

配置数据库开启远程管理

1.安装数据库 yum install -y mariadb*

2.启动数据库 systemctl start mariadb

3.配置密码 mysql_secure_installation

4.本机登录验证 mysql -uroot -p

5.授权 grant all privileges on *.* to 'root'@'%' identified by '123456';

6. 刷新权限 flush privileges;

7.退出 quit

8.关闭主机防火墙  systemctl stop firewalld

9.关闭主机selinux  setenfroce 0

MySQL主从复制

2. 主从复制配置过

2.2.1 主库配置

# vim /etc/my.cnf

[mysqld]

....

log-bin=mysql-bin   #日志文件名称mysql-bin.00001

server-id=1    #0--65535范围

sync_binlog=1

auto_increment_increment=2

auto_increment_offset=1

binlog-ignore-db=mysql

binlog-ignore-db=information_schema

binlog-ignore-db=performance_schema

binlog-ignore-db=sys

# 修改完成之后需要重启Mysql服务

systemctl restart mariadb

# 授权远程用户

mysql> CREATE USER 'shz'@'%' IDENTIFIED BY '123456';

mysql>grant all privileges on *.* to 'shz'@'%' identified by '123456';

mysql> flush privileges;

#验证成功,切换到从机

mysql  -h主机IP  -ushz   -p123456

登录成功证明主库用户授权成功,网络互通,防火墙selinux关闭生效

2.从库配置

# vim /etc/my.cnf

[mysqld]

...

server-id=3

relay-log=mysql-relay-bin

replicate-ignore-db=mysql

replicate-ignore-db=information_schema

replicate-ignore-db=performance_schema

replicate-ignore-db=sys

重启服务 systemctl restart mariadb

2.2.3 在主库上导出所有数据库

#在主机与从机上创建master1数据库

MASTER > create database  master1;

SLAVE  > create database  master1;

# 获取库信息

MASTER> show master status;  查询Log_file  log_pos

#配置从库连接到主库,MASTER_LOG_FILE与MASTER_LOG_POS的值由主库信息获得

mysql> CHANGE MASTER TO MASTER_HOST='192.168.122.148', MASTER_USER='shz', MASTER_PASSWORD='123456', MASTER_PORT=3306, MASTER_LOG_FILE='mysql-bin.000004', MASTER_LOG_POS=670, MASTER_CONNECT_RETRY=10;

#开启复制

start slave;

#查看slave状态

show slave status \\G;

#主要查看内容:

Slave_IO_Running,Slave_SQL_Running的状态要为Yes。

nginx

基于NGINX完成的负载均衡

  1. 配置yum源

[nginx-stable]

name=nginx stable repo

baseurl=http://nginx.org/packages/centos/$releasever/$basearch/

gpgcheck=0

enabled=1

gpgkey=https://nginx.org/keys/nginx_signing.key

2.修改/etc/resolv.conf

nameserver   网关

wget  http://mirrors.aliyun.com/repo/Centos-7.repo

  1. 安装nginx

yum   install  -y  nginx

  1. 启动

systemctl   start  nginx

注:nginx使用tcp80端口,请注意与其他web服务冲突、

  1. 配置反向代理的主机是谁

vi   /etc/nginx/nginx.conf

http

...

    upstream backend

        server 192.168.100.102:80;     apache1主机IP

        server 192.168.100.103:80;     apache2主机IP

    

  1. 配置Nginx开启反向代理访问

/etc/nginx/conf.d/default.conf

server

...

location /

        proxy_pass http://backend;

        proxy_redirect default;

        #设置代理

        proxy_set_header Host $host;       

        proxy_set_header X-Real-IP $remote_addr;

    

在两个NGINX主机上安装keepalived

Yum -y install keepalived

修改配置/etc/keepalived/keepalived.conf

清空内容后,添加以下内容

global_defs  

   router_id 1

vrrp_instance VI_1   

    state MASTER

    interface ens33

    virtual_router_id 1

    priority 100

    advert_int 1

    authentication

        auth_type PASS

        auth_pass 123456

    

    virtual_ipaddress    

        192.168.150.200

    

辅调度器上要稍作修改:

将  router_id 1  改为  router_id 2

将  state MASTER  改为  state BACKUP

将  priority 100  改为  priority 99

其他不变

LVS+keepalived高可用负载均衡集群部署---LAMP网站服务器与LVS服务器

l  系统环境: RHEL7  

l  硬件环境:虚拟机

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

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

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

l  项目拓扑图:

技术分享图片


 

 

 

 


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

注:所有系统 环境 禁用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应用程序平台。)

技术分享图片

 

技术分享图片

 

技术分享图片

 

技术分享图片

 

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

技术分享图片

l  [[email protected]_33 ~]# yum -y install mariadb-server php httpd mariadb php-mysql

 

l  启动服务:

[[email protected]_33 ~]# systemctl start httpd

[[email protected]_33 ~]# systemctl enable httpd  ——》设置开机自启

[[email protected]_33 ~]# systemctl start mariadb

[[email protected]_33 ~]# systemctl enable mariadb ——》设置开机自启

 

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

[[email protected]_33 ~]# mysqladmin -hlocalhost -uroot password "123456"

 

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

[[email protected]_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 [email protected]'localhost' identified by "123456";

 

[[email protected]_33 ~]# vim /var/www/html/test.php

<?php

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

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

?>

[[email protected]_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  [[email protected]_88 ~]# yum -y install keepalived

修改配置文件

[[email protected]_88 ~]# rpm -qc keepalived

/etc/keepalived/keepalived.conf

/etc/sysconfig/keepalived

 

[[email protected]_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 }

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

[[email protected]_88 ~]#  systemctl start keepalived  ——》启动服务

[[email protected]_88 ~]#  systemctl enable keepalived  ————》设置开机自启

技术分享图片

 

 

 

 

 

 

 

l  [[email protected]_99 ~]# yum -y install keepalived

修改配置文件

[[email protected]_99 ~]# rpm -qc keepalived

/etc/keepalived/keepalived.conf

/etc/sysconfig/keepalived

 

[[email protected]_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 }

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

[[email protected]_99 ~]# systemctl start keepalived  ——》启动服务

[[email protected]_99 ~]# systemctl enable keepalived ——————》设置开机自启

技术分享图片

 

 


 

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

192.168.4.33

[[email protected]_33 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore

[[email protected]_33 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

[[email protected]_33 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

[[email protected]_33 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

[[email protected]_33 ~]# ifconfig lo:1 192.168.4.253/32

[[email protected]_33 ~]# echo "web33" > /var/www/html/test.html

 

192.168.4.44

[[email protected]_44 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore

[[email protected]_44 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

[[email protected]_44 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

[[email protected]_44 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

[[email protected]_44 ~]# ifconfig lo:1 192.168.4.253/32

[[email protected]_44 ~]# echo "web44" > /var/www/html/test.html

 

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

[[email protected]_33 ~]#  vim /etc/rc.local

[[email protected]_44 ~]#  vim /etc/rc.local

 

 


l  步骤四:测试

客户端:192.168.4.254

[[email protected] 桌面]# elinks -dump http://192.168.4.253/test.html

   web33

[[email protected] 桌面]# elinks -dump http://192.168.4.253/test.html

   web44

[[email protected] 桌面]# elinks -dump http://192.168.4.253/test.html

   web33

[[email protected] 桌面]# elinks -dump http://192.168.4.253/test.html

   web44

 

 

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

 

 

192.168.4.88

[[email protected]_88 ~]# systemctl stop keepalived

客户端192.168.4.254:

[[email protected] 桌面]# elinks -dump http://192.168.4.253/test.html

   web33

[[email protected] 桌面]# elinks -dump http://192.168.4.253/test.html

   web44

[[email protected] 桌面]# elinks -dump http://192.168.4.253/test.html

   web33

[[email protected] 桌面]# elinks -dump http://192.168.4.253/test.html

   web44

 

 

192.168.4.99

[[email protected]_99 ~]#  systemctl stop keepalived

客户端192.168.4.254:

[[email protected] 桌面]# elinks -dump http://192.168.4.253/test.html

ELinks: 没有到主机的路由

 

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

 

 

 

 

 未完待续。。。

 

 

 

 

 

 

 

 

 

 

 


以上是关于基于LAMP架构实现web网站高可用集群的主要内容,如果未能解决你的问题,请参考以下文章

基于linux实现keepalived高可用的集群网站架构

LVS+keepalived高可用负载均衡集群部署 ----数据库的读写分离

项目实战3—Keepalived 实现高可用

基于keepalived实现多种模式的高可用集群网站架构

Nginx+keepalived高可用(双主模式)

Centos 7部署docker+nginx+keepalived实现高可用web集群