mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2024-01-19 02:48:24 +00:00
master, filer, s3: also listen to "localhost" in addition to specific ip address
related to https://github.com/chrislusf/seaweedfs/issues/1937
This commit is contained in:
parent
fbc9f0eb64
commit
3639cad69c
|
@ -219,7 +219,7 @@ func (fo *FilerOptions) startFiler() {
|
||||||
if *fo.publicPort != 0 {
|
if *fo.publicPort != 0 {
|
||||||
publicListeningAddress := util.JoinHostPort(*fo.bindIp, *fo.publicPort)
|
publicListeningAddress := util.JoinHostPort(*fo.bindIp, *fo.publicPort)
|
||||||
glog.V(0).Infoln("Start Seaweed filer server", util.Version(), "public at", publicListeningAddress)
|
glog.V(0).Infoln("Start Seaweed filer server", util.Version(), "public at", publicListeningAddress)
|
||||||
publicListener, e := util.NewListener(publicListeningAddress, 0)
|
publicListener, localPublicListner, e := util.NewIpAndLocalListeners(*fo.bindIp, *fo.publicPort, 0)
|
||||||
if e != nil {
|
if e != nil {
|
||||||
glog.Fatalf("Filer server public listener error on port %d:%v", *fo.publicPort, e)
|
glog.Fatalf("Filer server public listener error on port %d:%v", *fo.publicPort, e)
|
||||||
}
|
}
|
||||||
|
@ -228,11 +228,18 @@ func (fo *FilerOptions) startFiler() {
|
||||||
glog.Fatalf("Volume server fail to serve public: %v", e)
|
glog.Fatalf("Volume server fail to serve public: %v", e)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
if localPublicListner != nil {
|
||||||
|
go func() {
|
||||||
|
if e := http.Serve(localPublicListner, publicVolumeMux); e != nil {
|
||||||
|
glog.Errorf("Volume server fail to serve public: %v", e)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
glog.V(0).Infof("Start Seaweed Filer %s at %s:%d", util.Version(), *fo.ip, *fo.port)
|
glog.V(0).Infof("Start Seaweed Filer %s at %s:%d", util.Version(), *fo.ip, *fo.port)
|
||||||
filerListener, e := util.NewListener(
|
filerListener, filerLocalListener, e := util.NewIpAndLocalListeners(
|
||||||
util.JoinHostPort(*fo.bindIp, *fo.port),
|
*fo.bindIp, *fo.port,
|
||||||
time.Duration(10)*time.Second,
|
time.Duration(10)*time.Second,
|
||||||
)
|
)
|
||||||
if e != nil {
|
if e != nil {
|
||||||
|
@ -253,19 +260,29 @@ func (fo *FilerOptions) startFiler() {
|
||||||
|
|
||||||
// starting grpc server
|
// starting grpc server
|
||||||
grpcPort := *fo.portGrpc
|
grpcPort := *fo.portGrpc
|
||||||
grpcL, err := util.NewListener(util.JoinHostPort(*fo.bindIp, grpcPort), 0)
|
grpcL, grpcLocalL, err := util.NewIpAndLocalListeners(*fo.bindIp, grpcPort, 0)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
glog.Fatalf("failed to listen on grpc port %d: %v", grpcPort, err)
|
glog.Fatalf("failed to listen on grpc port %d: %v", grpcPort, err)
|
||||||
}
|
}
|
||||||
grpcS := pb.NewGrpcServer(security.LoadServerTLS(util.GetViper(), "grpc.filer"))
|
grpcS := pb.NewGrpcServer(security.LoadServerTLS(util.GetViper(), "grpc.filer"))
|
||||||
filer_pb.RegisterSeaweedFilerServer(grpcS, fs)
|
filer_pb.RegisterSeaweedFilerServer(grpcS, fs)
|
||||||
reflection.Register(grpcS)
|
reflection.Register(grpcS)
|
||||||
|
if grpcLocalL != nil {
|
||||||
|
go grpcS.Serve(grpcLocalL)
|
||||||
|
}
|
||||||
go grpcS.Serve(grpcL)
|
go grpcS.Serve(grpcL)
|
||||||
|
|
||||||
httpS := &http.Server{Handler: defaultMux}
|
httpS := &http.Server{Handler: defaultMux}
|
||||||
go func() {
|
go func() {
|
||||||
httpS.Serve(filerSocketListener)
|
httpS.Serve(filerSocketListener)
|
||||||
}()
|
}()
|
||||||
|
if filerLocalListener != nil {
|
||||||
|
go func() {
|
||||||
|
if err := httpS.Serve(filerLocalListener); err != nil {
|
||||||
|
glog.Errorf("Filer Fail to serve: %v", e)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
}
|
||||||
if err := httpS.Serve(filerListener); err != nil {
|
if err := httpS.Serve(filerListener); err != nil {
|
||||||
glog.Fatalf("Filer Fail to serve: %v", e)
|
glog.Fatalf("Filer Fail to serve: %v", e)
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,6 +22,7 @@ var (
|
||||||
type IamOptions struct {
|
type IamOptions struct {
|
||||||
filer *string
|
filer *string
|
||||||
masters *string
|
masters *string
|
||||||
|
ip *string
|
||||||
port *int
|
port *int
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -29,6 +30,7 @@ func init() {
|
||||||
cmdIam.Run = runIam // break init cycle
|
cmdIam.Run = runIam // break init cycle
|
||||||
iamStandaloneOptions.filer = cmdIam.Flag.String("filer", "localhost:8888", "filer server address")
|
iamStandaloneOptions.filer = cmdIam.Flag.String("filer", "localhost:8888", "filer server address")
|
||||||
iamStandaloneOptions.masters = cmdIam.Flag.String("master", "localhost:9333", "comma-separated master servers")
|
iamStandaloneOptions.masters = cmdIam.Flag.String("master", "localhost:9333", "comma-separated master servers")
|
||||||
|
iamStandaloneOptions.ip = cmdIam.Flag.String("ip", util.DetectedHostAddress(), "iam server http listen ip address")
|
||||||
iamStandaloneOptions.port = cmdIam.Flag.Int("port", 8111, "iam server http listen port")
|
iamStandaloneOptions.port = cmdIam.Flag.Int("port", 8111, "iam server http listen port")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -81,12 +83,19 @@ func (iamopt *IamOptions) startIamServer() bool {
|
||||||
httpS := &http.Server{Handler: router}
|
httpS := &http.Server{Handler: router}
|
||||||
|
|
||||||
listenAddress := fmt.Sprintf(":%d", *iamopt.port)
|
listenAddress := fmt.Sprintf(":%d", *iamopt.port)
|
||||||
iamApiListener, err := util.NewListener(listenAddress, time.Duration(10)*time.Second)
|
iamApiListener, iamApiLocalListener, err := util.NewIpAndLocalListeners(*iamopt.ip, *iamopt.port, time.Duration(10)*time.Second)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
glog.Fatalf("IAM API Server listener on %s error: %v", listenAddress, err)
|
glog.Fatalf("IAM API Server listener on %s error: %v", listenAddress, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
glog.V(0).Infof("Start Seaweed IAM API Server %s at http port %d", util.Version(), *iamopt.port)
|
glog.V(0).Infof("Start Seaweed IAM API Server %s at http port %d", util.Version(), *iamopt.port)
|
||||||
|
if iamApiLocalListener != nil {
|
||||||
|
go func() {
|
||||||
|
if err = httpS.Serve(iamApiLocalListener); err != nil {
|
||||||
|
glog.Errorf("IAM API Server Fail to serve: %v", err)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
}
|
||||||
if err = httpS.Serve(iamApiListener); err != nil {
|
if err = httpS.Serve(iamApiListener); err != nil {
|
||||||
glog.Fatalf("IAM API Server Fail to serve: %v", err)
|
glog.Fatalf("IAM API Server Fail to serve: %v", err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -134,7 +134,7 @@ func startMaster(masterOption MasterOptions, masterWhiteList []string) {
|
||||||
ms := weed_server.NewMasterServer(r, masterOption.toMasterOption(masterWhiteList), peers)
|
ms := weed_server.NewMasterServer(r, masterOption.toMasterOption(masterWhiteList), peers)
|
||||||
listeningAddress := util.JoinHostPort(*masterOption.ipBind, *masterOption.port)
|
listeningAddress := util.JoinHostPort(*masterOption.ipBind, *masterOption.port)
|
||||||
glog.V(0).Infof("Start Seaweed Master %s at %s", util.Version(), listeningAddress)
|
glog.V(0).Infof("Start Seaweed Master %s at %s", util.Version(), listeningAddress)
|
||||||
masterListener, e := util.NewListener(listeningAddress, 0)
|
masterListener, masterLocalListner, e := util.NewIpAndLocalListeners(*masterOption.ipBind, *masterOption.port, 0)
|
||||||
if e != nil {
|
if e != nil {
|
||||||
glog.Fatalf("Master startup error: %v", e)
|
glog.Fatalf("Master startup error: %v", e)
|
||||||
}
|
}
|
||||||
|
@ -157,7 +157,7 @@ func startMaster(masterOption MasterOptions, masterWhiteList []string) {
|
||||||
r.HandleFunc("/cluster/status", raftServer.StatusHandler).Methods("GET")
|
r.HandleFunc("/cluster/status", raftServer.StatusHandler).Methods("GET")
|
||||||
// starting grpc server
|
// starting grpc server
|
||||||
grpcPort := *masterOption.portGrpc
|
grpcPort := *masterOption.portGrpc
|
||||||
grpcL, err := util.NewListener(util.JoinHostPort(*masterOption.ipBind, grpcPort), 0)
|
grpcL, grpcLocalL, err := util.NewIpAndLocalListeners(*masterOption.ipBind, grpcPort, 0)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
glog.Fatalf("master failed to listen on grpc port %d: %v", grpcPort, err)
|
glog.Fatalf("master failed to listen on grpc port %d: %v", grpcPort, err)
|
||||||
}
|
}
|
||||||
|
@ -166,6 +166,9 @@ func startMaster(masterOption MasterOptions, masterWhiteList []string) {
|
||||||
protobuf.RegisterRaftServer(grpcS, raftServer)
|
protobuf.RegisterRaftServer(grpcS, raftServer)
|
||||||
reflection.Register(grpcS)
|
reflection.Register(grpcS)
|
||||||
glog.V(0).Infof("Start Seaweed Master %s grpc server at %s:%d", util.Version(), *masterOption.ipBind, grpcPort)
|
glog.V(0).Infof("Start Seaweed Master %s grpc server at %s:%d", util.Version(), *masterOption.ipBind, grpcPort)
|
||||||
|
if grpcLocalL != nil {
|
||||||
|
go grpcS.Serve(grpcLocalL)
|
||||||
|
}
|
||||||
go grpcS.Serve(grpcL)
|
go grpcS.Serve(grpcL)
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
|
@ -181,6 +184,9 @@ func startMaster(masterOption MasterOptions, masterWhiteList []string) {
|
||||||
|
|
||||||
// start http server
|
// start http server
|
||||||
httpS := &http.Server{Handler: r}
|
httpS := &http.Server{Handler: r}
|
||||||
|
if masterLocalListner != nil {
|
||||||
|
go httpS.Serve(masterLocalListner)
|
||||||
|
}
|
||||||
go httpS.Serve(masterListener)
|
go httpS.Serve(masterListener)
|
||||||
|
|
||||||
select {}
|
select {}
|
||||||
|
|
|
@ -119,14 +119,14 @@ func startMasterFollower(masterOptions MasterOptions) {
|
||||||
ms := weed_server.NewMasterServer(r, option, masters)
|
ms := weed_server.NewMasterServer(r, option, masters)
|
||||||
listeningAddress := util.JoinHostPort(*masterOptions.ipBind, *masterOptions.port)
|
listeningAddress := util.JoinHostPort(*masterOptions.ipBind, *masterOptions.port)
|
||||||
glog.V(0).Infof("Start Seaweed Master %s at %s", util.Version(), listeningAddress)
|
glog.V(0).Infof("Start Seaweed Master %s at %s", util.Version(), listeningAddress)
|
||||||
masterListener, e := util.NewListener(listeningAddress, 0)
|
masterListener, masterLocalListner, e := util.NewIpAndLocalListeners(*masterOptions.ipBind, *masterOptions.port, 0)
|
||||||
if e != nil {
|
if e != nil {
|
||||||
glog.Fatalf("Master startup error: %v", e)
|
glog.Fatalf("Master startup error: %v", e)
|
||||||
}
|
}
|
||||||
|
|
||||||
// starting grpc server
|
// starting grpc server
|
||||||
grpcPort := *masterOptions.portGrpc
|
grpcPort := *masterOptions.portGrpc
|
||||||
grpcL, err := util.NewListener(util.JoinHostPort(*masterOptions.ipBind, grpcPort), 0)
|
grpcL, grpcLocalL, err := util.NewIpAndLocalListeners(*masterOptions.ipBind, grpcPort, 0)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
glog.Fatalf("master failed to listen on grpc port %d: %v", grpcPort, err)
|
glog.Fatalf("master failed to listen on grpc port %d: %v", grpcPort, err)
|
||||||
}
|
}
|
||||||
|
@ -134,12 +134,18 @@ func startMasterFollower(masterOptions MasterOptions) {
|
||||||
master_pb.RegisterSeaweedServer(grpcS, ms)
|
master_pb.RegisterSeaweedServer(grpcS, ms)
|
||||||
reflection.Register(grpcS)
|
reflection.Register(grpcS)
|
||||||
glog.V(0).Infof("Start Seaweed Master %s grpc server at %s:%d", util.Version(), *masterOptions.ip, grpcPort)
|
glog.V(0).Infof("Start Seaweed Master %s grpc server at %s:%d", util.Version(), *masterOptions.ip, grpcPort)
|
||||||
|
if grpcLocalL != nil {
|
||||||
|
go grpcS.Serve(grpcLocalL)
|
||||||
|
}
|
||||||
go grpcS.Serve(grpcL)
|
go grpcS.Serve(grpcL)
|
||||||
|
|
||||||
go ms.MasterClient.KeepConnectedToMaster()
|
go ms.MasterClient.KeepConnectedToMaster()
|
||||||
|
|
||||||
// start http server
|
// start http server
|
||||||
httpS := &http.Server{Handler: r}
|
httpS := &http.Server{Handler: r}
|
||||||
|
if masterLocalListner != nil {
|
||||||
|
go httpS.Serve(masterLocalListner)
|
||||||
|
}
|
||||||
go httpS.Serve(masterListener)
|
go httpS.Serve(masterListener)
|
||||||
|
|
||||||
select {}
|
select {}
|
||||||
|
|
|
@ -95,7 +95,7 @@ func (msgBrokerOpt *MessageBrokerOptions) startQueueServer() bool {
|
||||||
}, grpcDialOption)
|
}, grpcDialOption)
|
||||||
|
|
||||||
// start grpc listener
|
// start grpc listener
|
||||||
grpcL, err := util.NewListener(util.JoinHostPort("", *msgBrokerOpt.port), 0)
|
grpcL, _, err := util.NewIpAndLocalListeners("", *msgBrokerOpt.port, 0)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
glog.Fatalf("failed to listen on grpc port %d: %v", *msgBrokerOpt.port, err)
|
glog.Fatalf("failed to listen on grpc port %d: %v", *msgBrokerOpt.port, err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -198,7 +198,7 @@ func (s3opt *S3Options) startS3Server() bool {
|
||||||
}
|
}
|
||||||
|
|
||||||
listenAddress := fmt.Sprintf("%s:%d", *s3opt.bindIp, *s3opt.port)
|
listenAddress := fmt.Sprintf("%s:%d", *s3opt.bindIp, *s3opt.port)
|
||||||
s3ApiListener, err := util.NewListener(listenAddress, time.Duration(10)*time.Second)
|
s3ApiListener, s3ApiLocalListner, err := util.NewIpAndLocalListeners(*s3opt.bindIp, *s3opt.port, time.Duration(10)*time.Second)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
glog.Fatalf("S3 API Server listener on %s error: %v", listenAddress, err)
|
glog.Fatalf("S3 API Server listener on %s error: %v", listenAddress, err)
|
||||||
}
|
}
|
||||||
|
@ -212,11 +212,25 @@ func (s3opt *S3Options) startS3Server() bool {
|
||||||
|
|
||||||
if *s3opt.tlsPrivateKey != "" {
|
if *s3opt.tlsPrivateKey != "" {
|
||||||
glog.V(0).Infof("Start Seaweed S3 API Server %s at https port %d", util.Version(), *s3opt.port)
|
glog.V(0).Infof("Start Seaweed S3 API Server %s at https port %d", util.Version(), *s3opt.port)
|
||||||
|
if s3ApiLocalListner != nil {
|
||||||
|
go func() {
|
||||||
|
if err = httpS.ServeTLS(s3ApiLocalListner, *s3opt.tlsCertificate, *s3opt.tlsPrivateKey); err != nil {
|
||||||
|
glog.Fatalf("S3 API Server Fail to serve: %v", err)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
}
|
||||||
if err = httpS.ServeTLS(s3ApiListener, *s3opt.tlsCertificate, *s3opt.tlsPrivateKey); err != nil {
|
if err = httpS.ServeTLS(s3ApiListener, *s3opt.tlsCertificate, *s3opt.tlsPrivateKey); err != nil {
|
||||||
glog.Fatalf("S3 API Server Fail to serve: %v", err)
|
glog.Fatalf("S3 API Server Fail to serve: %v", err)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
glog.V(0).Infof("Start Seaweed S3 API Server %s at http port %d", util.Version(), *s3opt.port)
|
glog.V(0).Infof("Start Seaweed S3 API Server %s at http port %d", util.Version(), *s3opt.port)
|
||||||
|
if s3ApiLocalListner != nil {
|
||||||
|
go func() {
|
||||||
|
if err = httpS.Serve(s3ApiLocalListner); err != nil {
|
||||||
|
glog.Fatalf("S3 API Server Fail to serve: %v", err)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
}
|
||||||
if err = httpS.Serve(s3ApiListener); err != nil {
|
if err = httpS.Serve(s3ApiListener); err != nil {
|
||||||
glog.Fatalf("S3 API Server Fail to serve: %v", err)
|
glog.Fatalf("S3 API Server Fail to serve: %v", err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -195,6 +195,7 @@ func runServer(cmd *Command, args []string) bool {
|
||||||
filerOptions.ip = serverIp
|
filerOptions.ip = serverIp
|
||||||
filerOptions.bindIp = serverBindIp
|
filerOptions.bindIp = serverBindIp
|
||||||
s3Options.bindIp = serverBindIp
|
s3Options.bindIp = serverBindIp
|
||||||
|
iamOptions.ip = serverBindIp
|
||||||
iamOptions.masters = masterOptions.peers
|
iamOptions.masters = masterOptions.peers
|
||||||
serverOptions.v.ip = serverIp
|
serverOptions.v.ip = serverIp
|
||||||
serverOptions.v.bindIp = serverBindIp
|
serverOptions.v.bindIp = serverBindIp
|
||||||
|
|
|
@ -82,16 +82,45 @@ func (c *Conn) Close() error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewListener(addr string, timeout time.Duration) (net.Listener, error) {
|
func NewListener(addr string, timeout time.Duration) (ipListner net.Listener, err error) {
|
||||||
l, err := net.Listen("tcp", addr)
|
listner, err := net.Listen("tcp", addr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
tl := &Listener{
|
ipListner = &Listener{
|
||||||
Listener: l,
|
Listener: listner,
|
||||||
ReadTimeout: timeout,
|
ReadTimeout: timeout,
|
||||||
WriteTimeout: timeout,
|
WriteTimeout: timeout,
|
||||||
}
|
}
|
||||||
return tl, nil
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewIpAndLocalListeners(host string, port int, timeout time.Duration) (ipListner net.Listener, localListener net.Listener, err error) {
|
||||||
|
listner, err := net.Listen("tcp", JoinHostPort(host, port))
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
ipListner = &Listener{
|
||||||
|
Listener: listner,
|
||||||
|
ReadTimeout: timeout,
|
||||||
|
WriteTimeout: timeout,
|
||||||
|
}
|
||||||
|
|
||||||
|
if host != "localhost" && host != "" {
|
||||||
|
listner, err = net.Listen("tcp", JoinHostPort("localhost", port))
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
localListener = &Listener{
|
||||||
|
Listener: listner,
|
||||||
|
ReadTimeout: timeout,
|
||||||
|
WriteTimeout: timeout,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue