运维之道 | 基于LAMP环境搭建Discuz论坛,并实现Keepalied、LVS高可用负载均衡集群实战

基于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 11 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
  • -g:DR模式
  • -w:轮询
  • 若为NAT模式,则将-g设置为-m
[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

发布了97 篇原创文章 · 获赞 10 · 访问量 3383

猜你喜欢

转载自blog.csdn.net/VillianTsang/article/details/103871347