畢業設計準備篇一——環境搭建
經過四年的學習和實戰經驗,打算做一個可以融合大多數學習的知識的畢業設計,所以就給自己的畢設取名:(分佈式)桌面化多媒體網站系統。系統採用的構架如圖1所示。
圖1 系統架構
其中數據庫集羣目前採用mysql集羣,爲什麼呢,因爲目前mysql使用率還是很大的,而且mysql官方文檔詳細,最大的原因是因爲自己筆記本配置不夠高,不能搭建oracle集羣。業務集羣和WEB集羣使用dubbo來實現遠程調用及服務治理。
本篇文檔的主要內容是記錄畢設準備工作——環境搭建。
環境搭建
1、Linux環境配置
我使用的Linux版本是Ubuntu 14.10,安裝在自己電腦的虛擬機中,分配了三個網卡。每個虛擬機和實體機都屬於同一個局域網,同時使用虛擬機的內部網卡構建內部虛擬網絡。如圖2所示。用戶使用SSH證書登錄(略)。
圖2 主機拓撲圖
2、Memcached
memcached使用的是官方下載的源碼包,然後進行編譯安裝。獲取最新的源碼包:wget http://memcached.org/latest。
解壓:tar -zxvf latest
安裝依賴:sudo apt-get install gcc
sudo apt-get install icc-profiles
sudo apt-get install sasl2-bin
wget https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz
安裝:./configure && make && make test && sudo make install
啓動:/usr/local/bin/memcached -d -m 1024 -u root -p 11211 -P /tmp/memcached.pid
爲了讓memcache開機啓動,爲它寫啓動腳本,腳本內容如下:
#!/bin/sh
#
# memcached: MemCached ROOT
#
# chkconfig: - 90 25
# description: MemCached ROOT
#
# Source function library.
#. /etc/rc.d/init.d/functions
#. /etc/sysconfig/network
start()
{
echo -n $"Starting memcached: "
/usr/local/bin/memcached -u root -d -m 4096 -p 11211
echo
}
stop()
{
echo -n $"Shutting down memcached: "
kill -9 `pgrep memcached`
echo
}
[ -f /usr/local/bin/memcached ] || exit 0
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
restart|reload)
stop
start
;;
condrestart)
stop
start
;;
*)
echo $"Usage: $0 {start|stop|restart|reload|condrestart}"
exit 1
esac
exit 0
3、Zookeeper
下載:wget http://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz
解壓:tar -zxvf zookeeper-3.4.6.tar.gz
修改配置:mv zoo_sample.cfg zoo.cfg
vim zoo.cfg
配置內容爲:
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/home/zookeeper/data
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
4、服務管理器安裝
安裝:sudo apt-get install chkconfig
sudo apt-get install chkrunlevel
sudo dpkg -i chkconfig_11.0-79.1-2_all.deb
sudo ln -s /usr/lib/insserv/insserv /sbin/insserv
添加服務:
sudo chkconfig --add memcached
sudo chkconfig --level 2345 memcached on
chkconfig --list memcached
sudo chkconfig --add zookeeper
5、svn服務器安裝
安裝:sudo apt-get install subversion
sudo apt-get install apache2-utils
sudo apt-get install apache2
搭建工作:
sudo adduser svnuser
sudo addgroup subversion
sudo addgroup svnuser subversion
sudo mkdir /home/svn
sudo apt-get install libapache2-svn
sudo svnadmin create /home/svn/studio
svnserve -d -r /home/svn/studio/
sudo vim /etc/apache2/mods-available/dav_svn.conf
sudo htpasswd -c /home/svn/project/conf/passwd wms
sudo chown -R www-data:www-data /home/svn/studio/
sudo make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /home/svn/apache2_svn_ssl.pem
sudo a2enmod ssl
6、MySQL集羣
集羣主要是配置文件很複雜,搞了很久才搞定。一下是配置文件:
Config.ini
#
# Configuration file for MyCluster
#
[NDB_MGMD DEFAULT]
Portnumber=1186
[NDB_MGMD]
NodeId=1
HostName=192.168.56.102
DataDir=/home/data/mysql-cluster/1/
Portnumber=1186
[TCP DEFAULT]
SendBufferMemory=4M
ReceiveBufferMemory=4M
[NDBD DEFAULT]
BackupMaxWriteSize=1M
BackupDataBufferSize=16M
BackupLogBufferSize=4M
BackupMemory=20M
BackupReportFrequency=10
MemReportFrequency=30
LogLevelStartup=15
LogLevelShutdown=15
LogLevelCheckpoint=8
LogLevelNodeRestart=15
DataMemory=1M
IndexMemory=1M
MaxNoOfTables=4096
MaxNoOfTriggers=3500
NoOfReplicas=2
StringMemory=25
DiskPageBufferMemory=64M
SharedGlobalMemory=20M
LongMessageBuffer=32M
MaxNoOfConcurrentTransactions=16384
BatchSizePerLocalScan=512
FragmentLogFileSize=64M
NoOfFragmentLogFiles=16
RedoBuffer=32M
MaxNoOfExecutionThreads=2
StopOnError=false
LockPagesInMainMemory=1
TimeBetweenEpochsTimeout=32000
TimeBetweenWatchdogCheckInitial=60000
TransactionInactiveTimeout=60000
HeartbeatIntervalDbDb=15000
HeartbeatIntervalDbApi=15000
[NDBD]
NodeId=21
HostName=192.168.56.102
DataDir=/home/data/mysql-cluster/21/
[NDBD]
NodeId=22
HostName=192.168.56.103
DataDir=/home/data/mysql-cluster/22/
[MYSQLD DEFAULT]
[MYSQLD]
NodeId=41
HostName=192.168.56.102
[MYSQLD]
NodeId=42
HostName=192.168.56.103
[API]
NodeId=61
HostName=192.168.56.102
[API]
NodeId=62
HostName=192.168.56.103
My.cnf
[mysqld]
#不再進行反解析(ip不反解成域名),這樣可以加快數據庫的反應時間
skip-name-resolve
log-error=mysqld.42.err
datadir="/home/data/mysql-cluster/42/"
tmpdir="/home/data/mysql-cluster/42/tmp"
basedir="/home/mysql/mysql-cluster/bin/"
port=3306
ndbcluster=on
ndb-nodeid=42
ndb-connectstring=127.0.0.1:1186,
socket="/home/data/mysql-cluster/42/mysql.socket"
解決不能通過mysql.sock連接MySQL問題 這個問題主要提示是,不能通過 '/tmp/mysql.sock'連到服務器,而php標準配置正是用過'/tmp/mysql.sock',但是一些mysql 安裝方法 將 mysql.sock放在/var/lib/mysql.sock或者其他的什麼地方,用這樣的方法:
ln -s /var/lib/mysql /mysql .sock /tmp/mysql.sock
成功了,就是這樣ln -s /var/lib/mysql /mysql .sock /tmp/mysql.sock
/home/mysql/mysql-cluster/bin/ndb_mgmd --initial --ndb-nodeid=1 --config-dir=/home/data/mysql-cluster/1 --config-file=/home/data/mysql-cluster/1/config.ini
/home/mysql/mysql-cluster/bin/ndbd --ndb-nodeid=22 --ndb-connectstring=192.168.56.102:1186
/home/mysql/mysql-cluster/scripts/mysql_install_db --user=wms --datadir=/home/data/mysql-cluster/42/
/home/mysql/mysql-cluster/bin/mysqld_safe --defaults-file=/home/data/mysql-cluster/41/my.cnf --basedir=/home/mysql/mysql-cluster/ --log-error=/home/data/mysql-cluster/41/error.log --user=wms &