集群架构学习整理 - 安装mariadb数据库(六)

六.安装mariadb数据库 db01
[root@db01 ~]$ yum install mariadb-server mariadb -y
启动Mariadb数据库, 并加入开机启动
[root@db01 ~]$ systemctl start mariadb
[root@db01 ~]$ systemctl enable mariadb
#检查
[root@db01 ~]$lsof -i :3306
[root@db01 ~]$ps -ef|grep mariadb

[root@db01 blog]$ mysql #直接进去
给Mariadb配置登陆密码,并设置新密码进行登录数据库
[root@db01 ~]$ mysqladmin -uroot password oldboy123
[root@db01 ~]$ mysql -uroot -poldboy123
[root@db01 ~]$ mysqladmin -uroot -poldboy123 password oldboy #有密码更改密码

#登录MySQL,删除无用的用户
drop user root@'::1';
delete from mysql.user where user='';
delete from mysql.user where host='db01';
delete from mysql.user where host='127.0.0.1';
grant all on *.* to root@'172.16.1.%' identified by 'oldboy123';
select user,host from mysql.user;
flush privileges;
#php测试,配置hosts文件
#Nginx连接Fastcgi服务器配置如下
[root@web01 blog]$cat /etc/nginx/conf.d/01_blog.conf 
server {
	listen 80;
	server_name blog.yunwei.com; 
	root /data/blog;
	index index.php index.html;

	location ~ \.php$ {
		fastcgi_pass    127.0.0.1:9000; 
		fastcgi_index    index.php; 
		fastcgi_param    SCRIPT_FILENAME $document_root$fastcgi_script_name;
		include    fastcgi_params;
	}
}
在/data目录下创建test_php.php文件
[root@web01 ~]$ mkdir /data/blog -p
[root@web01 ~]$ cat /data/blog/test_php.php

[root@web01 ~]$ chown -R www.www /data/blog
#浏览器测试
http://blog.yunwei.com//test_php.php

#mariadb测试
[root@web01 ~]$ cat /data/blog/test_mysql.php

[root@web01 ~]$ chown -R www.www /data/blog
#浏览器测试
http://blog.yunwei.com/test_mysql.php
扩展:企业级应用实战案例:科学授权站点目录权限和属组方法
#(1)生产授权方案(新手可不用):
[root@web01 blog]# chown -R root.root /data/blog 
[root@web01 blog]# mkdir -p /data/blog/uploads
[root@web01 blog]# chown -R www.www /data/blog/uploads #此目录可能没有。
[root@web01 blog]# ll wp-content/ 
plugins ##blog增加功能 root.root 
themes ##blog主题皮肤 root.root 
uploads   ##上传目录www.www
#(2)LNMP企业级核心安全优化思想:
chown -R www.www /data/blog/uploads/    #安全隐患很大。
#黑客会放Webshell.php木马到/data/blog/upload/来遍历文件插入广告 或者提权root。
#执行放的webshell,http://xx/upload/webshell.php ##轮询站点, 改所有站点文件,嵌入它的广告
#网站安全防护露点: 对外:http,https(控制这里),没办法白名单。 对内:ssh(禁止对外访问),可以白名单。

# (3)#针对80端口安全防护限制: 
1.php程序控制,上传的程序扩展名不能是.php,.sh等等 
2.访问/data/blog/upload/(*.php    return 403) 
location /upload/ \.php$ {
return 403
} 
3.挂载NFS
mount,noexec,nosuid 
4.通过架构,限制动态请求方法
location /upload/ 禁止GET,不能浏览。 解决方法:动静分离 动态:location /upload/ 禁止GET,不能浏览。 静态:没有PHP环境
location /upload/

5.配置waf防火墙或者开发第三方安全模块(比如还可以控制sql语句执行等)
6.永远确保站点权限最优
#工作启动Nginx脚本:start_nginx.sh 
chown -R root.root /data/blog
chown -R www.www /data/blog/uploads
#启动前做站点目录,权限和用户做检查。
#检测:权限、用户和组不对,自测、报警。。省略检测脚本100行。提供思路 
systemctl reload nginx
# (4) 因blog需要使用数据库, 所以需要建立blog数据库,并授予指定权限
[root@web01 ~]# mysql -uroot -poldboy123 
mysql> create database blog;
mysql> exit;

