قابلیت HA (High Availability) در سرورهای ویپ به معنای در دسترس بودن بالا است و به این معناست که اگر یکی از سرورها به هر دلیل از کار بیفتد (قطعی برق، خرابی سختافزار، مشکل نرمافزاری)، سرویس ویپ بدون قطعی و توقف، همچنان به کار خود ادامه دهد.
برای راه اندازی این قابلیت روی سرور سیموتل به موارد زیر نیاز داریم:
- سرور سیموتل: به تعداد 3 به بالا (تعداد باید فرد باشد) که در این سناریو 3 سرور در نظر گرفته شده است.
- IP: به تعداد سرور های سیموتل یکی بیشتر IP نیاز داریم که در شبکه باهم ارتباط داشته باشند.
- لایسنس: به تعداد سیموتل ها لایسنسی که در HA پشتیبانی میکند.
در این سناریو 3 سرور داریم که دو سرور HA و یک سرور Voter که به عنوان تصمیم گیرنده به کار میرود و اطلاعات آن به شرح زیر است:
Float: 192.168.1.10
HA1: 192.168.1.11
HA2: 192.168.1.12
Voter: 192.168.1.13
- ابتدا دامنه مربوط به سه mongo سرور های HA1(S1) و HA2 (S2) و Voter (S3) را باتوجه به IP سرور ها در فایل etc/hosts هر سه سرور وارد مینماییم:
192.168.1.11 s1.mongodb.local
192.168.1.12 s2.mongodb.local
192.168.1.13 s3.mongodb.local
توجه: به دلیل اینکه دامنه های بالا را در هر 3 سرور وارد میکنیم، قاعدتا ip مربوط به سروری که در آن هستیم LoopBack خواهد بود. به عنوان مثال اگر در سرور HA1 باشیم اطلاعات به شرح زیر است:
127.0.0.1 s1.mongodb.local
192.168.21.233 s2.mongodb.local
192.168.21.231 s3.mongodb.local
- در یکی از سرور ها (ترجیحا HA1) فایل key تولید میکنیم:
openssl rand -base64 756 > /usr/src/mongodb/key
سپس این فایل را به دو سرور دیگر در همان مسیر منتقل میکنیم. میتوانیم با استفاده از نرم افزار WinSCP و پروتکل SFTPاین کار را بکنیم یا با دستور زیر به صورت مستقیم فایل را به سرور های دیگر جا به جا کنیم:
scp /usr/src/mongodb/key adminz@192.168.1.12:/home/adminz
سپس در هر 3 سرور سطح دسترسی این فایل را تغییر میدهیم:
chmod 400 /usr/src/mongodb/key
- با دستور ادیتور وارد فایل mongo.conf میشویم و به صورت زیر edit میکنیم:
nano /usr/src/mongodb/conf/mongo.conf
مقدار زیر را از آی پی LoopBack به 0.0.0.0 تغییر میدیم:
bindIp: 0.0.0.0
و بعد مقادیر زیر را عینا با رعایت فاصله در انتهای فایل اضافه میکنیم:
keyFile: /usr/src/mongodb/key
replication:
oplogSizeMB: 4096
replSetName: rs0
که در انتها مانند عکس زیر میشود:
متن ها همگی زیر هم در یک ستون قرار دارند و فاصله 3 اسپیس از شروع خط میباشد.
بعد برای اعمال تغییرات در هر سه سرور باید سرویس mongo را ریست کنیم که در دو سرور HA به دلیل نصب بودن simotel میتوانیم از دستور زیر استفاده کنیم:
simotelhelper db stop
simotelhelper db start
در سرور voter که سیموتل نصب نشده اول باید کد PID مربوط process مونگو رو پیدا کنیم:
ps aux | grep mongo
سپس با توجه به کد داده شده فرآنید را kill میکنیم:
kill 837
توجه: اگر تنظیمات را به درستی وارد کرده باشیم سرویس مونگو استارت میشود در غیر اینصورت در فعال کردن سرویس دچار مشکل میشوید.
4. در این مرحله پیشنهاد میشود به صورت دستی فایل های مخصوص به دیتابیس هر سه سرور یکسان شود به این صورت گه اگر سیموتل قدیمی داریم که حاوی اطلاعات هستش حتما بکاپ سیموتل در HA2 نیز بازیابی شود و دایرکتوری های مونگو HA1 به دو سرور دیگر نیز منتقل شود که مسیر زیر میباشد:
/usr/src/mongodb/*
با این حال بعد اتصال دیتابیس ها با یکدیگر Replication انجام خواهند داد و اطلاعات جا به جا میشود فقط ممکن است طولانی شود.
- در این مرحله توجه شود که حتما وارد سرور HA1 میشویم و به مونگو متصل شده و در ادامه دستورات زیر را عینا مزنیم:
simotelhelper db connect
use Simotel
rs.initiate()
cfg = rs.conf()
cfg.members[0].host = "s1.mongodb.local:27017"
rs.reconfig(cfg)
rs.add("s2.mongodb.local:27017")
rs.addArb("s3.mongodb.local:27017")
سپس مجدد سرویس mongo رو ریست میدهیم:
simotelhelper db stop
simotelhelper db start
- حال باید سرویس HA را در سیموتل نصب کنیم، برای این کار باید لایسنس های مورد نظر سرویس HA فعال و تایید شده باشد و بعد دستور های زیر را وارد کنیم:
simotelhelper initiate
simotelhelper update check
simotelhelper update ha
- حال باید در فایل simotel.ini هردو سرور HA تغییرات زیر را بدهیم:
(خط اول کامنت شده و متن زیر جایگزین میشود)
mongodb_connection_string = mongodb://appuser:apPUsEr@s1.mongodb.local:27017,s2.mongodb.local:27017/?replicaSet=rs0
مانند تصویر زیر:

حال سرویس سیموتل را در هر دو سرور ریست میدهیم:
اگر تا اینجای کار مراحل را درست پیشرفته باشیم وقتی وارد مونگو های سه سرور زیر شویم اسم مونگو ها به شرح زیر میباشد:
HA1: PRIMARY
HA2: SECONDARY
Voter: ARBITER
توجه برای اتصال به مونگو سرور Voter میتوانیم از دستور زیر استفاده نماییم:
/usr/src/mongodb/bin/mongo --authenticationDatabase admin -u appuser -p apPUsEr
- حال باید کارت شبکه سیموتل را تنظیم کنیم
وارد پنل سیموتل شده و منوی Maintenance → Network میشویم که باید دو کارت شبکه سرورهای HA یک و دو را به همراه اطلاعاتشون وارد کنیم و بعد برای هر دو کارت شبکه SubEther برای IP Float تنظیم نماییم .
Server name:
حتما حتما باید نام سرور لینوکس مربوطه را وارد کنیم.
Interface:
اسم کارت شبکه مورد نظر
Address:
آی پی کارت شبکه
Netmask:
با فرمت 255.255.255.0 وارد میکنیم.
Gateway:
آی پی گیت وی
Float:
باید تعیین کنیم این اینترفیس float هست یا خیر ( حتما باید اول no و بعد yes قرار دهیم)
برای آیپی فلوت باید interface را به صورت ساب اتر تایپ کنیم ens192:1تا در سرور اضافه شود.
ARPPing:
این بخش مربوط به IP Float بوده و ip مقصد های مهم که به سرور ما وصل هستند مثل Gatewaye,SBC,FXO,DLSAM,FXS و … را وارد میکنیم تا سریع تر شناسایی و وصل شوند.
-
حال وارد منوی Maintenance → Settings میشویم و PBX IP را به IP Float تغییر میدهیم تا پورت SIP روی این IP بایند شود.
-
در منوی Control Panel → HA میتوانیم وضعیت HA را مشاهده کنیم
HA State:
نمایش میدهد که دیتابیس روی کدام سرور در حال فعالیت است که در این مثال روی HA2 میباشد و برای تغییر آن باید وارد مونگو سور Primary بشویم و دستور زیر را بزنیم:
rs.stepDown()
توجه: این دستور به هیچ عنوان در مونگو Secondary زده نشود.
توجه 2: برای اطمینان از اینکه کدام مونگو در چه وضعیتی قرار دارد بهتر و دقیقتر است که از شل لینوکس وارد مونگو شویم و میتوانیم در آنجا وضعیت PRIMARY یا SECONDARY را بررسی کنیم.
Float IP:
نمایش میدهد که این IP روی کدوم سرور وجود داره و در اصل سرویس سیموتل روی کدام سرور فعالیت میکند.
که برای جا به جایی آن میتوانیم در تنظیمات مقدار اولویت یا Priority را تغییر دهیم و سروری که عدد آن بیشتر باشد در اولویت بالاتری قرار دهد.




