搭建高可用数据库分布式存储论坛框架:lnap+heartbeat+drbd+Discuz整体架构

三台主机

 

server11     nginx(80)+php(9000)+Discuz
server12,server13        heartbeat+drbd+mysql

 

l 用户访问server的主机名,进入论坛

l server11 的论坛数据分布式存储在server12,13的drbd上。

l server12,server13对数据库用heartbeat实现高可用,

 

sever11:172.25.88.11

sever12:172.25.88.12

sever13:172.25.88.13

vip:172.25.88.100

 


具体配置

server11

nginx

源码安装nginx

从官网下载源码包,解压。

tarzxf nginx-1.10.3.tar.gz

cdnginx-1.10.3

vimauto/cc/gcc
179 #CFLAGS="$CFLAGS -g"

  

注释179行,去掉debug模式编译,编译以后程序只有几百k哦

搭建高可用数据库分布式存储论坛_heartbeat



vim src/core/nginx.h
14 #define NGINX_VER         "nginx/"      

 

为了安全,这样编译后外界无法获取程序的版本号

搭建高可用数据库分布式存储论坛_Discu_02


 

 

开始编译~~~~~~~

 

cdnginx-1.10.3
./configure --prefix=/usr/local/lnmp/nginx --with-http_ssl_module--with-http_sub_module

安装包解决依赖性。。。。。


yum install gcc -y
yum install pcre-devel -y
yum install openssl-devel -y
//yum install zlib-devel -y



make && make install

为了方便实用nginx,创建软链接,也就是快捷方式~
ln -s /usr/local/lnmp/nginx/sbin/nginx /usr/local/bin/


因为之前在auto/cc/gcc,去掉debug模式编译,编译以后程序就是981k!

cd /usr/local/nginx/
    dh -sh

981K

 

搭建高可用数据库分布式存储论坛_heartbeat_03


 

 

配置nginx
useradd -u 900 -s /sbin/nologin nginx  
添加nginx用户

搭建高可用数据库分布式存储论坛_Discu_04



搭建高可用数据库分布式存储论坛_Discu_05


因为我的server1是4核cpu,所以配置文件应该这样写~


搭建高可用数据库分布式存储论坛_heartbeat_06




vim   /usr/local/lnmp/nginx/conf/nginx.conf

 

user  nginx nginx;
worker_processes  auto;    
指定工作衍生进程数
worker_cpu_affinity 0001 0010 0100 1000;

events {
    use epoll;     linux内核模型,使用高效网络I/O模型
    worker_connections  1024;
}

        location ~ \.php$ {
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
           fastcgi_param  SCRIPT_FILENAME /scripts$fastcgi_script_name;
            include        fastcgi.conf;
        }
 

检验

检测配置文件并启动nginx,可以看到nginx已经在80端口工作啦!

 

搭建高可用数据库分布式存储论坛_Discu_07


 

ps ax可以观察当前nginx进程,没错就是4个

 

搭建高可用数据库分布式存储论坛_Discu_08


 

在真机浏览器访问server11的IP

 

搭建高可用数据库分布式存储论坛_heartbeat_09


 

外界看不到我的nginx版本~~~

 



搭建高可用数据库分布式存储论坛_heartbeat_10



 

说明

 

nginx常用命令


 nginx -t   
检验nginx配置
 nginx      开启nginx
 nginx -s reload   重载nginx
 nginx -s stop     停止nginx



upstream
反向代理
epoll     异步非阻塞   快

7层支持端口映射??4??

内核最大文件描述符:

 

搭建高可用数据库分布式存储论坛_Discu_11


 

搭建高可用数据库分布式存储论坛_Discu_12




php

 

tarjxf php-5.6.20.tar.bz2

 


./configure --prefix=/usr/local/lnmp/php--with-config-file-path=/usr/local/lnmp/php/etc --with-openssl --with-snmp --with-gd --with-zlib --with-curl --with-libxml-dir --with-png-dir --with-jpeg-dir --with-freetype-dir --without-pear --with-gettext --with-gmp --enable-inline-optimization --enable-soap --enable-ftp --enable-sockets --enable-mbstring --enable-fpm --with-fpm-user=nginx --with-fpm-group=nginx --with-mcrypt --with-mhash --with-mysql --with-mysqli --with-pdo-mysql --enable-mysqlnd

装包解决依赖性~

