kodbox 私有网盘高可用部署

  • 这里介绍部署3台程序服务器做集群,再配置一台前端服务器做代理转发。3台程序服务器都是一样的系统环境(建议系统使用同一个集成环境镜像来完成安装)
  • 系统环境要求为
yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh
  • 然后登陆面板安装Nginx1.16 + MySQL5.7 + PHP7.3 + redis.
    • PHP需要安装redis扩展
    • PHP禁用函数里,删除shell_exec、exec
  • 集群部署具体过程主要分5个步骤说明
    • 一 MySQL主从架构
    • 二 redis集群
    • 三 NFS共享目录
    • 四 kodbox部署和配置
    • 五 前端服务器使用Nginx反向代理进行转发
一 MySQL主从架构
  • 参考文章
    选择一主多从模式部署
  • 准备三台服务器,都安装了MySQL5.7.
    • 192.168.1.194(主)开放3306端口
    • 192.168.1.115(从)
    • 192.168.1.223(从)
  • 实现步骤:
1. 配置master主服务器
  • 在配置文件(/etc/my.cnf)加入如下值
server-id=1      //配置server-id,让主服务器有唯一ID号   
log-bin=mysql-bin  //打开Mysql日志,日志格式为二进制   
skip-name-resolve  //关闭名称解析,(非必须)
2. 创建复制帐号slave
  • 在 Master 的数据库中建立一个备份帐户:
    每个 slave 使用标准的 MySQL 用户名和密码连接 master 。进行复制操作的用户会授予 REPLICATION SLAVE 权限。
grant replication slave,replication client on *.* to slave@'192.168.%.%' identified by 'kod';
3.查看主服务器状态
  • 在 Master 的数据库执行命令查看主服务器二进制日志状态及位置号。
show master status
4 配置slave从服务器
  • 对 slave 进行配置,打开中继日志,指定唯一servr ID,设置只读权限。在配置文件加入如下值:
1.server-id=2 //配置server-id,让从服务器有唯一ID号   
2.relay_log = mysql-relay-bin //打开Mysql日志,日志格式为二进制   
3.read_only = 1 //设置只读权限   
4.log_bin = mysql-bin //开启从服务器二进制日志   
5.log_slave_updates = 1 //使得更新的数据写进二进制日志中
  • 另外一台从服务器操作类似,省略。
5 启动从服务器复制线程
  • 让 slave 连接 master ,并开始重做 master 二进制日志中的事件。master_log_filemaster_log_pos 由上面步骤中show master status 查看,在从服务器MySQL执行以下命令:
1.mysql> change master to master_host='192.168.1.194',   
2.>master_user='slave', >master_password='kod',   
3.>master_log_file='mysql-bin.000001',   
4.>master_log_pos=413;
  • 另外一台从服务器操作类似,省略。
6 查看从服务器状态
  • 可使用SHOW SLAVE STATUS\G;查看从服务器状态,也可用show processlist \G;查看当前复制状态:
Slave_IO_Running: Yes //IO线程正常运行 
Slave_SQL_Running: Yes //SQL线程正常运行
二 redis集群
  • 参考文章
  • 环境准备:
    三台机器,分别开放两个redis服务端口和一个客户端通讯端口
192.168.1.194 端口:7001,7002 17001 
192.168.1.115 端口:7003,7004 17003 
192.168.1.223 端口:7005,7006 17005
  • 修改配置文件:
    192.168.1.194
1.mkdir /www/server/redis/cluster   
2.cp /www/server/redis/redis.conf /www/server/redis/cluster/redis_7001.conf   
3.cp /www/server/redis/redis.conf /www/server/redis/cluster/redis_7002.conf   
4.chown -R redis:redis /www/server/redis # mkdir -p /tmp/{redis_7001,redis_7002} && chown -R redis:redis /tmp/{redis_7001,redis_7002}  

1.# vim /www/server/redis/cluster/redis_7001.conf   
2.bind 192.168.1.194 port 7001   
3.daemonize yes   
4.pidfile "/var/run/redis_7001.pid"   
5.logfile "/www/server/redis/cluster/redis_7001.log"   
6.dir "/tmp/redis_7001"   
7.masterauth 123456   
8.requirepass 123456   
9.appendonly yes   
10.cluster-enabled yes   
11.cluster-config-file nodes_7001.conf cluster-node-timeout 15000   

12.# vim /www/server/redis/cluster/redis_7002.conf   
13.bind 192.168.1.194 port 7002   
14.daemonize yes 
15.pidfile "/var/run/redis_7002.pid"   
16.logfile "/www/server/redis/cluster/redis_7002.log"   
17.dir "/tmp/redis_7002"   
18.masterauth "123456"   
19.requirepass "123456"   
20.appendonly yes   
21.cluster-enabled yes   
22.cluster-config-file nodes_7002.conf   
23.cluster-node-timeout 15000

其它两台机器配置与192.168.1.194配置类似,只是端口不同,此处省略

  • 启动redis服务和查看日志:
1./www/server/redis/src/redis-server /www/server/redis/cluster/redis_7001.conf   
2.tail -f /www/server/redis/cluster/redis_7001.log   
3./www/server/redis/src/redis-server /www/server/redis/cluster/redis_7002.conf   
4.# tail -f /www/server/redis/cluster/redis_7002.log

其它两台机器配置与192.168.1.194类似,此处省略

  • 创建集群:
redis-cli -a 123456 --cluster create 192.168.1.194:7001 192.168.1.194:7002 192.168.1.115:7003 192.168.1.115:7004 192.168.1.223:7005 192.168.1.223:7006 --cluster-replicas 1   

Can I set the above configuration? (type 'yes' to accept): yes 
#输入yes,接受上面配置

执行成功可以知道,

192.168.1.194:7001是master,它的slave是192.168.1.194:7004
192.168.1.115:7003是master,它的slave是192.168.1.115:7006
192.168.1.223:7005是master,它的slave是192.168.1.223:7002

自动生成nodes.conf文件:

# ls /tmp/redis_7001/ 
appendonly.aof dump.rdb nodes-7001.conf
  • 集群操作
    • 登录集群:
# redis-cli -c -h 192.168.1.194 -p 7001 -a 123456 # -c,使用集群方式登录
  • 增加设置节点…待补充
三 NFS共享目录
  • 参考文章
  • 简介
    NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。
  • Server端IP:192.168.1.194
  1. 安装nfs和rpcbind
yum -y install nfs-utils rpcbind
  1. 创建共享目录 mkdir /sharedata,
# chmod -Rf 755 /sharedata && chown -Rf www:www /sharedata
  1. 增加nfs配置文件
#vim /etc/exports 
/sharedata 192.168.1.0/24(rw,sync,all_squash,anonuid=1000,anongid=1000)  
exportfs -rv   -- 加载配置生效,等价于重启 /etc/init.d/nfs  reload
/sharedata:共享文件夹
192.168.1.0/24:可以挂载服务器目录的客户端ip网段192.168.1.0,子网掩码255.255.255.0
(all_squash):不管访问NFS server共享目录的用户身份如何,它的权限都将被压缩成匿名用户。
(anonuid=1000,anongid=1000):UID和GID,这里代表是www
(rw):该客户端对共享的文件具有读写权限
(sync):同步,同时将数据写入到内存与硬盘中,保证不丢失数据
  1. 配置hosts文件(略)
  2. 启动nfs和rpcbind服务
    必须先启动rpcbind,再启动nfs,才能让NFS在rpcbind上注册成功
service rpcbind start 
service nfs start 
#查看启动状态:
service rpcbind status 
service nfs status 
#注意,RPC的状态是Active: active (running);而NFS的状态是Active: active (exited)。

#查看自己共享的服务:
# showmount -e 
/sharedata 192.168.1.223,192.168.1.115 
  1. 查看 RPC 服务的注册状况
rpcinfo -p localhost

#NFS服务使用的111和2049端口是固定的,mountd端口是动态的,需要固定,然后在防火墙放行。
#6.1 固定端口
vi /etc/sysconfig/nfs 
#1.添加:
RQUOTAD_PORT=30001
LOCKD_TCPPORT=30002
LOCKD_UDPPORT=30002
MOUNTD_PORT=30003
STATD_PORT=30004
#2.重启nfs和rpcbind:
service rpcbind restart 
service nfs restart 
#6.2防火墙放行端口 111、2049、30001-30004
  • Client端:192.168.1.115,192.168.1.223
  1. 客户端服务器也需要安装nfs 和 rpcbind 服务,参考服务端
  2. 显示NFS服务器共享目录列表
# showmount -e 192.168.1.194 
Export list for 192.168.1.194:
/sharedata 192.168.1.223,192.168.1.115
  1. 创建挂载目录
mkdir /sharedata
  1. 挂载服务端的共享目录
mount -t nfs -o nolock,nfsvers=3,vers=3 192.168.1.194:/sharedata /sharedata 
# nolock -- 禁用文件锁
# nfsvers=3,vers=3 -- 指定使用那个版本的NFS协议

# 查看挂载的状态
mount | grep nfs
  1. 开机启动NFS服务
systemctl enable nfs
  1. NFS开机自动挂载
#系统服务未完全启动,挂载会失败,在系统启动以后,再挂载
# chmod +x /etc/rc.d/rc.local
#vim /etc/rc.d/rc.local
sleep 30
mount -t nfs 192.168.1.194:/sharedata /sharedata
四 kodbox部署和配置
  • 分别部署kodbox到3个程序服务器上(站点目录最好是相同的),并且./config/setting_user.php这样写
