良い一日!
小さな序文:少し前に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 cleanErlangの最新バージョンをダウンロードします(記事17.2.2の執筆時点)。
mkdir /usr/local/src && cd /usr/local/srcgit clone git://github.com/erlang/otp.git組み立てて配置します。
cd /usr/local/src/otpautoconf -f./configure --prefix=/usr/local --enable-kernel-poll --with-ssl --enable-threads --with-odbc --enable-smp-supportgmakegmake install次に、ejabberdとejabberd-contribをダウンロードします。
cd /usr/local/srcgit clone git://github.com/processone/ejabberd.gitgit clone git://github.com/gamenet/ejabberd-contrib.gitユーザーejabberdを作成し、ホームディレクトリとして/ var / lib / ejabberdを指定します。
ejabberdをビルドしてインストールします。
cd /usr/local/src/ejabberdautoconf -f./configure --enable-mysql=yes --enable-odbc=yes --enable-lager=yes --prefix=/usr/local --localstatedir=/var --enable-user=ejabberdgmake && gmake installerlangとejabberdをビルドするとき、さまざまなニュアンスが発生する可能性がありますが、/ usr / local / libから多数のシンボリックリンクを作成する必要がある場合は| / usr / libに含める| LDFLAGS / CPPFLAGSを含めるか、「遊ぶ」。
mod_admin_extraをコンパイルして、ejabberdctlおよびxmlrpcで使用可能なコマンドのリストを展開します。
cd /usr/local/src/ejabberd-contrib/mod_admin_extra./build.shcp ./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: externalextauth_program: "/usr/local/bin/<_>.php"extauth_instances: 12extauth_cache: 72000mysqlに接続するには:
odbc_type: mysqlodbc_server: "mysql_server_ip"odbc_database: "dbname"odbc_username: "username"odbc_password: "password"odbc_pool_size: 16odbc_keepalive_interval: 600「管理者」を登録します。
admin:user:- "admin": "yourserver.com"mysqlで動作するようにモジュールの一部を切り替えます:
mod_last:db_type: odbcmod_muc:db_type: odbcmod_offline:db_type: odbcmod_privacy:db_type: odbcmod_private:db_type: odbcmod_roster:db_type: odbcmod_shared_roster:db_type: odbcmod_vcard:db_type: odbcmod_admin_extraを接続します。
mod_admin_extra: {}ejabberdctl.cfgを修正します(パラメーターは個別ですが、私たちに登録されているものを引用しています)。
ERL_MAX_PORTS=524288FIREWALL_WINDOW=4200-4210ERL_PROCESSES=5000000ERL_MAX_ETS_TABLES=262144ERLANG_NODE=ejabberd@node1mysqlサーバーに移動し、そこにデータベースを作成して、ejabberdソースのsqlフォルダーからmysql.sqlのダンプを入力します。
発射!
su - ejabberdejabberdctl start管理ユーザーを作成します。
ejabberdctl register admin yourserver.com passwordステージ3:クラスターを作成するには、別のサーバーを使用して、上記の手順に従います。
ノード間の複製が正しく機能する(そして実際にクラスターを構築する)ためには、ノードがポート4369とFIREWALL_WINDOWで指定したポートで互いに接続できる必要があります。
ファイル/var/lib/ejabberd/.erlang_cookieを最初のノードから2番目のノードにコピーし、ノード間の接続に問題がない場合は、クラスターをアセンブルします。
su - ejabberderl -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で)、コメントを歓迎します。 よろしくお願いします!