Download - Fluentd Meetup 2016 - ServerEngine Integration & Windows support

Transcript
Page 1: Fluentd Meetup 2016 - ServerEngine Integration & Windows support

ServerEngine Integration & Windows support

Ritta Narita

Fluentd Meetup 2016

Page 2: Fluentd Meetup 2016 - ServerEngine Integration & Windows support

About me.

Ritta Narita

joined Treasure Data after internship in 2015

2

@naritta

@narittan

Page 3: Fluentd Meetup 2016 - ServerEngine Integration & Windows support

Fluentd v0.14

ServerEngine is integrated

Page 4: Fluentd Meetup 2016 - ServerEngine Integration & Windows support

What’s ServerEngine?

A framework to implement robust multiprocess servers like Unicorn

worker

worker

workersupervisor Server

Dynamic reconfiglive restart

Heartbeat via pipeauto restart

multi process/thread

Page 5: Fluentd Meetup 2016 - ServerEngine Integration & Windows support

how to use ServerEngine

workersupervisor Server

module MyServer def before_run @sock = TCPServer.new(

config[:bind], config[:port]) end

attr_reader :sockend

module MyWorker def run c = server.sock.accept c.write "Awesome work!" end

def stop c.close endend

1. write server module and worker module

Page 6: Fluentd Meetup 2016 - ServerEngine Integration & Windows support

how to use ServerEngine

workersupervisor Server

se = ServerEngine.create(MyServer, MyWorker, { daemonize: true, log: 'myserver.log', pid_path: 'myserver.pid', worker_type: 'process', workers: 4, bind: '0.0.0.0', port: 9071,})

se.run

2. write configuration and run

Page 7: Fluentd Meetup 2016 - ServerEngine Integration & Windows support

module MyWorker def spawn(process_manager) process_manager.spawn(env, config[:spawn_cmd]) endend

ServerEngine.create(MyServer, MyWorker, { worker_type: ‘spawn’, spawn_cmd: cmd})