1.$config['cache']['sessionType'] = 'redis';  
2.$config['cache']['cacheType'] = 'redis';  
3.$config['cache']['redis']['auth'] = '123456'; //redis连接密码
4.// mysql集群  
5.$config['database'] = array (  
6.    'DB_DEPLOY_TYPE' => 1, // 设置分布式数据库支持  
7.    'DB_RW_SEPARATE' => true, // 分布式数据库的读写是否分离  
8.    'DB_TYPE' => 'mysqli', // 数据库类型  
9.    'DB_HOST' => '192.168.1.194,192.168.1.115,192.168.1.223', // 数据库服务器地址  
10.    'DB_NAME' => 'kodbox2', // 数据库名称  
11.    'DB_USER' => 'slave,slave,slave', // 数据库用户名  
12.    'DB_PWD' => 'kod', // 数据库密码  
13.    'DB_PORT' => '3306,3306,3306', // 数据库端口  
14.    'DB_PREFIX' => '', // 数据表前缀  
15.    // 'DB_MASTER_NUM' => 2  
16.);  
17.// // // redis集群  
18.$config['cache']['redis']['mode'] = 'cluster'; // slave、sentinel、cluster 第二种(哨兵模式)暂不支持  
19.$config['cache']['redis']['server'] = array(  
20.   '192.168.1.194:7001',  
21.   '192.168.1.194:7002',  
22.   '192.168.1.115:7003',  
23.   '192.168.1.115:7004',  
24.   '192.168.1.223:7005',  
25.   '192.168.1.223:7006',  
26.);

部署配置选择了前面的MySQL主从和redis集群,并且需要在后台存储管理增加NFS共享目录/sharedata,才能共享存储。

  • 代码上的优化点:
    • 程序更新涉及多个站点,设计代码只更新一次;
    • 后台存储管理调整后,前端显示更新不及时;(删除配置后刷新还有);
    • 插件安装删除的同步。
五 前端服务器使用Nginx反向代理
  • 前端服务器可以是另外找的一台服务器,也可也把上面3台服务器之一当作前端转发服务器。要求是编译安装Nginx,如果使用宝塔面板,下载Nginx时请选择编译安装。模块安装过程参考
#Nginx需要编译安装consistent_hash模块
#如果使用宝塔面板。可以这样安装:
cd /www/server 
git clone https://github.com/replay/ngx_http_consistent_hash 
cd ngx_http_consistent_hash && git submodule update --init

vim /www/server/panel/install/nginx.sh
# 找到./configure 这里后面添加--add-module=/www/server/ngx_http_consistent_hash
./configure --user=www --group=www --prefix=${Setup_Path} ${ENABLE_LUA} --add-module=/www/server/ngx_http_consistent_hash

#执行 nginx -v 查看版本号,如果是nginx 1.16,则执行
sh /www/server/panel/install/nginx.sh install 1.16
  • Nginx反向代理配置
1.server  
2.{  
3.    listen 194;  
4.    server_name 192.168.1.194;  
5.    index index.php index.html index.htm default.php default.htm;  
6.    root /www/wwwroot/proxy2.com;  
7.    
8.    #PHP-INFO-START  PHP引用配置,可以注释或修改  
9.    include enable-php-00.conf;  
10.    #PHP-INFO-END  
11.      
12.    #REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效  
13.    include /www/server/panel/vhost/rewrite/proxy2.com.conf;  
14.    #REWRITE-END  
15.      
16.    location / {   
17.            proxy_pass http://kodCommon94;  
18.            proxy_set_header Host $host:$server_port;              
19.            index index.php index.html index.htm;  
20.            proxy_redirect      off;  
21.        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;  
22.        proxy_set_header    X-Real-IP $remote_addr;              
23.            proxy_http_version  1.1;  
24.        proxy_set_header    Connection "";              
25.            add_header backendIP $upstream_addr;  
26.            add_header backendCode $upstream_status;  
27.            proxy_headers_hash_max_size 51200;  
28.            proxy_headers_hash_bucket_size 6400;  
29.  
30.if ($kodRouter ~* "explorer/upload/fileUpload"){proxy_pass http://kodKeep94;}  
31.if ($kodRouter ~* "explorer/upload/serverDownload"){proxy_pass http://kodKeep94;}  
32.if ($kodRouter ~* "explorer/share/fileUpload"){proxy_pass http://kodKeep94;}  
33.if ($kodRouter ~* "explorer/index/fileOut"){proxy_pass http://kodKeep94;}  
34.if ($kodRouter ~* "explorer/share/fileOut"){proxy_pass http://kodKeep94;}  
35.if ($kodRouter ~* "explorer/history/fileOut"){proxy_pass http://kodKeep94;} 
36.if ($kodRouter ~* "explorer/share/file"){proxy_pass http://kodKeep94;}  
37.if ($kodRouter ~* "explorer/index/zipDownload"){proxy_pass http://kodKeep94;}  
38.if ($kodRouter ~* "explorer/share/zipDownload"){proxy_pass http://kodKeep94;}  
39.    }  
40.    access_log  /www/wwwlogs/proxy2.com.log main;  
41.    error_log  /www/wwwlogs/proxy2.com.error.log info;  
42.}  
43.upstream kodCommon94{   
44.    server 192.168.1.194:94 weight=1;  
45.    server 192.168.1.115:94 weight=1;  
46.    server 192.168.1.223:94 weight=1;  
47.}  
48.upstream kodKeep94{   
49.    server 192.168.1.194:94;  
50.    server 192.168.1.115:94;  
51.    server 192.168.1.223:94;  
52.    consistent_hash $kodUser;  
53.}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zack_snair

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值