LAMP

1、LVS+keepalive + apache + mysql

2、nginx+apache实现动静分离

1、安装mysql 2、MHA 3、安装httpd 4、安装php 5、LVS+keepalive

修改主机名

192.168.100.101 master
192.168.100.102 slave1
192.168.100.103 slave2
192.168.100.104 mha
192.168.100.4 web1
192.168.100.5 web2
192.168.100.6 lvs1
192.168.100.7 lvs2

实验拓扑

在这里插入图片描述

1、安装mysql

上传软件包

方法一:
上传mysql安装包和boost安装包到我们的服务器上
上传mysql-community-5.7.26-1.el7.src.rar,rpm -ivh 解压
[root@master ~]# rpm -ivh mysql-community-5.7.26-1.el7.src.rpm
[root@master ~]# cd rpmbuild/
[root@master ~]# cd SOURCES/
[root@master ~]# cp boost_1_59_0.tar.bz2 /root
[root@master ~]# cp mysql-5.7.26.tar.gz /root
[root@master ~]# ls
anaconda-ks.cfg boost_1_59_0.tar.bz2 mysql-5.7.26.tar.gz
方法二:
mysql下载地址:
https://dev.mysql.com/downloads/mysql/5.7.html#downloads
注意:官网提供下载的源码包为mysql-community-5.7.26-1.el7.src.rpm以.src.rpm结尾的rpm包,需要rpm -ivh安装这个包,在当先目录下生成rpmbuild的目录文件,然后在rpmbuild/SOURCES/目录下才是我们.tar.gz结尾的源码包。

一、配置本地yum源

[root@master ~]# mount /dev/sr0 /mnt
[root@master ~]# vim /etc/yum.repos.d/centos7.repo
[centos7]
name=CentOS7
baseurl=file:///mnt
enable=1
gpgcheck=0
1、卸载boost
MySQL从5.7版本之后,必须有boost支持,建议把系统自带的boost库卸载,使用高版本。
[root@master ~]# yum -y remove boost-*
解压我们上传的boost_1_59_0.tar.bz2到root目录下,待会安装直接指定boost目录。
2、安装bzip2解压工具,解压缩boost_1_59_0.tar.bz2
[root@master ~]# yum install -y bzip2
[root@master ~]# tar -jxvf boost_1_59_0.tar.bz2
3、卸载系统自带的mysql
[root@master ~]# yum -y remove mysql*
[root@master ~]# yum -y remove mariadb*
4、安装MYSQL依赖包
Mysql需要使用cmake来进行编译,所以需要安装cmake,并且5.7版本cmake版本不低于2.8
[root@master ~]# yum install -y cmake make gcc gcc-c++ bison ncurses ncurses-devel

二、添加mysql用户和用户组

1、创建用户
[root@master ~]# groupadd mysql
[root@master ~]# useradd -M -s /sbin/nologin -r -g mysql mysql
2、创建mysql数据库存放位置并修改目录权限
[root@master ~]# mkdir -p /data/mysql/{data,log}
[root@master ~]# chown -R mysql:mysql /data/mysql
注意:生产环境中mysql的data数据目录会单独放在一块硬盘中
三、编译、安装
解压源码包
[root@master ~]# tar -zxvf mysql-5.7.26.tar.gz
1、预编译
预编译需要我们指定安装服务的参数或者模块,还会对编译环境进行测试,只有通过测试,才能进行编译,预编译失败一般都是缺少编译环境GCC或者其他的依赖包,需要我们手工安装完依赖包后,再次进行预编译。
[root@master ~]# cd mysql-5.7.26
[root@master mysql-5.7.26]# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql
-DMYSQL_DATADIR=/data/mysql/data
-DSYSCONFDIR=/etc
-DWITH_MYISAM_STORAGE_ENGINE=1
-DWITH_INNOBASE_STORAGE_ENGINE=1
-DWITH_MEMORY_STORAGE_ENGINE=1
-DWITH_READLINE=1
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock
-DMYSQL_TCP_PORT=3306
-DENABLED_LOCAL_INFILE=1
-DWITH_PARTITION_STORAGE_ENGINE=1
-DEXTRA_CHARSETS=all
-DDEFAULT_CHARSET=utf8
-DDEFAULT_COLLATION=utf8_general_ci
-DDOWNLOAD_BOOST=1
-DWITH_BOOST=/root/boost_1_59_0 #指定我们刚才解压的boost目录
官网详细地址:
https://dev.mysql.com/doc/refman/5.7/en/source-configuration-options.html
参数注释:
DCMAKE_INSTALL_PREFIX:指定MySQL程序的安装目录,默认/usr/local/mysql
DEFAULT_CHARSET:指定服务器默认字符集,默认latin1
DEFAULT_COLLATION:指定服务器默认的校对规则,默认latin1_general_ci
ENABLED_LOCAL_INFILE:指定是否允许本地执行LOAD DATA INFILE,默认OFF
WITH_COMMENT:指定编译备注信息
WITH_xxx_STORAGE_ENGINE:指定静态编译到mysql的存储引擎,MyISAM, MERGE,MEMBER以及CSV四种引擎默认即被编译至服务器,不需要特别指定。
WITHOUT_xxx_STORAGE_ENGINE:指定不编译的存储引擎
SYSCONFDIR:初始化参数文件目录
MYSQL_DATADIR:数据文件目录
MYSQL_TCP_PORT:服务端口号,默认3306
MYSQL_UNIX_ADDR:socket文件路径,默认/tmp/mysql.sock
检测命令执行结果
[root@master mysql-5.7.26]#echo $?#0说明上条命令执行成功,其他执行失败
2、编译
[root@master mysql-5.7.26]#make -j $( grep processor /proc/cpuinfo | wc -l)
make -j 4 #注:-j 用来指定CPU核心数,可加快编译速度。
检测命令执行结果
[root@master mysql-5.7.26]# echo $?
查看服务器CPU核心数
[root@master mysql-5.7.26]# grep processor /proc/cpuinfo | wc -l
3、安装
[root@master mysql-5.7.26]# make install
检测命令执行结果
[root@master mysql-5.7.26]# echo $?
修改mysql目录权限
[root@master mysql-5.7.26]# chown -R mysql:mysql /usr/local/mysql/
4、生成my.cnf配置文件
自行创建my.cnf配置文件
[root@master ~]# vim /etc/my.cnf
[mysqld]
basedir=/usr/local/mysql #mysql安装目录
datadir=/data/mysql/data #mysql数据存放目录
port=3306 #mysql监听端口
socket=/usr/local/mysql/mysql.sock #mysql.sock文件存放目录
symbolic-links=0 #关闭mysql的符号链接
character-set-server=utf8 #指定mysql的字符集为utf8
log-error=/data/mysql/log/mysqld.log #指定mysql的错误日志存放路径
pid-file=/usr/local/mysql/mysqld.pid #mysql的pid文件存放目录
[root@master ~]# cp /etc/my.cnf /etc/my.cnf.bak #创建备份文件
注意:所有my.cnf指定的目录mysql用户都要有读写权限。symbolic-links符号链接支持在别的目录下存放mysql的
数据库文件,当我们mysql数据盘满了以后,可以启动symbolic-links=1,把mysql的数据放在别的目录下,然后链
接到mysql的datadir目录下。

