ຫຼາຍຄົນເລີ່ມສ້າງ 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 ເປັນຫຼັກຖານ
ເຄື່ອງສໍາລັບການທົດລອງ
- [email protected] : Web Server (NGINX+PHP-FPM)
- [email protected] : Redis Server
ຂໍຂ້າມຂະບວນການຕິດຕັ້ງ Web Server ໄປເລີຍ ຫຼື ໃຜຍັງບໍ່ເຄີຍຕິດຕັ້ງ ສາມາດກັບໄປອ່ານບົດຄວາມເກົ່າໄດ້ ທີ່ນີ້
ການຕິດຕັ້ງ Redis Server (SV2)
yum -y install epel-release yum -y update yum -y install redis
ຕັ້ງ Password ເພື່ອຄວາມປອດໄພໂດຍຄົ້ນຫາ requirepass ປົກກະຕິ ຖ້າຕິດຕັ້ງຜ່ານ Package Install ໄຟລ config ຈະຢູ່ທີ່ /etc/redis.conf ແລະ ຕັ້ງ Password ໄດ້ເລີຍໃນທີ່ນີ້ ເຮົາຕັ້ງ Password ວ່າ Putter ແລະ ຕັ້ງຄ່າ Bind ເພື່ອໃຫ້ລໍຖ້າ connect ຈາກເຄື່ອງອື່ນໆ ໃນນີ້ເຮົາໃສ່ 0.0.0.0 ໄວ້ເພື່ອທົດລອງເທົ່ານັ້ນ ຫາກນໍາໃຊ້ໃນ Production ແທ້ ຄວນ Allow ສະເພາະ IP Addess ຂອງເຄື່ອງທີ່ຈະມາ connect ເທົ່ານັ້ນ
ຫຼັງຈາກນັ້ນ 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
ໂດຍປົກກະຕິ php ຈະເກັບ session ໄວ້ທີ່ /var/lib/php/session
ຕໍ່ໄປເປັນການປ່ຽນການເກັບ Session ໃຫ້ໄປຝາກໄວ້ທີ່ Redis ແກ້ໄຟລ php.ini ຕາມນີ້
session.save_handler = redis session.save_path = "tcp://172.16.209.137:6379?auth=Putter"
ສໍາເລັດແລ້ວໃຫ້ restart web server ທົດລອງນໍາໃຊ້ session