rpm   -ivh  libmcrypt-2.5.8-9.el6.x86_64.rpm       libmcrypt-devel-2.5.8-9.el6.x86_64.rpm
   rpm -ivh re2c-0.13.5-1.el6.x86_64.rpm

   yum provides libjpeg     不知道软件包的时候可以这样查询
   yum provides libx /*easy.h


yum install libxml2-devel -y
yum install libcurl-devel -y
yum install libpng-devel-1.2.49-1.el6_2.x86_64 -y
yum install libjpeg-turbo-devel-1.2.1-1.el6.x86_64 -y
yum install freetype-devel -y
yum install gmp-devel -y
yum install net-snmp-devel -y

make && make install


配置php

cd /mnt/php-5.6.20
cp php.ini-production /usr/local/lnmp/php/etc/php.ini
cd /usr/local/lnmp/php/etc/
cp php-fpm.conf.default php-fpm.conf
cd /mnt/php-5.6.20/sapi/fpm/


cp init.d.php-fpm /etc/init.d/php-fpm
chmod +x /etc/init.d/php-fpm           


vim /etc/init.d/php-fpm    
查看php启动脚本


cd /usr/local/lnmp/php/etc/

vim php-fpm.conf
 25 pid = run/php-fpm.pid


连接php和数据库

vimphp.ini


1001 pdo_mysql.default_socket=/usr/local/lnmp/mysql/data/mysql.sock
1150 mysql.default_socket =/usr/local/lnmp/mysql/data/mysql.sock
1209 mysqli.default_socket = /usr/local/lnmp/mysql/data/mysql.sock



/etc/init.d/php-fpm start

 

检验phpnginx是否连接成功


vim /usr/local/nginx/conf/nginx.conf

51             index  index.php index.html index.htm;  

      让index.php作为默认发布目录

 71         location ~ \.php$ {
 72             root           html;
 73             fastcgi_pass   127.0.0.1:9000;
 74             fastcgi_index  index.php;
 75             fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
 76             include        fastcgi.conf;
 77         }



vim /usr/local/lnmp/nginx/html/index.php

<?php
phpinfo()
?>

nginx -s reload

结果:在浏览器访问172.25.88.11出现phpinfo页面

 

server12,13

 

源码安装drbd,可以查看链接

 

http://12059878.blog.51cto.com/12049878/1908395

 

源码安装mysql

cmake -DCMAKE_INSTALL_PREFIX=/usr/local/lnmp/mysql\        安装目录
-DMYSQL_DATADIR=/usr/local/lnmp/mysql/data \         数据库存放目录
-DMYSQL_UNIX_ADDR=/usr/local/lnmp/mysql/data/mysql.sock \   Unix socket 文件路径
-DWITH_MYISAM_STORAGE_ENGINE=1 \              安装 myisam 存储引擎
-DWITH_INNOBASE_STORAGE_ENGINE=1 \            安装 innodb 存储引擎
-DWITH_PARTITION_STORAGE_ENGINE=1 \              安装数据库分区
-DENABLED_LOCAL_INFILE=1 \                允许从本地导入数据
-DDEFAULT_CHARSET=utf8 \               使用 utf8 字符
-DDEFAULT_COLLATION=utf8_general_ci \            校验字符
-DEXTRA_CHARSETS=all \                    安装所有扩展字符集
-DWITH_BOOST=boost/boost_1_59_0/

装包解决依赖性

 

yum install cmake-2.8.12.2-4.el6.x86_64.rpm


rm -rf CMakeCache.txt
:     每yum一次就要删除配置文件

yum install -y ncurses-devel*
yum install gcc-c++ -y

//yum install bison -y

 

 

 

根据提示信息,装包解决依赖性

 

1.安装相应的devel包

 

 

搭建高可用数据库分布式存储论坛_Discu_13


 

2。简单装包

 

搭建高可用数据库分布式存储论坛_heartbeat_14


 

3.不知道某个依赖关系在哪个安装包中,可以使用 provides */ 名称来查找

 

搭建高可用数据库分布式存储论坛_Discu_15


 

搭建高可用数据库分布式存储论坛_heartbeat_16



make && make install

漫长的等待,有进度条提示,还算人性化嗷。。。

 

配置mysql

 

chownmysql data/ -R    mysql用户有写权限


groupadd -g 27 mysql
useradd -u 27 -g 27 mysql -s /bin/bash -d /usr/local/lnmp/mysql/data/

 

说明
1.
保证与之前的mysql没有冲突,本机只有一个mysql lib包
[root@server11 support-files]# rpm -qa |grep mysql
mysql-libs-5.1.71-1.el6.x86_64

 

