CentOS 7 部署百万pv项目(高可用架构)

PV简介

PV(Page View,页面浏览量)即点击量,通常意义上说PV的多少是衡量一个网络新闻频道或网站甚至一条网络新闻的主要指标。pv的解释是这样的:一个访问者在24小时(0点-23点)内到底看了网站的几个页面。需要注意的是:同一个人浏览网站的同一个页面,不重复计算pv量,点击100次页只算1次。

百万pv网站架构

本次实验设计采用四层模式实现,主要分为前端反向代理层、web层、数据库缓存层和数据库层。前端反向代理层采用主备模式,web层采用集群模式,数据库缓存层采用主备模式,数据库层采用主从模式。

部署环境

主机名 ip地址 角色
master 192.168.0.106 nginx+keepalived主、redis主、mysql数据主库
backup 192.168.0.115 nginx+keepalived备、redis备、mysql数据从库
web1 192.168.0.104 后端tomcat服务
web2 192.168.0.105 后端tomcat服务
VIP 192.168.0.188 虚拟IP地址

所有软件包点击下载

安装服务

在主、从服务器(master, backup)都安装

一、安装keepalived+nginx

1.关闭防火墙、增强性

systemctl stop firewalld.service
setenforce 0

2.安装带有nginx rpm软件包的源

rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

3.安装keepalived+nginx

yum install -y keepalived nginx

二、安装mysql

1.检查系统中是否已安装 MySQL

rpm -qa | grep mysql

2.查看已安装的 Mariadb 数据库版本

rpm -qa|grep -i mariadb

3.卸载已安装的 Mariadb 数据库。

rpm -qa|grep mariadb|xargs rpm -e --nodeps

4.下载安装包文件。

wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm

5.安装mysql-community-release-el7-5.noarch.rpm包

rpm -ivh mysql-community-release-el7-5.noarch.rpm

6.安装mysql。

yum install mysql-server -y

三、安装redis

yum install -y epel-release #更新epel源
yum install redis -y #安装redis

在节点服务器(web1,web2)都安装

四、安装tomcat

1.安装java环境

systemctl stop firewalld.service #关闭防火墙
setenforce 0
tar xf jdk-8u101-linux-x64.tar.gz -C /usr/local
cd /usr/local/
mv jdk1.8.0_101 java

2.设置环境变量

sed -i ‘$aJAVA_HOME=/usr/local/java\nCLASSPATH=$JAVA_HOME/lib\nPATH=$PATH:$JAVA_HOME/bin\nexport PATH JAVA_HOME CLASSPATH‘ /etc/profile
source /etc/profile
java -version

3.安装tomcat

