【Linux集群系列教程】LB集群(keepalived结合LVS)+LAMP环境+WordPress博客
【Linux集群系列教程】LB集群(keepalived结合LVS)+LAMP环境+WordPress博客
上一期教程LVS集群
关于LAMP+WordPress博客教程:https://www.wsjj.top/archives/88
虚拟机工作安排:
192.168.140.10
主调度器192.168.140.11
从调度器192.168.140.12
负责web
服务,安装httpd
、PHP
192.168.140.13
负责web
服务,安装httpd
、PHP
192.168.140.14
负责NFS
存储共享,存储网页
数据,安装MySQL
一、配合keepalived管理LVS
- 实现
调度器
的高可用 - 自动生成
LVS
负载均衡规则 - 对后端
real server
进行健康状态检测
二、关闭防火墙SElinux和设置时间同步
过程省略,一定要配置时间同步!否则会出现
脑裂
问题!
三、配置虚拟机网卡和静态IP
五台
虚拟机都要修改网卡模式为NAT
,默认NAT
模式下使用VMnet8
网卡
配置IP
过程省略
配置网卡教程:https://www.wsjj.top/archives/50
四、配置后端NFS服务器+MySQL服务器
按照规划,应该在
192.168.140.14
这台服务器上配置
关于NFS服务搭建教程:https://www.wsjj.top/archives/62
1.添加一块挂载硬盘
添加完后,自行
重启
服务器
2.安装nfs-utils
服务
[root@node3-nfs ~]# yum install -y nfs-utils rpcbind
3.格式化新增的硬盘
[root@node3-nfs ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 500M 0 part /boot
└─sda2 8:2 0 19.5G 0 part
├─centos-root 253:0 0 17.5G 0 lvm /
└─centos-swap 253:1 0 2G 0 lvm [SWAP]
sdb 8:16 0 20G 0 disk #可以看到我们新增的硬盘已经检测到了
sr0 11:0 1 1024M 0 rom
[root@node3-nfs ~]# fdisk /dev/sdb
命令(输入 m 获取帮助):g #转换成GPT格式的磁盘
Building a new GPT disklabel (GUID: A91567D7-42D7-404E-B38B-72069B1E4D6F)
命令(输入 m 获取帮助):n #创建一个新分区
分区号 (1-128,默认 1):1 #默认1
第一个扇区 (2048-41943006,默认 2048): #默认回车即可
Last sector, +sectors or +size{K,M,G,T,P} (2048-41943006,默认 41943006):#默认回车
已创建分区 1
命令(输入 m 获取帮助):w #保存
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
A.格式化分区
[root@node3-nfs ~]# mkfs -t xfs /dev/sdb1
B.配置永久挂载
[root@node3-nfs ~]# mkdir /wordpress #创建好数据目录
[root@node3-nfs ~]# vim /etc/fstab
/dev/sdb1 /wordpress xfs defaults 0 0
[root@node3-nfs ~]# mount -a #挂载所有
检查刚刚挂载的分区
[root@node3-nfs ~]# df -hT | grep -i sdb1
/dev/sdb1 xfs 20G 33M 20G 1% /wordpress
4.配置NFS
[root@node3-nfs ~]# vim /etc/exports
/wordpress 192.168.140.12(rw,no_root_squash) 192.168.140.13(rw,no_root_squash)
A.准备WordPress安装包
使用截止教程编写日期,最新
6.2
版本
[root@node3-nfs ~]# wget https://cn.wordpress.org/latest-zh_CN.tar.gz
[root@node3-nfs ~]# tar xf latest-zh_CN.tar.gz
[root@node3-nfs ~]# mv ./wordpress/* /wordpress
[root@node3-nfs ~]# ls /wordpress
index.php wp-admin wp-content wp-load.php wp-signup.php
license.txt wp-blog-header.php wp-cron.php wp-login.php wp-trackback.php
readme.html wp-comments-post.php wp-includes wp-mail.php xmlrpc.php
wp-activate.php wp-config-sample.php wp-links-opml.php wp-settings.php
B.设置权限
[root@node3-nfs ~]# chmod -R 777 /wordpress
C.启动NFS服务,并设置开机自启动
[root@node3-nfs ~]# systemctl enable --now nfs-server
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
[root@node3-nfs ~]# showmount -e localhost #可以检查是否创建服务成功
Export list for localhost:
/wordpress 192.168.140.13,192.168.140.12
5.配置web
服务器挂载NFS
网络存储
需要回到
192.168.140.12
和192.168.140.13
配置NFS
共享
A.两台web
服务器需要安装NFS
用来支持NFS
文件系统
[root@node1 ~]# yum install -y nfs-utils
[root@node2 ~]# yum install -y nfs-utils
B.创建挂载目录
[root@node1 ~]# mkdir /wordpress
[root@node2 ~]# mkdir /wordpress
C.配置永久挂载
[root@node1 ~]# vim /etc/fstab
192.168.140.14:/wordpress /wordpress nfs defaults 0 0
[root@node2 ~]# vim /etc/fstab
192.168.140.14:/wordpress /wordpress nfs defaults 0 0
D.挂载
[root@node1 ~]# mount -a
[root@node2 ~]# mount -a
[root@node1 ~]# ls /wordpress/ #可以看到NFS服务器上的文件已经挂载到本地了!
index.php wp-admin wp-content wp-load.php wp-signup.php
license.txt wp-blog-header.php wp-cron.php wp-login.php wp-trackback.php
readme.html wp-comments-post.php wp-includes wp-mail.php xmlrpc.php
wp-activate.php wp-config-sample.php wp-links-opml.php wp-settings.php
[root@node2 ~]# ls /wordpress/
index.php wp-admin wp-content wp-load.php wp-signup.php
license.txt wp-blog-header.php wp-cron.php wp-login.php wp-trackback.php
readme.html wp-comments-post.php wp-includes wp-mail.php xmlrpc.php
wp-activate.php wp-config-sample.php wp-links-opml.php wp-settings.php
6.回到NFS服务器,配置MySQL
回到
192.168.140.14
配置MySQL
数据库
MySQL5.7安装教程:https://www.wsjj.top/archives/65
A.创建WordPress数据库
创建一个库名为
wordpress
的库,字符集为utf8mb4
mysql> create database wordpress charset utf8mb4;
Query OK, 1 row affected (0.00 sec)
B.创建授权登录用户
我们这里要授权
2
台web
服务器登录,所以ip
要写2
台web
服务器的IP
我们创建了用户wordpress
,并且设置了密码为WWW.1.com
,并且只允许对wordpress库
有权限
mysql> grant all on wordpress.* to 'wordpress'@'192.168.140.12' identified by 'WWW.1.com';
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> grant all on wordpress.* to 'wordpress'@'192.168.140.13' identified by 'WWW.1.com';
Query OK, 0 rows affected, 1 warning (0.00 sec)
至此我们
NFS
服务器和MySQL
服务配置完毕。
五、配置2台web服务器
需要到
192.168.140.12
和192.168.140.13
配置
1.安装httpd
[root@node1 ~]# yum install -y httpd
[root@node2 ~]# yum install -y httpd
[root@node1 ~]# systemctl enable --now httpd #启动httpd服务,并且加入到开机自启项
[root@node2 ~]# systemctl enable --now httpd
2.安装PHP7.4
[root@node1 ~]# yum install -y epel-release
[root@node2 ~]# yum install -y epel-release
[root@node1 ~]# yum -y install https://rpms.remirepo.net/enterprise/remi-release-7.rpm
[root@node2 ~]# yum -y install https://rpms.remirepo.net/enterprise/remi-release-7.rpm
[root@node1 ~]# yum install -y yum-utils
[root@node2 ~]# yum install -y yum-utils
[root@node1 ~]# yum-config-manager --enable remi-php74
[root@node2 ~]# yum-config-manager --enable remi-php74
[root@node1 ~]# yum install -y php php-cli php-fpm php-mysqlnd php-zip php-devel php-gd php-mcrypt php-mbstring php-curl php-xml php-pear php-bcmath php-json php-redis
[root@node2 ~]# yum install -y php php-cli php-fpm php-mysqlnd php-zip php-devel php-gd php-mcrypt php-mbstring php-curl php-xml php-pear php-bcmath php-json php-redis
A.查看PHP
版本
[root@node1 ~]# php -v
PHP 7.4.33 (cli) (built: Feb 14 2023 09:31:03) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
[root@node2 ~]# php -v
PHP 7.4.33 (cli) (built: Feb 14 2023 09:31:04) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
3.配置httpd
虚拟主机
A.编写虚拟主机配置文件
[root@node1 ~]# vim /etc/httpd/conf.d/wp.conf
<VirtualHost *:80>
ServerName blog1.wsjj.top
DocumentRoot /wordpress
ErrorLog /var/log/httpd/wp_error.log
CustomLog /var/log/httpd/wp_access.log combined
</VirtualHost>
<Directory /wordpress>
Require all granted
</Directory>
[root@node2 ~]# vim /etc/httpd/conf.d/wp.conf
<VirtualHost *:80>
ServerName blog2.wsjj.top
DocumentRoot /wordpress
ErrorLog /var/log/httpd/wp_error.log
CustomLog /var/log/httpd/wp_access.log combined
</VirtualHost>
<Directory /wordpress>
Require all granted
</Directory>
B.检查配置文件
这里的
AH00558
不是报错,可以到主配置文件/etc/httpd/conf/httpd.conf
修改ServerName
后面的内容为Localhost:80
即可
[root@node1 ~]# httpd -t
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::20c:29ff:fe0f:55d2. Set the 'ServerName' directive globally to suppress this message
Syntax OK
[root@node2 ~]# httpd -t
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::20c:29ff:fe0f:55d2. Set the 'ServerName' directive globally to suppress this message
Syntax OK
[root@node1 ~]# httpd -t #修改主配置文件之后再检查
Syntax OK
C.重启服务器
[root@node1 ~]# systemctl restart httpd
[root@node2 ~]# systemctl restart httpd
4.测试2台web服务器
5.配置WordPress
两台
web
服务器任意一台即可,因为我们后端采用NFS
共享存储
6.修改wp-config.php
文件,防止今后插件无法安装
需要回到
NFS
服务器上配置192.168.140.14
[root@node3-nfs ~]# vim /wordpress/wp-config.php #在文件最后加入以下三行内容
define("FS_METHOD", "direct");
define("FS_CHMOD_DIR", 0777);
define("FS_CHMOD_FILE", 0777);
7.在两台web服务器配置VIP和arp内核参数
当net.ipv4.conf.all.arp_ignore等于0的时候,
响应任意
网卡上接收到的对本机IP
地址的arp
请求包括环回网卡上的地址
,而不管
该目的IP
是否在接收
网卡上。
当net.ipv4.conf.all.arp_ignore等于1的时候,只响应
目的IP
地址为接收
网卡上的本地地址
的arp
请求。
当net.ipv4.conf.all.arp_announce等于0的时候,本机
所有IP地址
都向任何
一个接口通告ARP
报文。
当net.ipv4.conf.all.arp_announce等于1的时候,尽量
仅向该网卡
回应与该网段
匹配的ARP
报文。
当net.ipv4.conf.all.arp_announce等于2的时候,只
向该网卡
回应与该网段
匹配的ARP
报文。
[root@node1 ~]# ip addr add dev lo 192.168.140.100/32
[root@node2 ~]# ip addr add dev lo 192.168.140.100/32
配置永久绑定
IP
[root@node1 ~]# vim /etc/rc.d/rc.local
ip addr add dev lo 192.168.140.100/32
[root@node2 ~]# vim /etc/rc.d/rc.local
ip addr add dev lo 192.168.140.100/32
[root@node1 ~]# chmod a+x /etc/rc.d/rc.local
[root@node2 ~]# chmod a+x /etc/rc.d/rc.local
[root@node1 ~]# vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
[root@node1 ~]# sysctl -p
[root@node2 ~]# vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
[root@node2 ~]# sysctl -p
至此两台
web
服务器都配置完毕!
六、配置主从调度器
1.安装keepalived
和ipvsadm
[root@master01 ~]# yum install -y keepalived ipvsadm
[root@master02 ~]# yum install -y keepalived ipvsadm
2.编辑主
调度器配置文件
[root@master01 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id master_LVS #指定调度器id
}
vrrp_instance wordpress { #指定虚拟组名
state MASTER #指定主备状态,与之相对的为BACKUP
interface ens33 #指定VIP在哪块网卡上
virtual_router_id 51 #组ID
priority 100 #优先级0-255数字越大权限越高
advert_int 1 #心跳时间间隔
authentication {
auth_type PASS
auth_pass redhat #设置密码
}
virtual_ipaddress {
192.168.140.100 #设置VIP
}
}
virtual_server 192.168.140.100 80 { #指定虚拟服务器为192.168.140.100
delay_loop 6
lb_algo rr #算法轮询
lb_kind DR #指定工作模式为DR
persistence_timeout 300 #超时时间
protocol TCP #基于TCP连接
real_server 192.168.140.12 80 { #web1服务器
weight 1
TCP_CHECK {
connect_port 80 #指定80端口
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.140.13 80 { #web2服务器
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
3.配置备用
调度器的配置文件
快速拷贝主配置文件
[root@master01 ~]# scp /etc/keepalived/keepalived.conf root@192.168.140.11:/etc/keepalived
修改备用
调度器配置文件
[root@master02 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id salve_LVS #修改组名
}
vrrp_instance wordpress {
state BACKUP #修改模式为备用
interface ens33
virtual_router_id 51
priority 50 #修改权重
advert_int 1
authentication {
auth_type PASS
auth_pass redhat
}
virtual_ipaddress {
192.168.140.100
}
}
virtual_server 192.168.140.100 80 {
delay_loop 6
lb_algo rr
lb_kind DR
persistence_timeout 300
protocol TCP
real_server 192.168.140.12 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.140.13 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
4.启动主
调度器和备用
调度器
[root@master01 ~]# systemctl enable --now keepalived.service
[root@master02 ~]# systemctl enable --now keepalived.service
5.查看LVS工作状态
[root@master01 ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.140.100:80 rr persistent 300
-> 192.168.140.12:80 Route 1 0 0
-> 192.168.140.13:80 Route 1 0 0
[root@master02 ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.140.100:80 rr persistent 300
-> 192.168.140.12:80 Route 1 0 0
-> 192.168.140.13:80 Route 1 0 0
6.测试
7.模拟主调度器
挂掉
[root@master01 ~]# systemctl stop keepalived.service
A.查看网页
是否正常
B.查看备用
调度器工作状态
[root@master02 ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.140.100:80 rr persistent 300
-> 192.168.140.12:80 Route 1 0 0
-> 192.168.140.13:80 Route 1 0 2
8.模拟挂掉一个web
服务器
[root@node2 ~]# systemctl stop httpd
A.测试访问
B.查看备用
节点工作状态
[root@master02 ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.140.100:80 rr persistent 300
-> 192.168.140.12:80 Route 1 0 8
七、为WordPress
配置Redis
数据库
关于Redis教程链接:https://www.wsjj.top/archives/91 https://www.wsjj.top/archives/92
回到NFS
服务器192.168.140.14
,安装Redis
尝试修改配置文件/wordpress/wp-config.php
在文件最后加入以下三行内容
define(“FS_METHOD”, “direct”);
define(“FS_CHMOD_DIR”, 0777);
define(“FS_CHMOD_FILE”, 0777);
1.安装Redis
如果提示找不到
软件包
,请配置epel
源
[root@node3-nfs ~]# yum install -y redis
2.修改Redis
配置文件
[root@node3-nfs ~]# vim /etc/redis.conf
bind 192.168.140.14 #指定IP地址
port 6379 #端口保持默认
daemonize yes #启用后台运行
logfile /var/log/redis/redis_6379.log
appendonly yes #启用aof日志
appendfilename "appendonly_6379.aof"
3.启动Redis
如果提示找不到
netstat
命令,需要安装yum install -y net-tools
[root@node3-nfs ~]# redis-server /etc/redis.conf
[root@node3-nfs ~]# netstat -tunlp | grep redis
tcp 0 0 192.168.140.14:6379 0.0.0.0:* LISTEN 2363/redis-server 1
4.本地连接测试
[root@node3-nfs ~]# redis-cli -h 192.168.140.14
192.168.140.14:6379>
5.配置WordPress
连接Redis
A.后台Redis
安装插件
下载完,暂时
不要
启用
如果下载失败
,请确认是否拥有权限
!执行chmod -R 777 /wordpress
再试试
B.修改WordPress配置文件
随便一台服务器上修改
web1
、web2
、NFS
找到相应字段并修改
[root@node3-nfs ~]# vim /wordpress/wp-content/plugins/redis-cache/includes/object-cache.php
protected function build_parameters() {
$parameters = [
'scheme' => 'tcp',
'host' => '192.168.140.14', #这里修改IP地址
'port' => 6379,
'database' => 0,
'timeout' => 1,
'read_timeout' => 1,
'retry_interval' => null,
'persistent' => false,
];
C.查看插件
启用状态
改完
上面的配置文件
,就可以安全的启用
啦!