5、生成服务启动脚本
[root@master ~]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
[root@master ~]# chmod +x /etc/init.d/mysqld #给脚本添加执行权限
添加mysqld开机自启动
[root@master ~]# chkconfig --add mysqld #把mysql添加到系统服务
[root@master ~]# chkconfig mysqld on #把mysql添加到开机自启动
[root@master ~]# chkconfig --list mysqld #查看mysql开机自启动状态
初始化数据库
如果无法初始化先启动mysql
[root@master ~]# /usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql
–basedir=/usr/local/mysql --datadir=/data/mysql/data
启动服务
[root@master ~]# /etc/init.d/mysqld start
Starting MySQL SUCCESS!
6、添加path路径:
添加mysql命令路径到path环境变量中或者把mysql命令路径软连接到path环境变量里已经存在的目录,这样我们可以在系统任意位置直接执行mysql相关命令
[root@master ~]# vim /etc/profile 添加下面2行 在文件的结尾
export MYSQL_HOME=/usr/local/mysql
export PATH=$PATH:$MYSQL_HOME/bin
7、使修改生效
[root@master ~]# source /etc/profile
[root@master ~]# ln -s /usr/local/mysql/bin/* /usr/local/bin/

四、mysql密码

1、设置mysql密码
[root@master ~]# mysqladmin -u root password “123456”
或者登陆到mysql修改密码
[root@master ~]# mysql
mysql> set password for ‘root’@‘localhost’=password(‘123456’);
2、忘记mysql密码
忘记mysql密码:vim /etc/my.cnf skip-grant-tables
systemctl restart mysqld mysql进入数据库
update user set authentication_string=password(‘123123’) where user=‘root’;
vim /etc/my.cnf 删除skip-grant-tables
五、 登陆mysql
[root@master ~]# mysql -uroot -p123123
mysql> show databases;
±-------------------+
| Database |
±-------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
±-------------------+
4 rows in set (0.00 sec)

2、MHA

(所有主机都要做的)

所有主机设置免密
[root@master ~]# ssh-keygen -t rsa
[root@master ~]# ssh-copy-id root@192.168.100.101
[root@master ~]# ssh-copy-id root@192.168.100.102
[root@master ~]# ssh-copy-id root@192.168.100.103
[root@master ~]# ssh-copy-id root@192.168.100.104
上传软件包
anaconda-ks.cfg mha4mysql-node-0.57-0.el7.noarch.rpm节点包 mhapath.tar.gz yum源依赖包
配置本地yum源
[root@master ~]# vim /etc/yum.repos.d/mhapath.repo
[mha]
name=mhapath
baseurl=file:///root/mhapath
enabled=1
gpgcheck=0
Mha安装依赖包
[root@master ~]# tar -zxvf mhapath.tar.gz #解压依赖包
[root@master ~]# vim /etc/yum.repos.d/centos7.repo
[CentOS7]
name=CentOS-server
baseurl=file:///mnt
enabled=1
gpgcheck=0
[root@master ~]# mount /dev/cdrom /mnt #挂在光驱
软件依赖和安装包
[root@master ~]# yum -y install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager --skip-broken --nogpgcheck
[root@master ~]# rpm -ivh mha4mysql-node-0.57-0.el7.noarch.rpm
安装完成后会在/usr/bin/目录下生成以下脚本文件:
[root@master bin]# cd /usr/bin/
[root@master bin]# ll app* filter* purge* save*
-rwxr-xr-x 1 root root 16381 5月 31 2015 apply_diff_relay_logs
-rwxr-xr-x 1 root root 4807 5月 31 2015 filter_mysqlbinlog
-rwxr-xr-x 1 root root 8261 5月 31 2015 purge_relay_logs
-rwxr-xr-x 1 root root 7525 5月 31 2015 save_binary_logs

管理节点

上传软件包
mha4mysql-manager-0.57-0.el7.noarch.rpm
安装软件包
rpm -ivh mha4mysql-manager-0.57-0.el7.noarch.rpm

搭建主从复制环境

配置/etc/my.cnf文件
Master:
log-bin=mysql-bin-master #启用二进制日志
server-id=1 #本机数据库ID 标示
binlog-do-db=HA #可以被从服务器复制的库, 二进制需要同步的数据库名
binlog-ignore-db=mysql #不可以被从服务器复制的库
slave1:
log-bin=mysql-slave1 #启用二进制日志
server-id=2 #本机数据库ID 标示
log_slave_updates=1 #从库会记录和主一样的二进制日志
slave2:
log-bin=mysql-slave2 #启用二进制日志
server-id=3 #本机数据库ID 标示
log_slave_updates=1 #从库会记录和主一样的二进制日志
所有mysql
[root@httpd1 ~]# systemctl restart mysqld #重启服务

授权

slave用户用来主从同步,root用户给MHA使用
给mha创一个用户,就是因为主挂了,他要到从上重新指定主
mysql> grant replication slave on . to repl@‘192.168.100.%’ identified by ‘123456’;
mysql> grant all privileges on . to ‘root’@‘192.168.100.%’ identified by ‘123456’;
所有从mysql
mysql> stop slave;
mysql> change master to master_host=‘192.168.100.101’,master_user=‘repl’,master_password=‘123456’;
mysql> start slave;
mysql> show slave status\G
mysql> set global relay_log_purge=0; #不将relog日志清除,从服务器频繁拉取master数据,也会自动删除之前的二进制日志,但是在MHA环境中,这些中继日志在恢复其他从服务器时可能会被用到,因此需要禁用中继日志的自动删除功能。
mysql> set global read_only=1; #从库对外提供读服务,之所以没有写进配置文件,是因为slave随时会提升为master