ServerEngine.create(MyServer, MyWorker, { worker_type: ‘thread'})

workerServer

workerServer

workerServerspawn

thread

processServerEngine.create(MyServer, MyWorker, { worker_type: ‘process'})

worker type

Page 8: Fluentd Meetup 2016 - ServerEngine Integration & Windows support

What’s the advantages for integrating serverengine into fluentd?

Page 9: Fluentd Meetup 2016 - ServerEngine Integration & Windows support

serverengine advantages

Auto restartlive restart

socket managersignal handlerlog rotation

Page 10: Fluentd Meetup 2016 - ServerEngine Integration & Windows support

Auto restart live restart

socket managersignal handlerlog rotation

serverengine advantages

Page 11: Fluentd Meetup 2016 - ServerEngine Integration & Windows support

if worker died unexpectedly…

worker

workersupervisor Server

worker

Page 12: Fluentd Meetup 2016 - ServerEngine Integration & Windows support

if worker died unexpectedly…

worker

worker

workersupervisor Server

Page 13: Fluentd Meetup 2016 - ServerEngine Integration & Windows support

if worker died unexpectedly…

worker

workersupervisor Server

It’s detected by heartbeat and server launch worker again.

worker

Page 14: Fluentd Meetup 2016 - ServerEngine Integration & Windows support
Page 15: Fluentd Meetup 2016 - ServerEngine Integration & Windows support
Page 16: Fluentd Meetup 2016 - ServerEngine Integration & Windows support

Auto restartlive restart

socket managersignal handlerlog rotation

serverengine advantages

Page 17: Fluentd Meetup 2016 - ServerEngine Integration & Windows support

workersupervisor Server

tcp tcp

send SIGHUP

live restart

Page 18: Fluentd Meetup 2016 - ServerEngine Integration & Windows support

supervisor Server worker

tcp

kill the worker, leaving server’s condition

live restart

Page 19: Fluentd Meetup 2016 - ServerEngine Integration & Windows support

worker

supervisor Server worker

tcp

start new worker and read config again

live restart

Page 20: Fluentd Meetup 2016 - ServerEngine Integration & Windows support

worker

supervisor Server worker

tcp

tcpshare the TCP with living zero downtime

live restart

Page 21: Fluentd Meetup 2016 - ServerEngine Integration & Windows support
Page 22: Fluentd Meetup 2016 - ServerEngine Integration & Windows support
Page 23: Fluentd Meetup 2016 - ServerEngine Integration & Windows support

Signal and RPC server

api/config.reloadlive restart/config reload HUP

/api/processes.interruptWorkers

INT

/api/processes.killWorkers

/api/plugins.flushBuffers

system config reload USR2

TERM

USR1flush buffers

shutdown

Page 24: Fluentd Meetup 2016 - ServerEngine Integration & Windows support

workersupervisor Server

you can reload system config without restart

system config reload

send USR2

check mtime and previous load time,if there is new one, reload!

serverengineconfig cash

new config

Page 25: Fluentd Meetup 2016 - ServerEngine Integration & Windows support

Auto restartlive restart

socket manager signal handlerlog rotation

serverengine advantages

Page 26: Fluentd Meetup 2016 - ServerEngine Integration & Windows support

Socket Manager

workerSocket

Managerclient

SocketManagerserver

Server

26

①socket listen request②find or create listening socket

③share the socket FD(unix)/

duplicated socket info(windows)

UDS(unix)/TCP(windows)

④get socket and accept in worker

Page 27: Fluentd Meetup 2016 - ServerEngine Integration & Windows support

how to use Socket Manager

workerSocket

Managerclient

SocketManagerserver

Server

27

#generate path for UDS/TCP for server connection socket_manager_path = ServerEngine::SocketManager::Server.generate_path

#open socket manager server socket_manager_server = ServerEngine::SocketManager::Server.open(socket_manager_path)

In server

Page 28: Fluentd Meetup 2016 - ServerEngine Integration & Windows support

workerSocket

Managerclient

SocketManagerserver

Server

28

#get socket manager client from socket manager path socket_manager = ServerEngine::SocketManager::Client.new(socket_manager_path)

#get listening socket from socket manager lsock = socket_manager.listen_tcp(bind, port)

In worker

how to use Socket Manager

Page 29: Fluentd Meetup 2016 - ServerEngine Integration & Windows support

What’s the merit of Socket Manager?

worker

worker

worker

SocketManager

client

SocketManager

client

SocketManager

client

SocketManagerserver

supervisor

Server

29we can use multicore easily in future

Page 30: Fluentd Meetup 2016 - ServerEngine Integration & Windows support

easy to use multicore power fully 30

with SocketManagerwith in_multiprocess plugin<source> type multiprocess <process> cmdline -c /etc/td-agent/td-agent-child1.conf </process> <process> cmdline -c /etc/td-agent/td-agent-child2.conf </process></source>

#/etc/td-agent/td-agent-child1.conf<source> type forward port 24224</source>

#/etc/td-agent/td-agent-child2.conf<source> type forward port 24225</source>

<source> type forward port 24224</source>

setting when using 2 core

Page 31: Fluentd Meetup 2016 - ServerEngine Integration & Windows support
Page 32: Fluentd Meetup 2016 - ServerEngine Integration & Windows support
Page 33: Fluentd Meetup 2016 - ServerEngine Integration & Windows support

Auto restartlive restart

socket managersignal handler

log rotation

serverengine advantages

Page 34: Fluentd Meetup 2016 - ServerEngine Integration & Windows support

Queue based signal handling

When user sent USR1 and QUIT…

signal handler thread

userUSR1

send USR1

Page 35: Fluentd Meetup 2016 - ServerEngine Integration & Windows support

Queue based signal handling

When user sent USR1 and QUIT…

signal handler thread

userUSR1

USR1

Page 36: Fluentd Meetup 2016 - ServerEngine Integration & Windows support

Queue based signal handling

When user sent USR1 and QUIT…

signal handler thread

userQUIT

USR1

send QUIT

Page 37: Fluentd Meetup 2016 - ServerEngine Integration & Windows support

Queue based signal handling

When user sent USR1 and QUIT…

signal handler thread

user

USR1

QUIT

Page 38: Fluentd Meetup 2016 - ServerEngine Integration & Windows support

Queue based signal handling

When user sent USR1 and QUIT…

signal handler thread

user

USR1

QUIT

run!

Page 39: Fluentd Meetup 2016 - ServerEngine Integration & Windows support

Queue based signal handling

When user sent USR1 and QUIT…

signal handler thread

user

QUIT

Page 40: Fluentd Meetup 2016 - ServerEngine Integration & Windows support

Queue based signal handling

When user sent USR1 and QUIT…

signal handler thread

user

QUIT run!

Page 41: Fluentd Meetup 2016 - ServerEngine Integration & Windows support

Auto restartlive restart

socket managersignal handlerlog rotation

serverengine advantages

Page 42: Fluentd Meetup 2016 - ServerEngine Integration & Windows support

support new features(These are already ported to ruby core.)

・multiprocess aware log rotation

・reopening of log file

・'trace' level, which is lower level than ‘debug'

ServerEngine.create(MyServer, MyWorker, { log: 'myserver.log', log_level: 'debug', log_rotate_age: 5, log_rotate_size: 1*1024*1024,})

Page 43: Fluentd Meetup 2016 - ServerEngine Integration & Windows support

summary

windows・signal → rpc handler

・no socket FD and UDS

・fork based → spawn based

・live & auto restart

・multicore with socket manager

・sophisticated signal handler

・easier log rotation

Page 44: Fluentd Meetup 2016 - ServerEngine Integration & Windows support

Thank you!

Page 45: Fluentd Meetup 2016 - ServerEngine Integration & Windows support

appendix

Page 46: Fluentd Meetup 2016 - ServerEngine Integration & Windows support

unix→fork based damonwindows→spawn based damon

damonize

fluentdserverengine

①set windows_daemon_cmdline

in configuration

②run windows_daemon_cmdline

when damonize

③windows_daemon_cmdline

runs daemon.rb

④run_server with

servermodule and workermodule