综合项目内容:
升级网站运行平台、部署Redis内存存储服务集群、数据迁移、部署PXCMySQL实现强同步、部署LB和HA集群
一、项目拓扑结构
PROJECT2-DAY1回顾:
服务架构缺点分析:
① 数据存储结构存在单点故障(需增调度器)
② 网络服务每次都是从源站提取数据
③ 将tomcat网站服务升级网站运行平台LNMP;
项目需求:
① 升级网站运行平台(LNMP)
② 部署内存存储服务器(redis集群)
③ 部署PXC集群;
④ 解决数据库服务负载问题;
⑤ 解决调度器单点故障问题;
PROJECT2-DAY2:
实验延续PROJECT2-DAY1,服务器启动并检查服务正常,确保关闭所有主机的防火墙和SELinux;
案例1:升级网站运行平台
具体配置如下:
① 清除当前配置(tomcat、tomcat的共享存储)
② 部署LNMP(源码安装Nginx、php-fpm、php及php-mysql)
③ 测试配置(编写php脚本)
补充:因数据不存储在Nginx服务器数据库(可选安装mariadb-server及mariadb、mariadb-devel)
步骤1:清除当前WEB服务器配置
web33操作
① 停止Tomcat网站服务
[root@web33 ~]# /usr/local/tomcat/bin/shutdown.sh //停止tomcat服务
[root@web33 ~]# vim /etc/rc.local //注释服务开机自启
# usr/local/tomcat/bin/startup.sh
② 卸载NFS共享存储
[root@web33 ~]# df -h | grep /sitedir //查看挂载点
192.168.4.30:/sitedir 3.0G 32M 3.0G 2% /usr/local/tomcat/webapps/ROOT
[root@web33 ~]# umount /usr/local/tomcat/webapps/ROOT/ //卸载tomcat网站的挂载点
[root@web33 ~]# vim /etc/fstab //注释共享挂载
# 192.168.4.30:/sitedir /usr/local/tomcat/webapps/ROOT nfs defaults 0 0
步骤2:部署LNMP平台架构
web33操作
① 安装Nginx和所需环境及依赖包
[root@web33 ~]# yum -y install gcc pcre-devel zlib-devel
# 源码安装Nginx(参考:lnmp_soft/nginx-1.12.2.tar.gz )
[root@web33 lnmp_soft]# tar -xf nginx-1.12.2.tar.gz
[root@web33 lnmp_soft]# cd nginx-1.12.2/
[root@web33 nginx-1.12.2]# ./configure //配置Makefile
[root@web33 nginx-1.12.2]# make && make install //编译安装
[root@web33 nginx-1.12.2]# ls /usr/local/nginx/
conf html logs sbin
# 安装PHP及连接MySQL依赖包
[root@web33 nginx-1.12.2]# yum -y install php php-mysql php-fpm
② 挂载NFS共享存储
[root@web33 ~]# showmount -e 192.168.4.30 //查看NFS服务器的共享
Export list for 192.168.4.30:
/sitedir *
[root@web33 ~]# vim /etc/fstab //Nginx挂载NFS共享存储
192.168.4.30:/sitedir /usr/local/nginx/html nfs defaults 0 0
[root@web33 ~]# mount -a
[root@web33 ~]# mount | grep "/usr/local/nginx/html"
192.168.4.30:/sitedir on /usr/local/nginx/html type nfs4 (rw,relatime,vers=4.1,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.4.33,local_lock=none,addr=192.168.4.30)
③ 启动Nginx服务
[root@web33 ~]# vim +65 /usr/local/nginx/conf/nginx.conf //修改配置文件,开启动态解析功能;
…
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi.conf;
}
…
[root@web33 ~]# /usr/local/nginx/sbin/nginx //启动服务
[root@web33 ~]# echo "/usr/local/nginx/sbin/nginx" >> /etc/rc.local //开机自启
[root@web33 ~]# ss -nlptu | grep :80
tcp LISTEN 0 128 *:80 *:* users:(("nginx",pid=14279,fd=6),("nginx",pid=14278,fd=6))
④ 启动PHP-FPM服务
[root@web33 ~]# systemctl start php-fpm.service
[root@web33 ~]# systemctl enable php-fpm.service
[root@web33 ~]# ss -nlptu | grep :9000
tcp LISTEN 0 128 127.0.0.1:9000 *:* users:(("php-fpm",pid=14312,fd=0),("php-fpm",pid=14311,fd=0),("php-fpm",pid=14310,fd=0),("php-fpm",pid=14309,fd=0),("php-fpm",pid=14308,fd=0),("php-fpm",pid=14306,fd=6))
步骤3:测试配置
nfs30操作
① 编写连接Mysql11数据库服务器PHP脚本
[root@nfs30 ~]# vim /sitedir/linkdb2.php
<?php
$conn=mysql_connect("192.168.4.11","army","123qqq...A");
mysql_select_db("gamedb");
$sql = 'insert into user (name) values ("Jackie")'; //存入数据“Jackie”
mysql_query($sql);
mysql_close();
echo "save data ok";
?>
# WEB服务器上查看挂载的网页目录是否增加php文件
[root@web33 ~]# ls /usr/local/nginx/html/
linkdb2.php linkdb.jsp test.html
② 使用浏览器访问脚本
③ 在mysql11主数据库服务器查看数据
[root@mysql11 ~]# mysql -uarmy -p123qqq...A
mysql> select * from gamedb.user;
+--------+
| name |
+--------+
| jack |
| AnJ |
| lucy |
| Jackie |
+--------+
5 rows in set (0.00 sec)
案例2:部署Redis内存存储服务
具体操作如下:
① 部署6台redis服务器
② 创建redis集群(1个管理主机 --> 3个主从节点的redis服务器)
③ 配置Nginx网站服务器支持php和redis;
④ 测试配置
PROJECT2-DAY2拓扑:
服务器IP及角色规划:
主机名 |
IP地址:端口 |
角色 |
redisA |
192.168.4.51:6379 |
Redis服务器 |
redisB |
192.168.4.52:6379 |
Redis服务器 |
redisC |
192.168.4.53:6379 |
Redis服务器 |
redisD |
192.168.4.54:6379 |
Redis服务器 |
redisE |
192.168.4.55:6379 |
Redis服务器 |
redisF |
192.168.4.56:6379 |
Redis服务器 |
mgm |
192.168.4.57 |
管理集群主机 |
步骤1:部署Redis服务器
redisA、redisB、redisC、redisD、redisE、redisF操作
① 搭建redis服务器(命令行方式,以redisA为例)
[root@redisA ~]# rpm -q gcc || yum -y install gcc //检查编译环境
[root@redisA ~]# tar -zxf redis-4.0.8.tar.gz //解压软件包
[root@redisA ~]# cd redis-4.0.8/
[root@redisA redis-4.0.8]# make install //安装(默认已有Makefile)
[root@redisA redis-4.0.8]# ./utils/install_server.sh //初始化配置
[root@redisA redis-4.0.8]# /etc/init.d/redis_6379 stop //停止服务
Stopping ...
Redis stopped
[root@redisA redis-4.0.8]# vim /etc/redis/6379.conf //修改配置文件,启用集群配置
70 # bind 127.0.0.1
89 protected-mode no //关闭保护机制
815 cluster-enabled yes
823 cluster-config-file nodes-6379.conf
829 cluster-node-timeout 5000
[root@redisA redis-4.0.8]# /etc/init.d/redis_6379 start //启动服务
Starting Redis server...
[root@redisA redis-4.0.8]# ss -nlptu | grep redis-server //查看服务端口
tcp LISTEN 0 128 *:6379 *:* users:(("redis-server",pid=14455,fd=7))
tcp LISTEN 0 128 *:16379 *:* users:(("redis-server",pid=14455,fd=10))
tcp LISTEN 0 128 :::6379 :::* users:(("redis-server",pid=14455,fd=6))
tcp LISTEN 0 128 :::16379 :::* users:(("redis-server",pid=14455,fd=9))
扩展:自定义脚本,部署redis服务器并开启集群功能(注意:需提前准备redis软件包)
[root@redisA ~]# cat setup_redis.sh
#!/bin/bash
# 描述:该脚本用来部署Redis服务器,并启用集群配置
# 检查编译环境
rpm -q gcc || yum -y install gcc
# 解压软件包(注释:提前准备软件包)
[ -e "redis-4.0.8"] && echo "目录存在" || tar -zxvf redis-4.0.8.tar.gz
# 编译安装
cd redis-4.0.8/
make install
# 初始化配置(注意:服务启动需要些许时间)
cd utils/
echo | source install_server.sh
sleep 5 //休眠5秒
# 停止redis服务
/etc/init.d/redis_6379 stop
# 启用集群配置
sed -i '89s/yes/no/' /etc/redis/6379.conf # 关闭保护 protected-mode no
sed -i '70s/^/# /' /etc/redis/6379.conf # 注释 bind 127.0.0.1
sed -i '815s/# //' /etc/redis/6379.conf # cluster-enabled yes
sed -i '823s/# //' /etc/redis/6379.conf # cluster-config-file nodes-6379.conf
sed -i '829s/# //' /etc/redis/6379.conf # cluster-node-timeout 15000
sed -i '829s/15000/5000/' /etc/redis/6379.conf # cluster-node-timeout 5000
# 清除数据目录
rm -rf /var/lib/redis/6379/*
# 启动redis服务
service redis_6379 start
② 使用脚本为其它节点主机部署Redis服务及开启集群功能(脚本方式,以redisB为例)
[root@redisB ~]# chmod +x setup_redis.sh
[root@redisB ~]# ./setup_redis.sh
[root@redisB ~]# ss -nlp