配置MHA

[root@mha ~]# mkdir -p /etc/masterha #存放配置文件的
[root@mha ~]# mkdir -p /var/log/masterha/app1 #存放日志的
[root@mha ~]# vim /etc/masterha/app1.cnf #群集配置文件,可以多个
[server default]
manager_workdir=/var/log/masterha/app1
manager_log=/var/log/masterha/app1/manager.log
master_binlog_dir=/data/mysql/data
user=root
password=123456
ping_interval=1
remote_workdir=/tmp
repl_user=repl
repl_password=123456
ssh_user=root

[server1]
hostname=192.168.100.101
port=3306

[server2]
hostname=192.168.100.102
port=3306
candidate_master=1
check_repl_delay=0

[server3]
hostname=192.168.100.103
port=3306
注释,需要注意的几个地方
[server default]
manager_workdir=/var/log/masterha/app1 #设置manager的工作目录
manager_log=/var/log/masterha/app1/manager.log #设置manager的日志
master_binlog_dir=/data/mysql/data #设置master 保存binlog的位置,以便MHA可以找到master的日志,我这里的也就是mysql的数据目录
master_ip_failover_script= /usr/bin/master_ip_failover #设置vip自动故障切换时候的脚本
master_ip_online_change_script=/usr/bin/master_ip_online_change #设置手动切换时候的切换脚本

user=root
password=123456 mysql给mha的用户名密码
ping_interval=1 #设置监控主库,发送ping包的时间间隔,默认是3秒,尝试三次没有回应的时候自动进行railover,每过一秒看主还在不在
remote_workdir=/tmp #设置远端mysql在发生切换时binlog的保存位置
repl_user=repl #设置复制环境中的复制用户名
repl_password=123456 #设置复制用户的密码,主坏了,通过这个重新指定主
report_script=/usr/local/send_report #设置发生切换后发送的报警的脚本
shutdown_script="" #设置故障发生后关闭故障主机脚本(该脚本的主要作用是关闭主机放在发生脑裂,这里没有使用)
ssh_user=root #设置ssh的登录用户名,因为免密了,就不用输密码了

[server1]
hostname=192.168.100.101
port=3306

[server2]
hostname=192.168.100.102
port=3306
candidate_master=1 #设置为候选master,如果设置该参数以后,发生主从切换以后将会将此从库提升为主库,即使这个主库不是集群中事件最新的slave
check_repl_delay=0 #默认情况下如果一个slave落后master 100M的relay logs的话,MHA将不会选择该slave作为一个新的master,因为对于这个slave的恢复需要花费很长时间,通过设置check_repl_delay=0,MHA触发切换在选择一个新的master的时候将会忽略复制延时,这个参数对于设置了candidate_master=1的主机非常有用,因为这个候选主在切换的过程中一定是新的master

[server3]
hostname=192.168.100.103
port=3306

检查MHA Manger到所有MHA Node的SSH连接状态:

[root@mha ~]# masterha_check_ssh --conf=/etc/masterha/app1.cnf
在这里插入图片描述

通过masterha_check_slave脚本查看整个集群的状态

[root@mha ~]# masterha_check_repl --conf=/etc/masterha/app1.cnf
在这里插入图片描述
这是因为之前健康检查报错,需要删除之前健康检查的文件
[root@mha ~]# rm -rf /var/log/masterha/app1/app1.master_status.health
重新查看集群状态
[root@mha ~]# masterha_check_slave --conf=/etc/masterha/app1.cnf
在这里插入图片描述

开启MHA监控

[root@mha ~]# nohup masterha_manager --conf=/etc/masterha/app1.cnf \ --remove_dead_master_conf --ignore_last_failover < /dev/null >
/var/log/masterha/app1/manager.log 2>&1 &
在这里插入图片描述

看MHA Manager监控是否正常

[root@mha ~]# masterha_check_status --conf=/etc/masterha/app1.cnf
app1 (pid:7261) is running(0:PING_OK), master:192.168.100.101
关闭MHA监控
[root@mha ~]# masterha_stop --conf=/etc/masterha/app1.cnf
开启监控
[root@mha ~]# jobs 再开启监控
[root@mha ~]# nohup masterha_manager --conf=/etc/masterha/app1.cnf \ --remove_dead_master_conf --ignore_last_failover < /dev/null >
/var/log/masterha/app1/manager.log 2>&1 &

打开新窗口查看日志

[root@ mha ~]# tail -f /var/log/masterha/app1/manager.log

模拟主库故障

[root@httpd1 ~]# systemctl stop mysqld
看日志master是否切换成功
在这里插入图片描述
从slave3查看show slave status\G
[root@slave3 ~]# mysql -uroot -p123456
mysql> show slave status\G
在这里插入图片描述

mysql主上配置VIP

[root@master ~]# ifconfig ens33:1 192.168.100.88 netmask 255.255.255.0 up
[root@master ~]# ip addr
在这里插入图片描述

在主配置文件里开启脚本

[root@mha ~]#vim /etc/masterha/app1.cnf #添加一句话
ssh_user=root 在这句话后添加这句话
master_ip_failover_script=/usr/bin/master_ip_failover #开启脚本

编写脚本/usr/bin/master_ip_failover,是perl脚本语言