tar xvf apache-tomcat-8.5.43.tar.gz -C /usr/local #解压
cd /usr/local
mv apache-tomcat-8.5.43 tomcat #重命名
chmod +x tomcat/bin/* #给脚本授权
ln -s /usr/local/tomcat/bin/startup.sh /usr/bin/tomcatup #建立软连接
ln -s /usr/local/tomcat/bin/shutdown.sh /usr/bin/tomcatdown

更改配置和验证

一、keepalived+nginx改配置

1.更改keepalived配置

vim /etc/keepalived/keepalived.conf #修改三个参数

! Configuration File for keepalived

global_defs {
    route_id NGINX_HA   #备机要改 NGINX_HB
}

vrrp_script nginx {   #nginx监控脚本,后面会创建
    script "/opt/shell/nginx.sh"
    interval 2
}

vrrp_instance VI_1 {
    state MASTER    #备机改为BACKUP
    interface ens33
    virtual_router_id 53   #2台必须一样
    priority 100   #优先级,备机要比这个小,如90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
}

track_script {
    nginx
}

virtual_ipaddress {
    192.168.0.188   #虚拟ip地址
    }
}

2.更改nginx配置

vim /etc/nginx/nginx.conf

 user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  ‘$remote_addr - $remote_user [$time_local] "$request" ‘
                      ‘$status $body_bytes_sent "$http_referer" ‘
                      ‘"$http_user_agent" "$http_x_forwarded_for"‘;

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;
upstream tomcatpool {
                                server 192.168.0.105:8080;  #节点服务器1的ip地址,端口号
                                server 192.168.0.104:8080; #节点服务器2的ip地址,端口号
                                ip_hash;   #会话稳固功能,否则无法通过vip地址登陆
                }
                server {
                                listen 80;
                                server_name 192.168.0.188;  #虚拟ip地址
                                location / {
                                                proxy_pass http://tomcatpool;
                                                proxy_set_header X-Real-IP $remote_addr;
                                }
    }
    include /etc/nginx/conf.d/*.conf;
}

3.创建nginx启动脚本

mkdir /opt/shell
vim /opt/shell/nginx.sh

#!/bin/bash
k=`ps -ef | grep keepalived | grep -v grep | wc -l`
if [ $k -gt 0 ];then
            /bin/systemctl start nginx.service
else
        /bin/systemctl stop nginx.service
 fi

chmod +x /opt/shell/nginx.sh #脚本授权
备注:2.台nginx服务配置,nginx脚本都一样!

验证keepalived+nginx功能

1.查看主备各自的ip消息


2.停止主机keeepalived

排坑过程

坑一:

配置都没有报错,vip也实现漂移了,但网页打开就是报错,查看nginx日志,也看到不到啥问题

解决办法:仔细看图信息,给出了提示,某个命名错误

修改Nginx配置文件,把tomcat_pool改为tomcatpool,记得2台都要去修改,重启nginx服务

错误原因分析:这是由于新版本的Nginx在命名时不支持 _ 这种符号了,尽量避免使用

坑二:

配置完成后,2台都没有出现VIP(虚拟ip)

解决办法:仔细查看所有配置文件,确定都没有问题后,应该就是防火墙问题了,2台服务器的防火墙必须都要关闭或做防火墙策略,否则不会出现VIP

坑三:配置完成后,2台都出现VIP(虚拟ip)

原因分析:

1.keepalived配置文件不对,2台state必须一主一备,不能都为master
2.2台virtual_router_id必须相同
3.以上2点需要都满足才行

解决办法:对照原因,修改配置文件

坑四:

配置没有报错,也看到vip漂移了,在后面使用web服务连接数据库,使用vip地址连接,不能登录网站,只能看到网页。但是,使用数据库真实ip地址就可以登录网页。

原因分析:还是keepliaved配置文件出问题了

解决办法:对照上面的配置文件,仔细对比修改,才能解决问题。一定是配置文件里细节部分出现问题了!

数据库主从同步

1.在主数据库上改配置

vim /etc/my.cnf
在[mysqld]下加入

binlog-ignore-db=mysql,information_schema
character_set_server=utf8
log_bin=mysql_bin
server_id=1
log_slave_updates=true
sync_binlog=1

2.数据库授权

systemctl start mysqld #启动服务
mysql < slsaledb-2014-4-10.sql #导入商城数据
mysql
show databases; #查看数据是否导入
GRANT all ON slsaledb.* TO ‘root‘@‘%‘ IDENTIFIED BY ‘123456‘; #slsaledb数据库授权
grant replication slave on *.* to ‘rep‘@‘192.168.0.%‘ identified by ‘123456‘; #从库授权
flush privileges;
show master status;

3.在从数据库上改配置

vim /etc/my.cnf
在[mysqld]下加入

server_id=2
relay-log=relay-log-bin
relay-log-index=slave-relay-bin.index

4.从数据库同步设置

systemctl start mysqld #启动服务
mysql < slsaledb-2014-4-10.sql #导入商城数据
mysql
show databases; #查看数据是否导入
GRANT all ON slsaledb.* TO ‘root‘@‘%‘ IDENTIFIED BY ‘123456‘; #slsaledb数据库授权
mysql
change master to master_host=‘192.168.0.106‘,master_user=‘rep‘,master_password=‘123456‘,master_log_file=‘mysql_bin.000001‘,master_log_pos=406;
start slave;
show slave status \G

商城项目部署

1.解压项目软件包

tar xf SLSaleSystem.tar.gz -C /usr/local/tomcat/webapps/

2.修改tomcat配置

vim /usr/local/tomcat/conf/server.xml
在Host name下新增 在149行

#作用是让用户访问时不使用项目名可以直接访问
<Context path="" docBase="SLSaleSystem" reloadable="true" debug="0"></Context>

3.修改数据链接

cd /usr/local/tomcat/webapps/SLSaleSystem/WEB-INF/classes
vim jdbc.properties

driverClassName=com.mysql.jdbc.Driver
#填写虚拟ip地址
url=jdbc\:mysql\://192.168.0.188\:3306/slsaledb?useUnicode\=true&characterEncoding\=UTF-8
#填写授权时的用户名密码
uname=root
password=123456
minIdle=10
maxIdle=50
initialSize=5
maxActive=100
maxWait=100
removeAbandonedTimeout=180
removeAbandoned=true

4.启动tomcat服务

tomcatup
netstat -ntap |grep 8080

备注:2台节点服务器操作一样

5.网站验证

1.先访问2台节点服务器网址
http://192.168.0.104:8080
http://192.168.0.105:8080



2.在访问虚拟IP地址
http://192.168.0.188


Redis主从和群集配置

在主机上:

vim /etc/redis.conf
在61行修改为

bind 0.0.0.0

systemctl start redis.service #启动服务
netstat -anpt | grep 6379
redis-cli -h 192.168.0.106 -p 6379 #测试连接
192.168.0.106:6379> set name test
OK
192.168.0.106:6379> get name
"test"
192.168.0.106:6379> exit

在备机上:

vi /etc/redis.conf

 bind 0.0.0.0  #61行
 slaveof 192.168.0.106  6379  #266行,主服务器的IP

systemctl start redis.service #启动服务
redis-cli -h 192.168.0.115 -p 6379 #查看
192.168.0.115:6379> get name
"test" #同步成功
192.168.0.115:6379> exit

redis在节点服务器上配置

配置商城项目中连接redis的参数
vi /usr/local/tomcat/webapps/SLSaleSystem/WEB-INF/classes/applicationContext-mybatis.xml

#填写虚拟IP地址,47行
<constructor-arg value="192.168.0.188"/>
 <constructor-arg value="6379"/>

tomcatdown
tomcatup

redis 缓存测试

redis-cli -h 192.168.0.188 -p 6379
192.168.0.188:6379> info


配置redis集群及主从切换

只在主服务器是操作
redis-cli -h 192.168.0.106 info Replication #获取当前服务器的角色

vim /etc/redis-sentinel.conf

protected-mode no  #17 行
sentinel monitor mymaster 192.168.200.128 6379 1 #69行,1表示1台备机
sentinel down-after-milliseconds mymaster 3000 #98行,故障切换时间单位是毫秒

service redis-sentinel start #启动集群
netstat -anpt | grep 26379

redis-cli -h 192.168.0.106 -p 26379 info Sentinel #查看集群信息

验证主从切换

在主服务器上(master)
systemctl stop redis.service
redis-cli -h 192.168.0.106 -p 26379 info Sentinel #查看集群信息

检验高可用架构

关掉所有主服务器(master)和一台tomcat服务(we1)
查看网页: http://192.168.0.188

原文地址:https://blog.51cto.com/13760351/2473404

时间: 2024-08-03 13:32:59

CentOS 7 部署百万pv项目(高可用架构)的相关文章

CentOS 7 上部署Memcached 主主复制 + keepalived 高可用架构

实验环境 Memcached主主复制是指在任意一台Memcached服务器修改数据都会被同步到另外一台,但是Memcached API客户端是无法判断连接到哪一台Memcached服务器的,所以需要设置VIP地址,提供给Memcached API客户端进行连接.可以使用kcepalived产生的VIP地址连接主Memceached服务器,并且提供高可用架构.本案例使用两台Memcahed服务器和一台测试主机来完成. 主Memcahed服务器IP:192.168.10.161 备Memcahed服

在CentOS7上部署百万PV网站架构

网站架构概述 网站架构是根据客户需求分析的结果,准确定位网站目标群体,设定网站的整体架构,规划.设计网站栏目及其内容,制定网站开发流程的顺序,最大限度地进行高效资源分配与管理的设计. 百万PV网站架构 案例设计 采用四层模式实现,主要分为前端反向代理层.Web层.数据库缓存层和数据库层.前端反向代理层层采用主备模式,Web层采用群集模式,数据库缓存层采用主备模式,数据库层采用主从模式. 为了更接近生产环境,采用两台实体机部署此次环境,将前端反向代理层.数据库缓存层.数据库层部署在实体机上,只将W

[转帖]Breeze部署kubernetes1.13.2高可用集群

Breeze部署kubernetes1.13.2高可用集群 2019年07月23日 10:51:41 willblog 阅读数 673 标签: kubernetes 更多 个人分类: kubernetes https://blog.csdn.net/networken/article/details/86550735 所知道的太少了.. 不过简单试了下 不是特别好用 国内公司做的系统.. 也可能跟我的虚拟机兼容性有关系.. breeze简介 项目地址:https://github.com/wis

【高可用架构】借助Envoy工具发布项目到多台服务器

前言 在上一篇,我们已经成功在开发机上部署了Deploy项目,下面我们继续在开发机上安装Envoy 两台应用服务器的IP 192.168.10.12 192.168.10.18 [高可用架构]系列链接:待部署的架构介绍 演示 安装envoy 全局安装envoy,你也可以安装在当前项目下 composer global require laravel/envoy 在项目的根目录下创建Envoy.blade.php文件,首先我们先来测试一下Envoy是否可以正常工作 # vi Envoy.blade

部署kubernetes1.8.3高可用集群

Kubernetes作为容器应用的管理平台,通过对pod的运行状态进行监控,并且根据主机或容器失效的状态将新的pod调度到其他node上,实现了应用层的高可用. 针对kubernetes集群,高可用性还包含以下两个层面的考虑: etcd存储的高可用 master节点的高可用 在开始之前,先贴一下架构图: etcd作为kubernetes的中心数据库,必须保证其不是单点.不过etcd集群的部署很简单,这里就不细说了,之前写过一键部署脚本,有兴趣的同学可以往前翻. 在k8s全面容器化加上各种验证机制

MHA高可用架构部署配置实例

MHA高可用架构部署配置实例 一.前言 1.1What's MHA?--原理简介 ? MHA--Master High Availability,目前在MySQL高可用方面是一个相对成熟的解决方案,是一套优秀的MySQL故障切换和主从提升的高可用软件. ? 这里我们提到了两个个关键点:"高可用","故障切换".我们逐一简单介绍一下这两者的含义. 1.1.1何为高可用? ? 高可用就是可用性强,在一定条件下(某个服务器出错或宕机)可以保证服务器可以正常运行,在一定程度

雪球在股市风暴下的高可用架构改造分享

本文根据唐福林老师在“高可用架构”微信群所做的<股市风暴下的雪球架构改造经验分享>整理而成,转发请注明来自微信公众号ArchNotes. 唐福林,雪球首席架构师,负责雪球业务快速增长应对及服务性能与稳定架构优化工作.毕业于北京师范大学,硕士学位.之前曾任微博平台资深架构师,微博技术委员会成员.长期关注并从事互联网服务后端性能及稳定性架构优化工作. 雪球公司介绍 雪球 聪明的投资者都在这里. web 1.0:新闻资讯,股价信息,K线图 web 2.0:SNS 订阅,分享,聊天 web 3.0:移

drbd+heartbeat+nfs高可用架构搭建

一.客户需求 1.需求描述 有些客户有自己的存储设备,但是并没有集群文件系统服务,所以如果我们多个节点(计算节点)如果想同时使用其中的一个块且要保证高可用的话,就需要我们自己来完成类似集群文件系统的服务组合,在此我们使用的服务组合是:iscsi共享+drbd+heartbeat+nfs. 2.服务说明 Iscsi共享:这里通过iscsi共享服务将存储设备上的存储块共享出去,提供节点(NC1+NC2)使用,此处我们将在iscsi服务短创建两个镜像充当块设备. Drbd   :服务器之间镜像块设备内

企业中MySQL主流高可用架构实战三部曲之MHA

老张最近两天有些忙,一些老铁一直问,啥时更新博文,我可能做不到天天更新啊,但保证以后一有空就写一些干货知识分享给大家. 我们如果想要做好技术这项工作,一定要做到理论与实践先结合.我一个曾经被数据库虐得体无完肤的过来人给大家一些建议:就是只看书,背理论真的行不通,到时遇到棘手的问题,你还是一样抓瞎.一定要在理论理清的基础上多做实验. 给自己定个目标,3个月做够100-500个实验.然后整理在做实验过程中的各种报错,认真解读分析报错原理,做好笔记.最后再拿起书,重新阅读之前有些可能理解不了的理论知识