简单开源软件跑架构(精简配置)
准备
普通用户
yum源
站点目录
数据目录
等
web01 保证单节点能够正常访问
[root@web1 ~]# cat /etc/nginx/conf.d/wordpress.conf
server {
listen 80;
server_name syq.wordpress.com;
root /code/wordpress;
client_max_body_size 100m;
location / {
index index.html index.php;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
web02 保证单节点能够正常访问
[root@web2 ~]# cat /etc/nginx/conf.d/wordpress.conf
server {
listen 80;
server_name syq.wordpress.com;
root /code/wordpress;
client_max_body_size 100m;
location / {
index index.html index.php;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
nfs
[root@nfs ~]# ll /data/
总用量 0
drwxr-xr-x 4 www www 35 3月 14 13:16 wecent
drwxr-xr-x 4 www www 28 3月 14 13:43 wordpress
[root@nfs ~]# cat /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
/data/wecent 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
/data/wordpress 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
backup 备份静态资源|其他服务器重要资源
根据需求使用各种备份工具
web挂载静态资源
[root@web1 ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda1 100G 2.5G 98G 3% /
devtmpfs 476M 0 476M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 14M 473M 3% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
172.16.1.31:/data/wecent 100G 2.0G 99G 2% /code/wecent/uploads
172.16.1.31:/data/wordpress 100G 2.0G 99G 2% /code/wordpress/wp-content/uploads
tmpfs 98M 0 98M 0% /run/user/0
数据库
创建远程用户并授权
MariaDB [(none)]> select user,host from mysql.user;
+------+-----------+
| user | host |
+------+-----------+
| all | % |
| root | 127.0.0.1 |
| root | ::1 |
| | localhost |
| root | localhost |
| | web2 |
| root | web2 |
+------+-----------+
7 rows in set (0.51 sec)
lb1 保证代理后端服务器正常,后期加入证书
[root@ld01 ~]# cat /etc/nginx/conf.d/proxy_wordpress.conf
upstream wordpress {
server 172.16.1.7:80;
server 172.16.1.8:80;
}
server {
listen 80;
server_name syq.wordpress.com;
location / {
proxy_pass http://wordpress;
include proxy_params;
}
}
lb2 保证代理后端服务器正常,后期加入证书
[root@lb2 ~]# cat /etc/nginx/conf.d/proxy_wordpress.conf
upstream wordpress {
server 172.16.1.7:80;
server 172.16.1.8:80;
}
server {
listen 80;
server_name syq.wordpress.com;
location / {
proxy_pass http://wordpress;
include proxy_params;
}
}
lb01 使用高可用技术,单节点测试后端
[root@ld01 ~]# cat /etc/keepalived/keepalived.conf
global_defs {
router_id lb01
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 50
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3
}
}
lb2 使用高可用技术,单节点测试后端
[root@lb2 ~]# cat /etc/keepalived/keepalived.conf
global_defs {
route_id lb2
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 50
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3
}
}
[root@ld01 nginx]# cat proxy_params
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_connect_timeout 30;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_buffering on;
proxy_buffer_size 32k;
proxy_buffers 4 128k;
优化参数略
upstream web {
server 10.0.0.7:80 max_conns=1000 max_fails=3 fail_timeout=10s;
server 10.0.0.8:80 max_conns=1000 max_fails=3 fail_timeout=10s;
keepalive 16; #最大的空闲连接数
keepalive_timeout 100s; #超时时间
keepalive_requests 50; #一个连接最大的请求数
高可用有脑裂现象
写脚本
[root@lb01 conf.d]# cat /scripts/check_web.sh
#!/usr/bin/bash
#1.检查nginx进程数量
Nginx_Process_Number=$(ps -C nginx --no-header|wc -l)
#2.判断nginx进程数量
if [ $Nginx_Process_Number -lt 2 ];then
#3.如果进程小于2,则尝试重新启动一次Nginx,并等待2s
systemctl restart nginx &>/dev/null
sleep 2
Nginx_Process_Number=$(ps -C nginx --no-header|wc -l)
#4.如果再次执行进程还是小于2,则直接kill掉keeplaived
if [ $Nginx_Process_Number -lt 2 ];then
pkill keepalived
fi
fi
[root@lb01 conf.d]# chmod +x /scripts/check_web.sh
2.脚本放哪?
2.1 定时任务 ( 分钟级 )
2.2 sleep命令 ( 秒级 ) --->丢后台 ---> screen
1.yum install screen -y
2.开启一个新的会话---> screen -S Name
3.在screen中使用ctrl+a+d 回到Bash窗口
4.screen -list ---> screen -r pid|name
注意:不能再screen窗口中执行ctrl+d的操作
2.3 keeplaived 调脚本 ( 秒 | 分 )
[root@lb01 ~]# cat /etc/keepalived/keepalived.conf
global_defs {
router_id LVS_01
}
#1.每5秒执行一次脚本, 脚本执行内容不能超过5秒,否则会被中断再次重新运行脚本
vrrp_script check_web {
script "/server/scripts/check_web.sh"
interval 5
}
vrrp_instance VI_1 {
nopreempt
state MASTER
interface eth0
virtual_router_id 50
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3
}
#2.调用并运行该脚本
track_script {
check_web
}
}
会话保持参考
1.负载均衡调度算法
调度算法 概述
轮询 按时间顺序逐一分配到不同的后端服务器(默认)
weight 加权轮询,weight值越大,分配到的访问几率越高 4 16G 8 64G
ip_hash 每个请求按访问IP的hash结果分配,这样来自同一IP的固定访问一个后端服务器
url_hash 按照访问URL的hash结果来分配请求,是每个URL定向到同一个后端服务器
least_conn 最少链接数,那个机器链接数少就分发
2.后端的节点状态指标
状态 概述
down 当前的server暂时不参与负载均衡
backup 预留的备份服务器
max_fails 允许请求失败的次数
fail_timeout 经过max_fails失败后, 服务暂停时间
max_conns 限制最大的接收连接数
[root@lb01 conf.d]# cat proxy_web.oldxu.com.conf
upstream web {
server 10.0.0.7:80 max_conns=1000 max_fails=3 fail_timeout=10s;
server 10.0.0.8:80 max_conns=1000 max_fails=3 fail_timeout=10s;
keepalive 16; #最大的空闲连接数
keepalive_timeout 100s; #超时时间
keepalive_requests 50; #一个连接最大的请求数
#负载均衡与后端的连接和请求数的限制
#注意:需要配置 proxy_http_version proxy_set_header Connection "";
}
server {
listen 80;
server_name web.oldxu.com;
location / {
proxy_pass http://web;
include proxy_params;
}
}
3.会话保持
phpmyadmin -->直观
kodcloud -->实现
配置一个网站:
1.测试session是否存储至于本地
2.配置多个web节点
3.接入负载均衡 --->轮询 -->正常登陆
第一步: 记得测试
[root@web01 ~]# cat /etc/nginx/conf.d/phpmyadmin.oldxu.com.conf
server {
listen 80;
server_name phpmyadmin.oldxu.com;
root /code/phpmyadmin;
location / {
index index.php;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
第二步配置phpmyadmin
[root@web01 ~]# cd /code/phpmyadmin/
[root@web01 phpmyadmin]# cp config.sample.inc.php config.inc.php
第三步修改配置文件(修改为需要连接的数据库IP地址)
[root@web01 phpmyadmin]# vim config.inc.php
$cfg['Servers'][$i]['host'] = '172.16.1.51';
第四步配置第二个节点: 记得测试
第五步: 接入负载均衡
[root@lb01 ~]# cat /etc/nginx/conf.d/proxy_phpmyadmin.oldxu.com.conf
upstream php {
server 172.16.1.7:80;
server 172.16.1.8:80;
}
server {
listen 80;
server_name phpmyadmin.oldxu.com;
location / {
proxy_pass http://php;
include proxy_params;
}
}
------------------------------------------------------------------------------------------
解决方案:
1.ip_hash
upstream php {
ip_hash;
server 172.16.1.7:80;
server 172.16.1.8:80;
}
2.会话共享--->redis
1.redis安装 配置 启动
[root@db01 ~]# yum install redis -y
[root@db01 ~]# sed -i '/^bind/c bind 127.0.0.1 172.16.1.51' /etc/redis.conf
[root@db01 ~]# systemctl start redis
[root@db01 ~]# systemctl enable redis
2.php应用服务接入redis ( session -->存储--->redis ) 所有节点都需要按如下方式配置
[root@web02 code]# vim /etc/php.ini
session.save_handler = redis
session.save_path = "tcp://172.16.1.51:6379?weight=1&timeout=2.5"
[root@web02 code]# vim /etc/php-fpm.d/www.conf
;php_value[session.save_handler] = files
;php_value[session.save_path] = /var/lib/php/session
[root@web02 code]# systemctl restart php-fpm