Rinetd是為在一個Unix和Linux作業系統中為重定向傳輸控制協議(TCP)連接的一個工具。Rinetd是單一過程的伺服器,它處理任何數量的連接到在設定檔etc/rinetd中指定的位址/埠對。儘管rinetd使用非閉鎖I/O運行作為一個單一過程,它可能重定向很多連接而不對這台機器增加額外的負擔。
centos安裝
32位元系統
$ vim /etc/yum.repos.d/nux-misc.repo [nux-misc] name=Nux Misc baseurl=http://li.nux.ro/download/nux/misc/el6/i386/ enabled=0 gpgcheck=1 gpgkey=http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
64位元系統
$ vim /etc/yum.repos.d/nux-misc.repo: [nux-misc] name=Nux Misc baseurl=http://li.nux.ro/download/nux/misc/el6/x86_64/ enabled=0 gpgcheck=1 gpgkey=http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
ubuntu
$ apt-get install rinetd
編譯安裝
$ wget http://www.boutell.com/rinetd/http/rinetd.tar.gz $ mkdir -p /usr/man/man8 $ make && make install
設定檔配置
[bindaddress] [bindport] [connectaddress] [connectport] 綁定的位址 綁定的埠 連接的位址 連接的埠 [Source Address] [Source Port] [Destination Address] [Destination Port] 源位址 源埠 目的地址 目的埠
範例
# rinetd supports logging - to enable, uncomment the following # logfile /var/log/rinetd.log # by default, logs are in a tab-delimited format. Web common-log format # is available by uncommenting the following # logcommon 0.0.0.0 3309 mysql.test 3306
啟動Rinetd
$ /etc/init.d/rinetd start
編譯手動指定設定檔起動
$ /usr/sbin/rinetd -c /etc/rinetd.conf
停止
$ /etc/init.d/rinetd stop $ pkill rinetd
商用環境不建議使用rinetd 原因是這套無法支持長連線轉發 rinetd 沒有使用epoll,而是用了select
眾所周知, select是基於類似的輪訓的機制,反復去查詢fd的情況,並且會在內核空間和使用者空間拷貝fd集合
在IO比較高的情況下,select相比epoll有更高的CPU消耗,並且select默認最大支持1024個fd
所以rinetd才把CPU打的比較高,導致轉發服務異常
參考資料
https://www.hi-linux.com/posts/29683.html
https://blog.csdn.net/woshiaotian/article/details/78133195
https://www.moerats.com/archives/576/