文章目录
- FastDFS-支持双IP特性介绍
- 双ip配置
- FastDFS-支持IPV6
- 参考
FastDFS-支持双IP特性介绍
FastDFS V6.0支持双IP特性介绍
参考URL: https://www.nuomiphp.com/Article/detail/id/87.html
FastDFS6.0.6搭建集群
参考URL: http://www.luyixian.cn/news_show_381479.aspx
v6.0支持双IP,tracker server和storage server均支持双IP。
v6.0新增特性说明如下:
支持双IP,一个内网IP,一个外网IP,支持NAT方式的内网和外网双IP,解决跨机房或混合云部署问题。双ip特性可以解决这个外网和跨云的问题。
tracker server 和 storage server均可支持双IP,一个内网IP,一个外网IP。
FastDFS支持双IP特性后,将完全兼容以前单IP的设计和逻辑。对于storage server要使用双IP特性,必须使用FastDFS V4.0引入的storage server id特性,也就是把双IP配置到 storage_ids.conf 中。
双ip连接规则
-
storage 连接storage server,优先尝试连接内网IP,失败了再尝试连接外网IP。
-
client向tracker server获取storage server IP,tracker server采用规则如下:
外网过来的请求,返回外网IP;
内网过来的请求,返回内网IP。
内网IP地址段为:10. 打头,192.168. 打头以及 172.[16-32). 打头的IP地址。注:[10-32)为范围表示方式,表示大于等于10且小于32的整数。
双ip配置
-
配置 tracker
vim /etc/fdfs/tracker.conf
bind_addr = 172.xxx.xxx.xxx
port=22122
base_path=/home/dfs
use_storage_id = true
use_storage_id 设置为 true 后需要在 storage_ids.conf 设置双 IP
-
配置 storage_ids.conf
100001 group1 172.XXX.XXX.XXX,123.XXX.XXX.XXX
100002 group1 172.XXX.XXX.XXX,123.XXX.XXX.XXX
-
配置 storage
vim /etc/fdfs/storage.conf
port=23000
base_path=/home/dfs
store_path0=/home/dfs
tracker_server = 192.168.2.100,122.244.111.111:22122
tracker_server = 192.158.2.100,123.244.222.222:22122
http.server_port=8888
storage server要使用双IP的话,需要启动storage server id特性,在tracker.conf中将use_storage_id设置为true,需要将storage server双IP配置到storage_ids.conf中。
FastDFS-支持IPV6
官方HISTORY 关键字 IPv6
Version 1.41 2019-09-30
- change CIDR network_bits range from [16, 32) to [10, 32)
- ini_file_reader.c: fix empty string compare
- multi_socket_client.c: code refine
- sockopt.[hc] support IPv6
查看源码 sockopt.c,可以看到 加入ipv6的判断,使用的函数都是支持ipv6的函数,如:
inet_pton 函数是随IPv6出现的函数,对于IPv4地址和IPv6地址都适用,函数中p和n分别代表表达(presentation)和数值(numeric)。
typedef struct sockaddr_convert_s {
socklen_t len;
union {
struct sockaddr addr;
struct sockaddr_in addr4;
struct sockaddr_in6 addr6;
} sa;
} sockaddr_convert_t;
...
int setsockaddrbyip(const char *ip, const short port, sockaddr_convert_t *convert)
{
int af;
void *dest;
if (is_ipv6_addr(ip))
{
convert->len = sizeof(convert->sa.addr6);
dest = &convert->sa.addr6.sin6_addr;
af = AF_INET6;
convert->sa.addr6.sin6_family = PF_INET6;
convert->sa.addr6.sin6_port = htons(port);
}
else
{
convert->len = sizeof(convert->sa.addr4);
dest = &convert->sa.addr4.sin_addr;
af = AF_INET;
convert->sa.addr4.sin_family = PF_INET;
convert->sa.addr4.sin_port = htons(port);
}
if (inet_pton(af, ip, dest) == 0)
{
logError("file: "__FILE__", line: %d, "
"invalid %s ip address: %s", __LINE__,
(af == AF_INET ? "IPv4" : "IPv6"), ip);
return EINVAL;
}
return 0;
}
参考
FastDFS6.0.6搭建集群
参考URL: http://www.luyixian.cn/news_show_381479.aspx