[root@mha ~]# vim /usr/bin/master_ip_failover

 #!/usr/bin/env perl
 use strict;
 use warnings FATAL => 'all';
 
 use Getopt::Long;
 
 my (
     $command,          $ssh_user,        $orig_master_host, $orig_master_ip,
     $orig_master_port, $new_master_host, $new_master_ip,    $new_master_port
 );
 
 my \$vip = '192.168.100.88/24';
 my $key = '1';
 my \$ssh_start_vip = "/sbin/ifconfig ens33:$key $vip";
 my \$ssh_stop_vip = "/sbin/ifconfig ens33:$key down";
 
 GetOptions(
     'command=s'          => \$command,
     'ssh_user=s'         => \$ssh_user,
     'orig_master_host=s' => \$orig_master_host,
     'orig_master_ip=s'   => \$orig_master_ip,
     'orig_master_port=i' => \$orig_master_port,
     'new_master_host=s'  => \$new_master_host,
     'new_master_ip=s'    => \$new_master_ip,
     'new_master_port=i'  => \$new_master_port,
 );
 
 exit &main();
 
 sub main {
 
     print "\n\nIN SCRIPT TEST====$ssh_stop_vip==$ssh_start_vip===\n\n";
 
     if ( $command eq "stop" || $command eq "stopssh" ) {
 
         my $exit_code = 1;
         eval {
             print "Disabling the VIP on old master: $orig_master_host \n";
             &stop_vip();
             $exit_code = 0;
         };
         if ($@) {
             warn "Got Error: $@\n";
             exit $exit_code;
         }
         exit $exit_code;
     }
     elsif ( $command eq "start" ) {
 
         my $exit_code = 10;
         eval {
             print "Enabling the VIP - $vip on the new master - $new_master_host \n";
             &start_vip();
             $exit_code = 0;
         };
         if ($@) {
             warn $@;
             exit $exit_code;
         }
         exit $exit_code;
     }
     elsif ( $command eq "status" ) {
         print "Checking the Status of the script.. OK \n";
         #`ssh $ssh_user\@cluster1 \" $ssh_start_vip \"`;
         exit 0;
     }
     else {
         &usage();
         exit 1;
     }
 }
 
 #A simple system call that enable the VIP on the new master
 sub start_vip() {
     `ssh $ssh_user\@$new_master_host \" $ssh_start_vip \"`;
 }
 #A simple system call that disable the VIP on the old_master
 sub stop_vip() {
     `ssh $ssh_user\@$orig_master_host \" $ssh_stop_vip \"`;
 }
 
 sub usage {
     print
     "Usage: master_ip_failover --command=start|stop|stopssh|status --orig_master_host=host --orig_master_ip=ip --orig_master_port=port --new_master_host=host --new_master_ip=ip --new_master_port=port\n";
 }
给脚本添加可执行权限

[root@mha ~]# chmod +x /usr/bin/master_ip_failover
检查MHA Manger到所有MHA Node的SSH连接状态:
[root@mha ~]# masterha_check_ssh --conf=/etc/masterha/app1.cnf
在这里插入图片描述

检查整个集群复制环境状况

需要删除之前健康检查的文件
[root@mha ~]# rm -rf /var/log/masterha/app1/app1.master_status.health
[root@mha ~]# masterha_check_repl --conf=/etc/masterha/app1.cnf
如果还是报错再删除一边健康检查文件
在这里插入图片描述

开启MHA Manager监控

jobs
[root@mha ~]# nohup masterha_manager --conf=/etc/masterha/app1.cnf
–remove_dead_master_conf --ignore_last_failover < /dev/null >
/var/log/masterha/app1/manager.log 2>&1 &
[1] 7418

查看MHA Manager监控是否正常

[root@mha ~]# masterha_check_status --conf=/etc/masterha/app1.cnf
app1 (pid:7418) is running(0:PING_OK), master:192.168.100.101

打开窗口观察日志

[root@mha ~]# tail -f /var/log/masterha/app1/manager.log

模拟主库挂掉

[root@master ~]# systemctl stop mysqld
看日志是否切换master成功
可以看到master已经切换到192.168.100.102
在这里插入图片描述
查看VIP是否漂移过来
[root@master ~]# ip a
在这里插入图片描述

恢复:

从服务器:mysql> change master to master_host=‘192.168.100.102’,master_user=‘slave’,master_password=‘123456’;
mha管理节点:
在这里插入图片描述
检查整个集群复制环境状况
需要删除之前健康检查的文件
[root@mha ~]# rm -rf /var/log/masterha/app1/app1.master_status.health
[root@mha ~]# masterha_check_repl --conf=/etc/masterha/app1.cnf
如果还是报错再删除一边健康检查文件
在这里插入图片描述

开启MHA Manager监控

jobs
[root@mha ~]# nohup masterha_manager --conf=/etc/masterha/app1.cnf
–remove_dead_master_conf --ignore_last_failover < /dev/null >
/var/log/masterha/app1/manager.log 2>&1 &
[1] 7418

查看MHA Manager监控是否正常

[root@mha ~]# masterha_check_status --conf=/etc/masterha/app1.cnf
app1 (pid:7418) is running(0:PING_OK), master:192.168.100.102

3、安装httpd

端口:
[root@httpd1 ~]# vim /etc/services
80: http #不加密的端口
443:https #加密的端口
rpm/yum和源码安装的区别
rpm:安装、部署、管理比较方便,运行稳定;版本较低,功能和性能较差
依赖包如果用yum安装,后期很多东西不支持,像高级应用
源码:安装、部署、管理比较麻烦,运行相对不稳定;版本较新,功能和性能较高

需要的源码编译安装的软件包

httpd-2.4.28.tar.gz #Httpd主程序包
apr-1.5.2.tar.gz #Apacche依赖包 #尽量和源码包配套,不用yum安装
apr-util-1.5.4.tar.gz #Httpd依赖包 #不然不配套,实现不了httpd的高级应用
pcre-8.41.tar.gz #Httpd依赖包,httpd是依赖这三个包进行开发的
php-5.6.36.tar.gz #如果搭建动态网站,就要安装php,php要和httpd安装融合在一起,才能调用动态页面
mysql-boost-5.7.19.tar.gz #这个是用来php连接mysql的,如果不装这个,php和mysql只能装在同一台机器。装了这个软件包,就可以分开装,就是将php连接到mysql的

上传软件包并解压

在这里插入图片描述
[root@httpd1 ~]# unzip lamp.zip
安装make、gcc、spenssl等编译工具和开发包
[root@httpd1 ~]# mount /dev/cdrom /mnt
[root@httpd1 ~]# yum -y install make gcc gcc-c++ openssl openssl-devel expat-devel
编译安装依赖包
[root@httpd1 ~]# cd lamp
[root@httpd1 lamp]# ls
apr-1.5.2.tar.gz apr-util-1.5.4.tar.gz httpd-2.4.28.tar.gz mysql-boost-5.7.19.tar.gz pcre-8.41.tar.gz php-5.6.36.tar.gz

解压apr-1.5.2.tar.gz,预编译并安装

[root@httpd1 lamp]# tar zxvf apr-1.5.2.tar.gz
[root@httpd1 lamp]# cd apr-1.5.2
[root@httpd1 apr-1.5.2]# ./configure --prefix=/usr/local/apr

解决报错:
[root@httpd1 apr-1.5.2]# vim configure
修改
29605 RM=’$RM’
为:
29605 RM=’$RM -f’
[root@httpd1 apr-1.5.2]#./configure --prefix=/usr/local/apr
预编译报错,解决错误,重新执行预编译
[root@httpd1 apr-1.5.2]# echo $? #检测上条命令是否执行成功
编译安装
make && make install

