一, 实验环境:
1. 各软件版本:
系统版本: CentOS Linux release 7.4.1708 (Core)
php 版本: PHP 7.2
nginx 版本: nginx-1.12.2
数据库版本: MariaDB 10
WordPress 版本: 4.9.4
关闭防火墙与 selinux
2. 实验架构及 IP 分配 (架构图略, 后期有时间补):
调度器一台:
安装 ipvsadm
VIP:192.168.11.128(模拟公网 IP, 域名 www.ready.cn) DIP:172.16.142.128
realserver 两台:
两台都安装 nginx+PHP, 且保持配置一致
RIP1:172.16.142.11 RS2:172.16.142.22
数据库服务器一台:
安装 MariaDB
IP:172.16.142.33
存储服务器一台:
提供 NFS 存储服务 (略)
二, 所需软件安装配置, 并测试 PHP 是否正常解析
1.RS1 和 RS2 安装 nginx+PHP:
a > 安装 epel 源
rpm -Uvh https://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-7-11.noarch.rpm
b>yum 安装 nginx
yum install -y nginx
c>yum 安装 PHP
d > 添加 nginx server, 创建网站目录, 将用户请求结尾为. php 的 URL 交给 php-fpm 解析, 并创建 phpinfo 做页面测试
- vim /etc/nginx/conf.d/php.conf
- ######
- server {
- listen 80;
- server_name www.ready.org; #因为是做试验, 所以将 hosts 中添加本地域名解析
- location / {
- root html/php; #nginx 配置中网站的默认根路径为 / usr/share/nginx/, 这里指定的是相对路径
- index index.html index.htm;
- }
- location ~ .*\.(php|php5)?$ { #以任意开头以. php 结尾的 URI 用此 location 做匹配
- root html/php;
- fastcgi_pass 127.0.0.1:9000; #将请求交由 fastcgi(php-fpm) 处理
- fastcgi_index index.php;
- include fastcgi.conf;
- }
- }
- ######
- mkdir -p /usr/share/nginx/html/php/ #创建网站目录 (不是必须步骤, 也可使用默认目录)
- vim /usr/share/nginx/html/php/index.php
- ######
- <?php phpinfo(); ?>
- ######
e > 将 nginx 启动并设置开机启动
- systemctl start nginx
- systemctl enable nginx
f > 开启 php-fpm 并设置为开机启动
g > 浏览器访问 www.ready.org 与 www.ready.org/index.php, 显示以下界面便表示 nginx 与 PHP 已安装成功.
然后删除 index.php 文件, 安全因素.
以上步骤不涉及负载均衡的使用, 下面进行加入负载均衡服务器的配置测试
若是要将 RS1,RS2 并入负载均衡集群, 则需将 RS1,RS2 设置为监听本机 80 端口且将结尾为. php 的 URI 交 php-fpm 解析
即修改 / etc/nginx/nginx.conf 将匹配 PHP 解析的 location 加入默认配置即可, 修改如下:
- vim /etc/nginx/nginx.conf
- ######
- worker_processes 1;
- events {
- worker_connections 1024;
- }
- http {
- include mime.types;
- default_type application/octet-stream;
- log_format main '$remote_addr - $remote_user [$time_local]"$request"'
- '$status $body_bytes_sent"$http_referer" '
- '"$http_user_agent" "$http_x_forwarded_for"';
- access_log /var/log/nginx/access.log main;
- sendfile on;
- tcp_nopush on;
- tcp_nodelay on;
- keepalive_timeout 65;
- types_hash_max_size 2048;
- server {
- listen 80;
- #server_name _; #我理解的是此负载均衡集群中没有涉及域名解析, 所以 server_name 可以省略
- location / {
- root /usr/share/nginx/html/php; #我觉得 root 路径尽量要用绝对路径, 最好是写在 location 中, 这样便于管理, 方便查阅
- index index.php index.html index.htm; #不要忘了加 index.php, 不加会导致只输入域名时返回 403 错误
- }
- location ~ .*\.(php|php5)?$ {
- root /usr/share/nginx/html/php;
- index index.php;
- fastcgi_pass 127.0.0.1:9000;
- fastcgi_index index.php;
- include fastcgi.conf;
- }
- }
- }
- ######
2. 安装 ipvsadm 并配置
a > 安装 ipvsadm
yum install -y ipvsadm
b > 配置 lvs 服务器, 测试调度是否成功
- ipvsadm -A -t 192.168.11.128:80 -s rr #添加 tcp 协议 VIP, 端口为 80, 调度算法为轮询
- ipvsadm -a -t 192.168.11.128:80 -r 172.16.142.11 -m #添加 RS1, 类型为 net
- ipvsadm -a -t 192.168.11.128:80 -r 172.16.142.22 -m #添加 RS2, 类型为 net
-s 设置调度算法
rr 轮询
wrr 加权轮询
sh 原地址哈希调度, 保证整个系统的出入口唯一
wlc 加权最小连接数调度
浏览器访问 192.168.11.128 与 192.168.11.128/index.php
若出现测试页面即为配置成功
3. 安装并配置 MariaDB
a > 在 172.16.142.33 上 yum 安装 MariaDB(以下数据库配置有很多安全隐患, 待后续深入学习数据库后会另起博文详解数据库的相关配置)
- vim /etc/yum.repos.d/mariadb.repo
- ######
- [mariadb]
- name = MariaDB
- baseurl = https://mirrors.ustc.edu.cn/mariadb/yum/10.2/centos7-amd64
- gpgkey= https://mirrors.ustc.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB
- gpgcheck=1
- ######
- yum install -y MariaDB-server
b > 配置数据库
- mysql_secure_installation #初始化数据库, 设置 root 密码, 匿名用户权限等
- mysql -uroot -p123456 #登入数据库进行用户及库的创建与配置
- >GRANT ALL PRIVILEGES ON *.* TO 'mysql'@'%'IDENTIFIED BY '123456' WITH GRANT OPTION; #创建账户 mysql, 密码为 123456, 并允许任意 IP 访问此账户数据库, 权限为 ALL
- >CREATE DATABASE wordpress; #创建名为 wordpress 的库, 安装完 WordPress 后会要求在数据库创建库, 这里事先创建好
- >quit
4. 安装 WordPress
a > 将下载好的 WordPress 包解压至已创建好的 / usr/share/nginx/html/php 目录下
b > 为模拟互联网环境, 将'www.ready.cn 192.168.11.128'hosts 文件加入本地解析规则
c > 浏览器输入 www.ready.cn, 按提示步骤进行操作便可安装完成
三, 关于 lvs-nat 类型下 ipvsadm 的一些用法
ipvsadm -ln --stats #状态信息
例:
- IP Virtual Server version 1.2.1 (size=4096)
- Prot LocalAddress:Port Conns InPkts OutPkts InBytes OutBytes
- -> RemoteAddress:Port
- TCP 192.168.11.128:80 25 951 353 83843 2050036
- -> 172.16.142.11:80 12 574 205 46157 1303372
- -> 172.16.142.22:80 13 377 148 37686 746664
Conns 请求连接数
InPkts 入站的报文数
OutPkts 出站的报文数
InBytes 入站的字节数
OutBytes 出站的字节数
- ```
- ipvsadm -ln --rate #每秒传输速率信息
- ipvsadm -ln -c #当前站点访问情况
例:
- IPVS connection entries
- pro expire state source virtual destination
- TCP 14:55 ESTABLISHED 192.168.11.1:53035 192.168.11.128:80 172.16.142.22:80
- TCP 14:55 ESTABLISHED 192.168.11.1:53016 192.168.11.128:80 172.16.142.11:80
- TCP 01:46 TIME_WAIT 192.168.11.1:53029 192.168.11.128:80 172.16.142.11:80
- TCP 01:09 TIME_WAIT 192.168.11.1:52990 192.168.11.128:80 172.16.142.11:80
这里需要注意的是每次输入网址访问页面时, 并不一定只发送了一个请求, 所以只访问一次页面时, 也会出现多个 RS 在响应请求. 另外这里的 state 项可以帮助理解 tcp/ip 协议的 "握手与挥手"
`ipvsadm -S -n #保存规则, 一般是保存在 / etc/sysconfig/ipvsadm`
例: ipvsadm -S -n> /etc/sysconfig/ipvsadm
也可使用 systemctl stop ipvsadm.service 做自动保存
`ipvsadm -C #清空规则 `
四, 缺陷
网站会有用户上传文件的需求, 所以必须保证 RS1 和 RS2 上传文件目录保存同步或者共用一个存储
可用 inotify+rsync 或者同时挂载 NFS 实现, 这里不再演示
来源: http://www.bubuko.com/infodetail-2720090.html