基于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完成的负载均衡
- 配置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
- 安装nginx
yum install -y nginx
- 启动
systemctl start nginx
注:nginx使用tcp80端口,请注意与其他web服务冲突、
- 配置反向代理的主机是谁
vi /etc/nginx/nginx.conf
http
...
upstream backend
server 192.168.100.102:80; apache1主机IP
server 192.168.100.103:80; apache2主机IP
- 配置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).LB(Load Balancing):负载均衡集群
负载均衡集群中有一个分发器或者叫调度器,我们将其称之为Director,它处在多台服务器的上面,分发器根据内部锁定义的规则或调度方式从下面的服务器群中选择一个以此来响应客户端发送的请求。
(2).HA(High Availability) 高可用集群
高可用集群是服务的可用性比较高,当我们某台服务器死机后不会造成我们的服务不可用。其工作模式则是将一个具有故障的服务转交给一个正常工作的服务器,从而达到服务不会中断。一般来说我们集群中工作在前端(分发器)的服务器都会对我们的后端服务器做一个健康检查,如果发现我们服务器当机就不会对其在做转发。
LVS(linux虚拟服务器) 是章文嵩在国防科技大学就读博士期间创建的
LVS集群组成:前端负载均衡层 ——由一台或多台负载调度器构成
中间服务器群组层 ——由一组实际运行应用服务的服务器组成
低端:属数据共享存储层 ——提供共享存储空间的存储区域
LVS术语:
Director Server 调度服务器
Real Server 真实服务器
VIP 虚拟ip地址
RIP 真实ip地址
DIP 调度器连接节点服务器的ip地址
LVS工作模式:
*NAT模式
TUN模式
*DR 模式
LVS调度算法:
轮询 (RR)
加权轮询 (WRR)
最少连接 (LC)
加权最少连接 (WLC)
***************************************************************************************************
***************************************************************************************************
<部署2台网站服务器,2台LVS服务器,实现LB负载均衡和HA高可用>
在这里,我们将配置2台LAMP网站服务器
(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.88和192.168.4.99的lvs服务器,,,,分发器模式是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网站高可用集群的主要内容,如果未能解决你的问题,请参考以下文章