介绍:搭建一个高可用的web集群项目,能承受高并发的请求,任何一台服务器的退服不影响整个集群的运作,并且能对各个服务器的状态进行监控

 

运用技术:

、nginx/1.17.9、ansible/2.9.9、nfs-utils/1:2.3.3-26、zabbix/4.4.6、keepalived/1.3.5-16

 

部署:

  1.准备了7台centos8的虚拟机,两台作为web server、两台作为load balancer、一台提供数据一致性的nfs server、监控zabbix server、自动部署ansible  server

  2.首先需要用一台ansible server 对其它6台server做好单向非对称加密密钥对信

  例:

    在ansible机器上执行两部命令:

  1.ssh-keygen 生成公私密钥对

  2.ssh-copy-id root@192.168.37.165,将公钥放在192.168.37.165的root用户家目录下,因为root用户的权力最大,擒贼先擒王。

高可用集群架构描述 高可用web集群设计_高可用集群架构描述

 

 

 

  3.通过ansible的playbook文件对另外两台load balancer机器部署配置nginx、keepalived

  具体实现:

    (1):用ansible-playbook配置安装nginx、keepalived的playbook脚本

     

高可用集群架构描述 高可用web集群设计_php_02

 

nginx的shell脚本:

mkdir -p /nginx

cd /nginx

#download nginx
curl -O http://nginx.org/download/nginx-1.17.9.tar.gz

#解压
tar xf nginx-1.17.9.tar.gz

#进入解压目录
cd nginx-1.17.9

#解决依赖关系
yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel gcc gcc-c++ autoconf automake make

#配置
./configure --prefix=/usr/local/nginx --with-threads --with-file-aio --with-http_ssl_module --with-http_stub_status_module --with-stream

#编译和安装
make -j 2 ; make install

#开机启动
echo "/usr/local/nginx/sbin/nginx" >>/etc/rc.local
chmod +x /etc/rc.d/rc.local

#修改PATH变量
echo "PATH=/usr/local/nginx/sbin:$PATH" >>/etc/profile
PATH=/usr/local/nginx/sbin:$PATH
#启动

nginx

keepalived配置文件:

! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}vrrp_instance VI_1 {
    state MASTER   # 将角色设定成MASTER
    interface ens33   #  监听的接口是ens33
    virtual_router_id 51  # 分配到的虚拟路由组编号为51
    priority 150    # 优先级为150,越高越有可能称为MASTER
    advert_int 1
    authentication {  # 同一个组之间的lb是如何通信的,这里使用的是密码认证,密码必须一致才能通信
        auth_type PASS
        auth_pass 123123
    }
    virtual_ipaddress {
        192.168.37.175  #VIP的配置,外部客户端访问的ip地址,MASTER在哪,它就去哪,俗称漂移。
    }
}

 

注意事项:

1.lb之间要确保网络互通,selinux策略是关闭的,以防止产生脑裂现象

2.优先级一定要有差距,确保所有的lb server 都在一个组,以免产生脑裂现象

 

 

4.配置两台nginx web服务器与nfs服务器

具体实现:

1.在ansible机器上

ansible  web  -m  script -a "/root/one_key_install_nginx.sh"

2.配置nfs服务器

(1)准备:

 

1台Linux服务器
硬件:1核心 2G
2块磁盘: 系统盘:1块磁盘安装系统 20G,数据盘:1块专门用来存放数据 100G
系统: centos 8.0.1905

 

 (2)磁盘分区格式化:

分区:fdisk /dev/sdc

格式化:mkfs.xfs  /dev/sdc1

创建挂载点 mkdir   /web

mount /dev/sdc1    /web

设置开机自动挂载:

 vim   /etc/fstab

/dev/sdc1  /web   xfs  defaults  0 0  

(3)下载相关软件

 yum install nfs-utils -y

service  nfs-server  start

systemctl  enable nfs-server

