前言:

本文基于VMware的11台虚拟机CentOS-7-x86_64-2009(算上额外部分为14台)

网段:169.69.85.0
虚拟IP必须在网段内
网关:169.69.85.2
DNS:169.69.85.2

所有机器已关闭selinux和防火墙

systemctl stop firewalld
systemctl disable firewalld #关闭防火墙开机自启动

setenforce 0
sed -i '/^SELINUX=.*/c SELINUX=disabled' /etc/selinux/config  #修改配置文件关闭selinux开机自启动

所有机器配置了网易yum源

cd /etc/yum.repos.d

wget http://mirrors.163.com/.help/CentOS6-Base-163.repo  #下载网易yum源的配置文件

rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 #验证密钥

yum clean all
yum repolist

需注意部署nginx和lvs的机器,各自的两台机器步骤一样,仅keepalived配置文件不同

名称IP
nginx+keepalived 1169.69.85.104
nginx+keepalived 2169.69.85.105
apache1169.69.85.106
apache2169.69.85.107
nfs169.69.85.108
lvs+keepalived1169.69.85.109
lvs+keepalived2169.69.85.110
mysqlmaster1169.69.85.111
mysqlmaster2169.69.85.112
mysqlslave1169.69.85.113
mysqlslave2169.69.85.114
虚拟IP169.69.85.5
mysql虚拟IP169.69.85.10

nfs

配置nfs前可参考额外部分,提前配置ISCSI
配置nfs前可参考额外部分,提前配置ISCSI

配置nfs

yum install -y nfs-utils     #安装nfs环境

systemctl  restart rpcbind   #启动守护进程服务
systemctl  restart nfs       #启动nfs

cd / 
wget https://yukisrye.top:442/f/aEIQ/Discuz_X3.2_SC_UTF8.zip  #下载discuz_X3.2论坛(该链接存于我自己的云盘,也可以去官方下载3.5最新版)

unzip -d /luntan Discuz_X3.2_SC_UTF8.zip  #解压文件至新目录/luntan中

