基于LAMP环境搭建Discuz论坛,并实现Keepalied、LVS高可用负载均衡集群
一、主机规划
主机 | IP | Keepalived、LVS |
---|---|---|
Keepalived、LVS | 192.168.182.10 | Master |
Keepalived、LVS | 192.168.182.11 | Backup |
VIP | 192.168.182.111 | VIP |
web1:httpd、mysql、php、Discuz | 192.168.182.12 | RIP-1 |
web2:httpd、mysql、php、Discuz | 192.168.182.13 | RIP-2 |
二、LAMP环境部署
WEB端
1、关闭防火墙、selinux 服务
四台服务器均要关闭
systemctl stop firewalld
setenforce 0
2、web1-2主机中安装部署httpd服务
- 下载并启动httpd服务、且设置为开机自启
[root@web ~]# yum install -y httpd
[root@web ~]# systemctl start httpd && systemctl enable httpd
此处采用yum源安装,或可采用下方源码安装方法
运维之道 | Centos7源码安装配置Apache
3、web1-2主机中安装部署mariadb服务
- 卸载系统原有的数据库、并清理原有配置文件(否则会报mysql.sock无法连接)
[root@web ~]# yum remove -y mariadb
[root@web ~]# rm -rf /etc/my.cnf
[root@web ~]# rm -rf /var/lib/mysql
- 安装并启动mariadb服务、并设置为开机自启
[root@web ~]# yum install -y mariadb mariadb-server mariadb-devel
[root@web ~]# systemctl start mariadb && systemct enable mariadb
- 进入数据库创建discuz库、并创建discuz用户及授权
[root@web ~]# mysql -uroot -p
MariaDB [(none)]> create database discuz;
MariaDB [(none)]> grant all on discuz.* to 'discuz'@'localhost' identified by "123456";
MariaDB [(none)]> flush privileges;
4、web1-2主机中安装php服务
[root@web ~]# yum install -y php php-devel php-mysql
三、安装部署Discuz论坛
web1、web2均要部署
1、获取Discuz源码包
[root@web ~]# wget http://download.comsenz.com/DiscuzX/3.1/Discuz_X3.1_SC_UTF8.zip
2、将Discuz包解压到httpd的发布目录下
[root@web ~]# unzip Discuz_X3.1_SC_UTF8.zip -d /var/www/html/
3、进入到/var/www/html/目录下,将upload目录下所有内容移至html目录中,并授权
[root@web html]# mv upload/* .
[root@web html]# chmod 777 -R *
4、进入Discuz安装界面进行配置(一定要关闭防火墙和selinux,否则会报错)
访问:192.168.182.12/install/
四、安装部署LVS(DR)负载均衡
Master、Backup主机均要部署
1、在LVS服务端安装lvs服务
[root@Master ~]# yum -y install ipvsadm && systemctl enable ipvsadm
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
*****自动安装过程略****
Installed:
ipvsadm-1.27-7.el7.x86_64
Complete!
2、创建软连接
ipvsadm在编译的时候需要使用内核文件
[root@Master ~]# ln -s /usr/src/kernels/kernels/3.10.0-957.el7.x86_64/ /usr/src/linux
[root@Master ~]# ll /usr/src/linux
lrwxrwxrwx. 1 root root 39 1月 1 16:01 /usr/src/linux -> /usr/src/kernels/3.10.0-957.el7.x86_64/
注:如果没有/usr/src/kernels/kernels/3.10.0-957.el7.x86_64/路径,可能是因为缺少kernels/3.10.0-957.el7.x86_64/软件包,可以通过命令yum install kernel-devel
安装。若yum源中没有安装包,可通过获取镜像中的rpm包安装:方法如下:
[root@Master ~]# mkdir /mnt/abc
[root@Master ~]# mount /dev/cdrom /mnt/abc/
mount: /dev/sr0 写保护,将以只读方式挂载
[root@Master ~]# cd /mnt/abc/
[root@Master abc]# cp Packages/kernel-3.10.0-957.el7.x86_64.rpm /usr/local/src
[root@Master src]# rpm -ivh kernel-3.10.0-957.el7.x86_64.rpm
3、检测是否安装完毕
[root@Master ~]# rpm -qa ipvsadm
ipvsadm-1.27-7.el7.x86_64
4、查看内核是否有ip_vs服务运行
[root@Master ~]# lsmod |grep ip_vs
ip_vs_wrr 12697 1
ip_vs 145497 3 ip_vs_wrr
nf_conntrack 133095 1 ip_vs
libcrc32c 12644 3 xfs,ip_vs,nf_conntrack
注:如果没有以上四个输出,可以使用命令ipvsadm
或者modprobe ip_vs
命令重新加载;
注:LVS在和Keepalived结合在一起的时候,不需要进行配置,安装后,直接通过keepalived配置即可;
手动配置LVS服务
1、清空以前的旧配置:
[root@Master ~]# ipvsadm -C
2、为LVS服务器添加一个虚拟IP地址:
[root@Master ~]# ip addr add 192.168.182.111/24 dev ens33 label ens33:0
[root@localhost ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.182.132 netmask 255.255.255.0 broadcast 192.168.182.255
inet6 fe80::de64:22e8:c40e:f44b prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:8c:11:61 txqueuelen 1000 (Ethernet)
......
ens33:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.182.111 netmask 255.255.255.0 broadcast 0.0.0.0
ether 00:0c:29:8c:11:61 txqueuelen 1000 (Ethernet)
3、添加一个虚拟vserverIP:
添加一台新的虚拟服务器,并以wrr(加权轮询)的算法调度
[root@Master ~]# ipvsadm -A -t 192.168.182.111:80 -s wrr
参数说明
:
-A
:–add-service,表示添加一个虚拟服务器-t
:–tcp-service,指定这是一个tcp的虚拟服务器-u
:–udp-service,指定这是一个udp的虚拟服务器192.168.182.111:80
:表示提供服务的ip地址以及端口号-s
:–scheduler,指定调度器,“rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq”选择一种,默认是wlc
4、为服务器添加real serverIP(WEB1、WEB2):
向虚拟服务上添加一台真实服务器并指向80端口
[root@localhost ~]# ipvsadm -a -t 192.168.182.111:80 -r 192.168.182.12:80 -g -w 1
[root@localhost ~]# ipvsadm -a -t 192.168.182.111:80 -r 192.168.182.13:80 -g -w 1
[root@localhost ~]# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP localhost.localdomain:http wrr
-> 192.168.182.12:http Route 1 0 0
-> 192.168.182.13:http Route 1 0 0
五、安装部署Keepalived高可用集群
1、安装Keepalived服务,并设置开机自启
[root@Master ~]# yum install -y keepalived && systemctl enable keepalived
2、配置Keepalived - MASTER节点文件
! Configuration File for keepalived
global_defs {
router_id NodeA #主备路由配置不一样
}
vrrp_instance VI_1 { #需与备节点配置一致
state MASTER
interface ens33 #需与备节点配置一致
virtual_router_id 51 #需与备节点配置一致
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.182.111/24 dev ens33 #LVS、Keepalived VIP工作和端口
}
}
virtual_server 192.168.182.111 80 { #虚拟服务器VIP地址和端口
delay_loop 3 #健康检查的间隔时间(秒)
lb_algo rr #轮询调度算法
lb_kind DR #直接路由群集工作模式
persistence_timeout 50 #连接保持时间(秒)不启动在前面加(!)即可
protocol TCP #采用TCP协议
real_server 192.168.182.12 80 { #第一个Discuz-WEB节点地址和端口
weight 1 #节点权重
TCP_CHECK { #健康检查方式
connect_port 80 #检查的目录端口
connect_timeout 3 #连接超时(秒)
nb_get_retry 3 #重试次数
delay_before_retry 3 #重试间隔(秒)
}
}
real_server 192.168.182.13 80 { #第二个Discuz-WEB节点的地址、端口和部分信息
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
3、配置Keepalived - BACKUP节点文件
! Configuration File for keepalived
global_defs {
router_id NodeB #主备路由配置不一样
}
vrrp_instance VI_1 { #需与主节点配置一致
state BACKUP
interface ens33 #需与主节点配置一致
virtual_router_id 51 #需与主节点配置一致
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.182.111/24 dev ens33 #LVS、Keepalived VIP工作和端口
}
}
virtual_server 192.168.182.111 80 { #虚拟服务器VIP地址和端口
delay_loop 3 #健康检查的间隔时间(秒)
lb_algo rr #轮询调度算法
lb_kind DR #直接路由群集工作模式
persistence_timeout 50 #连接保持时间(秒)不启动在前面加(!)即可
protocol TCP #采用TCP协议
real_server 192.168.182.12 80 { #第一个WEB节点地址和端口
weight 1 #节点权重
TCP_CHECK { #健康检查方式
connect_port 80 #检查的目录端口
connect_timeout 3 #连接超时(秒)
nb_get_retry 3 #重试次数
delay_before_retry 3 #重试间隔(秒)
}
}
real_server 192.168.182.13 80 { #第二个web节点的地址、端口和部分信息
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
六、配置 LVS(ipvsadm)WEB端 负载均衡服务
WEB1、WEB2主机均要部署
1、配置RIP节点主机虚拟IP(不能绑定在ens33中,只能在轮回IP中)
[root@web ~]# cp /etc/sysconfig/network-scripts/ifcfg-lo /etc/sysconfig/network-scripts/ifcfg-lo:0
[root@web1 ~]# vim ifcfg-lo:0
DEVICE=lo:0 #虚拟主机名
IPADDR=192.168.182.111 #虚拟主机IP
NETMASK=255.255.255.255 #子网掩码
ONBOOT=yes #开机自启
[root@web network-scripts]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
......
inet 192.168.182.111/32 brd 192.168.182.111 scope global lo:0
valid_lft forever preferred_lft forever
......
2、配置RIP节点主机虚拟路由
[root@web ~]# vi /etc/rc.local
#####在文件下方追加下行命令行
/sbin/route add host 192.168.182.111 dev lo:0
3、设置ARP抑制
作用:当广播呼叫VIP(LVS、RS中配置VIP)时,RS中的VIP不给予呼应
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
4、打开路由转发功能
[root@web ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@web ~]# sysctl -p
七、测试啦!!!
测试1:开启Master节点Keepalived服务,此时外界访问测试界面则为Master节点测试页面
[root@Master ~]# ip a
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
......
inet 192.168.182.111/24 scope global secondary ens33
valid_lft forever preferred_lft forever
......
[root@Master ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.182.111:80 rr persistent 50
-> 192.168.182.12:80 Route 1 0 0
-> 192.168.182.13:80 Route 1 0 0
测试2:开启Backup节点Keepalived服务,关闭Master节点,此时外界访问测试界面则为Backup节点测试页面
- Master节点关闭Keepalived服务,Backup节点立刻接受Keepalived服务
[root@Master ~]# systemctl stop keepalived
[root@Backup ~]# ip a
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
......
inet 192.168.182.111/24 scope global secondary ens33
valid_lft forever preferred_lft forever
......
[root@Backup ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.182.111:80 rr persistent 50
-> 192.168.182.12:80 Route 1 0 0
-> 192.168.182.13:80 Route 1 0 0
学习视频:https://www.bilibili.com/video/av50631784?p=32