vim  /etc/exports  #  /etc/exports是nfs默认的配置文件

/web 192.168.37.164(rw,all_squash,sync)  # rw:可读写  # sync(同步): 数据同步写入到内存和硬盘
/web 192.168.37.165(rw,all_squash,sync)  # all_squash: 不管客户端使用nfs的用户是谁,都会压制成nobody用户

 

mount 192.168.37.172:/web   /usr/local/nginx/html/  # 在web服务器上实现挂载

 

如果报错,怎么办?

1.yum install -y  nfs-utils

2.关闭防火墙

umount /usr/local/nginx/html/

 

如何解决客户机上开机自动挂载nfs服务器上共享的目录?

将命令写入/etc/rc.local里面

 

在/web目录中创建一个index.html文件,输入一些内容,到此就解决了数据一致性的问题

 

5.最后一步实现zabbix监控


1. 在监控端下载好zabbix-server服务

使用阿里巴巴镜像源:https://mirrors.aliyun.com/zabbix/zabbix/4.4/rhel

curl -O https://mirrors.aliyun.com/zabbix/zabbix/4.4/rhel/8/x86_64/zabbix-release-4.4-1.el8.noarch.rpm

rpm -ivh zabbix-release-4.4-1.el8.noarch.rpm

2. 这里选用的是zabbix的4.4.6-1,el8版本

高可用集群架构描述 高可用web集群设计_php_03

 

3. 安装zabbix,yum localinstall zabbix-* -y

4. 在监控端安装好数据库,这里使用的是官方的mariadb数据库

yum install -y mariadb  mariadb-server 

启动服务并检测是否启动成功

关闭selinux和防火墙

5.登录mariadb,并创建一个zabbix用户,创建一个zabbix库,并将zabbix的数据导入zabbix库

MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;

grant all on  zabbix.*  to  'zabbix'@'%'  identified by  'Zabbix123#';

--------------------

cd /usr/share/doc/zabbix-server-mysql

解压    gunzip create.sql.gz

将数据导入zabbix库

mysql -uzabbix  -p'Zabbix123#' zabbix<create.sql

6. 为zabbix-server配置数据库

cd /etc/zabbix/

vim zabbix-server.conf

修改四行

DBHost=localhost

DBName=zabbix

DBUser=zabbix

DBPassword=Zabbix123#

7.配置zabbix的php前端

cd /etc/php-fpm.d/

vim zabbix.conf

修改时区,以免安装zabbix的php前端时报错

php_value[date.timezone] = Asia/Shanghai

设置开机启动

systemctl enable zabbix-server zabbix-agent httpd php-fpm

启动配套服务

systemctl restart zabbix-server zabbix-agent httpd php-fpm

8. 在客户机上安装zabbix-agent

[root@localhost ~]# rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/4.4/rhel/8/x86_64/zabbix-release-4.4-1.el8.noarch.rpm

[root@localhost ~]# rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/4.4/rhel/8/x86_64/zabbix-agent-4.4.6-1.el8.x86_64.rpm

service zabbix-agent start  # 启动服务

修改客户端上的配置文件,里面的server配置项为zabbix服务器的ip地址,允许服务器过来采集数据

cd /etc/zabbix/zabbix_agentd.conf

修改配置文件中的两个地方

一个是Server,默认服务器地址是127.0.0.1,改成server端的ip地址

一个是Serveractive,也要改

service zabbix-agent restart  #重启刷新服务

systemctl enable zabbix-agent  # 设置开机启动

高可用集群架构描述 高可用web集群设计_php_04

 

 zabbix_get  是server端获取client端的数据的工具

-s 192.168.37.144  指定客户端的ip地址

-p 10050  zabbix-agentd程序默认开放的端口

-k "system.cpu.load[all,avg1]"  指定获取的值==》key==》系统里的cpu的平均负载值

 

9.配置zabbix前端,配置监控项

高可用集群架构描述 高可用web集群设计_服务器_05