cd /luntan    
cp   -rp  upload/*  .          #将安装文件从upload目录中复制出来
chmod 757  -R  data/   uc_server/   config/   uc_client/  #修改文件权限

vim /etc/exports   #修改配置文件
/luntan 169.69.85.*(rw,no_root_squash,sync)

exportfs  -r  #重读配置文件

apache1&2

两台服务器配置一样

yum install -y httpd* nfs-utils php php-mysql php-devel  #安装环境

systemctl restart httpd   #启动httpd服务
systemctl enable httpd   #开机自启动

mount 169.69.85.108:/luntan /var/www/html  #将nfs上的文件挂载到网站目录下

nginx+keepalived 1&2

安装环境:

yum install -y nginx keepalived 

配置nginx反向代理主机

vim /etc/nginx/nginx.conf

http {
    ...
    upstream backend {
        server 169.69.85.106:80;
        server 169.69.85.107:80;
    }
}

配置nginx反向代理

vim /etc/nginx/conf.d/default.conf

server {
    ...
    location / {
        proxy_pass http://backend;
        proxy_redirect default; 
        proxy_set_header Host $host;       
        proxy_set_header X-Real-IP $remote_addr; 
    }
}

配置keepalived

cd /etc/keepalived/    #keepalived配置文件在此目录下
cp -p keepalived.conf keepalived.conf.bak #复制一份配置文件作为备份

vim keepalived.conf     #vim普通模式下 dG删除全部内容 d:删除 G:光标跳转至最后一行

主机1 keepalived配置文件如下

global_defs {
   router_id 1
}
vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 1
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        169.69.85.5
    }
}

主机2 keepalived配置文件如下

global_defs {
   router_id 2
}
vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 1
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        169.69.85.5
    }
}

配置完毕记得重启服务

systemctl restart nginx keepalived  #重启服务
systemctl enable keepalived nginx #设置开机自启动

mysql

主从复制具体配置文件修改参考https://yukisrye.top/index.php/archives/16/

注:在测试安装时,数据库名称为test,则在安装论坛时必须填写与创建时相同数据库便于主从复制,IP地址填写为keepalived+lvs时生成的虚拟IP,用户推荐使用root用户

不要忘记给予用户全部权限

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456';   #给予你要登录的用户全部权限

在mysql主1和2上设置

yum install -y net-tools

vim  /etc/sysconfig/network-scripts/ifcfg-lo:0
#IP填写为在keepalived+lvs上设置的虚拟IP
DEVICE=lo:0
IPADDR=169.69.85.10
NETMASK=255.255.255.255
ONBOOT=yes

systemctl restart network

echo "route add -host 169.69.85.10 dev lo:0" >> /etc/rc.local

route add -host 169.69.85.10 dev lo:0

vim  /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2

sysctl -p

keepalived+lvs 1&2

两台服务器仅keepalived配置文件不同,其余步骤相同

yum install -y keepalived ipvsadm    #安装环境

systemctl enable keepalived  #设置开机自启动

cd /etc/keepalived/    #keepalived配置文件在此目录下
cp -p keepalived.conf keepalived.conf.bak #复制一份配置文件作为备份

修改keepalived+lvs1 配置文件内容

vim keepalived.conf     #vim普通模式下 dG删除全部内容 d:删除 G:光标跳转至最后一行

global_defs {
   router_id 1
}
vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 2
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        169.69.85.10
    }
}

virtual_server 169.69.85.10 3306 {
    delay_loop 15
    lb_algo rr
    lb_kind DR
    protocol TCP
    real_server 169.69.85.111 3306 {
    weight 1
    TCP_CHECK {
        connect_port 3306
        connect_timeout 3
        nb_get_retry 3
        delay_before_retry 4
        }
    }
    real_server 169.69.85.112 3306 {
    weight 2
    TCP_CHECK {
        connect_port 3306
        connect_timeout 3
        nb_get_retry 3
        delay_before_retry 4
        }
    }
}

修改keepalived+lvs2 配置文件内容

vim keepalived.conf     #vim普通模式下 dG删除全部内容 d:删除 G:光标跳转至最后一行

global_defs {
   router_id 2
}
vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 2
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        169.69.85.10
    }
}

virtual_server 169.69.85.10 3306 {
    delay_loop 15
    lb_algo rr
    lb_kind DR
    protocol TCP
    real_server 169.69.85.111 3306 {
    weight 1
    TCP_CHECK {
        connect_port 3306
        connect_timeout 3
        nb_get_retry 3
        delay_before_retry 4
        }
    }
    real_server 169.69.85.112 3306 {
    weight 2
    TCP_CHECK {
        connect_port 3306
        connect_timeout 3
        nb_get_retry 3
        delay_before_retry 4
        }
    }
}

重启服务使其生效

modprobe ip_vs #加载系统内核的服务模块
lsmod | grep ip_vs  #查看系统模块运行状态
echo "modprobe ip_vs" >> /etc/rc.local  #开机启动时加载ip_vs模块

systemctl restart keepalived

稍等一会再查看是否生效

ipvsadm -ln   #列出当前系统上所有IPVS服务的配置信息,包括虚拟服务器的配置和对应的真实服务器等

[root@localhost keepalived]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  169.69.85.10:3306 rr
  -> 169.69.85.111:3306           Route   1      0          0         
  -> 169.69.85.112:3306           Route   2      0          0 

如上则配置成功

测试

通过nginx+keepalived生成的虚拟IP进入安装界面,在安装程序中配置数据库时填写keepalived+lvs生成的虚拟IP连接到数据库,注意数据库名称、用户名及密码。
(如果没有图形界面,则用apache的IP进入安装界面并安装)

安装完毕后,断开一台nginx,一台主数据库,一台apache(任意搭配,并且都取配置时优先级高的)进行测试,若能正常进入论坛则表示成功

一定确保防火墙和selinux关闭

额外部分:

新增加的虚拟机已标记为 新:

redis

redis的配置需要以上部分成功才能进行

名称IP
apache1169.69.85.106
apache2169.69.85.107
新:redis+keepalived169.69.85.102
新:redis+keepalived2169.69.85.103
redis虚拟IP169.69.85.15

redis+keepalived1&2

安装配置keepalived,自行修改两台虚拟机的配置文件

yum install -y keepalived

cd /etc/keepalived/    #keepalived配置文件在此目录下
cp -p keepalived.conf keepalived.conf.bak #复制一份配置文件作为备份

vim keepalived.conf     #vim普通模式下 dG删除全部内容 d:删除 G:光标跳转至最后一行

global_defs {
   router_id 1
}
vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 3
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        169.69.85.15
    }
}

systemctl restart keepalived  #重启服务
ip a #查看虚拟IP是否生效

部署redis服务

wget      http://download.redis.io/releases/redis-2.8.13.tar.gz

tar -zxf redis-2.8.13.tar.gz

cd redis-2.8.13

make PREFIX=/usr/local/redis install

cp redis.conf /usr/local/redis/ 
vim /etc/profile
#在最后一行写上下面这一段
export PATH=/usr/local/redis/bin:$PATH

source /etc/profile

开启redis服务端方式一(不占用控制台):

nohup  /usr/local/redis/bin/redis-server  /usr/local/redis/redis.conf &

nohup: 忽略输入并把输出追加到"nohup.out"
#提示上面这个,不要中断

/usr/local/redis/bin/redis-cli  -p  6379 shutdown  #关闭服务命令

redis-cli ping  #执行命令验证服务是否开启,若显示 PONG 代表成功

开启redis服务端方式二:

cd /usr/local/redis/bin
./redis-server redis.conf 
#如果出现下面这玩意就说明成功了,不要关闭这个界面
                _._                                                  
           _.-``__ ''-._                                             
      _.-``    `.  `_.  ''-._           Redis 2.8.13 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._                                   
 (    '      ,       .-`  | `,    )     Running in stand alone mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
 |    `-._   `._    /     _.-'    |     PID: 67100
  `-._    `-._  `-./  _.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |           http://redis.io        
  `-._    `-._`-.__.-'_.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |                                  
  `-._    `-._`-.__.-'_.-'    _.-'                                   
      `-._    `-.__.-'    _.-'                                       
          `-._        _.-'                                           
              `-.__.-'         
              
redis-cli ping  #执行命令验证服务是否开启,若显示 PONG 代表成功

apache1&2

安装php扩展

wget https://github.com/phpredis/phpredis/archive/3.1.2.tar.gz 
tar -xzf 3.1.2.tar.gz

cd phpredis-3.1.2/
phpize

./configure  --with-php-config=/usr/bin/php-config  --enable-redis

make
make install

测试安装是否成功

vim /etc/php.ini
#加入下面这一行启用redis模块
extension=redis.so

systemctl restart httpd  #重启服务

vim /var/www/html/test.php  #写入以下内容
<?php
phpinfo();
?>

访问 https://你的IP/test.php ,出现php信息页面,在下面找到是否存在redis内容,如果存在,则表示redis安装成功

修改web服务配置文件/var/www/html/config/config_global.php以启用redis缓存

#找到如下内容
...
// --------------------------  CONFIG MEMORY  --------------------------- //
$_config['memory']['prefix'] = '9eSnVz_';
$_config['memory']['redis']['server'] = '';
$_config['memory']['redis']['port'] = 6379;
...

#在server一行添加你设置的redis的虚拟IP

测试

进入论坛网页,同时使用redis服务器进行如下操作

redis-cli
127.0.0.1:6379>KEYS *

#若存在以IOKLAN开头的key,则证明Redis成功缓存LAMP+Discuz网站信息数据

创建一个用户123456并登入,数据会存于mysql和redis缓存中,删除mysql中的数据以测试redis缓存是否生效
登录论坛创建时使用的数据库

MariaDB [(none)]> USE discuz;
MariaDB [discuz]> select * from pre_common_member; #查看是否存在新建的用户123456
MariaDB [discuz]> delete from pre_common_member where username='123456'; #删除用户123456的数据

刷新网页,登入用户123456,若能成功登录则表示redis配置成功

ISCSI

名称IP
新:ISCSI服务端169.69.85.101
nfs(ISCSI客户端)169.69.85.108
apache1169.69.85.106
apache2169.69.85.107

ISCSI服务端

yum -y install targetd targetcli mdadm  #安装环境

添加四块硬盘配置raid

mdadm -Cv /dev/md0 -n 3 -l 5 -x 1 /dev/sd[b-e]

mdadm -D /dev/md0
Update Time : Thu Apr 25 04:26:28 2024
      State : clean             #加载完毕仅会显示clean,显示degraded, recovering则未加载完毕
    Active Devices : 2
   Working Devices : 4
    Failed Devices : 0
     Spare Devices : 2
     
Rebuild Status : 91% complete    #找到这一行等待加载完毕

重启服务和添加开机自启动

systemctl start targetd
systemctl enable targetd

配置ISCSI

targetcli

/> cd backstores/block   #进入目录

/backstores/block> create disk0 /dev/md0   

/backstores/block> cd /

/> cd iscsi

/iscsi> create
Created target iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.a3ee4578d04c. #注意这个iqn.2003... 
Created TPG 1.
Global pref auto_add_default_portal=true
Created default portal listening on all IPs (0.0.0.0), port 3260.

iSCSI target名称是由系统自动生成的,这是一串用于描述共享资源的唯一字符串。系统在生成这个target名称后,还会在/iSCSI参数目录中创建一个与其字符串同名的新"目录"用来存放共享资源。

iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.a3ee4578d04c
#将target名称复制出来以便后面复制粘贴

/iscsi> cd iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.a3ee4578d04c/  

/iscsi/iqn.20....a3ee4578d04c>cd tpg1/luns
/iscsi/iqn.20...04c/tpg1/luns> create /backstores/block/disk0

/iscsi/iqn.20...04c/tpg1/luns> cd ..
/iscsi/iqn.20...04c/tpg1> cd acls 

/iscsi/iqn.20...04c/tpg1/acls> create iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.a3ee4578d04c   #填写你配置中生成的iSCSI target 名称

/iscsi/iqn.20...89e/tpg1/acls> cd ..
/iscsi/iqn.20...c284a89e/tpg1> cd portals/

/iscsi/iqn.20.../tpg1/portals> delete 0.0.0.0 3260  #删除原本存在的3260端口

/iscsi/iqn.20.../tpg1/portals> create 169.69.85.101       #本机IP

/iscsi/iqn.20.../tpg1/portals> cd /
/> ls          #在退出前检查一遍是否配置完毕

这是配置完毕后:
o- / ......................................................................................................................... [...]
o- backstores .............................................................................................................. [...]
| o- block .................................................................................................. [Storage Objects: 1]
| | o- disk0 ........................................................................... [/dev/md0 (10.0GiB) write-thru activated]
| | o- alua ................................................................................................... [ALUA Groups: 1]
| | o- default_tg_pt_gp ....................................................................... [ALUA state: Active/optimized]
| o- fileio ................................................................................................. [Storage Objects: 0]
| o- pscsi .................................................................................................. [Storage Objects: 0]
| o- ramdisk ................................................................................................ [Storage Objects: 0]
o- iscsi ............................................................................................................ [Targets: 1]
| o- iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.a3ee4578d04c ....................................................... [TPGs: 1]
| o- tpg1 ............................................................................................... [no-gen-acls, no-auth]
| o- acls .......................................................................................................... [ACLs: 1]
| | o- iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.a3ee4578d04c .......................................... [Mapped LUNs: 1]
| | o- mapped_lun0 ................................................................................. [lun0 block/disk0 (rw)]
| o- luns .......................................................................................................... [LUNs: 1]
| | o- lun0 ...................................................................... [block/disk0 (/dev/md0) (default_tg_pt_gp)]
| o- portals .................................................................................................... [Portals: 1]
| o- 169.69.85.100:3260 ............................................................................................... [OK]
o- loopback ......................................................................................................... [Targets: 0]

/> exit #退出要用exit,不要使用ctrl+c,不然不会保存配置
Global pref auto_save_on_exit=true
Configuration saved to /etc/target/saveconfig.json #出现绿色提示配置成功

systemctl restart targetd   #重启服务

nfs(ISCSI客户端)

安装环境并修改配置文件

yum install iscsi-initiator-utils  #安装环境

vim /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.a3ee4578d04c  #填写为你生成的ISCSI target名称

systemctl restart iscsid
systemctl enable iscsid   #重启服务并创建开机自启动

重启服务后运行如下操作

iscsiadm -m discovery -t st -p 169.69.85.100

-m discovery:目的是扫描并发现可用的存储资源
-t st:执行扫描操作的类型
-p 169.69.85.100:iSCSI服务端的IP地址

iscsiadm -m node -T iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.a3ee4578d04c -p 169.69.85.100 --login

-m node:将客户端所在主机作为一台节点服务器
-T iqn.2003-01.org.linux-iscsi.iscsi-server.x8664:sn.4fbfc7fa1e2d:要使用的存储资源 (填写之前服务端生成的target地址)
-p 169.69.85.100:对方iSCSI服务端的IP地址。
--login:进行登录验证

如果显示下面这一段,则表示创建成功

Logging in to [iface: default, target: iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.a3ee4578d04c, portal: 169.69.85.100,3260] (multiple)
Login to [iface: default, target: iqn.2003-01.org.linux-iscsi.localhost.x8664:sn.a3ee4578d04c, portal: 169.69.85.100,3260] successful.

成功后进行下一步

mkfs.xfs /dev/sdb  #创建 XFS 文件系统

如果之前论坛文件是放在/luntan下,新建一个/discuz将内容移动到里面

mkdir /discuz

mv luntan/* /discuz

mount /dev/sdb /discuz  #将/discuz设置为挂载点

vim /etc/exports   #修改配置文件 
/discuz 169.69.85.*(rw,no_root_squash,sync) 
exportfs  -r  #重读配置文件

apache1&2

mount 169.69.85.100:/discuz /var/www/html 

注:
umount 169.69.85.100:/luntan /var/www/html  #如果之前挂载的是/luntan,记得取消挂载  

测试

登录apache服务器IP进行验证

最后修改:2024 年 04 月 26 日
如果觉得我的文章对你有用,请随意赞赏