FreeBSD 10のEjabberd 14.x:インストールと基本設定

良い一日!



小さな序文:少し前に13日がリリースされましたが、今年はejabberdの14番目のバージョンもそれに続きます。 プロセス1は、いくつかの理由でバージョン管理スキームを変更することを決定し、バージョン2.xは廃止されたと見なされています。 新しいejabberdは、ejabberd Community Serverとejabberd Business Editionの2つのブランチに分かれており、非常に活発に開発され始めています。



私たちの場合、ノードごとにかなり多くの接続(〜100k)をサポートする必要があるため、FreeBSDがシステムとして選択されました。



システムのインストールを停止する理由はありませんので、すぐに設定に進みます。



Ejabberdはそのデータの一部をmysqlに保存するため、odbcライブラリをシステムにインストールする必要があります。 また、PHPで外部認証スクリプトを使用するため、PHPも必要です。



ステージ1:



前提条件を設定します(git、fop、libyaml、wget、unixODBC、expat、wx30-gtk2、php5など):



pkg install git fop libyaml wget unixODBC-2.3.2 expat wx30-gtk2 php5 ... (+ )





cd /usr/ports/java/openjdk7/





make install clean







Erlangの最新バージョンをダウンロードします(記事17.2.2の執筆時点)。



mkdir /usr/local/src && cd /usr/local/src





git clone git://github.com/erlang/otp.git







組み立てて配置します。

cd /usr/local/src/otp





autoconf -f





./configure --prefix=/usr/local --enable-kernel-poll --with-ssl --enable-threads --with-odbc --enable-smp-support





gmake





gmake install







次に、ejabberdとejabberd-contribをダウンロードします。

cd /usr/local/src





git clone git://github.com/processone/ejabberd.git





git clone git://github.com/gamenet/ejabberd-contrib.git







ユーザーejabberdを作成し、ホームディレクトリとして/ var / lib / ejabberdを指定します。



ejabberdをビルドしてインストールします。

cd /usr/local/src/ejabberd





autoconf -f





./configure --enable-mysql=yes --enable-odbc=yes --enable-lager=yes --prefix=/usr/local --localstatedir=/var --enable-user=ejabberd





gmake && gmake install







erlangとejabberdをビルドするとき、さまざまなニュアンスが発生する可能性がありますが、/ usr / local / libから多数のシンボリックリンクを作成する必要がある場合は| / usr / libに含める| LDFLAGS / CPPFLAGSを含めるか、「遊ぶ」。



mod_admin_extraをコンパイルして、ejabberdctlおよびxmlrpcで使用可能なコマンドのリストを展開します。

cd /usr/local/src/ejabberd-contrib/mod_admin_extra





./build.sh





cp ./ebin/mod_admin_extra.beam /usr/local/lib/ejabberd/ebin/







ステージ2:



メインの構成ファイルejabberd.ymlには、開発者からの例とコメントが豊富に含まれているため、構成するのは難しくありません。 タブはyaml-configurationファイルでは重要です。Habrエディターは私からそれを食べたので、注意してください! いくつかのパラメーターについてのみ説明します。



hosts:





- "youserver.com"







ejabberd_c2sセクションで:

backlog: 1024







外部認証の場合:

auth_method: external





extauth_program: "/usr/local/bin/<_>.php"





extauth_instances: 12





extauth_cache: 72000







mysqlに接続するには:

odbc_type: mysql





odbc_server: "mysql_server_ip"





odbc_database: "dbname"





odbc_username: "username"





odbc_password: "password"





odbc_pool_size: 16





odbc_keepalive_interval: 600







「管理者」を登録します。

admin:





user:





- "admin": "yourserver.com"







mysqlで動作するようにモジュールの一部を切り替えます:

mod_last:





db_type: odbc





mod_muc:





db_type: odbc





mod_offline:





db_type: odbc





mod_privacy:





db_type: odbc





mod_private:





db_type: odbc





mod_roster:





db_type: odbc





mod_shared_roster:





db_type: odbc





mod_vcard:





db_type: odbc







mod_admin_extraを接続します。

mod_admin_extra: {}







ejabberdctl.cfgを修正します(パラメーターは個別ですが、私たちに登録されているものを引用しています)。

ERL_MAX_PORTS=524288





FIREWALL_WINDOW=4200-4210





ERL_PROCESSES=5000000





ERL_MAX_ETS_TABLES=262144





ERLANG_NODE=ejabberd@node1







mysqlサーバーに移動し、そこにデータベースを作成して、ejabberdソースのsqlフォルダーからmysql.sqlのダンプを入力します。



発射!

su - ejabberd





ejabberdctl start







管理ユーザーを作成します。

ejabberdctl register admin yourserver.com password







ステージ3:

クラスターを作成するには、別のサーバーを使用して、上記の手順に従います。

ノード間の複製が正しく機能する(そして実際にクラスターを構築する)ためには、ノードがポート4369とFIREWALL_WINDOWで指定したポートで互いに接続できる必要があります。



ファイル/var/lib/ejabberd/.erlang_cookieを最初のノードから2番目のノードにコピーし、ノード間の接続に問題がない場合は、クラスターをアセンブルします。

su - ejabberd





