部署社交網站- MYSQL主從 與 MFS 文件系統
公司的社交網站采用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
## 查看掛載情況
部署社交網站- MYSQL主從 與 MFS 文件系統