2.添加环境变量,在任何路径下都可以使用/usr/local/lnmp/mysql/bin/下的命令
vim ~/.bash_profile
PATH=$PATH:$HOME/bin:/usr/local/lnmp/mysql/bin/

 

或者可以


ln -s  /usr/local/lnmp/mysql/bin/mysqld/usr/local/bin/
ln -s  /usr/local/lnmp/mysql/bin/mysql/usr/local/bin/


3.
查看mysqld的参数
mysqld --help --verbose

cd /usr/local/lnmp/mysql/support-files
cp my-default.cnf /etc/my.cnf
cp mysql.server /etc/init.d/mysqld




mysql的初始化


查看mysqld的参数

mysqld --help --verbose

 


mysqld --initialize --user=mysql --basedir=/usr/local/lnmp/mysql/--datadir=/usr/local/lnmp/mysql/data

 

搭建高可用数据库分布式存储论坛_Discu_17



ifHEGE8tqKZ*q  
出现初始密码

 


/etc/init.d/mysqld start

搭建高可用数据库分布式存储论坛_Discu_18


 

说明:初始化时可能会报错~

 



搭建高可用数据库分布式存储论坛_heartbeat_19




 

初始化时,要保证数据目录为空

 

搭建高可用数据库分布式存储论坛_Discu_20


 

 


[root@server12 mysql]# which mysql
/usr/local/bin/mysql


mysql -p

进入数据库,更改数据库密码后,就能进行正常工作了

 

搭建高可用数据库分布式存储论坛_heartbeat_21




alter user root@localhost identified by 'westos+007';
show databases;

 


将数据库的数据存储到drbd

 

1.移动数据库的数据到drbd

 

搭建高可用数据库分布式存储论坛_Discu_22


 

cd/etc/ha.d/

 

vimharesources

 

server12.lalala.comIPaddr::172.25.88.100/24/eth0 drbddisk::lalala Filesystem::/dev/drbd1::/usr/local/lnmp/mysql/data::ext4mysqld

 

/usr/local/lnmp/mysql/data     是数据库存放数据的位置

 

搭建高可用数据库分布式存储论坛_heartbeat_23


 

vimha.f           按照惯例配置

 

特别要注意        253行的lib64

 

搭建高可用数据库分布式存储论坛_Discu_24


 

 

 

论坛的部署

server11


unzip Discuz_X3.2_SC_UTF8.zip -d /usr/local/nginx/html/
cd /usr/local/nginx/html

mv upload/ bbs

chmod 777 data/ -R
chmod 777 config -R
chmod 777 uc_* -R

cd lnmp/mysql/


chmod 755 data/


 

真机在游览器访问172.25.88.11/bbs

 

数据库服务器名填写vip    server12,13上的)


搭建高可用数据库分布式存储论坛_heartbeat_25




 

出现错误,这是因为数据库没有添加远程用户!!

 

搭建高可用数据库分布式存储论坛_Discu_26


 

 

 

创建远程数据库用户

 

在数据库中创建远程用户,并给予权限,flush

CREATE USER root@’%’ identified by ‘westos’;

grant all privileges on discus.* to root@’%’;

 

搭建高可用数据库分布式存储论坛_heartbeat_27


 

搭建高可用数据库分布式存储论坛_Discu_28


 

 

最后一步,进入管理员页面,会有错误提示

 

搭建高可用数据库分布式存储论坛_heartbeat_29


 

根据提示

cd/usr/local/lnmp/nginx/html/bbs/install/
rm -rf index.php

 

搭建高可用数据库分布式存储论坛_Discu_30


 

管理员页面就可以正常工作啦~



 

成果检验


启动heartbeat前保证server12,server13:

drbd均为secondary模式

mysql均为关闭模式

 

/etc/init.d/heartbeart   start

 

IP,drbd,mysql全部启动了呢~~

 

搭建高可用数据库分布式存储论坛_Discu_31


 

 

 

传说中的接管~takeover

 

搭建高可用数据库分布式存储论坛_Discu_32


 

创建新用户

 

搭建高可用数据库分布式存储论坛_heartbeat_33


 

 

在后台数据库中的pre_commom_member中看到我的用户们~~~

 

搭建高可用数据库分布式存储论坛_Discu_34


 

在真机浏览器输入访问论坛,发个帖,让新用户评论一下哟~

 

搭建高可用数据库分布式存储论坛_heartbeat_35


 

在后台数据库的pre_forum_post    表中可以查看到,搭建成功哈哈哈~~~

 

搭建高可用数据库分布式存储论坛_Discu_36