案例概述
公司的社交网站采用PHP语言开发,为了管理PHP程序员开发的代码,上级领导要求搭建SVN服务器进行版本控制。社交网站的第一个版本部署在LNMP平台之上,前端为 Nginx服务器,通过 fastcgi协议访问后端的PHP服务器。为了保证数据安全,
要求搭建 MYSQL数据库主从集群。
社交网站项目包含用户的相册功能,允许用户上传照片,上传照片需要使用共享
存储来存放。针对共享存储可用的开源方案有很多,如MFS、 FastDFS等。公
使用MFS分布式文件系统来实现,并将MFS挂载在PHP服务器的相关目录司决定
案例实施
根据公司的需求,实施过程大致分为以下步骤
部署SVN服务器,为PHP程序员创建repo目录的访问账户,通知程序员可
以导入代码
部署 MYSQL主从服务器,根据PHP程序员的要求创建数据库与表
部署 Nginx服务器
使用keepalived对Nginx服务器做热备
部署PHP服务器
部署MFS,将MFS文件系统挂载在前端PHP服务器的相关目录下
通知上线部署人员可以发布上线。
保证数据库服务、PHP服务、 Nginx服务依次启动,并通知测试人员开始测试,
网站维护人员检查 Nginx、PHP与数据库服务器是否正常工作。
本篇将部署 MYSQL主从服务 与 MFS文件系统
MYSQL 主从服务 部署
主服务器 (IP 192.168.100.105)
从服务器 (IP 192.168.100.106)
mysql 5.7 安装
yum install ncurses ncurses-devel bison cmake -y ##安装依赖包
useradd -s /sbin/nologin mysql
tar zxvf mysql-5.7.17.tar.gz -C
tar zxvf boost_1_59_0.tar.gz -C /usr/local/
cd /usr/local/
mv boost_1_59_0 boost
cd mysql-5.7.17/
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql ## 指定安装目录
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock
-DSYSCONFDIR=/etc ##指定初始化参数文件目录
-DSYSTEMD_PID_DIR=/usr/local/mysql
-DDEFAULT_CHARSET=utf8 ##指定默认字符集
-DDEFAULT_COLLATION=utf8_general_ci #默认使用的字符集校对规则
-DWITH_INNOBASE_STORAGE_ENGINE=1
-DWITH_ARCHIVE_STORAGE_ENGINE=1
-DWITH_BLACKHOLE_STORAGE_ENGINE=1
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1
-DMYSQL_DATADIR=/usr/local/mysql/data
-DWITH_BOOST=/usr/local/boost ##指定Boost库的位置,5.7版本必须添加
-DWITH_SYSTEMD=1
!!注意:如果在CMAKE的过程中有报错,当报错解决后,需要把源码目录中的CMakeCache.txt文件删除,然后再重新CMAKE,否则错误依旧
make && make install ##安装过程时间较长
chown -R mysql.mysql /usr/local/mysql/ ##权限设置
vi /etc/my.cnf
[client]
port = 3306
default-character-set=utf8
socket = /usr/local/mysql/mysql.sock
[mysql]
port = 3306
default-character-set=utf8
socket = /usr/local/mysql/mysql.sock
[mysqld]
user = mysql ##用户
basedir = /usr/local/mysql ##基础目录
datadir = /usr/local/mysql/data ##数据目录
port = 3306 ##端口
character_set_server=utf8 ##服务语言设置
pid-file = /usr/local/mysql/mysqld.pid ##pid文件位置
socket = /usr/local/mysql/mysql.sock ##socket文件位置
server-id = 1 ##服务ID
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES
chown mysql:mysql /etc/my.cnf
echo 'PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile
echo 'export PATH' >> /etc/profile
source /etc/profile
## 方便使用mysql命令,设置环境变量
/usr/local/mysql/bin/mysqld
--initialize-insecure
--user=mysql
--basedir=/usr/local/mysql
--datadir=/usr/local/mysql/data
## 初始化数据库
cp usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
systemctl daemon-reload
systemctl start mysqld
netstat -anpt | grep 3306
## 3306端口开启 服务开启成功
systemctl enable mysqld
mysqladmin -u root -p password "abc123" 给root账户设置密码为abc123
mysql主从复制
在主 和 从mysql服务器上
vim /etc/my.cnf
[mysqld]
binlog-ignore-db=mysql,information_schema
character_set_server=utf8
log_bin=mysql_bin
server_id=1 ## 主从服务器的 server_id 不相同
log_slave_updates=true
sync_binlog=1
auto_increment_increment=2
auto_increment_offset=1
systemctl restart mysqld
在 主MYSQL上 为 从服务器授予权限
mysql -u root -p
grant replication slave on *.* to 'replication'@'192.168.100.%' identified by '123456';
show master status;
+-------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-bin.000002 | 335 | | |
+-------------------+----------+--------------+------------------+
在从服务器上
mysql -u root -p
change master to master_host='192.168.100.105',master_user='replication',master_password='123456',master_log_file='mysql_bin.000002',master_log_pos=335;
start slave;
show slave status \G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
## 出现这两条YES 则说明 MYSQL主从复制完成
MFS 文件系统部署
MFS Master (IP 192.168.100.107)
MFS MetaLogger (IP 192.168.100.108)
MFS Chunk1 (IP 192.168.100.109)
MFS Chunk2 (IP 192.168.100.110)
MFS Master
yum install zlib-devel gcc gcc-c++ male -y
useradd -s /sbin/nologin mfs
tar xzvf mfs-1.6.27-5.tar.gz
cd mfs-1.6.27-5
./configure
--prefix=/usr/local/mfs ##安装目录
--with-default-user=mfs ##默认用户
--with-default-group=mfs ##默认用户基本组
--disable-mfschunkserver ##不启动节点服务器
--disable-mfsmount ##不启动mount服务器
make && make install
cd /usr/local/mfs/etc/mfs/
cp mfsmaster.cfg.dist mfsmaster.cfg
cp mfsexports.cfg.dist mfsexports.cfg ##挂载权限
cp mfstopology.cfg.dist mfstopology.cfg ##架构感知
cd/usr/local/mfs/var/mfs
cp metadata.mfs.empty metadata.mfs ##防断电
/usr/local/mfs/sbin/mfsmaster start ##启动服务
/usr/local/mfs/sbin/mfsmaster -s ##停止服务用这条命令
MFS MetaLogger
yum install zlib-devel gcc gcc-c++ male -y
useradd -s /sbin/nologin mfs
tar xzvf mfs-1.6.27-5.tar.gz
cd mfs-1.6.27-5
./configure
--prefix=/usr/local/mfs ##安装目录
--with-default-user=mfs ##默认用户
--with-default-group=mfs ##默认用户基本组
--disable-mfschunkserver ##不启动节点服务器
--disable-mfsmount ##不启动mount服务器
make && make install
cd /usr/local/mfs/etc/mfs/
cp mfsmetalogger.cfg.dist mfsmetalogger.cfg
vi mfsmetalogger.cfg
MASTER_HOST = 192.168.100.107
/usr/local/mfs/sbin/mfsmetalogger start ##启动服务
/usr/local/mfs/sbin/mfsmetalogger -s ##停止服务用这条命令
MFS Chunk
两台Chunk服务器的配置相同
yum install zlib-devel gcc gcc-c++ male -y
useradd -s /sbin/nologin mfs
tar xzvf mfs-1.6.27-5.tar.gz
cd mfs-1.6.27-5
./configure
--prefix=/usr/local/mfs ##安装目录
--with-default-user=mfs ##默认用户
--with-default-group=mfs ##默认用户基本组
--disable-mfsmaster ##不启动主服务器
--disable-mfsmount ##不启动mount服务器
make && make install
cd /usr/local/mfs/etc/mfs/
cp mfschunkserver.cfg.dist mfschunkserver.cfg
cp mfshdd.cfg.dist mfshdd.cfg
vim mfschunkserver.cfg
MASTER_HOST = 192.168.100.107
vim mfshdd.cfg
添加一行
/data
mkdir /data
chown -R mfs:mfs /data
/usr/local/mfs/sbin/mfschunkserver start ##启动服务
/usr/local/mfs/sbin/mfschunkserver -s ##停止服务用这条命令
MFS 客户端
由于要将MFS 文件系统挂载到 前端PHP 服务器上 ,作为用户上传图片的存储, MFS客户端需要在PHP服务器上安装
安装FUSE,MFS客户端依赖于FUSE
tar xzvf fuse-2.9.2.tar.gz
cd fuse-2.9.2
./configure
make && make install
vi /etc/profile
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
## 设置环境变量
source /etc/profile
安装mfs客户端
yum install zlib-devel gcc gcc-c++ male -y
useradd -s /sbin/nologin mfs
tar xzvf mfs-1.6.27-5.tar.gz
cd mfs-1.6.27-5
./configure
--prefix=/usr/local/mfs ##安装目录
--with-default-user=mfs ##默认用户
--with-default-group=mfs ##默认用户基本组
--disable-mfschunkserver ##不启动节点服务器
--enable-mfsmount ##启动mount服务器
make && make install
modprobe fuse ##加载fuse模块到内核
/usr/local/mfs/bin/mfsmount /var/www/html/webphp/uploads/photos -H 192.168.100.107 ##将MFS 文件系统 挂载到 PHP服务器上
df -hT
## 查看挂载情况
转载于:https://blog.51cto.com/13625924/2151670