企业级应用实战案例:采用异地db01.yunwei.com方式访问数据库,而不是本机localhost

#db01上操作
MariaDB [(none)]> create database blog; #创建blog数据库 
MariaDB [(none)]> show databases; #查看
MariaDB [(none)]> grant insert,delete,update,select,create,alter on blog.* to blog@'172.16.1.%' identified by 'oldboy123';
#MariaDB [(none)]> grant all privileges on blog.* to blog@'172.16.1.%' identified by 'oldboy123';#创建用户密码并 授权。
MariaDB [(none)]> flush privileges; 
Query OK, 0 rows affected (0.00 sec)

#####
all privileges为所有权限: 本次科学权限:select,delete,insert,update,create,alter 
工作中生产线应该:select,delete,insert,update 针对数据内容 
create,alter 表结构,库结构。
#一定一定由DBA或运维控制。 企业故障案例:
表结构被开发修改了,导致运维背锅。 最终比对备份的表结构和上线数据库表结构,发现开发改了表结构。 
解决办法:收回select,delete,insert,update以外的权限由DBA控制。
#测试
[root@db01 blog]# mysql -ublog -poldboy123 -h172.16.1.51
MariaDB [(none)]>
#修改/etc/hosts为如下
[root@web01 blog]# grep db01 /etc/hosts
172.16.1.51 db01 db01.yunwei.com #db01.yunwei.com为连 接数据库的域名。
#部署WordPress博客
5) 通过浏览器访问http://blog.yunwei.com/, 并部署该产品
数据库名blog
账户名blog
密码oldboy123
数据库主机db01.yunwei.com
表前缀oldboy_


部署知乎软件Wecenter
知乎产品官方:https://www.wecenter.com/downloads/
配置Nginx虚拟主机站点,域名为zh.yunwei.com
[root@web01 ~]# cat /etc/nginx/conf.d/02_zh.conf 
server {
        listen 80;
        server_name zh.yunwei.com;
        root /data/zh;
        index index.php index.html;

        location ~ \.php$ {
                fastcgi_pass    127.0.0.1:9000; 
                fastcgi_index    index.php; 
                fastcgi_param    SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include    fastcgi_params;
        }
}

#重启nginx服务 
[root@web01 ~]# nginx -t
[root@web01 ~]# systemctl reload nginx


下载Wecenter产品,部署并授权
[root@web01 ~]# cd /server/tools
[root@web01 tools]# rz #回车上传知乎软件 
[root@web01 tools]# unzip WeCenter_3-6-0.zip -d /data/zh
[root@web01 tools]# chown -R www.www /data/zh/ #部署完需要 优化目录权限

#db01上操作
wecenter产品也需要使用数据库, 所以需要手动建立数据库
[root@db01 tools]# mysql -uroot -poldboy123 #登陆数据库 
MariaDB [(none)]> create database zh; #创建zh数据库
MariaDB [(none)]> grant all on zh.* to zh@'localhost' identified by 'oldboy123';  #先给全部,安装后,在给下面的权限,不然安装出错
MariaDB [(none)]> grant select,insert,update,delete on zh.* to 'zh'@'172.16.1.%' identified by 'oldboy123'; 
#异地 数据库用户,只授权增删改查。 
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> quit
通过浏览器访问zh.yunwei.com,并通过网页配置,最终结果
产品优化
#权限优化 
chown -R root.root /data/zh 
chown -R www.www /data/zh/uploads /data/zh/cache/ /data/zh/tmp/ 
#限制目录下php被访问 
location ~* /(?:uploads|cache|tmp)/.*\.php$ { 
     deny all; 
}
#前后台分离(独立后台服务器) <==生产场景方案 
#动静分离(独立静态服务器) <==生产场景方案