解压apr-util-1.5.4.tar.gz预编译并安装

[root@httpd1 lamp]# tar -zxvf apr-util-1.5.4.tar.gz
[root@httpd1 lamp]# cd apr-util-1.5.4
预编译
[root@httpd1 apr-util-1.5.4]# ./configure --prefix=/usr/local/apr-util/
–with-apr=/usr/local/apr/bin/apr-1-config
[root@httpd1 apr-util-1.5.4]# echo $?
编译安装
make && make install
[root@httpd1 apr-util-1.5.4]# echo $?

解压pcre-8.41.tar.gz预编译并安装

[root@httpd1 lamp]# tar -zxvf pcre-8.41.tar.gz
[root@httpd1 lamp]# cd pcre-8.41
预编译
[root@httpd1 pcre-8.41]# ./configure --prefix=/usr/local/pcre
[root@httpd1 pcre-8.41]# echo $?
编译
[root@httpd1 pcre-8.41]# make -j 4
[root@httpd1 pcre-8.41]# echo $?
安装
[root@httpd1 pcre-8.41]# make install
[root@httpd1 pcre-8.41]# echo $?

解压httpd预编译并安装

[root@httpd1 lamp]# tar -zxcf httpd-2.4.28.tar.gz
[root@httpd1 lamp]# cd httpd-2.4.28

修改版本信息,在编译安装前修改版本信息

[root@centos1 httpd-2.4.38]# vim include/ap_release.h
修改以下行不用去掉#号
40 #define AP_SERVER_BASEVENDOR “qingniao” #更改apache
41 #define AP_SERVER_BASEPROJECT “WEB Server” #主版本
42 #define AP_SERVER_BASEPRODUCT “WEB” #修改server选项
43
44 #define AP_SERVER_MAJORVERSION_NUMBER 5 #版本号码
45 #define AP_SERVER_MINORVERSION_NUMBER 6
46 #define AP_SERVER_PATCHLEVEL_NUMBER 18
47 #define AP_SERVER_DEVBUILD_BOOLEAN 0
注释:
#define AP_SERVER_BASEVENDOR “Apache Software Foundation” #服务供应商名称
#define AP_SERVER_BASEPROJECT “Apache HTTP Server” #服务的项目名称
#define AP_SERVER_BASEPRODUCT “Apache” #服务的产品名
#define AP_SERVER_MAJORVERSION_NUMBER 2 #主要版本号
#define AP_SERVER_MINORVERSION_NUMBER 4 #小版本号
#define AP_SERVER_PATCHLEVEL_NUMBER 6 #补丁级别
#define AP_SERVER_DEVBUILD_BOOLEAN 0 #
注:上述列出的行,大家可以修改成自己想要的,然后编译安装之后,再对httpd-default.conf文件进行修改,对方就彻底不知道你的版本号了。
预编译
直接安装event模式:[root@httpd1 httpd-2.4.28]#
./configure --prefix=/usr/local/httpd
–enable-so
–enable-rewrite
–enable-ssl
–with-apr=/usr/local/apr
–with-apr-util=/usr/local/apr-util/
–with-pcre=/usr/local/pcre/
–libdir=/usr/lib64/
–enable-charset-lite --enable-cgi --enable-mpms-shared=all --enable-mpm-with=event
注:
–enable-so #支持动态加载模块,安装完成后,还能再扩展,还能再添加功能
–enable-rewrite #支持网站地址重写,就是支持页面跳转,例baidu维修, 然后给你跳转到另一个页面
–enable-ssl #支持ssl加密,就是开启https加密功能,用时能直接用
–with-apr=/usr/local/apr #关联apr
–with-apr-util=/usr/local/apr-util #关联apr-util
–with-pcre=/usr/local/pcre #关联pcre
–libdir=/usr/lib64 #关联库文件
[root@httpd1 httpd-2.4.28]# echo $?
编译
[root@httpd1 httpd-2.4.28]# make && make install
[root@httpd1 httpd-2.4.28]# echo $?

设置apache启动脚本

[root@centos1 ~]# cp /usr/local/httpd/bin/apachectl /etc/init.d/httpd
[root@centos1 ~]# vim /etc/init.d/httpd #第一行后添加两行
#!/bin/sh
#chkconfig: 2345 11 88 #我允许它在2345级别开机自启,11/88,就是在网卡启动之后再开启/关闭。
#despriction: Web Site
[root@centos1 ~]# ll !$ #查看脚本权限
ll /etc/init.d/httpd
-rwxr-xr-x 1 root root 3479 6月 25 14:47 /etc/init.d/httpd
设置开机自启并启动服务,设置path环境变量
[root@centos1 ~]# chkconfig --add httpd #添加到系统服务当中
[root@centos1 ~]# chkconfig --list httpd
[root@centos1 ~]# systemctl start httpd #这个有一些bag,所以还是用绝对路径启动
测试:[root@centos1 ~]# curl -I 192.168.100.1 #看不到apache版本相关内容

隐藏apache版本号,显示名字

[root@centos1 ~]# vim /usr/local/httpd/conf/httpd.conf
497 Include conf/extra/httpd-default.conf #497行去掉注释
[root@centos1 ~]# vim /usr/local/httpd/conf/extra/httpd-default.conf
改:
55 ServerTokens Full
65 ServerSignature Off
为: 如果文件当中没有,就添加这两句话
55 ServerTokens Prod
65 ServerSignature On
重启服务之后测试
[root@centos1 ~]# /etc/init.d/httpd restart
[root@centos1 ~]# curl -I 192.168.100.1 #不显示版本号
Httpd目录的作用
在这里插入图片描述

配置文件

在这里插入图片描述

创建软连接

[root@httpd1 ~]# ln -s /usr/local/httpd/bin/* /usr/local/bin/

启动服务

在这里插入图片描述
查看端口,客户端测试
[root@httpd1 ~]# netstat -antup | grep 80
http://192.168.100.4/
在这里插入图片描述

4、安装php

安装php依赖包
方法一:

使用本地源安装依赖包,再下载安装本地仓库中不存在的软件包,进行安装。
安装依赖包
[root@httpd1 ~]# yum -y install php-mcrypt libmcrypt libmcrypt-devel autoconf freetype gd libmcrypt libpng libpng-devel libjpeg libxml2 libxml2-devel zlib curl curl-devel re2c libmcrypt-devel freetype-devel libjpeg-devel bzip2-devel
安装libmcrypt
上传libmcrypt
[root@httpd1 ~]# tar zxf libmcrypt-2.5.7.tar.gz
[root@httpd1 ~]# cd libmcrypt-2.5.7/
[root@httpd1 libmcrypt-2.5.7]# ./configure --prefix=/usr/local/libmcrypt && make && make install

