前言:
本文基于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 1 | 169.69.85.104 |
nginx+keepalived 2 | 169.69.85.105 |
apache1 | 169.69.85.106 |
apache2 | 169.69.85.107 |
nfs | 169.69.85.108 |
lvs+keepalived1 | 169.69.85.109 |
lvs+keepalived2 | 169.69.85.110 |
mysqlmaster1 | 169.69.85.111 |
mysqlmaster2 | 169.69.85.112 |
mysqlslave1 | 169.69.85.113 |
mysqlslave2 | 169.69.85.114 |
虚拟IP | 169.69.85.5 |
mysql虚拟IP | 169.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 |
---|---|
apache1 | 169.69.85.106 |
apache2 | 169.69.85.107 |
新:redis+keepalived | 169.69.85.102 |
新:redis+keepalived2 | 169.69.85.103 |
redis虚拟IP | 169.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 |
apache1 | 169.69.85.106 |
apache2 | 169.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进行验证