拆分静态资源至独立存储服务器NFS

#为什么拆分静态资源至独立存储服务器
当后端的web节点出现多台时,会导致用户上传的图片、视频附件等内容仅上传至一台web服务器,那么其他的web服务器则无法访问到该图片。
#新增一台nfs存储解决了什么问题
1.保证了多台web节点静态资源一致。
2.有效节省多台web节点的存储空间。
3.统一管理静态资源,便于后期推送至CDN进行静态资源加速

快速扩展一台web节点环境规划
nfs服务端,操作步骤如下
useradd -u1111 www -s /sbin/nologin -M
安装并配置nfs [前面已配置]
[root@nfs01 ~]# rpm -qa nfs-utils 
nfs-utils-1.3.0-0.68.el7.x86_64 
[root@nfs01 ~]# yum install nfs-utils -y 
[root@nfs01 ~]# cat /etc/exports 
/data/blog 172.16.1.0/24(rw,sync,all_squash,anonuid=1111,anongid=1111)
/data/zh 172.16.1.0/24(rw,sync,all_squash,anonuid=1111,anongid=1111)
[root@nfs01 ~]# systemctl reload nfs

创建共享目录,并进行授权
useradd -u 1111 -s /sbin/nologin -M
[root@nfs01 ~]# mkdir /data/{blog,zh} -p 
[root@nfs01 ~]# chown -R www.www /data/
 启动nfs服务,并加入开机自启
[root@nfs01 ~]# systemctl restart rpcbind nfs 
[root@nfs01 ~]# systemctl enable rpcbind nfs

 web01节点安装nfs,然后使用showmount查看服务端共享的资源
[root@web01 ~]# yum install nfs-utils -y 
[root@web01 ~]# showmount -e 172.16.1.31 
Export list for 172.16.1.31: 
/data/zh 172.16.1.0/24 
/data/blog 172.16.1.0/24

如何查找blog静态资源存放的位置
浏览器->右键->检查->Network->选择左上角的Select按钮->点击对应的图 片,然后能获取到对应的url地址,如下 http://blog.yunwei.com/wp-content/uploads/2021/07/
备份web01服务器上blog的静态资源,因为该服务器上的资源资源最全
[root@web01 blog]# scp -rp /data/blog/wp-content/uploads/* root@172.16.1.31:/data/blog/wp-content/uploads
web01客户端执行挂载操作
[root@web01 blog]# mount -t nfs 172.16.1.31:/data/blog/wp-content/uploads /data/blog/wp-content/uploads/ 
[root@web01 blog]# df -h

将挂载信息加入开机自启
[root@web01 blog]# tail -1 /etc/fstab
172.16.1.31:/data/blog/wp-content/uploads /data/blog/wp-content/uploads nfs defaults 0 0
172.16.1.31:/data/zh/uploads /data/zh/uploads nfs defaults 0 0
[root@web01 blog]# umount 172.16.1.31:/data/blog/wp-content/uploads
[root@web01 blog]# df -h|grep uploads
[root@web01 blog]# mount -a 
[root@web01 blog]# df -h
###fstab延迟启动nfs 
[root@web01 blog]# systemctl list-unit-files|grep remote-fs 
remote-fs.target disabled 
[root@web01 blog]# systemctl enable remote-fs.target 
[root@web01 blog]# systemctl list-unit-files|grep remote-fs 
remote-fs.target enabled

web02
web02客户端直接挂载nfs即可
[root@web02 zh]# mount -t nfs 172.16.1.31:/data/blog/wp-content/uploads /data/blog/wp-content/uploads/ 
[root@web02 zh]# df -h
将挂载信息加入开机自启
[root@web02 zh]# vi /etc/fstab 
172.16.1.31:/data/blog/wp-content/uploads /data/blog/wp-content/uploads nfs defaults 0 0
172.16.1.31:/data/zh/uploads /data/zh/uploads nfs defaults 0 0
[root@web02 zh]# umount /data/blog/wp-content/uploads
[root@web02 zh]# df -h|grep uploads
[root@web02 zh]# mount -a 
[root@web02 zh]# df -h
###fstab延迟启动nfs
[root@web01 zh]# systemctl list-unit-files|grep remote-fs 
remote-fs.target disabled
[root@web01 zh]# systemctl enable remote-fs.target
[root@web01 zh]# systemctl list-unit-files|grep remote-fs 
remote-fs.target enabled