方法二:

在有网的情况下,安装epel-release源,RHEL光盘和CentOS源缺少很多软件包,建议使用扩展源进行安装依赖包.
安装网络源
[root@httpd1 ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
安装epel源
[root@httpd1 ~]# yum install -y epel-release

上传php软件包并解压

[root@httpd1 ~]# ls /lamp
anaconda-ks.cfg httpd-2.4.38.tar.gz libmcrypt-2.5.7.tar.gz
cronolog-1.6.2.tar.gz libmcrypt-2.5.7 php-5.6.36.tar.gz
[root@httpd1 ~]# tar zxvf php-5.6.36.tar.gz -C /usr/local/src/
预编译
[root@httpd1 ~]# cd /usr/local/src/php-5.6.36/
[root@httpd1 php-5.6.36]# ./configure --prefix=/usr/local/php5.6 --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --with-openssl --enable-fpm --enable-sockets --enable-sysvshm --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --with-mhash --with-mcrypt=/usr/local/libmcrypt --with-config-file-path=/etc --with-config-file-scan-dir=/usr/local/php5.6/etc/ --with-bz2 --enable-maintainer-zts –with-apxs2=/usr/local/httpd/bin/apxs
在这里插入图片描述
在这里插入图片描述
编译
[root@httpd1 php-5.6.36]# make -j 4
安装
[root@httpd1 php-5.6.36]# make install
生成配置文件
[root@httpd1 php-5.6.36]# cp php.ini-production /usr/local/php5.6/etc/php.ini

添加Apache支持

[root@httpd1 ~]# vim /usr/local/httpd/conf/httpd.conf
264 <\IfModule dir_module>
265 DirectoryIndex index.php index.html #哪个文件在前面,默认就打开哪个文件
266 </IfModule>
#403行写入如下内容
403 AddType application/x-httpd-php .php .phtml

创建测试页面

[root@httpd1 ~]# vim /usr/local/httpd/htdocs/index.php #php测试页面
<?php
phpinfo();
?>
[root@httpd1 ~]# vim /usr/local/httpd/htdocs/test.php #测试mysql连接页面
<?php
$link=mysql_connect(‘192.168.1.12’,‘test’,‘123456’);
if ($link)echo “connection success…”;
mysql_close();
?>

创建mysql测试账号

所有mysql,创建授权test账号(让apache通过这个账号连接到mysql)

 [root@centos2 ~]# mysql -uroot -p123456
 mysql> grant all on *.* to test@'%' identified by '123456';
 mysql> flush privileges;

重启httpd服务
[root@httpd1 ~]# systemctl restart httpd
测试
http://192.168.100.4/
在这里插入图片描述
http://192.168.100.4/test.php
在这里插入图片描述

Apache+php+mysql LAMP论坛搭建

搭建discuz论坛网站

类似于discuz的网站:
discus
织梦CMS
ecshop
phpwind
phpcms
帝国CMS
Wordpress
Discuz!:
论坛,百万站长的选择,会给您带来非凡的论坛体验。Discuz! 7.0.0 的推出使Discuz! 的用户体验又上升到了一个新的高度。本教程讲解的即是如何全新安装Discuz! 7.2

上传软件包

[root@httpd1 ~]# ls
anaconda-ks.cfg Discuz_7.2_FULL_SC_UTF8.zip libmcrypt-2.5.7 php-5.6.36.tar.gz
cronolog-1.6.2.tar.gz httpd-2.4.38.tar.gz libmcrypt-2.5.7.tar.gz

解压到指定目录

[root@httpd1 ~]# unzip Discuz_7.2_FULL_SC_UTF8.zip -d /usr/local/bbs

拷贝论坛到网站根目录

[root@httpd1 ~]# cd /usr/local/bbs
[root@httpd1 bbs]# cp -r upload/ /usr/local/httpd/htdocs/bbs

修改php.ini文件

[root@httpd1 bbs]# vim /usr/local/php5.6/etc/php.ini
202 short_open_tag = On #修改选项为On

重启httpd

[root@httpd1 bbs]# systemctl restart httpd

安装discuz

打开网页开始安装
http://192.168.100.4/bbs/install/index.php
在这里插入图片描述
检测环境信息
在这里插入图片描述

修改文件权限

[root@httpd1 bbs]# chmod -R 777 /usr/local/httpd/htdocs/bbs/
刷新页面
在这里插入图片描述

配置数据库

在这里插入图片描述

完成

http://192.168.100.1/bbs/
登陆测试
登陆输入admin,123456789登陆系统
在这里插入图片描述
新建一个帖子
在这里插入图片描述

httpd2服务器

httpd1:将httpd和php服务传到httpd2(192.168.100.5)上
[root@httpd1 ~]# scp -r apr 192.168.100.5:/usr/local/
[root@httpd1 ~]# scp -r apr-util/ 192.168.100.5:/usr/local/
[root@httpd1 ~]# scp -r pcre/ 192.168.100.5:/usr/local/
[root@httpd1 ~]# scp -r httpd/ 192.168.100.5:/usr/local/
[root@httpd1 ~]# scp -r /etc/init.d/httpd 192.168.100.5:/etc/init.d/
将php传到httpd2(192.168.100.5)上
[root@httpd1 ~]# scp -r /usr/local/php5.6/ 192.168.100.5:/usr/local/
[root@httpd1 ~]# scp -r /usr/local/libmcrypt/ 192.168.100.5:/usr/local/

httpd2:[root@httpd2 ~]#yum -y install make gcc gcc-c++ openssl openssl-devel expat-devel
[root@httpd2 ~]# yum -y install php-mcrypt libmcrypt libmcrypt-devel autoconf freetype gd libmcrypt libpng libpng-devel libjpeg libxml2 libxml2-devel zlib curl curl-devel re2c libmcrypt-devel freetype-devel libjpeg-devel bzip2-devel
[root@httpd2 ~]# ln -s /usr/local/httpd/bin/* /usr/local/bin/
[root@httpd2 ~]# chown -R daemon:daemon /usr/local/httpd/htdocs/bbs
[root@httpd2 ~]# /etc/init.d/httpd start

5、LVS+keepalive

在这里插入图片描述

负载均衡的工作模式

NAT模式:负载调度器作为所有服务器节点的网关,作为客户及的访问入口,也是各节点回应出口,安全
IP隧道:简称TUN模式,采用开放式的网络结构,调度器仅作为客户机的访问入口,各节点通过Internet连接并直接回应客户机,而不再经过负载调度器。服务器节点分散在互联网中的不同位置,具有独立的公网IP,通过专用IP隧道与负载调度器相互通信
直接路由:简称DR模式,采用半开放式的网络结构,与TUN模式的结构类似,但各节点并不是分散在各地,而是与调度器位于同一个物理网络。负载调度器与各节点服务器通过本地网络连接,不需要建立专用的IP隧道

使用keepalive构建LVS-NAT模式的高可用集群
环境拓扑
在这里插入图片描述

LVS环境安装配置(lvs1/lvs2)
安装ipvsadm

[root@lvs1 ~]# mount /dev/cdrom /mnt/
[root@lvs1 ~]# yum -y install ipvsadm
[root@lvs2 ~]# yum -y install ipvsadm
ipvsadm 是在负载调度器上使用的LVS群集管理工具,通过调用ip_vs 模块来添加,删除服务器节点,以及查看群集的运行状态

安装keepalive

[root@lvs1 ~]# yum -y install keepalived
[root@lvs2 ~]# yum -y install keepalived

配置keepalive

[root@lvs1 ~]# cd /etc/keepalived/ #进入keepalived安装目录
[root@lvs1 keepalived]# cp keepalived.conf keepalived.conf.bak
#备份keepalived主配置文件
[root@lvs1 keepalived]# vim keepalived.conf
#删除原来的,把这个粘进去,修改LVS1/lvs2配置文件

global_defs {							#全局配置
   router_id LVS_01					#LVS服务器节点名(不能相同)
}

vrrp_instance VI_1 {
    state MASTER						#设置热备类型(MASTER为主,BACKUP为备)
    interface ens33					#热备份接口
    virtual_router_id 51				#热备份组号(必须相同)
    priority 100						#优先级,主的优先级要比备的高
    advert_int 1						#hello time
    authentication {					#密码认证
        auth_type PASS				#认证的类型为密码认证
        auth_pass 1111
    }
    virtual_ipaddress {					#虚拟IP
        192.168.100.66
    }
}

virtual_server 192.168.100.66 80 {			#创建虚拟服务器 VIP 和端口
    delay_loop 6						#多长时间检测一次real server 单位为秒
    lb_algo rr							#调度算法,rr代表轮询
    lb_kind NAT						#集群工作模式
    persistence_timeout 0				#健康监测时间,设置0为不检测
    protocol TCP						使用为TCP协议

real_server 192.168.100.4 80 {			#添加真实服务器和端口
        weight 1						#分配权重
        TCP_CHECK {					#检测模块,为TCP连接
            connect_port 80			#检测端口
            connect_timeout 3			#连接超时时间
            nb_get_retry 3			#重试次数
            delay_before_retry 3		#重试间隔时间
        }
    }

real_server 192.168.100.5 80 {			#添加真实服务器和端口
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}
启动keepalive

[root@lvs1 ~]# systemctl start keepalived.service
查看vip
root@lvs1 ~]# ip addr #查看主LVS。看到在主LVS上生成了一个VIP地址在这里插入图片描述

[root@lvs2 ~]# ip addr #查看备LVS。看到在备用LVS上并没有VIP
在这里插入图片描述

测试keepalive故障转移
[root@lvs1 ~]# systemctl stop keepalived.service #关闭主keepalived
[root@lvs1 ~]# ip addr #查看主的vip是否还在
在这里插入图片描述
[root@lvs2 ~]# ip addr #查看LVS2地址,VIP是否漂移过来了
在这里插入图片描述
keepalived 的日志消息保存在 /var/log/messages 文件中,在测试主、备故障自动切换功能时,可以跟踪此日志文件来观察热备状态。

Real server配置lvs vip

real server即真实主机(web服务器)。为什么要在realserver绑定VIP呢?
客户端访问director的VIP,director接收请求,将通过相应的算法将请求转发给相应的realserver。在转发的过程中,会修改请求包的目的mac地址,目的ip地址不变。
Realserver接收请求,并直接响应客户端。这时便出现一个问题,director此时与realserver位于同一个网络中,当director直接将请求转发给realserver时,realserver检测到该请求包的目的ip是vip而并非自己,便会丢弃,而不会响应。为了解决这个问题,所以需要在所有Realserver上的lo:0(还回口)都配上VIP。
为什么一定要配置在lo接口上呢?
在realserver上的lo口配置VIP,这样限制了VIP不会在物理交换机上产生MAC地址表,从而避免IP冲突。

配置lvs vip,编写配置脚本(apache上做)

[root@nginx1 ~]# vim /etc/init.d/lvsdr
#!/bin/sh

#LVS Client Server
VIP===192.168.100.66==				#定义一个变量
case  $1  in                    	#定义一个case取值变量                                                                                                                                                                                                                                
start)                                                                                                                                                                                                                                            
    ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP	  #在环回接口上添加一个IP地址,调用VIP变量
    /sbin/route add -host $VIP dev lo:0			#添加vip本地访问路由
    echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore		#关闭ARP响应
    echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
    echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
    echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
    sysctl -p >/dev/null 2>&1
    echo "RealServer Start OK"
    exit 0
