ຝາກ Session ໄວ້ທີ່ Redis ເພື່ອໃຫ້ງ່າຍຕໍ່ການ Scale Web Application

ຝາກ Session ໄວ້ທີ່ Redis ເພື່ອໃຫ້ງ່າຍຕໍ່ການ Scale Web Application

ຫຼາຍຄົນເລີ່ມສ້າງ Web Scale ພວກ Load Balancer , HA ຕ່າງໆ ບັນຫາທໍາອິດທີ່ພົບກໍໜ້າຈະເປັນເລື່ອງຂອງ Session ຫຼຸດ ເພາະລືມຄິດເຖິງ Application ທີ່ມີການນໍາໃຊ້ Session ໂດຍ default ແລ້ວ session ກໍຈະຕິດຢູ່ໃນ Web Server ຂອງໃຜມັນ ພໍເວລາ Load Balancer ກະຈາຍໂຫຼດໄປທີ່ Web Server ເຄື່ອງອື່ນໆ ກໍຈະເຮັດໃຫ້ session ຫຼຸດ ວິທີແກ້ມີຢູ່ 2 ທາງຄື

1 ) ສ້າງ Load Balance ໃນໂໝດ Sticky ຫຼືເວົ້າງ່າຍໆຄື ຫາກມີ Client ເຊື່ອມມາແລ້ວ server load balance ເລືອກໃຫ້ເລີຍວ່າຄົນນີ້ເຂົ້າເຄື່ອງໃດ ກໍຈະເຂົ້າ web server ເຄື່ອງເກົ່າຕະຫຼອດ ເຮັດໃຫ້ session ບໍ່ຫຼຸດ ແຕ່ໃນຄວາມເຫັນສ່ວນຕົວນັ້ນເຫັນວ່າບໍ່ຄ່ອຍດີ ເພາະ Load Balance ຈະຕ້ອງເພີ່ມຂະບວນການກວດກາໃນສ່ວນນີ້ເຮັດໃຫ້ມີ Overhead ຕ່າງໆເຂົ້າມາອີກ

2) ແຊ session ໄວ້ບ່ອນດຽວ ແລະ ໃຫ້ Web Server ເຂົ້າມາອ່ານ Session ບ່ອນດຽວກັນ ວິທີນີ້ເຮົາຈະນໍາສະເໜີໃນບົດຄວາມນີ້ ເຊິ່ງຊ່ວງທໍາອິດເຮົາເຄີຍ Share ຜ່ານ NFS ແລະ mount path Session ມານໍາໃຊ້ ບັນຫາກໍຄືໄຟລ session ຖືກເກັບໃນ Disk ແລະ ເລື່ອງຂອງ Overhead ຂອງ NFS ອີກມັນກໍເລີຍຊ້າ ປ່ຽນມາເປັນ Redis ເຊິ່ງເປັນ key value Storage ຂໍ້ມູນຈະຖືກ Store ໄວ້ໃນແຣມເຮັດໃຫ້ໄວກວ່າ NFS ຫຼາຍເທົ່າ ເລີຍປ່ຽນມາເປັນ Redis ຈົນເຖິງປະຈຸບັນກໍຍັງໃຊ້ redis ເກັບ session ເປັນຫຼັກຖານ

ເຄື່ອງສໍາລັບການທົດລອງ

ຂໍຂ້າມຂະບວນການຕິດຕັ້ງ Web Server ໄປເລີຍ ຫຼື ໃຜຍັງບໍ່ເຄີຍຕິດຕັ້ງ ສາມາດກັບໄປອ່ານບົດຄວາມເກົ່າໄດ້ ທີ່ນີ້

ການຕິດຕັ້ງ Redis Server (SV2)

yum -y install epel-release
yum -y update
yum -y install redis

Screen Shot 2558-12-14 at 6.20.06 PM