erl -sname ejabberd@node2 -mnesia dir '"/var/lib/ejabberd/"' -mnesia extra_db_nodes "['ejabberd@node1']" -s mnesia





呼び出しmnesia:info()。

すべてが順調であれば、実行中のdbノードのリストに両方のノードがあります。

テーブルの保存スキームを変更し、終了して実行します。

mnesia:change_table_copy_type(schema, node(), disc_copies).





q().





ejabberdctl start







ステージ4:

システムパラメータについて少し:

loader.conf
 kern.ipc.maxsockets=2400000. kern.ipc.nmbclusters=0 net.inet.tcp.reass.maxsegments=2048 vm.pmap.shpgperproc=400 hw.em.rxd=4096 hw.em.txd=4096 hw.em.rx_int_delay=100 hw.em.tx_int_delay=100 hw.em.rx_abs_int_delay=1000 hw.em.tx_abs_int_delay=1000 dev.em.rx_processing_limit=-1 net.inet.tcp.hostcache.hashsize=4096 net.inet.tcp.hostcache.bucketlimit=100 net.inet.tcp.hostcache.cachelimit=65536 net.inet.tcp.syncache.hashsize=4096 net.inet.tcp.syncache.bucketlimit=120 net.inet.tcp.syncache.cachelimit=131072 net.inet.tcp.tcbhashsize=524288 net.isr.defaultqlimit=4096 net.isr.bindthreads=1 net.isr.maxthreads=4 net.link.ifqmaxlen=1024
      
      





sysctl.conf
 kern.ipc.shm_use_phys=1 kern.ipc.somaxconn=8192 kern.maxfiles=3000000 kern.maxfilesperproc=2700000 kern.maxvnodes=256000 kern.random.sys.harvest.ethernet=0 kern.random.sys.harvest.interrupt=0 kern.sync_on_panic=1 net.inet.icmp.bmcastecho=0 net.inet.icmp.drop_redirect=1 net.inet.icmp.maskrepl=0 net.inet.ip.intr_queue_maxlen=256 net.inet.ip.maxfragpackets=1024 net.inet.ip.portrange.first=1024 net.inet.ip.portrange.last=65535 net.inet.ip.portrange.randomized=0 net.inet.ip.redirect=0 net.inet.ip.sourceroute=0 net.inet.ip.accept_sourceroute=0 net.inet.tcp.blackhole=2 net.inet.tcp.drop_synfin=1 net.inet.tcp.fast_finwait2_recycle=1 net.inet.tcp.finwait2_timeout=3000 net.inet.tcp.hostcache.expire=1200 net.inet.tcp.keepinit=5000 net.inet.tcp.maxtcptw=65536 net.inet.tcp.msl=5000 net.inet.tcp.recvbuf_auto=0 net.inet.tcp.recvspace=65536 net.inet.tcp.sendbuf_auto=0 net.inet.tcp.sendspace=131072 net.inet.tcp.syncookies=1 net.inet.tcp.tso=0 net.inet.udp.blackhole=1 net.inet.udp.recvspace=32768 net.isr.direct=1 net.route.netisr_maxqlen=1024 vfs.ufs.dirhash_maxmem=100000000
      
      










すべてが順調に進んだ場合、Running Nodesのadmin youserver.com:5280/admin/nodes/に行くと両方のノードになります。



mod_admin_extraは、ejabberdctlを介して渡すことができるコマンドのリストを大幅に拡張します。 ejabberd_xmlrpcモジュールをアクティブのままにした場合(バージョン13以降ejabberdに組み込まれている)、jabberサーバーへのコマンドはXmlRPCを介して送信することもできます。 例えば、私たちは、PHPで書かれた特別な労働者を通して、名簿、グループ、vcard'amiなどを管理します。 しかし、実際には、何からでもxmlrpcに接続できます。



消費されたリソースについては、10万人の接続ユーザーに対して、25〜30 Gb未満のメモリが必要です(これはほとんどのデータをmysqlに保存する場合、つまり、純粋に接続クライアントにサービスを提供する場合です)。 データをmnesiaに保存する場合、その数値は100 Gb以上に簡単に達することができますが、それはすべてユーザーの数とデータベース内のデータに依存します。



残念ながら、何万人もの接続ユーザーで動作するejabberdのオンラインインストールの成功例はほとんどありません。 個人的には、大幅にパッチが適用されたejabberdがWhatsAppサービスの基礎であるという「うわさ」だけに出会いました。 そして、アーランはそれ自体、別の曲であり、アプローチを見つけるのが難しい場合があります:) ejabberdメーリングリストも半分死んでおり、高負荷で起こりうる問題について誰かと相談することは問題です。苦い経験を​​持つ。 ejabberdが(2013年後半までの期間と比較して)非常に活発に開発されていることを嬉しく思います。新しい機能が登場します。 今年、2.xバージョンから残されたバグや新たに取得したバグを定期的に修正するコミュニティの主要な貢献者が数人現れました。



サービスでejabberdを使用する「共犯者」を見つけられることを嬉しく思います。生産的な経験をお互いに共有できるかもしれません。



PS欠点を指摘することに感謝し(できればPMで)、コメントを歓迎します。 よろしくお願いします!




All Articles