;;                                                                                                                                                                                                                                         
stop)
    ifconfig lo:0 down
    route del $VIP >/dev/null 2>&1
    echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
    echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
    echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
    echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
    echo "RealServer Stoped OK"
    exit 1
;;
*)
    echo "Usage: $0 {start|stop}"
;;
esac
赋予脚本执行权限

[root@nginx1 ~]# chmod +x /etc/init.d/lvsdr

启动脚本,添加到开机自启

[root@nginx1 ~]# /etc/init.d/lvsdr start
RealServer Start OK
[root@nginx1 ~]# echo “/etc/init.d/lvsdr start” >> /etc/rc.local #添加到开机自启
[root@nginx1 ~]# ifconfig #查看网卡IP
在这里插入图片描述
在客户端使用VIP访问网页
在这里插入图片描述
因为LVS–DR用的也是轮询模式,为了测试轮询,所以网站页面不一样。
在这里插入图片描述
或者使用查看日志的方法,查看有没有进行轮询
[root@web2 ~]# tail -f /usr/local/httpd/logs/access_log
在这里插入图片描述

Lvs+nginx(静)+apache(动)+mysql实现动静分离(基于这个实验基础只上)

实验拓扑

在这里插入图片描述

1、lvs(所有lvs)

[root@lvs1 ~]# vim /etc/keepalived/keepalived.conf
real_server 192.168.100.101 80 #修改真实服务器为nginx的ip和端口
[root@lvs1 ~]# systemctl restart keepalived.service
[root@lvs2 ~]# ip addr #重启之后,查看vip有没有
在这里插入图片描述

