按照Seafile 集群文档中给出的推荐架构,Seafile 集群需要使用一个分布式、高可用的数据库和缓存集群。在本文档中,我们给出一个在 3 台服务器上部署 MariaDB 和 Memcached 集群的案例。
最少使用3台服务器部署来集群,每台机器都应该有:
具体的硬件配置可以根据管理员的经验和需求来调整。
我们使用 CentOS 7 操作系统,在下面,我们将3个服务器称为node1、node2、和node3。
MariaDB 集群的实现选择采用 MariaDB 官方推荐的集群部署方案:MariaDB Galera Cluster
。MariaDB Galera Cluster 是MariaDB的一个同步多主集群架构。它只在Linux上可用,并且只支持XtraDB/InnoDB存储引擎。为了避免“脑裂”,MariaDB Galera Cluster 要求使用最少三个节点来构建集群,推荐SST(快照状态转移)使用rsync
方式;推荐使用HAproxy
对外部请求做负载均衡。如果你的 Seafile 集群是采用集群文档中介绍的 3 节点最小化部署,则不需要用 HAProxy 来负载均衡,每个节点使用本地的 MariaDB 实例即可。
为保证集群正常工作,请务必在所有集群节点开放以下防火墙端口:
关于MariaDB Galera Cluster在CentOS下的部署详情请参考文档 MariaDB Galera Cluster
HAproxy做MariaDB集群负载均衡的配置过程请参考文档 Setup HAProxy Load Balancer
与其他一般的集群不同,此处 memcached 集群的实际意义在于服务的高可用,是由 keepalived 对两个独立部署的 memcached 节点做服务的高可用。其意义在于当前使用的 memcached 节点宕机时备用节点可以自动接管服务。所有 Seafile 服务器,包括前端和后端服务器,同时使用的依旧是同一个 memcached 节点。
在每个节点上安装好 memcached 之后,还需要稍微修改其配置文件,以对外提供服务。
# 在Ubuntu系统下
vi /etc/memcached.conf
# Start with a cap of 64 megs of memory. It's reasonable, and the daemon default
# Note that the daemon will grow to this size, but does not start out holding this much
# memory
# -m 64
-m 256
# Specify which IP address to listen on. The default is to listen on all IP addresses
# This parameter is one of the only security measures that memcached has, so make sure
# it's listening on a firewalled interface.
-l 0.0.0.0
service memcached restart
# 在CentOS 7系统下
vim /etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-l 0.0.0.0 -m 256"
systemctl restart memcached
systemctl enable memcached
注意:为了避免重启服务后出现不必要的麻烦,请设置 memcached 服务开机自启。
安装 keepalived,实现高可用 memcached。
# For Ubuntu
sudo apt-get install keepalived -y
# For CentOS
sudo yum install keepalived -y
修改keepalived配置文件/etc/keepalived/keepalived.conf
,配置示例如下:
节点1上
cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost
}
notification_email_from keepalived@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id node1
vrrp_mcast_group4 224.0.100.19
}
vrrp_script chk_memcached {
script "killall -0 memcached && exit 0 || exit 1"
interval 1
weight -5
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass hello123
}
virtual_ipaddress {
192.168.1.113/24 dev ens33
}
track_script {
chk_memcached
}
}
节点2上:
cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost
}
notification_email_from keepalived@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id node2
vrrp_mcast_group4 224.0.100.19
}
vrrp_script chk_memcached {
script "killall -0 memcached && exit 0 || exit 1"
interval 1
weight -5
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 98
advert_int 1
authentication {
auth_type PASS
auth_pass hello123
}
virtual_ipaddress {
192.168.1.113/24 dev ens33
}
track_script {
chk_memcached
}
}
注意:以上配置中interface指定该节点的网卡设备名称,请根据实际情况配置。virtual_ipaddress配置keepalived集群的虚拟IP地址,也需要根据实际情况配置。
修改配置完成后,重启 keepalived 以生效。
Last modified by Daniel Pan, 2019-04-18