定时任务(web01,web02)备份到backup
#web01,web02配置rsync密码文件
echo 'oldboy123' > /etc/rsync.password
chmod 600 /etc/rsync.password
ll /etc/rsync.password

[root@web01 /]# cat /server/scripts/bak.sh 
#!/bin/bash
backup=/backup 
Path="$backup/$(hostname -i)" 
[ -f $Path ]||mkdir -p $Path 
if [ $(date +%w) -eq 2 ];then 
date="$(date +%F -d "-1day")_week1" 
else
date="$(date +%F -d "-1day")" 
fi
#备份 
cd $Path &&\
tar zcfh conf_${date}.tar.gz /var/spool/cron/root /server/scripts /etc 2>/dev/null 
tar zcf www_${date}.tar.gz /data --exclude=/data/blog/wp-content/uploads --exclude=/data/zh/uploads 2>/dev/null 
tar zcf logs_${date}.tar.gz /var/log/nginx 2>/dev/null 
#获取原始指纹 
find $Path -type f -name "*_${date}.tar.gz"|xargs md5sum >$Path/$(hostname -i)_${date}.flag 
#推送 
rsync -az $backup/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
#删除7天前的数据 
find $backup/ -type f -name "*.tar.gz" -mtime +7|xargs rm -f

#检查nfs01的sersync,检查backup的rsync。
#定时任务
#bak
01 00 * * * /bin/sh /server/scripts/bak.sh &>/dev/null

#db01 sqlbak
[root@db01 ~]# cat /server/scripts/sqlbak.sh 
backup=/backup 
Path="$backup/$(hostname -i)" 
[ -f $Path ]||mkdir -p $Path 
if [ $(date +%w) -eq 2 ];then 
date="$(date +%F -d "-1day")_week1" 
else
date="$(date +%F -d "-1day")" 
fi
#备份 
cd $Path &&\
/usr/bin/mysqldump -uroot -poldboy123 -A -B |gzip > allsql_${date}.sql.gz
#获取原始指纹 
find $Path -type f -name "*_${date}.sql.gz"|xargs md5sum >$Path/$(hostname -i)_${date}.sql.flag 
#推送 
rsync -az $backup/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password 
#删除7天前的数据 
find $backup/ -type f -name "*.tar.gz" -mtime +7|xargs rm -f
[root@db01 ~]# 
#定时任务
#sqlbak
01 00 * * * /bin/sh /server/scripts/sqlbak.sh &>/dev/null

#backup服务器要配置定时删除日志脚本,此处忽略

解决会话共享,安装redis

yum install epel-release -y
yum install redis -y
sed -i '/^bind/c bind 127.0.0.1 172.16.1.51' /etc/redis.conf
grep "^bind" /etc/redis.conf
systemctl start redis
systemctl enable redis

systemctl status redis #查看服务状态
systemctl stop redis #停止服务
systemctl restart redis #重启服务
ps -ef | grep redis #查看reids服务信息
systemctl enable redis #redis开机启动

#####
cd /etc/opt/remi/php74
修改php.ini
session.save_handler = redis
session.save_path = "tcp://172.16.1.51:6379"

cd /etc/opt/remi/php74/php-fpm.d/www.conf
注释
;php_value[session.save_handler] = files
;php_value[session.save_path]    = /var/opt/remi/php74/lib/php/session

systemctl restart php74-php-fpm.service

 

上一篇集群架构学习整理 - 动态web服务器配置(五)
下一篇Keepalived配置负载均衡服务其中一台的Nginx的进程停止,导致没有办法提供服务问题