Skip to content

Modify bin/apisix to support the SO_REUSEPORT#1085

Merged
membphis merged 7 commits intoapache:masterfrom
Miss-you:master
Feb 9, 2020
Merged

Modify bin/apisix to support the SO_REUSEPORT#1085
membphis merged 7 commits intoapache:masterfrom
Miss-you:master

Conversation

@Miss-you
Copy link
Copy Markdown
Member

NOTE: Please read the Contributing.md guidelines before submitting your patch:

https://github.com/apache/incubator-apisix/blob/master/Contributing.md#how-to-add-a-new-feature-or-change-an-existing-one

Summary

Modify bin/apisix to increase the capacity so that the generated nginx.conf file can open the reuseport configuration
Judgment logic:
1. If it is a mac system, do not open reuseport
2. If it is a linux system and the kernel version is higher than 3.9.0, then turn on the reuserport switch, and the reuseport option will be added when generating nginx.conf> configuration

Full changelog

bin/apisix

Issues resolved

Fix #342

…generated nginx.conf file can open the reuseport configuration

    Judgment logic:
    1. If it is a mac system, do not open reuseport
    2. If it is a linux system and the kernel version is higher than 3.9.0, then turn on the reuserport switch, and the reuseport option will be added when generating nginx.conf> configuration
bin/apisix Outdated
{% else %} {% --if enable_reuseport %}

{% for _, port in ipairs(stream_proxy.tcp or {}) do %}
listen {*port*};
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

listen {*port*} {% if enable_reuseport then %} reuseport {% end %};

This style is simpler.

Copy link
Copy Markdown
Member

@moonming moonming left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

please add test cases.

Test cases to be added after pull request # 1063

apache#1063
@Miss-you
Copy link
Copy Markdown
Member Author

Miss-you commented Jan 22, 2020

@moonming Test cases will be added after pull request # 1063
#1063

@membphis
Copy link
Copy Markdown
Member

@Miss-you #1063 had been merged already.

@spacewander
Copy link
Copy Markdown
Member

Strictly speaking, detect if a feature is available or not via kernel version is not reliable. Linux distributions may backport kernel patch to an old release (search for "SO_REUSEPORT backport for linux distribution"), not even mentioning self-patched kernel.

I think a better solution is to allow the users to configure it, since they know better about their servers than us. Maybe we can enable this feature by default, because most of the servers have kernel newer than 3.9.

@Miss-you
Copy link
Copy Markdown
Member Author

Miss-you commented Feb 3, 2020

Considering that the kernel version of the current production environment basically supports reuseport, I think it is more reasonable to open the REUSEPORT configuration file by default and supporting configuration it.

@Miss-you
Copy link
Copy Markdown
Member Author

Miss-you commented Feb 3, 2020

I remember that there are two main pits in reuseport, one is the kernel version, and the other is the support of http2 and http3.

@membphis
Copy link
Copy Markdown
Member

membphis commented Feb 3, 2020

open the REUSEPORT configuration file by default and supporting configuration it.

this way is simpler. thx @spacewander

@Miss-you Expect your new commit ^_^

…uction environment basically supports reuseport, I think it is more reasonable to open the REUSEPORT configuration file by default and supporting configuration it.

So, it's a better solution is to allow the users to configure the 'enable_reuseport'.
@Miss-you
Copy link
Copy Markdown
Member Author

Miss-you commented Feb 5, 2020

@membphis @spacewander
hi, I have add the 'enable_reuseport' config into config.yaml. Please take a look.

bin/apisix Outdated
with_module_status = with_module_status,
node_ssl_listen = 9443, -- default value
error_log = {level = "warn"},
enable_reuseport = true, -- default true
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the default value should be set in config.yaml, not here.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

bin/apisix Outdated
Comment on lines +534 to +537
if sys_conf["enable_reuseport"] == false then
enable_reuseport = false
end

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we can use the enable_reuseport in config.yaml

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

@membphis
Copy link
Copy Markdown
Member

membphis commented Feb 6, 2020

waiting your test case ^_^

update apache/incubator-apisix
conf/config.yaml Outdated
enable_debug: false
enable_dev_mode: false # Sets nginx worker_processes to 1 if set to true
enable_reuseport: true # Enable nginx SO_REUSEPORT switch if set to true.
enable_reuseport: false # Enable nginx SO_REUSEPORT switch if set to true.
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

default value true is better

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

setting enable_reuseport false to verify that test cases are working.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For testing, you can write a separate script to modify config.yaml.

@Miss-you Miss-you force-pushed the master branch 2 times, most recently from 2b61386 to 56e1d97 Compare February 7, 2020 02:29
@Miss-you Miss-you force-pushed the master branch 10 times, most recently from 5a7ec3d to 62dc89d Compare February 8, 2020 04:01
…_runner.sh

1.fix issue 'can not find openresty'
2.remove function 'check_result'
3.fix .gitignore
@membphis
Copy link
Copy Markdown
Member

membphis commented Feb 8, 2020

@membphis
Copy link
Copy Markdown
Member

membphis commented Feb 9, 2020

ok, we can merge it to master branch first for checking it can work fine.

@membphis membphis merged commit 60b2493 into apache:master Feb 9, 2020
SaberMaster pushed a commit to SaberMaster/incubator-apisix that referenced this pull request Jun 30, 2020
shreemaan-abhishek added a commit to shreemaan-abhishek/apisix that referenced this pull request Jan 2, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

CLI: check linux kernel and enable REUSEPORT if possible.

4 participants