zoukankan      html  css  js  c++  java
  • 高可用web集群的搭建与监控

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

    运用技术:

      CentOS Linux release 8.0.1905 (Core)、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用户的权力最大,擒贼先擒王。

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

      具体实现:

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

         

    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版本

    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  # 设置开机启动

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

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

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

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

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

  • 相关阅读:
    ECMall模板开发文档
    ECmall错误:Call to a member function get_users_count() on a non-object
    剖析ECMALL的登录机制
    分析ECMall的注册与登录机制
    ECMall的MySQL数据调用的简单方法
    ECMall系统请求跳转分析
    Ecmall系统自带的分页功能
    ECMall注册机制简要分析
    [Ecmall]ECMALL目录结构设置与数据库表
    [ecmall]Ecmall 后台添加模板编辑区
  • 原文地址:https://www.cnblogs.com/PurpleRain98/p/13099667.html
Copyright © 2011-2022 走看看