一、第一阶段

假设:公司初期只有一台web服务器,搭建Web服务器的脚本如下:

 1 #检查环境
2 setenforce 0 &> /dev/null
3 sed -i s/=enforcing/=disabled/g /etc/selinux/config
4 systemctl restart firewalld
5 #使用CentOS系统原始源下载相关软件
6 yum -y remove maria*
7 echo '[mysql57-community]
8 name=MySQL 5.7 Community Server
9 baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/$basearch/
10 enabled=1
11 gpgcheck=0
12 ' > /etc/yum.repos.d/mysql57-community.repo
13 yum clean all && yum makecache -q
14 yum -y install epel-release -q
15 yum -y install vim bash-com* net-tools unzip nginx httpd php php-mysql mysql-com*server -q
16 #使用nginx实现动静分离,搭建网站
17 sed -i '42s/80/81/g' /etc/httpd/conf/httpd.conf
18 sed -i '38,$'c} /etc/nginx/nginx.conf
19 echo " server {
20 listen 80;
21 server_name 3344.com;
22 location ~*\.php$ {
23 proxy_pass http://127.0.0.1:81;
24 }
25 location / {
26 root /var/www/html;
27 }
28 }" > /etc/nginx/conf.d/3344.conf
29 systemctl restart httpd nginx
30 systemctl enable httpd nginx -q
31 firewall-cmd --add-port=80/tcp
32 firewall-cmd --add-port=80/tcp --permanent -q
33 #配置mysql数据库,开启二进制日志,创建数据库及用户
34 sed -i 4a"server-id=1\nlog-bin=binlog" /etc/my.cnf
35 systemctl restart mysqld
36 systemctl enable mysqld
37 PW=`cat /var/log/mysqld.log | grep password |head -n 1 |awk '{print $NF}'`
38 mysql -p$PW --connect-expired-password -e "alter user 'root'@'localhost' identified by 'Ryz0304/1';"
39 echo "[client]
40 user=root
41 password='Ryz0304/1'" > /root/.my.cnf #将数据库的用户密码写入配置文件中,方便登录
42 mysql -e "create database wordpress;"
43 mysql -e "grant all on wordpress.* to 'wordpress'@'localhost' identified by 'W0rdpress.';"
44 mysql -e "flush privileges;"
45 rm -rf /var/www/html/*
46 chmod -R 777 /var/www/html
47 #上传代码至nginx的工作目录/var/www/html(自定义的)
48 #浏览器访问即可

问题:

1、安装 MySQL 5.7 版本,需要卸载系统自带的mariadb-*

2、MySQL 5.7 版本安装完成后,启动命令时systemctl start mysqld,必须是mysqld;且第一次进入数据库时需要查看mysql的初始密码(/var/log/mysqld.log)

二、第二阶段

为防止一台服务器发生故障,需要动态添加一台新的服务器,使其成为主备关系,在第一台服务器宕机的情况下,web服务还可以正常运作:

#完成2台服务器的同时搭建

#各服务器的密码
MM=0304 #检查环境
setenforce 0 &> /dev/null
sed -i s/=enforcing/=disabled/g /etc/selinux/config
systemctl restart firewalld
systemctl enable firewalld &> /dev/null echo "10.0.0.11 s1
10.0.0.12 s2" >>/etc/hosts
sshpass -p $MM scp -r /etc/hosts 10.0.0.12:/etc ssh-keygen -t rsa -P "" -f /root/.ssh/id_rsa &> /dev/null
cp /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys
sed -i 35c'StrictHostKeyChecking no' /etc/ssh/ssh_config #配置yum源:使用原始CentOS系统的原始源,安装epel源,配置mysql源,安装服务
for a in s{1..2}
do
sshpass -p $MM scp -r /root/.ssh $a:/root
ssh $a "yum -y remove maria*"
ssh $a "echo '[mysql57-community]
name=MySQL 5.7 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/\$basearch/
enabled=1
gpgcheck=0
' > /etc/yum.repos.d/mysql57-community.repo
yum clean all -q && yum makecache -q
yum -y install epel-release -q
yum -y install vim bash-com* net-tools unzip nginx httpd php php-mysql mysql-com*server -q"
done #配置nginx+httpd+php动静分离
for b in s{1..2}
do
ssh $b "sed -i '42s/80/81/g' /etc/httpd/conf/httpd.conf"
ssh $b "sed -i '38,$'c} /etc/nginx/nginx.conf"
ssh $b "echo \" server {
listen 80;
server_name 3344.com;
location ~*\.php\$ {
proxy_pass http://127.0.0.1:81;
}
location / {
root /var/www/html;
}
}\" > /etc/nginx/conf.d/3344.conf"
ssh $b "systemctl restart httpd nginx
systemctl enable httpd nginx -q
firewall-cmd --add-port=80/tcp
firewall-cmd --add-port=80/tcp --permanent -q"
done #配置nginx+keepalived实现负载均衡和高可用
for c in s{1..2}
do
ssh $c "cat >/etc/nginx/conf.d/3344.conf <<EOF
server {
listen 80;
location ~*\.php\$ {
proxy_pass http://127.0.0.1:81;
}
location / {
root /var/www/html;
proxy_pass http://3344.com;
}
}
upstream 3344.com {
server 10.0.0.11;
server 10.0.0.12;
}
EOF
"
ssh $c "cat > /etc/keepalived/keepalived.conf<<EOF
! Configuration File for keepalived vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.100
}
}
EOF
" ssh $c "firewall-cmd --add-port=80/tcp --permanent"
ssh $c "firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --protocol vrrp -j ACCEPT"
ssh $c "firewall-cmd --reload"
ssh $c "systemctl enable keepalived" $> /dev/null
ssh $c "systemctl restart nginx keepalived"
done ssh s2 "sed -i s/MASTER/BACKUP/g /etc/keepalived/keepalived.conf"
ssh s2 "sed -i s/100/90/g /etc/keepalived/keepalived.conf"
ssh s2 "systemctl restart keepalived" #mysql5.7配置一
sed -i 4a'server-id=1\nlog-bin=log' /etc/my.cnf
firewall-cmd --add-port=3306/tcp --permanent
firewall-cmd --reload
systemctl enable mysqld
systemctl restart mysqld PWD1=`cat /var/log/mysqld.log |grep pass |head -n 1|awk '{print $NF}'`
cat > ~/.my.cnf <<EOF
[mysql]
user=root
password='$PWD1'
EOF mysql --connect-expired-password -e "alter user 'root'@'localhost' identified by 'Ryz0304.';"
cat > ~/.my.cnf <<EOF
[mysql]
user=root
password='Ryz0304.'
EOF mysql -e "grant REPLICATION SLAVE on *.* to 'repl'@'10.0.0.%' identified by 'Repl432/1';"
mysql -e "create database wordpress;"
mysql -e "grant all on wordpress.* to 'wordpress'@'s1' identified by 'W0rdpress/1';"
mysql -e "grant all on wordpress.* to 'wordpress'@'s2' identified by 'W0rdpress/1';"
mysql -e "flush privileges;" #mysql5.7配置二
ssh s2 "sed -i 4a'server-id=2\nlog-bin=log' /etc/my.cnf"
ssh s2 "firewall-cmd --add-port=3306/tcp --permanent"
ssh s2 "firewall-cmd --reload"
ssh s2 "systemctl enable mysqld"
ssh s2 "systemctl restart mysqld" PWD2=`ssh s2 "cat /var/log/mysqld.log" |grep pass |head -n 1|awk '{print $NF}'`
ssh s6 "cat > ~/.my.cnf <<EOF
[mysql]
user=root
password='$PWD2'
EOF" ssh s2 "mysql --connect-expired-password -e \"alter user 'root'@'localhost' identified by 'Ryz0304.';\""
ssh s2 "cat > ~/.my.cnf <<EOF
[mysql]
user=root
password='Abc1234/1'
EOF" ssh s2 "mysql -e \"grant REPLICATION SLAVE on *.* to 'repl'@'10.0.0.%' identified by 'Repl432/1';\""
ssh s2 "mysql -e \"grant all on wordpress.* to 'wordpress'@'s1' identified by 'W0rdpress/1';\""
ssh s2 "mysql -e \"grant all on wordpress.* to 'wordpress'@'s2' identified by 'W0rdpress/1';\""
ssh s2 "mysql -e \"flush privileges;\"" #主主
FILE1=`mysql -e "show master status\G"|grep File |awk '{print $2}'`
POSI1=`mysql -e "show master status\G"|grep Posit |awk '{print $2}'`
FILE2=`ssh s2 "mysql -e \"show master status\G\""|grep File |awk '{print $2}'`
POSI2=`ssh s2 "mysql -e \"show master status\G\""|grep Posit |awk '{print $2}'`
mysql -e "change master to master_host='s5',master_user='repl',master_password='Repl432/1',master_port=3306,master_log_file='$FILE1',master_log_pos=$POSI1;"
mysql -e "start slave;"
ssh s2 "mysql -e \"change master to master_host='s6',master_user='repl',master_password='Repl432/1',master_port=3306,master_log_file='$FILE2',master_log_pos=$POSI2;\""
ssh s2 "mysql -e \"start slave;\""

三、第三阶段

四、第四阶段

五、第五阶段

六、架构

LNAMP架构项目一的更多相关文章

  1. 简单使用Idea创建三层架构项目和数据库连接(使用原生ajax进行访问+ajax)

    Idea创建三层架构项目 首先创建一个Web项目model 创建Web完成后进行创建entity.dao.service 特别注意 根据上面的步骤进行创建即可得到 创建完成 我们首先创建数据库 cre ...

  2. Linux运维企业架构项目实战系列

    Linux运维企业架构项目实战系列 项目实战1—LNMP的搭建.nginx的ssl加密.权限控制的实现 项目实战2—LVS.nginx实现负载均衡系列2.1 项目实战2.1—实现基于LVS负载均衡集群 ...

  3. Rest构建分布式 SpringCloud微服务架构项目

    一.开发环境:jdk  1.8.Maven  3.x.IDEA  2019.1.4.SpringBoot   2.0.7.spring Cloud  最新的稳定版  Finchley SR2   搭配 ...

  4. ASP.NET三层架构项目创建流程

    1.进入VS2010,新建项目—>Visual C#—>Web—>ASP.NET空Web应用程序,如图所示: 2.在解决方案处右击—>新建项目—>Windows—> ...

  5. 大数据项目之_15_电信客服分析平台_01&02_项目背景+项目架构+项目实现+数据生产+数据采集/消费(存储)

    一.项目背景二.项目架构三.项目实现3.1.数据生产3.1.1.数据结构3.1.2.编写代码3.1.3.打包测试3.2.数据采集/消费(存储)3.2.1.数据采集:采集实时产生的数据到 kafka 集 ...

  6. 【转】Android官方架构项目之MVP + Clean

    首先,不了解 Clean 架构的可以看看这个,不过也没关系,阅读本文后你也许会对Clean架构思想有一个认识. 对比MVP项目的结构图,我们发现不同之处是新增的这个Domain Layer这层,来隔离 ...

  7. MVC架构 项目实践

    MVC MVC架构程序的工作流程 springmvc 中dao层和service层的区别 项目实践 项目目录 项目实现流程 JSP登录页面View层 LoginServletjavaControlle ...

  8. LNAMP架构中后端Apache获取用户真实IP地址的2种方法(转)

    一.Nginx反向代理配置: 1.虚拟主机配置 复制代码代码如下: location / {    try_files $uri @apache;} location @apache {interna ...

  9. 转:Android官方MVP架构示例项目解析

    转自: http://www.infoq.com/cn/articles/android-official-mvp-architecture-sample-project-analysis 作者 吕英 ...

随机推荐

  1. OO第四单元总结暨期末总结

    OO第四单元总结暨期末总结 目录 OO第四单元总结暨期末总结 第四单元三次作业架构与迭代 整体感受 HW1 HW2 HW3 四个单元架构设计与方法演进 Unit1 Unit2 Unit3 Unit4 ...

  2. ThoughtWorks首席咨询师带你一站通关中台

    大家都在谈中台,是当下一个热议的话题,但是我们最关心的两个基本问题还是没有答案.一个是中台的概念,依然是见仁见智,始终没有一个统一的见解:另一个是中台的落地,更是鲜有人谈. 拨开当下有关中台的层层迷雾 ...

  3. PAT A1025 考生排名问题

    题目要求:有n个考场,每个考场有若干个考生,现给出各个考场中考生的准考证号与分数,按照分数从高到低排序,并按顺序输出所有考生的准考证号,排名,考场号以及所在的考场排名 #include<cstd ...

  4. [Python]import使用的疑难杂症与包管理

    概念:模块与包 模块module:一般是以.py为后缀的文件,也包括.pyo..pyc..pyd..so和.dll后缀的文件,模块内定义了函数.类以及变量 包package:包是含有若干个模块的文件夹 ...

  5. (十六)VMware Harbor 复制镜像

    Step 1: 点击复制镜像后 Step 2: 填写复制镜像信息 Step 3:在sx628下,会多出一个镜像

  6. hibernate的三种查询方式

    hibernate的三种查询方式 目录 hibernate的三种查询方式 1.HQL查询 1.1.SQL概述 1.2.实体查询 1.3.带where的查询 1.3.属性查询 1.4.实体的更新和删除 ...

  7. 做个开源博客学习Vite2 + Vue3 (三)博客设计和代码设计

    项目搭建好了之后是不是可以编码了呢? 等等不要着急,我们是不是应该先设计一下?比如博客的功能等? 博客设计 先做个简单的个人博客,因为是个人版,所以可以省略注册.登录这些功能,表结构也可以简单一点. ...

  8. 如何查看显著性SNP在数据中的频率?

    我们做完GWAS的关联分析后需要查看显著性SNP在我们数据中的频率分布情况.这时候我们需要用到plink和我们做关系分析所用的二进制文件datas. 第一步,我们用R语言读取分析结果,即*.assoc ...

  9. ASP.Net 管道模型 VS Asp.Net Core 管道 总结

    1 管道模型  1 Asp.Net Web Form管道 请求进入Asp.Net工作进程后,由进程创建HttpWorkRequest对象,封装此次请求有关的所有信息,然后进入HttpRuntime类进 ...

  10. python 函数对象、函数嵌套、名称空间与作用域

    一 函数对象 一 函数是第一类对象,即函数可以当作数据传递 #1 可以被引用 #2 可以当作参数传递 #3 返回值可以是函数 #3 可以当作容器类型的元素二 利用该特性,优雅的取代多分支的if def ...