2、安装nginx(这里还要参考安装zabiix里面的nginx+php,这里没有做php)

上传软件包并解压

[root@nginx ~]# ls
anaconda-ks.cfg nginx-1.10.3.tar.gz
[root@nginx ~]# tar -zxvf nginx-1.10.3.tar.gz -C /usr/local/src/

更改源码隐藏软件名称和版本号

[root@nginx ~]# cd /usr/local/src/nginx-1.10.3/ #必须在解压软件包之后,在安装之前,就设置
在这里插入图片描述
有时候我们页面程序出现错误,Nginx会代我们返回相应的错误代码,回显的时候,会带上nginx和版本号,我们把他隐藏起来

安装nginx依赖包

[root@nginx nginx-1.10.3]# yum install -y gcc gcc-c++ autoconf automake zlib zlib-devel openssl openssl-devel pcre pcre-devel

预编译(有很多模块,如果不指定,后期你要用,可以直接加载这个模块)

nginx支持不重启就可以更新版本
[root@nginx nginx-1.10.3]# ./configure --prefix=/usr/local/nginx --with-http_dav_module --with-http_stub_status_module --with-http_addition_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module --with-pcre

–with-http_dav_module #启用支持(增加PUT,DELETE,MKCOL:创建集合,COPY和MOVE方法)默认关闭,需要编译开启
–with-http_stub_status_module #启用支持(获取Nginx上次启动以来的工作状态)
–with-http_addition_module #启用支持(作为一个输出过滤器,支持不完全缓冲,分部分相应请求)
–with-http_sub_module #启用支持(允许一些其他文本替换Nginx相应中的一些文本)
–with-http_flv_module #启用支持(提供支持flv视频文件支持)
–with-http_mp4_module #启用支持(提供支持mp4视频文件支持,提供伪流媒体服务端支持)
–with-pcre #启用pcre库。需要注意,这里指的是源码,用#./configure --help |grep pcre查看帮助 https://www.cnblogs.com/flashfish/p/11025961.html

编译安装

[root@nginx nginx-1.10.3]# make -j 4 && make install

启动nginx

[root@nginx ~]# /usr/local/nginx/sbin/nginx
查看端口号
[root@nginx ~]# netstat -antup | grep 80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 7423/nginx: master

测试

在这里插入图片描述

网站测试

http://192.168.100.101/
在这里插入图片描述

修改nginx运行账号,为nginx
查看nginx当前运行账号

在这里插入图片描述
[root@nginx ~]# ps -aux | grep nginx #默认是nobody用户
创建nginx账号
[root@nginx ~]# useradd -M -s /sbin/nologin nginx
修改nginx运行账号
[root@nginx ~]# vim /usr/local/nginx/conf/nginx.conf
改:
#user nobody;
为:
user nginx;

添加path变量

[root@nginx ~]# ln -s /usr/local/nginx/sbin/* /usr/local/bin/

重载nginx

[root@nginx ~]# nginx -s reload
重载实现原理:开一个新的进程(把后来,来的用户都放到这个新进程当中)等原进程处理完之后(把原进程删掉)。和不关服务修改版本号一样的原理

查看运行账号

[root@nginx ~]# ps -aux | grep nginx
在这里插入图片描述
在这里我们还可以看到在查看的时候,work进程是nginx用户了,但是master进程还是root
其中,master是监控进程,也叫主进程,work是工作进程.
所以我们可以master监控进程使用root,可以是降级使用普通用户,如果都是用普用户,那么编译安装的时候,是用普通用户执行,sudo方式操作!可以直接理解为master是管理员,work进程才是为用户提供服务的!
(master)主程序就用来调度,用来监控的。work进程是用来工作的
visudo:用来设置nginx用户有什么权限,允许nginx启动程序,允许它侦听地址

生成服务启动脚本

[root@nginx ~]# vim /etc/init.d/nginx
#!/bin/bash
#chkconfig: - 99 2
#description: Nginx Service Control Script
PROG="/usr/local/nginx/sbin/nginx"
PIDF="/usr/local/nginx/logs/nginx.pid"
case “$1” in
start)
$PROG
;;
stop)
kill -3 $(cat $PIDF)
;;
restart)
$0 stop &> /dev/null
if [ $? -ne 0 ] ; then continue ; fi
$0 start
;;
reload)
kill -1 $(cat $PIDF)
;;
*)
echo “Userage: $0 { start | stop | restart | reload }”
exit 1
esac
exit 0

配置服务开机自动启动

[root@nginx ~]# chmod +x /etc/init.d/nginx #给脚本添加可执行权限
[root@nginx ~]# chkconfig --add nginx #把nginx添加为系统服务
[root@nginx ~]# chkconfig nginx on #把nginx添加开机自启动
[root@nginx ~]# chkconfig --list nginx #查看nginx开机启动项

设置nginx代理和读写分离

具体的去找上一个文章当中找到nginx+tomcat读写分离那个部分,还有很多配置,参考着那个做
在这里插入图片描述
在这里插入图片描述
要实现动静分离实际上location非常简单,所有.php结尾的文件去到动态组即可,其他全部(静态)本地nginx处理 但是这样nginx本身上也要安装discuz论坛,如果有静态请求,就去nginx本地discuz目录去找

3、apache

由于我的discuz论坛用户名密码忘了,再创一个,我这个页面也不知道咋回事比较麻烦。然后我就用这个测试apache是否能连接到mysql
[root@web1 ~]# vim /usr/local/httpd/htdocs/test.php
在这里插入图片描述
测试成功,Lvs+nginx(静)+apache(动)+mysql完成
在这里插入图片描述

测试读写分离
访问192.168.100.66两个apache轮询返回页面(可看日志查看是否进行轮询)
在这里插入图片描述
在这里插入图片描述
在nginx网站根目录上传一张图片
在这里插入图片描述
访问这个图片,因为是以.jpg结尾的所以在nginx服务器上
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值