ຕັ້ງ Password ເພື່ອຄວາມປອດໄພໂດຍຄົ້ນຫາ requirepass ປົກກະຕິ ຖ້າຕິດຕັ້ງຜ່ານ Package Install ໄຟລ config ຈະຢູ່ທີ່ /etc/redis.conf ແລະ ຕັ້ງ Password ໄດ້ເລີຍໃນທີ່ນີ້ ເຮົາຕັ້ງ Password ວ່າ Putter ແລະ ຕັ້ງຄ່າ Bind ເພື່ອໃຫ້ລໍຖ້າ connect ຈາກເຄື່ອງອື່ນໆ ໃນນີ້ເຮົາໃສ່ 0.0.0.0 ໄວ້ເພື່ອທົດລອງເທົ່ານັ້ນ ຫາກນໍາໃຊ້ໃນ Production ແທ້ ຄວນ Allow ສະເພາະ IP Addess ຂອງເຄື່ອງທີ່ຈະມາ connect ເທົ່ານັ້ນ

screen1

Screen Shot 2558-12-14 at 6.40.42 PM

ຫຼັງຈາກນັ້ນ start service ແລະ ທົດລອງ access ນໍາເຂົ້າ redis server

redis-cli -h 172.16.209.137
redis 172.16.209.137:6379> keys *
(error) ERR operation not permitted
redis 172.16.209.137:6379> AUTH Putter
OK
redis 172.16.209.137:6379> keys *
(empty list or set)
redis 172.16.209.137:6379> 

ຈາກການທົດລອງຈະເຫັນວ່າ Access ເຂົ້າໜ້າເຊີບເວີຂອງ redis ໄດ້ ແລະ ເຮົາໄດ້ AUTH ດ້ວຍ password ທີ່ຕັ້ງໄວ້ ຫຼັງຈາກນັ້ນລອງສະແດງຂໍ້ມູນດ້ວຍຄໍາສັ່ງ keys * ສໍາເລັດການຕິດຕັ້ງ Redis Server ສໍາລັບເກັບ Session


ຕັ້ງຄ່າ php.ini ເພື່ອເກັບ Session ໄວ້ທີ່ Redis
(SV1)

ຕິດຕັ້ງ redis extension

pecl install redis

ແລະນໍາ extension=redis.so ໄປໃສ່ໄວ້ໃນ php.ini ດ້ວຍ ຫຼັງຈາກນັ້ນທົດລອງເຂົ້າ phpinfo ເພື່ອກວດເບິ່ງ extension

Screen Shot 2558-12-14 at 7.05.27 PM

ໂດຍປົກກະຕິ php ຈະເກັບ session ໄວ້ທີ່ /var/lib/php/session

Screen Shot 2558-12-14 at 6.53.17 PM

ຕໍ່ໄປເປັນການປ່ຽນການເກັບ Session ໃຫ້ໄປຝາກໄວ້ທີ່ Redis ແກ້ໄຟລ php.ini ຕາມນີ້

session.save_handler = redis
session.save_path = "tcp://172.16.209.137:6379?auth=Putter"

ສໍາເລັດແລ້ວໃຫ້ restart web server ທົດລອງນໍາໃຊ້ session

Screen Shot 2558-12-14 at 7.50.38 PM

ຖ້າບໍ່ມີຫຍັງຜິດພາດ Session ຈະຖືກນໍາມາເກັບໄວ້ທີ່ Redis Server

Screen Shot 2558-12-14 at 7.52.07 PM

 

ຫາກເອົາໄປນໍາໃຊ້ໃນ Production ຄວນວາງ Redis Server ໄວ້ເປັນ Private Zone ແລະ Allow ສະເພາະ IP Web Server ທີ່ຈະ access ເທົ່ານັ້ນ ແລະ ຕ້ອງເພີ່ມໃນສ່ວນຂອງການສ້າງ fail over ປ້ອງກັນ redis ເສຍຫາຍ ໄວ້ບົດຄວາມໜ້າຈະມາຂຽນລາຍລະອຽດຂອງການສ້າງ Redis Cluster ຕໍ່ໃຫ້ອີກ