{"id":34879,"date":"2024-08-15T16:47:04","date_gmt":"2024-08-15T09:47:04","guid":{"rendered":"http:\/\/jupitek.maudemo.vip\/index.php\/2024\/08\/15\/streaming-data-processing-with-apache-storm\/"},"modified":"2026-05-14T10:28:56","modified_gmt":"2026-05-14T09:28:56","slug":"streaming-data-processing-with-apache-storm","status":"publish","type":"post","link":"https:\/\/jupitek.maudemo.vip\/index.php\/2024\/08\/15\/streaming-data-processing-with-apache-storm\/","title":{"rendered":"X\u1eed l\u00fd d\u1eef li\u1ec7u Streaming v\u1edbi Apache Storm"},"content":{"rendered":"<p><a href=\"http:\/\/storm.apache.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">Apache Storm<\/a>&nbsp;l\u00e0 c\u00f4ng ngh\u1ec7 d\u1eef li\u1ec7u l\u1edbn cho ph\u00e9p c\u00e1c k\u1ef9 s\u01b0 ph\u1ea7n m\u1ec1m, d\u1eef li\u1ec7u v\u00e0 c\u01a1 s\u1edf h\u1ea1 t\u1ea7ng x\u1eed l\u00fd d\u1eef li\u1ec7u t\u1ed1c \u0111\u1ed9 cao, kh\u1ed1i l\u01b0\u1ee3ng l\u1edbn theo th\u1eddi gian th\u1ef1c v\u00e0 tr\u00edch xu\u1ea5t th\u00f4ng tin h\u1eefu \u00edch. B\u1ea5t k\u1ef3 d\u1ef1 \u00e1n n\u00e0o li\u00ean quan \u0111\u1ebfn vi\u1ec7c x\u1eed l\u00fd lu\u1ed3ng d\u1eef li\u1ec7u t\u1ed1c \u0111\u1ed9 cao theo th\u1eddi gian th\u1ef1c \u0111\u1ec1u c\u00f3 th\u1ec3 h\u01b0\u1edfng l\u1ee3i t\u1eeb c\u00f4ng ngh\u1ec7 n\u00e0y.<\/p>\n<p><a href=\"https:\/\/zookeeper.apache.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">Zookeeper<\/a>&nbsp;l\u00e0 c\u00f4ng ngh\u1ec7 h\u1ec7 th\u1ed1ng ph\u00e2n t\u00e1n quan tr\u1ecdng m\u00e0 Storm ph\u1ee5 thu\u1ed9c v\u00e0o \u0111\u1ec3 ho\u1ea1t \u0111\u1ed9ng ch\u00ednh x\u00e1c.<\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/www.linode.com\/docs\/guides\/big-data-in-the-linode-cloud-streaming-data-processing-with-apache-storm\/big_data_linode_cloud_hu1057ad67b49c943a23d490ccf2178eda_465039_1388x0_resize_q71_bgfafafc_catmullrom_3.jpg\" alt=\"D\u1eef li\u1ec7u l\u1edbn trong Linode Cloud: X\u1eed l\u00fd d\u1eef li\u1ec7u ph\u00e1t tr\u1ef1c tuy\u1ebfn v\u1edbi Apache Storm\" title=\"D\u1eef li\u1ec7u l\u1edbn trong Linode Cloud: X\u1eed l\u00fd d\u1eef li\u1ec7u ph\u00e1t tr\u1ef1c tuy\u1ebfn v\u1edbi Apache Storm\"\/><\/figure>\n<p>M\u1ed9t s\u1ed1 tr\u01b0\u1eddng h\u1ee3p s\u1eed d\u1ee5ng m\u00e0 Storm l\u00e0 gi\u1ea3i ph\u00e1p t\u1ed1t:<\/p>\n<ul>\n<li>Ph\u00e2n t\u00edch d\u1eef li\u1ec7u Twitter (v\u00ed d\u1ee5: d\u1ef1 \u0111o\u00e1n xu h\u01b0\u1edbng ho\u1eb7c ph\u00e2n t\u00edch t\u00ecnh c\u1ea3m)<\/li>\n<li>Ph\u00e2n t\u00edch th\u1ecb tr\u01b0\u1eddng ch\u1ee9ng kho\u00e1n<\/li>\n<li>Ph\u00e2n t\u00edch nh\u1eadt k\u00fd m\u00e1y ch\u1ee7<\/li>\n<li>X\u1eed l\u00fd d\u1eef li\u1ec7u c\u1ea3m bi\u1ebfn Internet v\u1ea1n v\u1eadt (IoT)<\/li>\n<\/ul>\n<p>H\u01b0\u1edbng d\u1eabn n\u00e0y gi\u1ea3i th\u00edch c\u00e1ch t\u1ea1o c\u1ee5m Storm tr\u00ean \u0111\u00e1m m\u00e2y Linode b\u1eb1ng m\u1ed9t t\u1eadp l\u1ec7nh shell s\u1eed d\u1ee5ng Giao di\u1ec7n l\u1eadp tr\u00ecnh \u1ee9ng d\u1ee5ng (API) c\u1ee7a Linode \u0111\u1ec3 t\u1ea1o v\u00e0 c\u1ea5u h\u00ecnh c\u00e1c c\u1ee5m l\u1edbn theo ch\u01b0\u01a1ng tr\u00ecnh. T\u1ea5t c\u1ea3 c\u00e1c t\u1eadp l\u1ec7nh \u0111\u1ec1u \u0111\u01b0\u1ee3c t\u00e1c gi\u1ea3 c\u1ee7a h\u01b0\u1edbng d\u1eabn n\u00e0y cung c\u1ea5p th\u00f4ng qua&nbsp;<a href=\"https:\/\/github.com\/pathbreak\/storm-linode\" target=\"_blank\" rel=\"noreferrer noopener\">kho l\u01b0u tr\u1eef GitHub<\/a>&nbsp;. Ng\u0103n x\u1ebfp \u1ee9ng d\u1ee5ng n\u00e0y c\u0169ng c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c h\u01b0\u1edfng l\u1ee3i t\u1eeb dung l\u01b0\u1ee3ng \u0111\u0129a l\u1edbn, v\u00ec v\u1eady h\u00e3y c\u00e2n nh\u1eafc s\u1eed d\u1ee5ng d\u1ecbch v\u1ee5&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/products\/storage\/block-storage\/\">L\u01b0u tr\u1eef kh\u1ed1i<\/a>&nbsp;c\u1ee7a ch\u00fang t\u00f4i v\u1edbi thi\u1ebft l\u1eadp n\u00e0y.<\/p>\n<p class=\"has-background\" style=\"background-color:#f32a2a33\">Quan tr\u1ecdng: T\u00e0i nguy\u00ean b\u00ean ngo\u00e0i n\u1eb1m ngo\u00e0i t\u1ea7m ki\u1ec3m so\u00e1t c\u1ee7a ch\u00fang t\u00f4i v\u00e0 c\u00f3 th\u1ec3 b\u1ecb thay \u0111\u1ed5i v\u00e0\/ho\u1eb7c s\u1eeda \u0111\u1ed5i m\u00e0 ch\u00fang t\u00f4i kh\u00f4ng bi\u1ebft. Lu\u00f4n t\u1ef1 m\u00ecnh xem l\u1ea1i m\u00e3 t\u1eeb c\u00e1c trang web c\u1ee7a b\u00ean th\u1ee9 ba tr\u01b0\u1edbc khi th\u1ef1c hi\u1ec7n.<\/p>\n<p>Ki\u1ebfn tr\u00fac \u0111\u01b0\u1ee3c tri\u1ec3n khai s\u1ebd tr\u00f4ng nh\u01b0 th\u1ebf n\u00e0y:<\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/www.linode.com\/docs\/guides\/big-data-in-the-linode-cloud-streaming-data-processing-with-apache-storm\/storm_zookeeper_architecture_900_hub32420691c2741109b305aa4021e6403_106946_1388x0_resize_q71_bgfafafc_catmullrom_3.jpg\" alt=\"Ki\u1ebfn tr\u00fac c\u1ee7a c\u1ee5m ho\u00e0n thi\u1ec7n\" title=\"Ki\u1ebfn tr\u00fac c\u1ee5m tri\u1ec3n khai\"\/><\/figure>\n<p>V\u1ec1 m\u1eb7t \u1ee9ng d\u1ee5ng, lu\u1ed3ng d\u1eef li\u1ec7u \u0111\u01b0\u1ee3c m\u00f4 t\u1ea3 nh\u01b0 sau:<\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/www.linode.com\/docs\/guides\/big-data-in-the-linode-cloud-streaming-data-processing-with-apache-storm\/storm_topology_900_huea80e2a17a19a91bb78aefea6e05ba5d_71207_1388x0_resize_q71_bgfafafc_catmullrom_3.jpg\" alt=\"C\u1ea5u tr\u00fac v\u00e0 tri\u1ec3n khai c\u1ee7a b\u00e3o\" title=\"C\u1ea5u tr\u00fac v\u00e0 tri\u1ec3n khai c\u1ee7a b\u00e3o\"\/><\/figure>\n<p>Lu\u1ed3ng \u1ee9ng d\u1ee5ng b\u1eaft \u0111\u1ea7u, t\u1eeb ph\u00eda m\u00e1y kh\u00e1ch, v\u1edbi m\u00e1y kh\u00e1ch Storm, cung c\u1ea5p giao di\u1ec7n ng\u01b0\u1eddi d\u00f9ng. Giao di\u1ec7n n\u00e0y li\u00ean h\u1ec7 v\u1edbi m\u1ed9t n\u00fat&nbsp;<em>Nimbus<\/em>&nbsp;, l\u00e0 n\u00fat trung t\u00e2m cho ho\u1ea1t \u0111\u1ed9ng c\u1ee7a c\u1ee5m Storm. N\u00fat Nimbus l\u1ea5y tr\u1ea1ng th\u00e1i hi\u1ec7n t\u1ea1i c\u1ee7a c\u1ee5m, bao g\u1ed3m danh s\u00e1ch c\u00e1c n\u00fat gi\u00e1m s\u00e1t v\u00e0&nbsp;<em>c\u1ea5u tr\u00fac<\/em>&nbsp;t\u1eeb c\u1ee5m Zookeeper. C\u00e1c n\u00fat gi\u00e1m s\u00e1t c\u1ee7a c\u1ee5m Storm li\u00ean t\u1ee5c c\u1eadp nh\u1eadt tr\u1ea1ng th\u00e1i c\u1ee7a ch\u00fang t\u1edbi c\u00e1c n\u00fat Zookeeper, \u0111\u1ea3m b\u1ea3o r\u1eb1ng h\u1ec7 th\u1ed1ng v\u1eabn \u0111\u01b0\u1ee3c \u0111\u1ed3ng b\u1ed9 h\u00f3a.<\/p>\n<p>Ph\u01b0\u01a1ng ph\u00e1p m\u00e0 Storm x\u1eed l\u00fd v\u00e0 x\u1eed l\u00fd d\u1eef li\u1ec7u \u0111\u01b0\u1ee3c g\u1ecdi l\u00e0&nbsp;<em>topology<\/em>&nbsp;. Topology l\u00e0 m\u1ed9t m\u1ea1ng l\u01b0\u1edbi c\u00e1c th\u00e0nh ph\u1ea7n th\u1ef1c hi\u1ec7n c\u00e1c ho\u1ea1t \u0111\u1ed9ng ri\u00eang l\u1ebb v\u00e0 \u0111\u01b0\u1ee3c t\u1ea1o th\u00e0nh t\u1eeb&nbsp;<em>spout<\/em>&nbsp;, l\u00e0 ngu\u1ed3n d\u1eef li\u1ec7u v\u00e0&nbsp;<em>bolt<\/em>&nbsp;, ch\u1ea5p nh\u1eadn d\u1eef li\u1ec7u \u0111\u1ebfn v\u00e0 th\u1ef1c hi\u1ec7n c\u00e1c ho\u1ea1t \u0111\u1ed9ng nh\u01b0 ch\u1ea1y h\u00e0m ho\u1eb7c chuy\u1ec3n \u0111\u1ed5i. B\u1ea3n th\u00e2n d\u1eef li\u1ec7u, \u0111\u01b0\u1ee3c g\u1ecdi l\u00e0&nbsp;<em>lu\u1ed3ng<\/em>&nbsp;trong thu\u1eadt ng\u1eef Storm, c\u00f3 d\u1ea1ng c\u00e1c chu\u1ed7i tuple kh\u00f4ng gi\u1edbi h\u1ea1n.<\/p>\n<p>H\u01b0\u1edbng d\u1eabn n\u00e0y s\u1ebd gi\u1ea3i th\u00edch c\u00e1ch c\u1ea5u h\u00ecnh c\u1ee5m Storm \u0111ang ho\u1ea1t \u0111\u1ed9ng v\u00e0 c\u00e1c n\u00fat Zookeeper c\u1ee7a c\u1ee5m \u0111\u00f3, nh\u01b0ng s\u1ebd kh\u00f4ng cung c\u1ea5p th\u00f4ng tin v\u1ec1 c\u00e1ch ph\u00e1t tri\u1ec3n c\u00e1c c\u1ea5u tr\u00fac t\u00f9y ch\u1ec9nh \u0111\u1ec3 x\u1eed l\u00fd d\u1eef li\u1ec7u. \u0110\u1ec3 bi\u1ebft th\u00eam th\u00f4ng tin v\u1ec1 c\u00e1ch t\u1ea1o v\u00e0 tri\u1ec3n khai c\u00e1c c\u1ea5u tr\u00fac Storm, h\u00e3y xem&nbsp;<a href=\"https:\/\/storm.apache.org\/releases\/current\/Tutorial.html\" target=\"_blank\" rel=\"noreferrer noopener\">h\u01b0\u1edbng d\u1eabn Apache Storm<\/a>&nbsp;.<\/p>\n<h2 id=\"before-you-begin\">Tr\u01b0\u1edbc khi b\u1ea1n b\u1eaft \u0111\u1ea7u<a href=\"https:\/\/www.linode.com\/docs\/guides\/big-data-in-the-linode-cloud-streaming-data-processing-with-apache-storm\/#before-you-begin\"><\/a><\/h2>\n<h3 id=\"os-requirements\">Y\u00eau c\u1ea7u h\u1ec7 \u0111i\u1ec1u h\u00e0nh<a href=\"https:\/\/www.linode.com\/docs\/guides\/big-data-in-the-linode-cloud-streaming-data-processing-with-apache-storm\/#os-requirements\"><\/a><\/h3>\n<ul>\n<li>B\u00e0i vi\u1ebft n\u00e0y gi\u1ea3 \u0111\u1ecbnh r\u1eb1ng m\u00e1y tr\u1ea1m \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 thi\u1ebft l\u1eadp ban \u0111\u1ea7u cho tr\u00ecnh qu\u1ea3n l\u00fd c\u1ee5m Linode \u0111ang ch\u1ea1y Ubuntu 14.04 LTS ho\u1eb7c Debian 8. \u0110\u00e2y c\u00f3 th\u1ec3 l\u00e0 m\u00e1y t\u00ednh c\u1ee5c b\u1ed9 c\u1ee7a b\u1ea1n ho\u1eb7c m\u1ed9t Linode kh\u00e1c ho\u1ea1t \u0111\u1ed9ng nh\u01b0 m\u00e1y tr\u1ea1m t\u1eeb xa c\u1ee7a b\u1ea1n. C\u00e1c b\u1ea3n ph\u00e2n ph\u1ed1i v\u00e0 h\u1ec7 \u0111i\u1ec1u h\u00e0nh kh\u00e1c ch\u01b0a \u0111\u01b0\u1ee3c th\u1eed nghi\u1ec7m.<\/li>\n<li>Sau khi thi\u1ebft l\u1eadp ban \u0111\u1ea7u, b\u1ea5t k\u1ef3 m\u00e1y tr\u1ea1m n\u00e0o c\u00f3 h\u1ed7 tr\u1ee3 SSH \u0111\u1ec1u c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 \u0111\u0103ng nh\u1eadp v\u00e0o tr\u00ecnh qu\u1ea3n l\u00fd c\u1ee5m Linode ho\u1eb7c c\u00e1c n\u00fat c\u1ee5m.<\/li>\n<li>Tr\u00ecnh qu\u1ea3n l\u00fd c\u1ee5m Linode c\u00f3 th\u1ec3 c\u00e0i \u0111\u1eb7t Ubuntu 14.04 LTS ho\u1eb7c Debian 8.<\/li>\n<li>M\u1ed9t c\u1ee5m Zookeeper ho\u1eb7c Storm c\u00f3 th\u1ec3 c\u00e0i \u0111\u1eb7t Ubuntu 14.04 LTS ho\u1eb7c Debian 8 tr\u00ean c\u00e1c n\u00fat c\u1ee7a n\u00f3. B\u1ea3n ph\u00e2n ph\u1ed1i c\u1ee7a n\u00f3 kh\u00f4ng c\u1ea7n ph\u1ea3i gi\u1ed1ng v\u1edbi b\u1ea3n ph\u00e2n ph\u1ed1i \u0111\u01b0\u1ee3c c\u00e0i \u0111\u1eb7t tr\u00ean tr\u00ecnh qu\u1ea3n l\u00fd c\u1ee5m Linode<\/li>\n<\/ul>\n<p class=\"has-background\" style=\"background-color:#74f78c33\">Ghi ch\u00fa: C\u00e1c b\u01b0\u1edbc trong h\u01b0\u1edbng d\u1eabn n\u00e0y v\u00e0 trong c\u00e1c t\u1eadp l\u1ec7nh bash \u0111\u01b0\u1ee3c tham chi\u1ebfu y\u00eau c\u1ea7u quy\u1ec1n root. H\u00e3y \u0111\u1ea3m b\u1ea3o ch\u1ea1y c\u00e1c b\u01b0\u1edbc b\u00ean d\u01b0\u1edbi d\u01b0\u1edbi d\u1ea1ng&nbsp;<code>root<\/code>. \u0110\u1ec3 bi\u1ebft th\u00eam th\u00f4ng tin v\u1ec1 quy\u1ec1n, h\u00e3y xem h\u01b0\u1edbng d\u1eabn&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/guides\/linux-users-and-groups\/\">Ng\u01b0\u1eddi d\u00f9ng v\u00e0 Nh\u00f3m<\/a>&nbsp;c\u1ee7a ch\u00fang t\u00f4i .<\/p>\n<h3 id=\"naming-conventions\">Quy \u01b0\u1edbc \u0111\u1eb7t t\u00ean<a href=\"https:\/\/www.linode.com\/docs\/guides\/big-data-in-the-linode-cloud-streaming-data-processing-with-apache-storm\/#naming-conventions\"><\/a><\/h3>\n<p>Trong su\u1ed1t h\u01b0\u1edbng d\u1eabn n\u00e0y, ch\u00fang t\u00f4i s\u1ebd s\u1eed d\u1ee5ng c\u00e1c t\u00ean sau \u0111\u00e2y l\u00e0m v\u00ed d\u1ee5 \u0111\u1ec3 ch\u1ec9 c\u00e1c h\u00ecnh \u1ea3nh v\u00e0 c\u1ee5m m\u00e0 ch\u00fang t\u00f4i s\u1ebd t\u1ea1o:<\/p>\n<ul>\n<li><code>zk-image1<\/code>&#8211; H\u00ecnh \u1ea3nh ng\u01b0\u1eddi tr\u00f4ng coi s\u1edf th\u00fa<\/li>\n<li><code>zk-cluster1<\/code>&#8211; C\u1ee5m ng\u01b0\u1eddi tr\u00f4ng coi s\u1edf th\u00fa<\/li>\n<li><code>storm-image1<\/code>&#8211; H\u00ecnh \u1ea3nh c\u01a1n b\u00e3o<\/li>\n<li><code>storm-cluster1<\/code>&#8211; C\u1ee5m b\u00e3o<\/li>\n<\/ul>\n<p>\u0110\u00e2y l\u00e0 nh\u1eefng t\u00ean ch\u00fang t\u00f4i s\u1ebd s\u1eed d\u1ee5ng, nh\u01b0ng b\u1ea1n c\u00f3 th\u1ec3 t\u1ef1 ch\u1ecdn khi t\u1ea1o h\u00ecnh \u1ea3nh v\u00e0 c\u1ee5m c\u1ee7a ri\u00eang m\u00ecnh. H\u01b0\u1edbng d\u1eabn n\u00e0y s\u1ebd s\u1eed d\u1ee5ng nh\u1eefng t\u00ean n\u00e0y trong t\u1ea5t c\u1ea3 c\u00e1c l\u1ec7nh v\u00ed d\u1ee5, v\u00ec v\u1eady h\u00e3y \u0111\u1ea3m b\u1ea3o thay th\u1ebf t\u00ean c\u1ee7a ri\u00eang b\u1ea1n khi c\u00f3 th\u1ec3.<\/p>\n<h3 id=\"get-a-linode-api-key\">Nh\u1eadn Kh\u00f3a API Linode<a href=\"https:\/\/www.linode.com\/docs\/guides\/big-data-in-the-linode-cloud-streaming-data-processing-with-apache-storm\/#get-a-linode-api-key\"><\/a><\/h3>\n<p>Th\u1ef1c hi\u1ec7n theo c\u00e1c b\u01b0\u1edbc trong&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/products\/platform\/accounts\/guides\/manage-api-tokens\/\">T\u1ea1o kh\u00f3a API<\/a>&nbsp;v\u00e0 l\u01b0u kh\u00f3a c\u1ee7a b\u1ea1n m\u1ed9t c\u00e1ch an to\u00e0n. Kh\u00f3a n\u00e0y s\u1ebd \u0111\u01b0\u1ee3c nh\u1eadp v\u00e0o t\u1ec7p c\u1ea5u h\u00ecnh trong c\u00e1c b\u01b0\u1edbc ti\u1ebfp theo.<\/p>\n<p>N\u1ebfu kh\u00f3a h\u1ebft h\u1ea1n ho\u1eb7c b\u1ecb x\u00f3a, h\u00e3y nh\u1edb t\u1ea1o kh\u00f3a m\u1edbi v\u00e0 c\u1eadp nh\u1eadt&nbsp;<code>api_env_linode.conf<\/code>t\u1ec7p c\u1ea5u h\u00ecnh m\u00f4i tr\u01b0\u1eddng API tr\u00ean tr\u00ecnh qu\u1ea3n l\u00fd c\u1ee5m Linode. \u0110i\u1ec1u n\u00e0y s\u1ebd \u0111\u01b0\u1ee3c gi\u1ea3i th\u00edch th\u00eam trong ph\u1ea7n ti\u1ebfp theo.<\/p>\n<h2 id=\"set-up-the-cluster-manager\">Thi\u1ebft l\u1eadp Tr\u00ecnh qu\u1ea3n l\u00fd c\u1ee5m<a href=\"https:\/\/www.linode.com\/docs\/guides\/big-data-in-the-linode-cloud-streaming-data-processing-with-apache-storm\/#set-up-the-cluster-manager\"><\/a><\/h2>\n<p>B\u01b0\u1edbc \u0111\u1ea7u ti\u00ean l\u00e0 thi\u1ebft l\u1eadp m\u1ed9t&nbsp;<em>Cluster Manager<\/em>&nbsp;trung t\u00e2m \u0111\u1ec3 l\u01b0u tr\u1eef th\u00f4ng tin chi ti\u1ebft c\u1ee7a t\u1ea5t c\u1ea3 c\u00e1c c\u1ee5m Storm v\u00e0 cho ph\u00e9p ng\u01b0\u1eddi d\u00f9ng \u0111\u01b0\u1ee3c \u1ee7y quy\u1ec1n t\u1ea1o, qu\u1ea3n l\u00fd ho\u1eb7c truy c\u1eadp c\u00e1c c\u1ee5m \u0111\u00f3. \u0110\u00e2y c\u00f3 th\u1ec3 l\u00e0 m\u1ed9t m\u00e1y tr\u1ea1m c\u1ee5c b\u1ed9 ho\u1eb7c Linode, nh\u01b0ng trong h\u01b0\u1edbng d\u1eabn n\u00e0y s\u1ebd l\u00e0 Linode.<\/p>\n<p>1.C\u00e1c t\u1eadp l\u1ec7nh \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng trong h\u01b0\u1edbng d\u1eabn n\u00e0y giao ti\u1ebfp v\u1edbi API c\u1ee7a Linode b\u1eb1ng Python. Tr\u00ean m\u00e1y tr\u1ea1m c\u1ee7a b\u1ea1n, h\u00e3y c\u00e0i \u0111\u1eb7t Git, Python 2.7 v\u00e0 curl:<\/p>\n<pre class=\"wp-block-code\"><code>sudo apt-get install python2.7 curl git\n<\/code><\/pre>\n<p>2.T\u1ea3i xu\u1ed1ng kho l\u01b0u tr\u1eef git c\u1ee7a d\u1ef1 \u00e1n:<\/p>\n<pre class=\"wp-block-code\"><code>git clone \"https:\/\/github.com\/pathbreak\/storm-linode\"\ncd storm-linode\ngit checkout $(git describe $(git rev-list --tags='release*' --max-count=1))<\/code><\/pre>\n<p>3.L\u00e0m cho shell v\u00e0 t\u1eadp l\u1ec7nh Python c\u00f3 th\u1ec3 th\u1ef1c thi \u0111\u01b0\u1ee3c:<\/p>\n<pre class=\"wp-block-code\"><code>chmod +x *.sh *.py\n<\/code><\/pre>\n<p>4.T\u1ea1o m\u1ed9t b\u1ea3n sao ho\u1ea1t \u0111\u1ed9ng c\u1ee7a t\u1ec7p c\u1ea5u h\u00ecnh m\u00f4i tr\u01b0\u1eddng API:<\/p>\n<pre class=\"wp-block-code\"><code>cp api_env_example.conf api_env_linode.conf\n<\/code><\/pre>\n<p>5.M\u1edf&nbsp;<code>api_env_linode.conf<\/code>trong tr\u00ecnh so\u1ea1n th\u1ea3o v\u0103n b\u1ea3n v\u00e0 thi\u1ebft l\u1eadp&nbsp;<code>LINODE_KEY<\/code>kh\u00f3a API \u0111\u00e3 t\u1ea1o tr\u01b0\u1edbc \u0111\u00f3 (xem&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/guides\/big-data-in-the-linode-cloud-streaming-data-processing-with-apache-storm\/#get-a-linode-api-key\">ph\u1ea7n Nh\u1eadn kh\u00f3a API Linode<\/a>&nbsp;).<\/p>\n<pre class=\"wp-block-code\"><code>export LINODE_KEY=fnxaZ5HMsaImTTRO8SBtg48...<\/code><\/pre>\n<p>6.M\u1edf&nbsp;<code>~\/storm-linode\/cluster_manager.sh<\/code>trong tr\u00ecnh so\u1ea1n th\u1ea3o v\u0103n b\u1ea3n v\u00e0 thay \u0111\u1ed5i c\u00e1c thi\u1ebft l\u1eadp c\u1ea5u h\u00ecnh sau \u0111\u1ec3 t\u00f9y ch\u1ec9nh v\u1ecb tr\u00ed v\u00e0 c\u00e1ch t\u1ea1o Cluster Manager Linode:<\/p>\n<ul>\n<li><code>ROOT_PASSWORD<\/code>: \u0110\u00e2y s\u1ebd l\u00e0 m\u1eadt kh\u1ea9u c\u1ee7a ng\u01b0\u1eddi d\u00f9ng root tr\u00ean Cluster Manager Linode v\u00e0 \u0111\u01b0\u1ee3c&nbsp;<strong>y\u00eau c\u1ea7u<\/strong>&nbsp;\u0111\u1ec3 t\u1ea1o n\u00fat. \u0110\u1eb7t m\u1eadt kh\u1ea9u n\u00e0y th\u00e0nh m\u1eadt kh\u1ea9u an to\u00e0n theo l\u1ef1a ch\u1ecdn c\u1ee7a b\u1ea1n. Linode y\u00eau c\u1ea7u m\u1eadt kh\u1ea9u root ph\u1ea3i ch\u1ee9a \u00edt nh\u1ea5t 2 trong 4 lo\u1ea1i k\u00fd t\u1ef1 sau:\n<ul>\n<li>k\u00fd t\u1ef1 ch\u1eef th\u01b0\u1eddng<\/li>\n<li>k\u00fd t\u1ef1 ch\u1eef in hoa<\/li>\n<li>k\u00fd t\u1ef1 s\u1ed1<\/li>\n<li>k\u00fd t\u1ef1 t\u01b0\u1ee3ng tr\u01b0ng<\/li>\n<\/ul>\n<p>N\u1ebfu c\u00f3 kho\u1ea3ng tr\u1eafng trong m\u1eadt kh\u1ea9u, h\u00e3y \u0111\u1ea3m b\u1ea3o to\u00e0n b\u1ed9 m\u1eadt kh\u1ea9u \u0111\u01b0\u1ee3c \u0111\u1eb7t trong d\u1ea5u ngo\u1eb7c k\u00e9p (&nbsp;<code>\"<\/code>). N\u1ebfu c\u00f3 d\u1ea5u ngo\u1eb7c k\u00e9p, k\u00fd t\u1ef1 \u0111\u00f4 la ho\u1eb7c d\u1ea5u g\u1ea1ch ch\u00e9o ng\u01b0\u1ee3c trong m\u1eadt kh\u1ea9u, h\u00e3y tho\u00e1t m\u1ed7i d\u1ea5u ngo\u1eb7c k\u00e9p, k\u00fd t\u1ef1 \u0111\u00f4 la ho\u1eb7c d\u1ea5u g\u1ea1ch ch\u00e9o ng\u01b0\u1ee3c b\u1eb1ng d\u1ea5u g\u1ea1ch ch\u00e9o ng\u01b0\u1ee3c ( )&nbsp;<code>\\<\/code>.<\/li>\n<li><code>PLAN_ID<\/code>: Gi\u00e1 tr\u1ecb m\u1eb7c \u0111\u1ecbnh c\u1ee7a&nbsp;<code>1<\/code>t\u1ea1o Cluster Manager Linode th\u00e0nh m\u1ed9t n\u00fat 2GB, g\u00f3i nh\u1ecf nh\u1ea5t. \u0110i\u1ec1u n\u00e0y th\u01b0\u1eddng l\u00e0 \u0111\u1ee7. Tuy nhi\u00ean, n\u1ebfu b\u1ea1n mu\u1ed1n m\u1ed9t Linode m\u1ea1nh h\u01a1n, h\u00e3y s\u1eed d\u1ee5ng c\u00e1c l\u1ec7nh sau \u0111\u1ec3 xem danh s\u00e1ch t\u1ea5t c\u1ea3 c\u00e1c g\u00f3i kh\u1ea3 d\u1ee5ng v\u00e0 ID c\u1ee7a ch\u00fang:<\/li>\n<\/ul>\n<pre class=\"wp-block-code\"><code>source ~\/storm-linode\/api_env_linode.conf\n ~\/storm-linode\/linode_api.py plans<\/code><\/pre>\n<p class=\"has-background\" style=\"background-color:#74f78c33\">Ghi ch\u00fa: B\u1ea1n ch\u1ec9 c\u1ea7n ch\u1ea1y&nbsp;<code>source<\/code> t\u1ec7p n\u00e0y m\u1ed9t l\u1ea7n trong m\u1ed9t phi\u00ean thi\u1ebft b\u1ecb \u0111\u1ea7u cu\u1ed1i duy nh\u1ea5t, tr\u1eeb khi b\u1ea1n th\u1ef1c hi\u1ec7n thay \u0111\u1ed5i \u0111\u1ed1i v\u1edbi t\u1ec7p \u0111\u00f3.<\/p>\n<p><code>DATACENTER<\/code>: \u0110i\u1ec1u n\u00e0y ch\u1ec9 \u0111\u1ecbnh trung t\u00e2m d\u1eef li\u1ec7u Linode n\u01a1i Cluster Manager Linode \u0111\u01b0\u1ee3c t\u1ea1o. \u0110\u1eb7t n\u00f3 th\u00e0nh ID c\u1ee7a trung t\u00e2m d\u1eef li\u1ec7u g\u1ea7n nh\u1ea5t v\u1edbi v\u1ecb tr\u00ed c\u1ee7a b\u1ea1n, \u0111\u1ec3 gi\u1ea3m \u0111\u1ed9 tr\u1ec5 m\u1ea1ng. C\u0169ng n\u00ean t\u1ea1o n\u00fat qu\u1ea3n l\u00fd c\u1ee5m trong c\u00f9ng m\u1ed9t trung t\u00e2m d\u1eef li\u1ec7u n\u01a1i c\u00e1c h\u00ecnh \u1ea3nh v\u00e0 n\u00fat c\u1ee5m s\u1ebd \u0111\u01b0\u1ee3c t\u1ea1o, \u0111\u1ec3 n\u00f3 c\u00f3 th\u1ec3 giao ti\u1ebfp v\u1edbi ch\u00fang b\u1eb1ng c\u00e1c \u0111\u1ecba ch\u1ec9 IP ri\u00eang c\u00f3 \u0111\u1ed9 tr\u1ec5 th\u1ea5p v\u00e0 gi\u1ea3m m\u1ee9c s\u1eed d\u1ee5ng truy\u1ec1n d\u1eef li\u1ec7u.<\/p>\n<p>\u0110\u1ec3 xem danh s\u00e1ch c\u00e1c trung t\u00e2m d\u1eef li\u1ec7u v\u00e0 ID c\u1ee7a ch\u00fang:<\/p>\n<pre class=\"wp-block-code\"><code>source ~\/storm-linode\/api_env_linode.conf\n ~\/storm-linode\/linode_api.py datacenters table<\/code><\/pre>\n<p><code>DISTRIBUTION<\/code>: \u0110\u00e2y l\u00e0 ID c\u1ee7a b\u1ea3n ph\u00e2n ph\u1ed1i \u0111\u1ec3 c\u00e0i \u0111\u1eb7t tr\u00ean Cluster Manager Linode. H\u01b0\u1edbng d\u1eabn n\u00e0y ch\u1ec9 \u0111\u01b0\u1ee3c th\u1eed nghi\u1ec7m tr\u00ean Ubuntu 14.04 ho\u1eb7c Debian 8; c\u00e1c b\u1ea3n ph\u00e2n ph\u1ed1i kh\u00e1c kh\u00f4ng \u0111\u01b0\u1ee3c h\u1ed7 tr\u1ee3.<\/p>\n<p>Gi\u00e1 tr\u1ecb m\u1eb7c \u0111\u1ecbnh c\u1ee7a&nbsp;<code>124<\/code>ch\u1ecdn Ubuntu 14.04 LTS 64-bit. N\u1ebfu b\u1ea1n mu\u1ed1n s\u1eed d\u1ee5ng Debian 8 thay th\u1ebf, h\u00e3y thay \u0111\u1ed5i gi\u00e1 tr\u1ecb n\u00e0y th\u00e0nh&nbsp;<code>140<\/code>.<\/p>\n<p class=\"has-background\" style=\"background-color:#74f78c33\">Ghi ch\u00fa: C\u00e1c gi\u00e1 tr\u1ecb \u0111\u01b0\u1ee3c th\u1ec3 hi\u1ec7n trong h\u01b0\u1edbng d\u1eabn n\u00e0y l\u00e0 gi\u00e1 tr\u1ecb hi\u1ec7n t\u1ea1i t\u00ednh \u0111\u1ebfn th\u1eddi \u0111i\u1ec3m xu\u1ea5t b\u1ea3n, nh\u01b0ng c\u00f3 th\u1ec3 thay \u0111\u1ed5i trong t\u01b0\u01a1ng lai. B\u1ea1n c\u00f3 th\u1ec3 ch\u1ea1y&nbsp;<code>~\/storm-linode\/linode_api.py distributions<\/code>\u0111\u1ec3 xem danh s\u00e1ch t\u1ea5t c\u1ea3 c\u00e1c b\u1ea3n ph\u00e2n ph\u1ed1i kh\u1ea3 d\u1ee5ng v\u00e0 gi\u00e1 tr\u1ecb c\u1ee7a ch\u00fang trong API.<\/p>\n<ul>\n<li><code>KERNEL<\/code>: \u0110\u00e2y l\u00e0 ID c\u1ee7a h\u1ea1t nh\u00e2n Linux \u0111\u1ec3 c\u00e0i \u0111\u1eb7t tr\u00ean Cluster Manager Linode. Gi\u00e1 tr\u1ecb m\u1eb7c \u0111\u1ecbnh c\u1ee7a&nbsp;<code>138<\/code>ch\u1ecdn h\u1ea1t nh\u00e2n Linux 64-bit m\u1edbi nh\u1ea5t c\u00f3 s\u1eb5n t\u1eeb Linode. Kh\u00f4ng n\u00ean thay \u0111\u1ed5i c\u00e0i \u0111\u1eb7t n\u00e0y.<\/li>\n<li><code>DISABLE_SSH_PASSWORD_AUTHENTICATION<\/code>: \u0110i\u1ec1u n\u00e0y v\u00f4 hi\u1ec7u h\u00f3a x\u00e1c th\u1ef1c m\u1eadt kh\u1ea9u SSH v\u00e0 ch\u1ec9 cho ph\u00e9p x\u00e1c th\u1ef1c SSH d\u1ef1a tr\u00ean kh\u00f3a cho Cluster Manager Linode. X\u00e1c th\u1ef1c m\u1eadt kh\u1ea9u \u0111\u01b0\u1ee3c coi l\u00e0 k\u00e9m an to\u00e0n h\u01a1n v\u00e0 do \u0111\u00f3 b\u1ecb v\u00f4 hi\u1ec7u h\u00f3a theo m\u1eb7c \u0111\u1ecbnh. \u0110\u1ec3 b\u1eadt x\u00e1c th\u1ef1c m\u1eadt kh\u1ea9u, b\u1ea1n c\u00f3 th\u1ec3 thay \u0111\u1ed5i gi\u00e1 tr\u1ecb n\u00e0y th\u00e0nh&nbsp;<code>no<\/code>.<\/li>\n<\/ul>\n<p class=\"has-background\" style=\"background-color:#74f78c33\">Ghi ch\u00fa: C\u00e1c t\u00f9y ch\u1ecdn hi\u1ec3n th\u1ecb trong ph\u1ea7n n\u00e0y \u0111\u01b0\u1ee3c t\u1ea1o b\u1edfi&nbsp;<code>linode_api.py<\/code>t\u1eadp l\u1ec7nh v\u00e0 h\u01a1i kh\u00e1c so v\u1edbi c\u00e1c t\u00f9y ch\u1ecdn hi\u1ec3n th\u1ecb khi s\u1eed d\u1ee5ng c\u00f4ng c\u1ee5 Linode CLI. Kh\u00f4ng s\u1eed d\u1ee5ng c\u00f4ng c\u1ee5 Linode CLI \u0111\u1ec3 c\u1ea5u h\u00ecnh Manager Node c\u1ee7a b\u1ea1n.<\/p>\n<p>Khi b\u1ea1n ho\u00e0n t\u1ea5t vi\u1ec7c th\u1ef1c hi\u1ec7n thay \u0111\u1ed5i, h\u00e3y l\u01b0u v\u00e0 \u0111\u00f3ng tr\u00ecnh ch\u1ec9nh s\u1eeda.<\/p>\n<p>7.B\u00e2y gi\u1edd, h\u00e3y t\u1ea1o v\u00e0 thi\u1ebft l\u1eadp Cluster Manager Linode:<\/p>\n<pre class=\"wp-block-code\"><code>.\/cluster_manager.sh create-linode api_env_linode.conf\n<\/code><\/pre>\n<p>Sau khi n\u00fat \u0111\u01b0\u1ee3c t\u1ea1o, b\u1ea1n s\u1ebd th\u1ea5y k\u1ebft qu\u1ea3 nh\u01b0 th\u1ebf n\u00e0y:<\/p>\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" loading=\"lazy\" width=\"553\" height=\"170\" src=\"http:\/\/jupitek.maudemo.vip\/wp-content\/uploads\/2026\/05\/Screenshot_107.png\" alt=\"\" class=\"wp-image-1267\" srcset=\"http:\/\/jupitek.maudemo.vip\/wp-content\/uploads\/2026\/05\/Screenshot_107.png 553w, http:\/\/jupitek.maudemo.vip\/wp-content\/uploads\/2026\/05\/Screenshot_107-300x92-1.png 300w\" sizes=\"auto, (max-width: 553px) 100vw, 553px\" \/><\/figure>\n<p>L\u01b0u \u00fd \u0111\u1ecba ch\u1ec9 IP c\u00f4ng khai c\u1ee7a Cluster Manager Linode. B\u1ea1n s\u1ebd c\u1ea7n \u0111\u1ecba ch\u1ec9 n\u00e0y khi \u0111\u0103ng nh\u1eadp v\u00e0o tr\u00ecnh qu\u1ea3n l\u00fd c\u1ee5m \u0111\u1ec3 t\u1ea1o ho\u1eb7c qu\u1ea3n l\u00fd c\u1ee5m.<\/p>\n<p>8.T\u1eadp&nbsp;<code>cluster_manager.sh<\/code>l\u1ec7nh ch\u00fang t\u00f4i ch\u1ea1y \u1edf b\u01b0\u1edbc tr\u01b0\u1edbc s\u1ebd t\u1ea1o ba ng\u01b0\u1eddi d\u00f9ng tr\u00ean Cluster Manager Linode v\u00e0 t\u1ea1o c\u1eb7p kh\u00f3a x\u00e1c th\u1ef1c cho t\u1ea5t c\u1ea3 nh\u1eefng ng\u01b0\u1eddi d\u00f9ng n\u00e0y tr\u00ean m\u00e1y tr\u1ea1m c\u1ee7a b\u1ea1n, nh\u01b0 minh h\u1ecda trong h\u00ecnh n\u00e0y:<\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/www.linode.com\/docs\/guides\/big-data-in-the-linode-cloud-streaming-data-processing-with-apache-storm\/storm_clustermgrkeys_900_hudc5b2fcac2bb7db6517f2ee3c9547f17_80804_1388x0_resize_q71_bgfafafc_catmullrom_3.jpg\" alt=\"T\u1ed5ng quan v\u1ec1 b\u1ea3o m\u1eadt\" title=\"T\u1ed5ng quan v\u1ec1 b\u1ea3o m\u1eadt\"\/><\/figure>\n<ul>\n<li><code>~\/.ssh\/clustermgrroot<\/code>l\u00e0 kh\u00f3a ri\u00eang cho ng\u01b0\u1eddi d\u00f9ng&nbsp;<em>root<\/em>&nbsp;c\u1ee7a Cluster Manager Linode . Quy\u1ec1n truy c\u1eadp v\u00e0o th\u00f4ng tin \u0111\u0103ng nh\u1eadp c\u1ee7a ng\u01b0\u1eddi d\u00f9ng n\u00e0y ph\u1ea3i \u0111\u01b0\u1ee3c h\u1ea1n ch\u1ebf t\u1ed1i \u0111a c\u00f3 th\u1ec3.<\/li>\n<li><code>~\/.ssh\/clustermgr<\/code>l\u00e0 kh\u00f3a ri\u00eang cho ng\u01b0\u1eddi d\u00f9ng&nbsp;<em>clustermgr<\/em>&nbsp;c\u1ee7a Cluster Manager Linode . \u0110\u00e2y l\u00e0 ng\u01b0\u1eddi d\u00f9ng qu\u1ea3n tr\u1ecb c\u00f3 \u0111\u1eb7c quy\u1ec1n c\u00f3 th\u1ec3 t\u1ea1o v\u00e0 qu\u1ea3n l\u00fd c\u00e1c c\u1ee5m Storm ho\u1eb7c Zookeeper. Quy\u1ec1n truy c\u1eadp v\u00e0o th\u00f4ng tin x\u00e1c th\u1ef1c c\u1ee7a ng\u01b0\u1eddi d\u00f9ng n\u00e0y ph\u1ea3i \u0111\u01b0\u1ee3c h\u1ea1n ch\u1ebf t\u1ed1i \u0111a c\u00f3 th\u1ec3.<\/li>\n<li><code>~\/.ssh\/clustermgrguest<\/code>l\u00e0 kh\u00f3a ri\u00eang cho ng\u01b0\u1eddi d\u00f9ng&nbsp;<em>clustermgrguest<\/em>&nbsp;c\u1ee7a Cluster Manager Linode . \u0110\u00e2y l\u00e0 ng\u01b0\u1eddi d\u00f9ng kh\u00f4ng c\u00f3 \u0111\u1eb7c quy\u1ec1n \u0111\u1ec3 b\u1ea5t k\u1ef3 ai c\u1ea7n th\u00f4ng tin v\u1ec1 c\u1ee5m Storm s\u1eed d\u1ee5ng, nh\u01b0ng kh\u00f4ng c\u00f3 kh\u1ea3 n\u0103ng qu\u1ea3n l\u00fd ch\u00fang. \u0110\u00e2y th\u01b0\u1eddng l\u00e0 c\u00e1c nh\u00e0 ph\u00e1t tri\u1ec3n, nh\u1eefng ng\u01b0\u1eddi c\u1ea7n bi\u1ebft \u0111\u1ecba ch\u1ec9 IP c\u1ee7a n\u00fat m\u00e1y kh\u00e1ch c\u1ee7a c\u1ee5m \u0111\u1ec3 g\u1eedi c\u1ea5u tr\u00fac li\u00ean k\u1ebft \u0111\u1ebfn c\u1ee5m \u0111\u00f3.<\/li>\n<\/ul>\n<p>X\u00e1c th\u1ef1c m\u1eadt kh\u1ea9u SSH t\u1edbi tr\u00ecnh qu\u1ea3n l\u00fd c\u1ee5m b\u1ecb v\u00f4 hi\u1ec7u h\u00f3a theo m\u1eb7c \u0111\u1ecbnh. B\u1ea1n n\u00ean \u0111\u1ec3 nguy\u00ean c\u00e0i \u0111\u1eb7t m\u1eb7c \u0111\u1ecbnh .&nbsp;Tuy nhi\u00ean, n\u1ebfu b\u1ea1n mu\u1ed1n b\u1eadt x\u00e1c th\u1ef1c m\u1eadt kh\u1ea9u ch\u1ec9 cho ng\u01b0\u1eddi d\u00f9ng&nbsp;<em>clustermgrguest<\/em>&nbsp;\u0111\u1ec3 thu\u1eadn ti\u1ec7n, h\u00e3y \u0111\u0103ng nh\u1eadp v\u00e0o tr\u00ecnh qu\u1ea3n l\u00fd c\u1ee5m m\u1edbi t\u1ea1o d\u01b0\u1edbi d\u1ea1ng&nbsp;<code>root<\/code>v\u00e0 th\u00eam d\u00f2ng sau v\u00e0o&nbsp;<strong>cu\u1ed1i<\/strong><code>\/etc\/ssh\/sshd_config<\/code>&nbsp;:<\/p>\n<pre class=\"wp-block-code\"><code>Match User clustermgrguest\n  PasswordAuthentication yes<\/code><\/pre>\n<p>Kh\u1edfi \u0111\u1ed9ng l\u1ea1i d\u1ecbch v\u1ee5 SSH \u0111\u1ec3 k\u00edch ho\u1ea1t thay \u0111\u1ed5i n\u00e0y:<\/p>\n<pre class=\"wp-block-code\"><code>service ssh restart\n<\/code><\/pre>\n<p class=\"has-background\" style=\"background-color:#f32a2a33\">Quan tr\u1ecdng: V\u00ec quy\u1ec1n truy c\u1eadp v\u00e0o tr\u00ecnh qu\u1ea3n l\u00fd c\u1ee5m cung c\u1ea5p quy\u1ec1n truy c\u1eadp v\u00e0o t\u1ea5t c\u1ea3 c\u00e1c c\u1ee5m Storm v\u00e0 Zookeeper c\u0169ng nh\u01b0 m\u1ecdi d\u1eef li\u1ec7u nh\u1ea1y c\u1ea3m m\u00e0 ch\u00fang \u0111ang x\u1eed l\u00fd n\u00ean c\u1ea5u h\u00ecnh b\u1ea3o m\u1eadt c\u1ee7a n\u00f3 ph\u1ea3i \u0111\u01b0\u1ee3c coi l\u00e0 quan tr\u1ecdng v\u00e0 quy\u1ec1n truy c\u1eadp ph\u1ea3i h\u1ea1n ch\u1ebf nh\u1ea5t c\u00f3 th\u1ec3.<\/p>\n<p>9.\u0110\u0103ng nh\u1eadp v\u00e0o tr\u00ecnh qu\u1ea3n l\u00fd c\u1ee5m Linode v\u1edbi t\u01b0 c\u00e1ch l\u00e0&nbsp;<code>root<\/code>ng\u01b0\u1eddi d\u00f9ng, s\u1eed d\u1ee5ng \u0111\u1ecba ch\u1ec9 IP c\u00f4ng khai \u0111\u01b0\u1ee3c hi\u1ec3n th\u1ecb khi b\u1ea1n t\u1ea1o:<\/p>\n<pre class=\"wp-block-code\"><code>ssh -i ~\/.ssh\/clustermgrroot root@PUBLIC-IP-OF-CLUSTER-MANAGER-LINODE\n<\/code><\/pre>\n<p>10.\u0110\u1ed5i t\u00ean m\u00e1y ch\u1ee7 th\u00e0nh t\u00ean n\u00e0o \u0111\u00f3 m\u00f4 t\u1ea3 r\u00f5 h\u01a1n. \u1ede \u0111\u00e2y, ch\u00fang t\u00f4i \u0111\u1ed5i th\u00e0nh&nbsp;<em>clustermgr<\/em>&nbsp;, nh\u01b0ng b\u1ea1n c\u00f3 th\u1ec3 thay th\u1ebf b\u1eb1ng t\u00ean kh\u00e1c n\u1ebfu mu\u1ed1n:<\/p>\n<pre class=\"wp-block-code\"><code>sed -i -r \"s\/127.0.1.1.*$\/127.0.1.1\\tclustermgr\/\" \/etc\/hosts\necho clustermgr &gt; \/etc\/hostname\nhostname clustermgr<\/code><\/pre>\n<p>11.\u0110\u1eb7t m\u1eadt kh\u1ea9u cho ng\u01b0\u1eddi d\u00f9ng&nbsp;<em>clustermgr<\/em>&nbsp;v\u00e0&nbsp;<em>clustermgrguest<\/em>&nbsp;:<\/p>\n<pre class=\"wp-block-code\"><code>passwd clustermgr\npasswd clustermgrguest<\/code><\/pre>\n<p>B\u1ea5t k\u1ef3 qu\u1ea3n tr\u1ecb vi\u00ean n\u00e0o \u0111\u0103ng nh\u1eadp v\u1edbi t\u01b0 c\u00e1ch l\u00e0 ng\u01b0\u1eddi d\u00f9ng&nbsp;<em>clustermgr<\/em>&nbsp;\u0111\u1ec1u ph\u1ea3i bi\u1ebft m\u1eadt kh\u1ea9u n\u00e0y v\u00ec h\u1ecd s\u1ebd \u0111\u01b0\u1ee3c y\u00eau c\u1ea7u nh\u1eadp m\u1eadt kh\u1ea9u khi th\u1ef1c hi\u1ec7n l\u1ec7nh \u0111\u1eb7c quy\u1ec1n.<\/p>\n<p>12.X\u00f3a&nbsp;<code>cluster_manager.sh<\/code>kh\u1ecfi th\u01b0 m\u1ee5c ng\u01b0\u1eddi d\u00f9ng root v\u00e0 \u0111\u00f3ng phi\u00ean SSH:<\/p>\n<pre class=\"wp-block-code\"><code>rm cluster_manager.sh\nexit<\/code><\/pre>\n<p>13.\u0110\u0103ng nh\u1eadp l\u1ea1i v\u00e0o Cluster Manager Linode &#8211; l\u1ea7n n\u00e0y v\u1edbi t\u01b0 c\u00e1ch l\u00e0 ng\u01b0\u1eddi d\u00f9ng&nbsp;<em>clustermgr<\/em>&nbsp;&#8211; b\u1eb1ng \u0111\u1ecba ch\u1ec9 IP c\u00f4ng khai v\u00e0 kh\u00f3a ri\u00eang cho ng\u01b0\u1eddi d\u00f9ng&nbsp;<em>clustermgr<\/em>&nbsp;:<\/p>\n<pre class=\"wp-block-code\"><code><code>ssh -i ~\/.ssh\/clustermgr clustermgr@PUBLIC-IP-OF-CLUSTER-MANAGER-LINODE<\/code><\/code><\/pre>\n<p>14.\u0110i\u1ec1u h\u01b0\u1edbng \u0111\u1ebfn&nbsp;<code>storm-linode<\/code>th\u01b0 m\u1ee5c c\u1ee7a b\u1ea1n v\u00e0 t\u1ea1o m\u1ed9t b\u1ea3n sao l\u00e0m vi\u1ec7c c\u1ee7a&nbsp;<code>api_env_example.conf<\/code>. Trong v\u00ed d\u1ee5 n\u00e0y, ch\u00fang t\u00f4i s\u1ebd g\u1ecdi n\u00f3 l\u00e0&nbsp;<code>api_env_linode.conf<\/code>:<\/p>\n<pre class=\"wp-block-code\"><code>cd storm-linode \n\ncp api_env_example.conf api_env_linode.conf<\/code><\/pre>\n<p>15.M\u1edf file m\u1edbi t\u1ea1o&nbsp;<code>api_env_linode.conf<\/code>trong tr\u00ecnh so\u1ea1n th\u1ea3o v\u0103n b\u1ea3n v\u00e0 thi\u1ebft l\u1eadp&nbsp;<code>LINODE_KEY<\/code>kh\u00f3a API c\u1ee7a b\u1ea1n.\u0110\u1eb7t&nbsp;<code>CLUSTER_MANAGER_NODE_PASSWORD<\/code>th\u00e0nh m\u1eadt kh\u1ea9u b\u1ea1n \u0111\u00e3 \u0111\u1eb7t cho ng\u01b0\u1eddi d\u00f9ng&nbsp;<em>clustermgr<\/em>&nbsp;\u1edf B\u01b0\u1edbc 11.<\/p>\n<p>export LINODE_KEY=fnxaZ5HMsaImTTRO8SBtg48\u2026<br \/>\u2026<br \/>export CLUSTER_MANAGER_NODE_PASSWORD=changeme<\/p>\n<p>L\u01b0u thay \u0111\u1ed5i v\u00e0 \u0111\u00f3ng tr\u00ecnh so\u1ea1n th\u1ea3o.<\/p>\n<p>16.Tr\u00ecnh qu\u1ea3n l\u00fd c\u1ee5m Linode hi\u1ec7n \u0111\u00e3 s\u1eb5n s\u00e0ng \u0111\u1ec3 t\u1ea1o c\u1ee5m Apache Storm. Th\u00eam kh\u00f3a c\u00f4ng khai c\u1ee7a b\u1ea5t k\u1ef3 ai s\u1ebd qu\u1ea3n l\u00fd c\u1ee5m v\u00e0o&nbsp;<code>\/home\/clustermgr\/.ssh\/authorized_keys<\/code>, \u0111\u1ec3 h\u1ecd c\u00f3 th\u1ec3 k\u1ebft n\u1ed1i qua SSH v\u1edbi Tr\u00ecnh qu\u1ea3n l\u00fd c\u1ee5m Linode v\u1edbi t\u01b0 c\u00e1ch l\u00e0 ng\u01b0\u1eddi d\u00f9ng&nbsp;<code>clustermgr<\/code>.<\/p>\n<h2 id=\"create-a-storm-cluster\">T\u1ea1o m\u1ed9t c\u1ee5m b\u00e3o<a href=\"https:\/\/www.linode.com\/docs\/guides\/big-data-in-the-linode-cloud-streaming-data-processing-with-apache-storm\/#create-a-storm-cluster\"><\/a><\/h2>\n<p>Vi\u1ec7c t\u1ea1o m\u1ed9t c\u1ee5m Storm m\u1edbi bao g\u1ed3m b\u1ed1n b\u01b0\u1edbc ch\u00ednh, m\u1ed9t s\u1ed1 b\u01b0\u1edbc ch\u1ec9 c\u1ea7n thi\u1ebft v\u00e0o l\u1ea7n \u0111\u1ea7u ti\u00ean v\u00e0 c\u00f3 th\u1ec3 b\u1ecf qua khi t\u1ea1o c\u00e1c c\u1ee5m ti\u1ebfp theo.<\/p>\n<h3 id=\"create-a-zookeeper-image\">T\u1ea1o h\u00ecnh \u1ea3nh ng\u01b0\u1eddi tr\u00f4ng coi s\u1edf th\u00fa<a href=\"https:\/\/www.linode.com\/docs\/guides\/big-data-in-the-linode-cloud-streaming-data-processing-with-apache-storm\/#create-a-zookeeper-image\"><\/a><\/h3>\n<p>\u1ea2nh&nbsp;<em>Zookeeper<\/em>&nbsp;l\u00e0 \u1ea3nh \u0111\u0129a ch\u00ednh c\u00f3 c\u00e0i \u0111\u1eb7t t\u1ea5t c\u1ea3 ph\u1ea7n m\u1ec1m v\u00e0 th\u01b0 vi\u1ec7n Zookeeper c\u1ea7n thi\u1ebft. Ch\u00fang t\u00f4i s\u1ebd t\u1ea1o \u1ea3nh b\u1eb1ng&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/products\/tools\/images\/\">Linode Images.<\/a>&nbsp;L\u1ee3i \u00edch c\u1ee7a vi\u1ec7c s\u1eed d\u1ee5ng \u1ea3nh Zookeeper bao g\u1ed3m:<\/p>\n<ul>\n<li>T\u1ea1o nhanh m\u1ed9t c\u1ee5m Zookeeper b\u1eb1ng c\u00e1ch ch\u1ec9 c\u1ea7n sao ch\u00e9p n\u00f3 \u0111\u1ec3 t\u1ea1o ra nhi\u1ec1u n\u00fat t\u00f9y theo y\u00eau c\u1ea7u, m\u1ed7i n\u00fat l\u00e0 m\u1ed9t b\u1ea3n sao ho\u00e0n h\u1ea3o c\u1ee7a h\u00ecnh \u1ea3nh<\/li>\n<li>C\u00e1c g\u00f3i ph\u00e2n ph\u1ed1i v\u00e0 c\u00e1c g\u00f3i ph\u1ea7n m\u1ec1m c\u1ee7a b\u00ean th\u1ee9 ba gi\u1ed1ng h\u1ec7t nhau tr\u00ean t\u1ea5t c\u1ea3 c\u00e1c n\u00fat, ng\u0103n ng\u1eeba l\u1ed7i kh\u00f4ng kh\u1edbp phi\u00ean b\u1ea3n<\/li>\n<li>Gi\u1ea3m m\u1ee9c s\u1eed d\u1ee5ng m\u1ea1ng v\u00ec vi\u1ec7c t\u1ea3i xu\u1ed1ng v\u00e0 c\u1eadp nh\u1eadt ch\u1ec9 \u0111\u01b0\u1ee3c th\u1ef1c hi\u1ec7n m\u1ed9t l\u1ea7n khi chu\u1ea9n b\u1ecb h\u00ecnh \u1ea3nh thay v\u00ec l\u1eb7p l\u1ea1i ch\u00fang tr\u00ean m\u1ed7i n\u00fat<\/li>\n<\/ul>\n<p class=\"has-background\" style=\"background-color:#74f78c33\">Ghi ch\u00fa: N\u1ebfu h\u00ecnh \u1ea3nh Zookeeper \u0111\u00e3 t\u1ed3n t\u1ea1i, b\u01b0\u1edbc n\u00e0y kh\u00f4ng b\u1eaft bu\u1ed9c. Nhi\u1ec1u c\u1ee5m Zookeeper c\u00f3 th\u1ec3 chia s\u1ebb c\u00f9ng m\u1ed9t h\u00ecnh \u1ea3nh Zookeeper. Tr\u00ean th\u1ef1c t\u1ebf, b\u1ea1n n\u00ean gi\u1eef s\u1ed1 l\u01b0\u1ee3ng h\u00ecnh \u1ea3nh \u1edf m\u1ee9c th\u1ea5p v\u00ec dung l\u01b0\u1ee3ng l\u01b0u tr\u1eef h\u00ecnh \u1ea3nh b\u1ecb gi\u1edbi h\u1ea1n \u1edf m\u1ee9c 10GB.Khi t\u1ea1o h\u00ecnh \u1ea3nh, b\u1ea1n ph\u1ea3i c\u00f3&nbsp;<code>clustermgr<\/code>quy\u1ec1n \u0111\u1ed1i v\u1edbi Cluster Manager Linode.<\/p>\n<p>1.\u0110\u0103ng nh\u1eadp v\u00e0o Cluster Manager Linode v\u1edbi t\u00ean ng\u01b0\u1eddi d\u00f9ng&nbsp;<code>clustermgr<\/code>v\u00e0 \u0111i\u1ec1u h\u01b0\u1edbng \u0111\u1ebfn&nbsp;<code>storm-linode<\/code>th\u01b0 m\u1ee5c:<\/p>\n<pre class=\"wp-block-code\"><code>ssh -i ~\/.ssh\/clustermgr clustermgr@PUBLIC-IP-OF-CLUSTER-MANAGER-LINODE \n\ncd storm-linode<\/code><\/pre>\n<p>2.Ch\u1ecdn m\u1ed9t t\u00ean duy nh\u1ea5t cho h\u00ecnh \u1ea3nh c\u1ee7a b\u1ea1n v\u00e0 t\u1ea1o m\u1ed9t th\u01b0 m\u1ee5c c\u1ea5u h\u00ecnh cho h\u00ecnh \u1ea3nh m\u1edbi b\u1eb1ng l\u1ec7nh&nbsp;<code>new-image-conf<\/code>. Trong v\u00ed d\u1ee5 n\u00e0y, ch\u00fang ta s\u1ebd g\u1ecdi h\u00ecnh \u1ea3nh m\u1edbi c\u1ee7a m\u00ecnh&nbsp;<code>zk-image1<\/code>l\u00e0:<\/p>\n<pre class=\"wp-block-code\"><code><code>.\/zookeeper-cluster-linode.sh new-image-conf zk-image1 <\/code><\/code><\/pre>\n<p>Thao t\u00e1c n\u00e0y s\u1ebd t\u1ea1o ra m\u1ed9t th\u01b0 m\u1ee5c c\u00f3 t\u00ean&nbsp;<code>zk-image1<\/code>ch\u1ee9a c\u00e1c t\u1eadp tin t\u1ea1o n\u00ean c\u1ea5u h\u00ecnh h\u00ecnh \u1ea3nh:<\/p>\n<p><strong>zk-image1.conf<\/strong>&nbsp;&#8211; \u0110\u00e2y l\u00e0 t\u1ec7p c\u1ea5u h\u00ecnh h\u00ecnh \u1ea3nh ch\u00ednh v\u00e0 l\u00e0 t\u1ec7p b\u1ea1n s\u1ebd s\u1eeda \u0111\u1ed5i nhi\u1ec1u nh\u1ea5t. Thu\u1ed9c t\u00ednh c\u1ee7a t\u1ec7p n\u00e0y \u0111\u01b0\u1ee3c m\u00f4 t\u1ea3 trong b\u01b0\u1edbc ti\u1ebfp theo. T\u1ec7p n\u00e0y \u0111\u01b0\u1ee3c \u0111\u1eb7t t\u00ean&nbsp;<code>zk-image1.conf<\/code>trong v\u00ed d\u1ee5 c\u1ee7a ch\u00fang t\u00f4i, nh\u01b0ng n\u1ebfu b\u1ea1n ch\u1ecdn t\u00ean h\u00ecnh \u1ea3nh kh\u00e1c, t\u00ean c\u1ee7a b\u1ea1n c\u00f3 th\u1ec3 kh\u00e1c.<\/p>\n<p><strong>zoo.cfg<\/strong>&nbsp;&#8211; \u0110\u00e2y l\u00e0 t\u1ec7p c\u1ea5u h\u00ecnh Zookeeper ch\u00ednh. Xem&nbsp;<a href=\"https:\/\/zookeeper.apache.org\/doc\/current\/zookeeperAdmin.html#sc_configuration\" target=\"_blank\" rel=\"noreferrer noopener\">t\u00e0i li\u1ec7u tham s\u1ed1 c\u1ea5u h\u00ecnh Zookeeper<\/a>&nbsp;ch\u00ednh th\u1ee9c \u0111\u1ec3 bi\u1ebft chi ti\u1ebft v\u1ec1 c\u00e1c tham s\u1ed1 c\u00f3 th\u1ec3 t\u00f9y ch\u1ec9nh. Kh\u00f4ng c\u1ea7n thi\u1ebft ph\u1ea3i nh\u1eadp danh s\u00e1ch n\u00fat c\u1ee7a c\u1ee5m v\u00e0o t\u1ec7p n\u00e0y. Vi\u1ec7c n\u00e0y \u0111\u01b0\u1ee3c th\u1ef1c hi\u1ec7n t\u1ef1 \u0111\u1ed9ng b\u1edfi t\u1eadp l\u1ec7nh trong qu\u00e1 tr\u00ecnh t\u1ea1o c\u1ee5m.<\/p>\n<p><strong>log4j.properties<\/strong>&nbsp;&#8211; T\u1ec7p n\u00e0y thi\u1ebft l\u1eadp m\u1ee9c ghi nh\u1eadt k\u00fd m\u1eb7c \u0111\u1ecbnh cho c\u00e1c th\u00e0nh ph\u1ea7n Zookeeper. B\u1ea1n c\u0169ng c\u00f3 th\u1ec3 t\u00f9y ch\u1ec9nh c\u00e1c m\u1ee9c n\u00e0y \u1edf c\u1ea5p n\u00fat khi c\u1ee5m \u0111\u01b0\u1ee3c t\u1ea1o.<\/p>\n<p><strong>zk-supervisord.conf<\/strong>&nbsp;&#8211; Daemon Zookeeper \u0111\u01b0\u1ee3c ch\u1ea1y d\u01b0\u1edbi s\u1ef1 gi\u00e1m s\u00e1t \u0111\u1ec3 n\u1ebfu n\u00f3 t\u1eaft \u0111\u1ed9t ng\u1ed9t, n\u00f3 s\u1ebd t\u1ef1 \u0111\u1ed9ng \u0111\u01b0\u1ee3c Supervisord kh\u1edfi \u0111\u1ed9ng l\u1ea1i. Kh\u00f4ng c\u00f3 nhi\u1ec1u th\u1ee9 \u0111\u1ec3 t\u00f9y ch\u1ec9nh \u1edf \u0111\u00e2y, nh\u01b0ng b\u1ea1n c\u00f3 th\u1ec3 tham kh\u1ea3o t\u00e0i&nbsp;<a href=\"http:\/\/supervisord.org\/configuration.html\" target=\"_blank\" rel=\"noreferrer noopener\">li\u1ec7u C\u1ea5u h\u00ecnh Supervisord<\/a>&nbsp;n\u1ebfu b\u1ea1n mu\u1ed1n t\u00ecm hi\u1ec3u th\u00eam v\u1ec1 c\u00e1c t\u00f9y ch\u1ecdn.<\/p>\n<p>3.M\u1edf t\u1ec7p c\u1ea5u h\u00ecnh h\u00ecnh \u1ea3nh (trong v\u00ed d\u1ee5 n\u00e0y l\u00e0&nbsp;<code>.\/zk-image1\/zk-image1.conf<\/code>) trong tr\u00ecnh so\u1ea1n th\u1ea3o v\u0103n b\u1ea3n. Nh\u1eadp ho\u1eb7c ch\u1ec9nh s\u1eeda gi\u00e1 tr\u1ecb c\u1ee7a thu\u1ed9c t\u00ednh c\u1ea5u h\u00ecnh theo y\u00eau c\u1ea7u. Thu\u1ed9c t\u00ednh&nbsp;<em>ph\u1ea3i<\/em>&nbsp;\u0111\u01b0\u1ee3c nh\u1eadp ho\u1eb7c thay \u0111\u1ed5i t\u1eeb gi\u00e1 tr\u1ecb m\u1eb7c \u0111\u1ecbnh c\u1ee7a ch\u00fang \u0111\u01b0\u1ee3c \u0111\u00e1nh d\u1ea5u l\u00e0&nbsp;<strong>B\u1eaeT BU\u1ed8C<\/strong>&nbsp;:<\/p>\n<p><code>DISTRIBUTION_FOR_IMAGE<\/code><\/p>\n<p>Ch\u1ec9 \u0111\u1ecbnh Ubuntu 14.04 ho\u1eb7c Debian 8 \u0111\u1ec3 s\u1eed d\u1ee5ng cho h\u00ecnh \u1ea3nh n\u00e0y. H\u01b0\u1edbng d\u1eabn n\u00e0y ch\u01b0a&nbsp;<em>\u0111\u01b0\u1ee3c<\/em>&nbsp;th\u1eed nghi\u1ec7m tr\u00ean b\u1ea5t k\u1ef3 phi\u00ean b\u1ea3n ho\u1eb7c b\u1ea3n ph\u00e2n ph\u1ed1i n\u00e0o kh\u00e1c.<\/p>\n<p>T\u1ea5t c\u1ea3 c\u00e1c n\u00fat c\u1ee7a t\u1ea5t c\u1ea3 c\u00e1c c\u1ee5m \u0111\u01b0\u1ee3c t\u1ea1o t\u1eeb h\u00ecnh \u1ea3nh n\u00e0y s\u1ebd c\u00f3 b\u1ea3n ph\u00e2n ph\u1ed1i n\u00e0y. Gi\u00e1 tr\u1ecb m\u1eb7c \u0111\u1ecbnh t\u01b0\u01a1ng&nbsp;<code>124<\/code>\u1ee9ng v\u1edbi Ubuntu 14.04 LTS 64-bit. \u0110\u1ed1i v\u1edbi Debian 8 64-bit, h\u00e3y thay \u0111\u1ed5i gi\u00e1 tr\u1ecb n\u00e0y th\u00e0nh&nbsp;<code>140<\/code>.<\/p>\n<p class=\"has-background\" style=\"background-color:#74f78c33\">Ghi ch\u00fa: C\u00e1c gi\u00e1 tr\u1ecb \u0111\u01b0\u1ee3c th\u1ec3 hi\u1ec7n trong h\u01b0\u1edbng d\u1eabn n\u00e0y l\u00e0 gi\u00e1 tr\u1ecb hi\u1ec7n t\u1ea1i t\u00ednh \u0111\u1ebfn th\u1eddi \u0111i\u1ec3m xu\u1ea5t b\u1ea3n, nh\u01b0ng c\u00f3 th\u1ec3 thay \u0111\u1ed5i trong t\u01b0\u01a1ng lai. B\u1ea1n c\u00f3 th\u1ec3 ch\u1ea1y&nbsp;<code>~\/storm-linode\/linode_api.py distributions<\/code>\u0111\u1ec3 xem danh s\u00e1ch t\u1ea5t c\u1ea3 c\u00e1c b\u1ea3n ph\u00e2n ph\u1ed1i kh\u1ea3 d\u1ee5ng v\u00e0 gi\u00e1 tr\u1ecb c\u1ee7a ch\u00fang trong API.<\/p>\n<p><code><strong>LABEL_FOR_IMAGE<\/strong><\/code><\/p>\n<p>Nh\u00e3n gi\u00fap b\u1ea1n ph\u00e2n bi\u1ec7t h\u00ecnh \u1ea3nh n\u00e0y v\u1edbi c\u00e1c h\u00ecnh \u1ea3nh kh\u00e1c. T\u00ean n\u00e0y s\u1ebd \u0111\u01b0\u1ee3c hi\u1ec3n th\u1ecb n\u1ebfu b\u1ea1n ch\u1ec9nh s\u1eeda ho\u1eb7c xem h\u00ecnh \u1ea3nh c\u1ee7a m\u00ecnh trong Linode Manager.<\/p>\n<p><code><strong>KERNEL_FOR_IMAGE<\/strong><\/code><\/p>\n<p>Phi\u00ean b\u1ea3n kernel do Linode cung c\u1ea5p \u0111\u1ec3 s\u1eed d\u1ee5ng trong h\u00ecnh \u1ea3nh n\u00e0y. Gi\u00e1 tr\u1ecb m\u1eb7c \u0111\u1ecbnh l\u00e0&nbsp;<code>138<\/code>, t\u01b0\u01a1ng \u1ee9ng v\u1edbi kernel 64-bit m\u1edbi nh\u1ea5t do Linode cung c\u1ea5p. B\u1ea1n n\u00ean \u0111\u1ec3 gi\u00e1 tr\u1ecb n\u00e0y l\u00e0m c\u00e0i \u0111\u1eb7t m\u1eb7c \u0111\u1ecbnh.<\/p>\n<p><code><strong>DATACENTER_FOR_IMAGE<\/strong><\/code><\/p>\n<p>Trung t\u00e2m d\u1eef li\u1ec7u Linode n\u01a1i h\u00ecnh \u1ea3nh n\u00e0y s\u1ebd \u0111\u01b0\u1ee3c t\u1ea1o. \u0110\u00e2y c\u00f3 th\u1ec3 l\u00e0 b\u1ea5t k\u1ef3 trung t\u00e2m d\u1eef li\u1ec7u Linode n\u00e0o, nh\u01b0ng vi\u1ec7c t\u1ea1o c\u1ee5m s\u1ebd nhanh h\u01a1n n\u1ebfu h\u00ecnh \u1ea3nh \u0111\u01b0\u1ee3c t\u1ea1o trong c\u00f9ng m\u1ed9t trung t\u00e2m d\u1eef li\u1ec7u n\u01a1i c\u1ee5m s\u1ebd \u0111\u01b0\u1ee3c t\u1ea1o. B\u1ea1n c\u0169ng n\u00ean t\u1ea1o h\u00ecnh \u1ea3nh trong c\u00f9ng m\u1ed9t trung t\u00e2m d\u1eef li\u1ec7u v\u1edbi Cluster Manager Linode. Ch\u1ecdn m\u1ed9t trung t\u00e2m d\u1eef li\u1ec7u g\u1ea7n v\u1ec1 m\u1eb7t \u0111\u1ecba l\u00fd v\u1edbi c\u01a1 s\u1edf c\u1ee7a b\u1ea1n \u0111\u1ec3 gi\u1ea3m \u0111\u1ed9 tr\u1ec5 m\u1ea1ng. N\u1ebfu kh\u00f4ng thay \u0111\u1ed5i, Linode s\u1ebd \u0111\u01b0\u1ee3c t\u1ea1o trong trung t\u00e2m d\u1eef li\u1ec7u Newark.<\/p>\n<p>Gi\u00e1 tr\u1ecb n\u00e0y c\u00f3 th\u1ec3 l\u00e0 ID ho\u1eb7c v\u1ecb tr\u00ed ho\u1eb7c t\u00ean vi\u1ebft t\u1eaft c\u1ee7a trung t\u00e2m d\u1eef li\u1ec7u. \u0110\u1ec3 xem danh s\u00e1ch t\u1ea5t c\u1ea3 c\u00e1c trung t\u00e2m d\u1eef li\u1ec7u:<\/p>\n<pre class=\"wp-block-code\"><code> .\/zookeeper-cluster-linode.sh datacenters api_env_linode.conf\n<\/code><\/pre>\n<p><strong><code>IMAGE_ROOT_PASSWORD<\/code>&#8211;&nbsp;Y\u00caU C\u1ea6U<\/strong><\/p>\n<p>M\u1eadt kh\u1ea9u ng\u01b0\u1eddi d\u00f9ng g\u1ed1c m\u1eb7c \u0111\u1ecbnh cho h\u00ecnh \u1ea3nh. T\u1ea5t c\u1ea3 c\u00e1c n\u00fat c\u1ee7a b\u1ea5t k\u1ef3 c\u1ee5m n\u00e0o \u0111\u01b0\u1ee3c t\u1ea1o t\u1eeb h\u00ecnh \u1ea3nh n\u00e0y s\u1ebd c\u00f3 m\u1eadt kh\u1ea9u n\u00e0y l\u00e0m m\u1eadt kh\u1ea9u g\u1ed1c, tr\u1eeb khi n\u00f3 \u0111\u01b0\u1ee3c ghi \u0111\u00e8 trong t\u1ec7p c\u1ea5u h\u00ecnh c\u1ee7a c\u1ee5m.<\/p>\n<p><strong><code>IMAGE_ROOT_SSH_PUBLIC_KEY<\/code>V\u00e0<code>IMAGE_ROOT_SSH_PRIVATE_KEY<\/code><\/strong><\/p>\n<p>C\u00e1c t\u1ec7p c\u1eb7p kh\u00f3a \u0111\u1ec3 x\u00e1c th\u1ef1c kh\u00f3a c\u00f4ng khai SSH v\u1edbi t\u01b0 c\u00e1ch l\u00e0 ng\u01b0\u1eddi d\u00f9ng root. B\u1ea5t k\u1ef3 ng\u01b0\u1eddi d\u00f9ng n\u00e0o \u0111\u0103ng nh\u1eadp b\u1eb1ng kh\u00f3a ri\u00eang n\u00e0y \u0111\u1ec1u c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c x\u00e1c th\u1ef1c l\u00e0&nbsp;<code>root<\/code>.Theo m\u1eb7c \u0111\u1ecbnh,&nbsp;<code>cluster_manager.sh<\/code>thi\u1ebft l\u1eadp \u0111\u00e3 t\u1ea1o m\u1ed9t c\u1eb7p kh\u00f3a c\u00f3 t\u00ean&nbsp;<code>clusterroot<\/code>v\u00e0&nbsp;<code>clusterroot.pub<\/code>n\u1eb1m trong&nbsp;<code>~\/.ssh\/<\/code>. N\u1ebfu b\u1ea1n mu\u1ed1n thay th\u1ebf ch\u00fang b\u1eb1ng c\u1eb7p kh\u00f3a c\u1ee7a ri\u00eang m\u00ecnh, b\u1ea1n c\u00f3 th\u1ec3 t\u1ea1o kh\u00f3a c\u1ee7a ri\u00eang m\u00ecnh v\u00e0 \u0111\u1eb7t \u0111\u01b0\u1eddng d\u1eabn \u0111\u1ea7y \u0111\u1ee7 c\u1ee7a ch\u00fang t\u1ea1i \u0111\u00e2y.<\/p>\n<p><code><strong>IMAGE_DISABLE_SSH_PASSWORD_AUTHENTICATION<\/strong><\/code><\/p>\n<p>\u0110i\u1ec1u n\u00e0y v\u00f4 hi\u1ec7u h\u00f3a x\u00e1c th\u1ef1c m\u1eadt kh\u1ea9u SSH v\u00e0 ch\u1ec9 cho ph\u00e9p x\u00e1c th\u1ef1c SSH d\u1ef1a tr\u00ean kh\u00f3a cho c\u00e1c n\u00fat c\u1ee5m. X\u00e1c th\u1ef1c m\u1eadt kh\u1ea9u \u0111\u01b0\u1ee3c coi l\u00e0 k\u00e9m an to\u00e0n h\u01a1n v\u00e0 do \u0111\u00f3 b\u1ecb v\u00f4 hi\u1ec7u h\u00f3a theo m\u1eb7c \u0111\u1ecbnh. \u0110\u1ec3 b\u1eadt x\u00e1c th\u1ef1c m\u1eadt kh\u1ea9u, b\u1ea1n c\u00f3 th\u1ec3 thay \u0111\u1ed5i gi\u00e1 tr\u1ecb n\u00e0y th\u00e0nh&nbsp;<code>no<\/code>.<\/p>\n<p><code><strong>IMAGE_ADMIN_USER<\/strong><\/code><\/p>\n<p>Ng\u01b0\u1eddi qu\u1ea3n tr\u1ecb ho\u1eb7c nh\u00e0 ph\u00e1t tri\u1ec3n c\u00f3 th\u1ec3 ph\u1ea3i \u0111\u0103ng nh\u1eadp v\u00e0o c\u00e1c n\u00fat c\u1ee5m \u0111\u1ec3 b\u1ea3o tr\u00ec. Thay v\u00ec \u0111\u0103ng nh\u1eadp v\u1edbi t\u01b0 c\u00e1ch l\u00e0 ng\u01b0\u1eddi d\u00f9ng root, t\u1ed1t h\u01a1n l\u00e0 \u0111\u0103ng nh\u1eadp v\u1edbi t\u01b0 c\u00e1ch l\u00e0 ng\u01b0\u1eddi d\u00f9ng kh\u00f4ng ph\u1ea3i root c\u00f3 \u0111\u1eb7c quy\u1ec1n. T\u1eadp l\u1ec7nh t\u1ea1o m\u1ed9t ng\u01b0\u1eddi d\u00f9ng c\u00f3 \u0111\u1eb7c quy\u1ec1n v\u1edbi t\u00ean n\u00e0y trong h\u00ecnh \u1ea3nh (v\u00e0 trong t\u1ea5t c\u1ea3 c\u00e1c n\u00fat c\u1ee5m d\u1ef1a tr\u00ean h\u00ecnh \u1ea3nh n\u00e0y).<\/p>\n<p><strong><code>IMAGE_ADMIN_PASSWORD<\/code>&#8211;&nbsp;Y\u00caU C\u1ea6U<\/strong><\/p>\n<p>\u0110\u1eb7t m\u1eadt kh\u1ea9u cho&nbsp;<code>IMAGE_ADMIN_USER<\/code>.<\/p>\n<p><code><strong>IMAGE_ADMIN_SSH_AUTHORIZED_KEYS<\/strong><\/code><\/p>\n<p>T\u1ec7p ch\u1ee9a kh\u00f3a c\u00f4ng khai c\u1ee7a t\u1ea5t c\u1ea3 nh\u00e2n vi\u00ean \u0111\u01b0\u1ee3c ph\u00e9p \u0111\u0103ng nh\u1eadp v\u00e0o c\u00e1c n\u00fat c\u1ee5m d\u01b0\u1edbi d\u1ea1ng&nbsp;<code>IMAGE_ADMIN_USER<\/code>. T\u1ec7p n\u00e0y ph\u1ea3i c\u00f3 c\u00f9ng \u0111\u1ecbnh d\u1ea1ng v\u1edbi t\u1ec7p&nbsp;<em>authorized_keys<\/em>&nbsp;SSH chu\u1ea9n . T\u1ea5t c\u1ea3 c\u00e1c m\u1ee5c trong t\u1ec7p n\u00e0y \u0111\u01b0\u1ee3c th\u00eam v\u00e0o&nbsp;<code>authorized_keys<\/code>t\u1ec7p c\u1ee7a h\u00ecnh \u1ea3nh v\u00e0 \u0111\u01b0\u1ee3c k\u1ebf th\u1eeba v\u00e0o t\u1ea5t c\u1ea3 c\u00e1c n\u00fat d\u1ef1a tr\u00ean h\u00ecnh \u1ea3nh n\u00e0y.Theo m\u1eb7c \u0111\u1ecbnh,&nbsp;<code>cluster_manager.sh<\/code>thi\u1ebft l\u1eadp t\u1ea1o m\u1ed9t&nbsp;<code>clusteradmin<\/code>c\u1eb7p kh\u00f3a m\u1edbi v\u00e0 bi\u1ebfn n\u00e0y \u0111\u01b0\u1ee3c \u0111\u1eb7t th\u00e0nh \u0111\u01b0\u1eddng d\u1eabn c\u1ee7a kh\u00f3a c\u00f4ng khai. B\u1ea1n c\u00f3 th\u1ec3 gi\u1eef l\u1ea1i c\u1eb7p kh\u00f3a \u0111\u00e3 t\u1ea1o n\u00e0y v\u00e0 ph\u00e2n ph\u1ed1i t\u1ec7p kh\u00f3a ri\u00eang \u0111\u00e3 t\u1ea1o&nbsp;<code>~\/.ssh\/clusteradmin<\/code>cho nh\u00e2n vi\u00ean \u0111\u01b0\u1ee3c \u1ee7y quy\u1ec1n. Ngo\u00e0i ra, b\u1ea1n c\u00f3 th\u1ec3 thu th\u1eadp kh\u00f3a c\u00f4ng khai c\u1ee7a nh\u00e2n vi\u00ean \u0111\u01b0\u1ee3c \u1ee7y quy\u1ec1n v\u00e0 th\u00eam ch\u00fang v\u00e0o&nbsp;<code>~\/.ssh\/clusteradmin.pub<\/code>.<\/p>\n<p><code><strong>IMAGE_DISK_SIZE<\/strong><\/code><\/p>\n<p>K\u00edch th\u01b0\u1edbc c\u1ee7a \u0111\u0129a \u1ea3nh t\u00ednh b\u1eb1ng MB. Gi\u00e1 tr\u1ecb m\u1eb7c \u0111\u1ecbnh l\u00e0 5000MB th\u01b0\u1eddng l\u00e0 \u0111\u1ee7, v\u00ec qu\u00e1 tr\u00ecnh c\u00e0i \u0111\u1eb7t ch\u1ec9 bao g\u1ed3m h\u1ec7 \u0111i\u1ec1u h\u00e0nh c\u00f3 c\u00e0i \u0111\u1eb7t ph\u1ea7n m\u1ec1m Java v\u00e0 Zookeeper.<\/p>\n<p><code><strong>UPGRADE_OS<\/strong><\/code><\/p>\n<p>N\u1ebfu&nbsp;<code>yes<\/code>, c\u00e1c g\u00f3i ph\u00e2n ph\u1ed1i \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt v\u00e0 n\u00e2ng c\u1ea5p tr\u01b0\u1edbc khi c\u00e0i \u0111\u1eb7t b\u1ea5t k\u1ef3 ph\u1ea7n m\u1ec1m n\u00e0o. N\u00ean \u0111\u1ec3 nguy\u00ean c\u00e0i \u0111\u1eb7t m\u1eb7c \u0111\u1ecbnh \u0111\u1ec3 tr\u00e1nh m\u1ecdi s\u1ef1 c\u1ed1 c\u00e0i \u0111\u1eb7t ho\u1eb7c ph\u1ee5 thu\u1ed9c.<\/p>\n<p><code><strong>INSTALL_ZOOKEEPER_DISTRIBUTION<\/strong><\/code><\/p>\n<p>Phi\u00ean b\u1ea3n Zookeeper \u0111\u1ec3 c\u00e0i \u0111\u1eb7t. Theo m\u1eb7c \u0111\u1ecbnh,&nbsp;<code>cluster_manager.sh<\/code>\u0111\u00e3 t\u1ea3i xu\u1ed1ng phi\u00ean b\u1ea3n 3.4.6. N\u1ebfu b\u1ea1n mu\u1ed1n c\u00e0i \u0111\u1eb7t phi\u00ean b\u1ea3n kh\u00e1c, h\u00e3y t\u1ea3i xu\u1ed1ng th\u1ee7 c\u00f4ng v\u00e0 thay \u0111\u1ed5i bi\u1ebfn n\u00e0y. Tuy nhi\u00ean, b\u1ea1n n\u00ean \u0111\u1ec3 nguy\u00ean gi\u00e1 tr\u1ecb m\u1eb7c \u0111\u1ecbnh v\u00ec h\u01b0\u1edbng d\u1eabn n\u00e0y ch\u01b0a \u0111\u01b0\u1ee3c th\u1eed nghi\u1ec7m v\u1edbi c\u00e1c phi\u00ean b\u1ea3n kh\u00e1c.<\/p>\n<p><code><strong>ZOOKEEPER_INSTALL_DIRECTORY<\/strong><\/code><\/p>\n<p>Th\u01b0 m\u1ee5c n\u01a1i Zookeeper s\u1ebd \u0111\u01b0\u1ee3c c\u00e0i \u0111\u1eb7t tr\u00ean h\u00ecnh \u1ea3nh (v\u00e0 tr\u00ean t\u1ea5t c\u1ea3 c\u00e1c n\u00fat c\u1ee5m \u0111\u01b0\u1ee3c t\u1ea1o t\u1eeb h\u00ecnh \u1ea3nh n\u00e0y).<\/p>\n<p><code><strong>ZOOKEEPER_USER<\/strong><\/code><\/p>\n<p>T\u00ean ng\u01b0\u1eddi d\u00f9ng m\u00e0 daemon Zookeeper ch\u1ea1y. \u0110\u00e2y l\u00e0 t\u00ednh n\u0103ng b\u1ea3o m\u1eadt \u0111\u1ec3 tr\u00e1nh leo thang \u0111\u1eb7c quy\u1ec1n b\u1eb1ng c\u00e1ch khai th\u00e1c m\u1ed9t s\u1ed1 l\u1ed7 h\u1ed5ng trong daemon Zookeeper.<\/p>\n<p><code><strong>ZOOKEEPER_MAX_HEAP_SIZE<\/strong><\/code><\/p>\n<p>K\u00edch th\u01b0\u1edbc heap Java t\u1ed1i \u0111a cho JVM l\u01b0u tr\u1eef daemon Zookeeper. Gi\u00e1 tr\u1ecb n\u00e0y c\u00f3 th\u1ec3 l\u00e0 ph\u1ea7n tr\u0103m ho\u1eb7c gi\u00e1 tr\u1ecb c\u1ed1 \u0111\u1ecbnh. N\u1ebfu gi\u00e1 tr\u1ecb c\u1ed1 \u0111\u1ecbnh kh\u00f4ng \u0111\u01b0\u1ee3c th\u00eam b\u1ea5t k\u1ef3 k\u00fd t\u1ef1 n\u00e0o, n\u00f3 s\u1ebd \u0111\u01b0\u1ee3c hi\u1ec3u l\u00e0 byte. N\u1ebfu \u0111\u01b0\u1ee3c th\u00eam h\u1eadu t\u1ed1&nbsp;<code>K<\/code>,&nbsp;<code>M<\/code>, ho\u1eb7c&nbsp;<code>G<\/code>, n\u00f3 s\u1ebd \u0111\u01b0\u1ee3c hi\u1ec3u l\u00e0 kilobyte, megabyte ho\u1eb7c gigabyte.N\u1ebfu gi\u00e1 tr\u1ecb n\u00e0y qu\u00e1 th\u1ea5p, c\u00f3 th\u1ec3 d\u1eabn \u0111\u1ebfn l\u1ed7i h\u1ebft b\u1ed9 nh\u1edb v\u00e0 g\u00e2y m\u1ea5t d\u1eef li\u1ec7u ho\u1eb7c ch\u1eadm tr\u1ec5 trong c\u1ee5m Storm. N\u1ebfu gi\u00e1 tr\u1ecb n\u00e0y \u0111\u01b0\u1ee3c \u0111\u1eb7t qu\u00e1 cao, b\u1ed9 nh\u1edb cho h\u1ec7 \u0111i\u1ec1u h\u00e0nh v\u00e0 c\u00e1c quy tr\u00ecnh c\u1ee7a n\u00f3 s\u1ebd b\u1ecb h\u1ea1n ch\u1ebf, d\u1eabn \u0111\u1ebfn t\u00ecnh tr\u1ea1ng qu\u00e1 t\u1ea3i \u0111\u0129a, \u0111i\u1ec1u n\u00e0y s\u1ebd c\u00f3 t\u00e1c \u0111\u1ed9ng ti\u00eau c\u1ef1c \u0111\u00e1ng k\u1ec3 \u0111\u1ebfn hi\u1ec7u su\u1ea5t c\u1ee7a Zookeeper.Gi\u00e1 tr\u1ecb m\u1eb7c \u0111\u1ecbnh l\u00e0 75%, ngh\u0129a l\u00e0 t\u1ed1i \u0111a 75% RAM c\u1ee7a Linode c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c d\u00e0nh ri\u00eang cho JVM v\u00e0 25% c\u00f2n l\u1ea1i cho ph\u1ea7n c\u00f2n l\u1ea1i c\u1ee7a h\u1ec7 \u0111i\u1ec1u h\u00e0nh v\u00e0 c\u00e1c quy tr\u00ecnh kh\u00e1c. Ch\u00fang t\u00f4i&nbsp;<em>khuy\u1ebfn<\/em>&nbsp;c\u00e1o kh\u00f4ng n\u00ean thay \u0111\u1ed5i c\u00e0i \u0111\u1eb7t m\u1eb7c \u0111\u1ecbnh n\u00e0y.<\/p>\n<p><code><strong>ZOOKEEPER_MIN_HEAP_SIZE<\/strong><\/code><\/p>\n<p>K\u00edch th\u01b0\u1edbc heap Java t\u1ed1i thi\u1ec3u \u0111\u1ec3 cam k\u1ebft cho JVM l\u01b0u tr\u1eef daemon Zookeeper. Gi\u00e1 tr\u1ecb n\u00e0y c\u00f3 th\u1ec3 l\u00e0 ph\u1ea7n tr\u0103m ho\u1eb7c gi\u00e1 tr\u1ecb c\u1ed1 \u0111\u1ecbnh. N\u1ebfu gi\u00e1 tr\u1ecb c\u1ed1 \u0111\u1ecbnh kh\u00f4ng \u0111\u01b0\u1ee3c th\u00eam b\u1ea5t k\u1ef3 k\u00fd t\u1ef1 n\u00e0o, n\u00f3 s\u1ebd \u0111\u01b0\u1ee3c hi\u1ec3u l\u00e0 byte. N\u1ebfu \u0111\u01b0\u1ee3c th\u00eam h\u1eadu t\u1ed1&nbsp;<code>K<\/code>,&nbsp;<code>M<\/code>, ho\u1eb7c&nbsp;<code>G<\/code>, n\u00f3 s\u1ebd \u0111\u01b0\u1ee3c hi\u1ec3u l\u00e0 kilobyte, megabyte ho\u1eb7c gigabyte t\u01b0\u01a1ng \u1ee9ng.N\u1ebfu gi\u00e1 tr\u1ecb n\u00e0y th\u1ea5p h\u01a1n&nbsp;<code>ZOOKEEPER_MAX_HEAP_SIZE<\/code>, th\u00ec l\u01b0\u1ee3ng b\u1ed9 nh\u1edb n\u00e0y \u0111\u01b0\u1ee3c&nbsp;<em>cam k\u1ebft<\/em>&nbsp;v\u00e0 b\u1ed9 nh\u1edb b\u1ed5 sung l\u00ean \u0111\u1ebfn&nbsp;<code>ZOOKEEPER_MAX_HEAP_SIZE<\/code>ch\u1ec9 \u0111\u01b0\u1ee3c ph\u00e2n b\u1ed5 khi JVM y\u00eau c\u1ea7u t\u1eeb h\u1ec7 \u0111i\u1ec1u h\u00e0nh. \u0110i\u1ec1u n\u00e0y c\u00f3 th\u1ec3 d\u1eabn \u0111\u1ebfn s\u1ef1 ch\u1eadm tr\u1ec5 ph\u00e2n b\u1ed5 b\u1ed9 nh\u1edb trong qu\u00e1 tr\u00ecnh ho\u1ea1t \u0111\u1ed9ng. V\u00ec v\u1eady, kh\u00f4ng n\u00ean \u0111\u1eb7t qu\u00e1 th\u1ea5p.Gi\u00e1 tr\u1ecb n\u00e0y kh\u00f4ng bao gi\u1edd \u0111\u01b0\u1ee3c l\u1edbn h\u01a1n&nbsp;<code>ZOOKEEPER_MAX_HEAP_SIZE<\/code>. N\u1ebfu l\u1edbn h\u01a1n, daemon Zookeeper s\u1ebd kh\u00f4ng kh\u1edfi \u0111\u1ed9ng.Gi\u00e1 tr\u1ecb m\u1eb7c \u0111\u1ecbnh l\u00e0 75%, ngh\u0129a l\u00e0 75% RAM c\u1ee7a Linode \u0111\u01b0\u1ee3c cam k\u1ebft \u2013 kh\u00f4ng ch\u1ec9 \u0111\u01b0\u1ee3c d\u00e0nh ri\u00eang \u2013 cho JVM v\u00e0 kh\u00f4ng kh\u1ea3 d\u1ee5ng cho b\u1ea5t k\u1ef3 quy tr\u00ecnh n\u00e0o kh\u00e1c. Ch\u00fang t\u00f4i&nbsp;<em>khuy\u1ebfn<\/em>&nbsp;c\u00e1o kh\u00f4ng n\u00ean thay \u0111\u1ed5i c\u00e0i \u0111\u1eb7t m\u1eb7c \u0111\u1ecbnh n\u00e0y.<\/p>\n<p>Khi b\u1ea1n ho\u00e0n t\u1ea5t vi\u1ec7c th\u1ef1c hi\u1ec7n thay \u0111\u1ed5i, h\u00e3y l\u01b0u v\u00e0 \u0111\u00f3ng tr\u00ecnh ch\u1ec9nh s\u1eeda.<\/p>\n<p>4.T\u1ea1o h\u00ecnh \u1ea3nh b\u1eb1ng&nbsp;<code>create-image<\/code>l\u1ec7nh, ch\u1ec9 \u0111\u1ecbnh t\u00ean c\u1ee7a h\u00ecnh \u1ea3nh m\u1edbi t\u1ea1o v\u00e0 t\u1ec7p m\u00f4i tr\u01b0\u1eddng API:<\/p>\n<pre class=\"wp-block-code\"><code>.\/zookeeper-cluster-linode.sh create-image zk-image1 api_env_linode.conf\n<\/code><\/pre>\n<p>N\u1ebfu h\u00ecnh \u1ea3nh \u0111\u01b0\u1ee3c t\u1ea1o th\u00e0nh c\u00f4ng, k\u1ebft qu\u1ea3 cu\u1ed1i c\u00f9ng s\u1ebd tr\u00f4ng gi\u1ed1ng nh\u01b0 th\u1ebf n\u00e0y:<\/p>\n<pre class=\"wp-block-code\"><code>Deleting the temporary linode xxxxxx\n\nFinished creating Zookeeper template image yyyyyy\n<\/code><\/pre>\n<p>N\u1ebfu quy tr\u00ecnh kh\u00f4ng th\u00e0nh c\u00f4ng, h\u00e3y \u0111\u1ea3m b\u1ea3o r\u1eb1ng b\u1ea1n kh\u00f4ng c\u00f3 Linode hi\u1ec7n c\u00f3 c\u00f9ng t\u00ean trong Linode Manager. N\u1ebfu c\u00f3, h\u00e3y x\u00f3a n\u00f3 v\u00e0 ch\u1ea1y l\u1ea1i l\u1ec7nh ho\u1eb7c t\u1ea1o l\u1ea1i h\u00ecnh \u1ea3nh n\u00e0y v\u1edbi t\u00ean kh\u00e1c.<\/p>\n<p class=\"has-background\" style=\"background-color:#74f78c33\">Ghi ch\u00fa: Trong qu\u00e1 tr\u00ecnh n\u00e0y, m\u1ed9t Linode 2GB t\u1ea1m th\u1eddi, t\u1ed3n t\u1ea1i trong th\u1eddi gian ng\u1eafn s\u1ebd \u0111\u01b0\u1ee3c t\u1ea1o v\u00e0 x\u00f3a. \u0110i\u1ec1u n\u00e0y s\u1ebd k\u00e9o theo m\u1ed9t kho\u1ea3n chi ph\u00ed nh\u1ecf trong h\u00f3a \u0111\u01a1n h\u00e0ng th\u00e1ng c\u1ee7a b\u1ea1n v\u00e0 k\u00edch ho\u1ea1t email th\u00f4ng b\u00e1o s\u1ef1 ki\u1ec7n \u0111\u01b0\u1ee3c g\u1eedi \u0111\u1ebfn \u0111\u1ecba ch\u1ec9 b\u1ea1n \u0111\u00e3 \u0111\u0103ng k\u00fd v\u1edbi Linode. \u0110\u00e2y l\u00e0 h\u00e0nh vi d\u1ef1 ki\u1ebfn.<\/p>\n<h3 id=\"create-a-zookeeper-cluster\">T\u1ea1o m\u1ed9t c\u1ee5m Zookeeper<a href=\"https:\/\/www.linode.com\/docs\/guides\/big-data-in-the-linode-cloud-streaming-data-processing-with-apache-storm\/#create-a-zookeeper-cluster\"><\/a><\/h3>\n<p>Trong ph\u1ea7n n\u00e0y, b\u1ea1n s\u1ebd h\u1ecdc c\u00e1ch t\u1ea1o m\u1ed9t c\u1ee5m Zookeeper m\u1edbi trong \u0111\u00f3 m\u1ed7i n\u00fat l\u00e0 b\u1ea3n sao c\u1ee7a m\u1ed9t h\u00ecnh \u1ea3nh Zookeeper hi\u1ec7n c\u00f3. N\u1ebfu b\u1ea1n ch\u01b0a t\u1ea1o h\u00ecnh \u1ea3nh Zookeeper, h\u00e3y th\u1ef1c hi\u1ec7n tr\u01b0\u1edbc b\u1eb1ng c\u00e1ch l\u00e0m theo&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/guides\/big-data-in-the-linode-cloud-streaming-data-processing-with-apache-storm\/#create-a-zookeeper-image\">T\u1ea1o h\u00ecnh \u1ea3nh Zookeeper<\/a>&nbsp;.<\/p>\n<p class=\"has-background\" style=\"background-color:#74f78c33\">Ghi ch\u00fa: N\u1ebfu c\u1ee5m Zookeeper \u0111\u00e3 t\u1ed3n t\u1ea1i, b\u01b0\u1edbc n\u00e0y kh\u00f4ng b\u1eaft bu\u1ed9c. Nhi\u1ec1u c\u1ee5m Storm c\u00f3 th\u1ec3 chia s\u1ebb c\u00f9ng m\u1ed9t c\u1ee5m Zookeeper.Khi t\u1ea1o c\u1ee5m, b\u1ea1n ph\u1ea3i c\u00f3&nbsp;<code>clustermgr<\/code>quy\u1ec1n \u0111\u1ed1i v\u1edbi Tr\u00ecnh qu\u1ea3n l\u00fd c\u1ee5m Linode.<\/p>\n<p>\u0110\u0103ng nh\u1eadp v\u00e0o Cluster Manager Linode v\u1edbi t\u00ean ng\u01b0\u1eddi d\u00f9ng&nbsp;<code>clustermgr<\/code>v\u00e0 \u0111i\u1ec1u h\u01b0\u1edbng \u0111\u1ebfn&nbsp;<code>storm-linode<\/code>th\u01b0 m\u1ee5c:<\/p>\n<pre class=\"wp-block-code\"><code>ssh -i ~\/.ssh\/clustermgr clustermgr@PUBLIC-IP-OF-CLUSTER-MANAGER-LINODE \n\ncd storm-linode<\/code><\/pre>\n<p>2.Ch\u1ecdn m\u1ed9t t\u00ean duy nh\u1ea5t cho c\u1ee5m c\u1ee7a b\u1ea1n v\u00e0 t\u1ea1o m\u1ed9t th\u01b0 m\u1ee5c c\u1ea5u h\u00ecnh b\u1eb1ng l\u1ec7nh&nbsp;<code>new-cluster-conf<\/code>. Trong v\u00ed d\u1ee5 n\u00e0y, ch\u00fang ta s\u1ebd g\u1ecdi c\u1ea5u h\u00ecnh c\u1ee5m m\u1edbi c\u1ee7a m\u00ecnh&nbsp;<code>zk-cluster1<\/code>l\u00e0:<\/p>\n<pre class=\"wp-block-code\"><code><code>.\/zookeeper-cluster-linode.sh new-cluster-conf zk-cluster1 <\/code><\/code><\/pre>\n<p>Thao t\u00e1c n\u00e0y t\u1ea1o ra m\u1ed9t th\u01b0 m\u1ee5c c\u00f3 t\u00ean&nbsp;<code>zk-cluster1<\/code>ch\u1ee9a t\u1ec7p c\u1ea5u h\u00ecnh ch\u00ednh,&nbsp;<code>zk-cluster1.conf<\/code>, s\u1ebd \u0111\u01b0\u1ee3c m\u00f4 t\u1ea3 trong b\u01b0\u1edbc ti\u1ebfp theo. N\u1ebfu b\u1ea1n ch\u1ecdn t\u00ean kh\u00e1c khi ch\u1ea1y l\u1ec7nh tr\u01b0\u1edbc \u0111\u00f3, th\u01b0 m\u1ee5c v\u00e0 t\u1ec7p c\u1ea5u h\u00ecnh c\u1ee7a b\u1ea1n s\u1ebd \u0111\u01b0\u1ee3c \u0111\u1eb7t t\u00ean t\u01b0\u01a1ng \u1ee9ng.<\/p>\n<p>3.M\u1edf t\u1ec7p m\u1edbi t\u1ea1o&nbsp;<code>zk-cluster1.conf<\/code>v\u00e0 th\u1ef1c hi\u1ec7n thay \u0111\u1ed5i nh\u01b0 m\u00f4 t\u1ea3 b\u00ean d\u01b0\u1edbi. C\u00e1c thu\u1ed9c t\u00ednh ph\u1ea3i \u0111\u01b0\u1ee3c nh\u1eadp ho\u1eb7c thay \u0111\u1ed5i t\u1eeb gi\u00e1 tr\u1ecb m\u1eb7c \u0111\u1ecbnh c\u1ee7a ch\u00fang \u0111\u01b0\u1ee3c \u0111\u00e1nh d\u1ea5u l\u00e0&nbsp;<strong>B\u1eaeT BU\u1ed8C<\/strong>&nbsp;:<\/p>\n<p><code><strong>DATACENTER_FOR_CLUSTER<\/strong><\/code><\/p>\n<p>Trung t\u00e2m d\u1eef li\u1ec7u Linode n\u01a1i c\u00e1c n\u00fat c\u1ee7a c\u1ee5m n\u00e0y s\u1ebd \u0111\u01b0\u1ee3c t\u1ea1o. T\u1ea5t c\u1ea3 c\u00e1c n\u00fat c\u1ee7a c\u1ee5m ph\u1ea3i n\u1eb1m trong c\u00f9ng m\u1ed9t trung t\u00e2m d\u1eef li\u1ec7u; ch\u00fang kh\u00f4ng th\u1ec3 tr\u1ea3i r\u1ed9ng tr\u00ean nhi\u1ec1u trung t\u00e2m d\u1eef li\u1ec7u v\u00ec ch\u00fang s\u1ebd s\u1eed d\u1ee5ng l\u01b0u l\u01b0\u1ee3ng m\u1ea1ng ri\u00eang \u0111\u1ec3 giao ti\u1ebfp.<\/p>\n<p>\u0110\u00e2y c\u00f3 th\u1ec3 l\u00e0 b\u1ea5t k\u1ef3 trung t\u00e2m d\u1eef li\u1ec7u Linode n\u00e0o, nh\u01b0ng vi\u1ec7c t\u1ea1o c\u1ee5m c\u00f3 th\u1ec3 nhanh h\u01a1n n\u1ebfu n\u00f3 \u0111\u01b0\u1ee3c t\u1ea1o trong c\u00f9ng m\u1ed9t trung t\u00e2m d\u1eef li\u1ec7u n\u01a1i h\u00ecnh \u1ea3nh v\u00e0 Tr\u00ecnh qu\u1ea3n l\u00fd c\u1ee5m Linode \u0111\u01b0\u1ee3c t\u1ea1o. N\u00ean ch\u1ecdn m\u1ed9t trung t\u00e2m d\u1eef li\u1ec7u g\u1ea7n v\u1ec1 m\u1eb7t \u0111\u1ecba l\u00fd v\u1edbi c\u01a1 s\u1edf c\u1ee7a b\u1ea1n \u0111\u1ec3 gi\u1ea3m \u0111\u1ed9 tr\u1ec5 m\u1ea1ng.<\/p>\n<p>Gi\u00e1 tr\u1ecb n\u00e0y c\u00f3 th\u1ec3 l\u00e0 ID ho\u1eb7c v\u1ecb tr\u00ed ho\u1eb7c t\u00ean vi\u1ebft t\u1eaft c\u1ee7a trung t\u00e2m d\u1eef li\u1ec7u. \u0110\u1ec3 xem danh s\u00e1ch t\u1ea5t c\u1ea3 c\u00e1c trung t\u00e2m d\u1eef li\u1ec7u:<\/p>\n<pre class=\"wp-block-code\"><code> .\/zookeeper-cluster-linode.sh datacenters api_env_linode.conf\n<\/code><\/pre>\n<p><strong>CLUSTER_SIZE<\/strong><\/p>\n<p>C\u00e1c lo\u1ea1i v\u00e0 s\u1ed1 l\u01b0\u1ee3ng c\u00e1c n\u00fat t\u1ea1o n\u00ean c\u1ee5m n\u00e0y. C\u00fa ph\u00e1p l\u00e0:<\/p>\n<p><code>plan:count plan:count ...<\/code><\/p>\n<p>A&nbsp;<code>plan<\/code>l\u00e0 m\u1ed9t trong&nbsp;<code>2GB | 4GB | ... | 120GB<\/code>(xem&nbsp;<a href=\"https:\/\/www.linode.com\/pricing\" target=\"_blank\" rel=\"noreferrer noopener\">c\u00e1c g\u00f3i Linode<\/a>&nbsp;\u0111\u1ec3 bi\u1ebft t\u1ea5t c\u1ea3 c\u00e1c g\u00f3i) v\u00e0&nbsp;<code>count<\/code>l\u00e0 s\u1ed1 l\u01b0\u1ee3ng n\u00fat c\u00f3 g\u00f3i \u0111\u00f3.<\/p>\n<p>V\u00ed d\u1ee5:<\/p>\n<ul>\n<li>\u0110\u1ed1i v\u1edbi c\u1ee5m c\u00f3 ba n\u00fat 4GB:<code> CLUSTER_SIZE=\"4GB:3\"<\/code><\/li>\n<li>\u0110\u1ed1i v\u1edbi m\u1ed9t c\u1ee5m c\u00f3 ba n\u00fat c\u00f3 k\u1ebf ho\u1ea1ch kh\u00e1c nhau:<code> CLUSTER_SIZE=\"2GB:1 4GB:1 8GB:1\"<\/code><\/li>\n<\/ul>\n<p>T\u1ed5ng s\u1ed1 n\u00fat trong c\u1ee5m Zookeeper&nbsp;<strong>ph\u1ea3i<\/strong>&nbsp;l\u00e0 s\u1ed1 l\u1ebb. M\u1eb7c d\u00f9 c\u1ee5m c\u00f3 th\u1ec3 c\u00f3 c\u00e1c n\u00fat c\u00f3 c\u00e1c k\u1ebf ho\u1ea1ch kh\u00e1c nhau, nh\u01b0ng n\u00ean s\u1eed d\u1ee5ng c\u00f9ng m\u1ed9t k\u1ebf ho\u1ea1ch cho t\u1ea5t c\u1ea3 c\u00e1c n\u00fat. N\u00ean tr\u00e1nh c\u00e1c c\u1ee5m qu\u00e1 l\u1edbn. M\u1ed9t c\u1ee5m c\u00f3 3-9 n\u00fat l\u00e0 \u0111\u1ee7 cho h\u1ea7u h\u1ebft c\u00e1c tr\u01b0\u1eddng h\u1ee3p s\u1eed d\u1ee5ng. 11-19 n\u00fat s\u1ebd \u0111\u01b0\u1ee3c coi l\u00e0 &#8220;l\u1edbn&#8221;. B\u1ea5t k\u1ef3 th\u1ee9 g\u00ec nhi\u1ec1u h\u01a1n 19 n\u00fat s\u1ebd ph\u1ea3n t\u00e1c d\u1ee5ng, v\u00ec t\u1ea1i th\u1eddi \u0111i\u1ec3m \u0111\u00f3, Zookeeper s\u1ebd l\u00e0m ch\u1eadm t\u1ea5t c\u1ea3 c\u00e1c c\u1ee5m Storm ph\u1ee5 thu\u1ed9c v\u00e0o n\u00f3.<\/p>\n<p>H\u00e3y c\u1ea9n th\u1eadn khi thay \u0111\u1ed5i k\u00edch th\u01b0\u1edbc c\u1ee5m, v\u00ec k\u1ec3 t\u1eeb phi\u00ean b\u1ea3n 3.4.6, Zookeeper kh\u00f4ng h\u1ed7 tr\u1ee3 m\u1edf r\u1ed9ng \u0111\u1ed9ng. C\u00e1ch duy nh\u1ea5t \u0111\u1ec3 thay \u0111\u1ed5i k\u00edch th\u01b0\u1edbc l\u00e0 g\u1ee1 b\u1ecf c\u1ee5m v\u00e0 t\u1ea1o c\u1ee5m m\u1edbi, t\u1ea1o th\u1eddi gian ch\u1ebft cho b\u1ea5t k\u1ef3 c\u1ee5m Storm n\u00e0o ph\u1ee5 thu\u1ed9c v\u00e0o c\u1ee5m \u0111\u00f3.<\/p>\n<p><strong><code>ZK_IMAGE_CONF<\/code>&#8211;&nbsp;Y\u00caU C\u1ea6U<\/strong><\/p>\n<p>\u0110\u01b0\u1eddng d\u1eabn c\u1ee7a th\u01b0 m\u1ee5c h\u00ecnh \u1ea3nh Zookeeper ho\u1eb7c t\u1ec7p c\u1ea5u h\u00ecnh \u0111\u1ec3 s\u1eed d\u1ee5ng l\u00e0m m\u1eabu \u0111\u1ec3 t\u1ea1o c\u00e1c n\u00fat c\u1ee7a c\u1ee5m n\u00e0y. \u0110\u0129a c\u1ee7a m\u1ed7i n\u00fat s\u1ebd l\u00e0 b\u1ea3n sao c\u1ee7a h\u00ecnh \u1ea3nh n\u00e0y.<\/p>\n<p>\u0110\u01b0\u1eddng d\u1eabn c\u00f3 th\u1ec3 l\u00e0 \u0111\u01b0\u1eddng d\u1eabn tuy\u1ec7t \u0111\u1ed1i ho\u1eb7c \u0111\u01b0\u1eddng d\u1eabn t\u01b0\u01a1ng \u0111\u1ed1i v\u1edbi th\u01b0 m\u1ee5c c\u1ea5u h\u00ecnh c\u1ee5m. S\u1eed d\u1ee5ng v\u00ed d\u1ee5 c\u1ee7a ch\u00fang t\u00f4i, \u0111\u01b0\u1eddng d\u1eabn tuy\u1ec7t \u0111\u1ed1i s\u1ebd l\u00e0&nbsp;<code>\/home\/clustermgr\/storm-linode\/zk-image1<\/code>v\u00e0 \u0111\u01b0\u1eddng d\u1eabn t\u01b0\u01a1ng \u0111\u1ed1i s\u1ebd l\u00e0&nbsp;<code>..\/zk-image1<\/code>.<\/p>\n<p><strong>NODE_DISK_SIZE<\/strong><\/p>\n<p>K\u00edch th\u01b0\u1edbc \u0111\u0129a c\u1ee7a m\u1ed7i n\u00fat t\u00ednh b\u1eb1ng MB. K\u00edch th\u01b0\u1edbc n\u00e0y ph\u1ea3i l\u1edbn \u00edt nh\u1ea5t b\u1eb1ng k\u00edch th\u01b0\u1edbc \u0111\u0129a c\u1ee7a h\u00ecnh \u1ea3nh \u0111\u01b0\u1ee3c ch\u1ecdn, n\u1ebfu kh\u00f4ng h\u00ecnh \u1ea3nh s\u1ebd kh\u00f4ng sao ch\u00e9p \u0111\u00fang c\u00e1ch.<\/p>\n<p><strong>NODE_ROOT_PASSWORD<\/strong><\/p>\n<p>T\u00f9y ch\u1ecdn, b\u1ea1n c\u00f3 th\u1ec3 ch\u1ec9 \u0111\u1ecbnh m\u1eadt kh\u1ea9u g\u1ed1c cho c\u00e1c n\u00fat. N\u1ebfu m\u1ee5c n\u00e0y tr\u1ed1ng, m\u1eadt kh\u1ea9u g\u1ed1c s\u1ebd n\u1eb1m&nbsp;<code>IMAGE_ROOT_PASSWORD<\/code>trong t\u1ec7p c\u1ea5u h\u00ecnh h\u00ecnh \u1ea3nh.<\/p>\n<p><strong><code>NODE_ROOT_SSH_PUBLIC_KEY<\/code>V\u00e0<code>NODE_ROOT_SSH_PRIVATE_KEY<\/code><\/strong><\/p>\n<p>T\u00f9y ch\u1ecdn, b\u1ea1n c\u00f3 th\u1ec3 ch\u1ec9 \u0111\u1ecbnh t\u1ec7p kh\u00f3a c\u00f4ng khai SSH t\u00f9y ch\u1ec9nh v\u00e0 t\u1ec7p kh\u00f3a ri\u00eang t\u01b0 \u0111\u1ec3 x\u00e1c th\u1ef1c ng\u01b0\u1eddi d\u00f9ng root. N\u1ebfu t\u1ec7p n\u00e0y tr\u1ed1ng, c\u00e1c kh\u00f3a s\u1ebd l\u00e0 c\u00e1c kh\u00f3a \u0111\u01b0\u1ee3c ch\u1ec9 \u0111\u1ecbnh trong t\u1ec7p c\u1ea5u h\u00ecnh h\u00ecnh \u1ea3nh.<\/p>\n<p>N\u1ebfu b\u1ea1n mu\u1ed1n ch\u1ec9 \u0111\u1ecbnh c\u1eb7p kh\u00f3a c\u1ee7a ri\u00eang m\u00ecnh, h\u00e3y ch\u1ecdn t\u00ean t\u1ec7p m\u00f4 t\u1ea3 cho c\u1eb7p kh\u00f3a m\u1edbi n\u00e0y (v\u00ed d\u1ee5:&nbsp;<em>zkcluster1root<\/em>&nbsp;), t\u1ea1o ch\u00fang b\u1eb1ng c\u00e1ch s\u1eed d\u1ee5ng&nbsp;<code>ssh-keygen<\/code>v\u00e0 \u0111\u1eb7t \u0111\u01b0\u1eddng d\u1eabn \u0111\u1ea7y \u0111\u1ee7 c\u1ee7a ch\u00fang t\u1ea1i \u0111\u00e2y.<\/p>\n<p><code><strong>PUBLIC_HOST_NAME_PREFIX<\/strong><\/code><\/p>\n<p>M\u1ed7i Linode trong c\u1ee5m \u0111\u1ec1u c\u00f3 m\u1ed9t&nbsp;<em>\u0111\u1ecba ch\u1ec9 IP c\u00f4ng khai<\/em>&nbsp;, c\u00f3 th\u1ec3 truy c\u1eadp t\u1eeb b\u1ea5t k\u1ef3 \u0111\u00e2u tr\u00ean Internet v\u00e0 m\u1ed9t&nbsp;<em>\u0111\u1ecba ch\u1ec9 IP ri\u00eang<\/em>&nbsp;, ch\u1ec9 c\u00f3 th\u1ec3 truy c\u1eadp t\u1eeb c\u00e1c n\u00fat kh\u00e1c c\u1ee7a c\u00f9ng m\u1ed9t ng\u01b0\u1eddi d\u00f9ng b\u00ean trong c\u00f9ng m\u1ed9t trung t\u00e2m d\u1eef li\u1ec7u.<\/p>\n<p>Theo \u0111\u00f3, m\u1ed7i n\u00fat \u0111\u01b0\u1ee3c c\u1ea5p m\u1ed9t&nbsp;<em>t\u00ean m\u00e1y ch\u1ee7 c\u00f4ng khai<\/em>&nbsp;ph\u00e2n gi\u1ea3i th\u00e0nh \u0111\u1ecba ch\u1ec9 IP c\u00f4ng khai c\u1ee7a n\u00f3. T\u00ean m\u00e1y ch\u1ee7 c\u00f4ng khai c\u1ee7a m\u1ed7i n\u00fat s\u1ebd s\u1eed d\u1ee5ng gi\u00e1 tr\u1ecb n\u00e0y theo sau l\u00e0 m\u1ed9t s\u1ed1 (v\u00ed d\u1ee5:&nbsp;<code>public-host1<\/code>,&nbsp;<code>public-host2<\/code>, v.v.). N\u1ebfu n\u00fat qu\u1ea3n l\u00fd c\u1ee5m n\u1eb1m trong m\u1ed9t trung t\u00e2m d\u1eef li\u1ec7u Linode kh\u00e1c v\u1edbi c\u00e1c n\u00fat c\u1ee5m, n\u00f3 s\u1ebd s\u1eed d\u1ee5ng t\u00ean m\u00e1y ch\u1ee7 c\u00f4ng khai v\u00e0 \u0111\u1ecba ch\u1ec9 IP c\u00f4ng khai \u0111\u1ec3 giao ti\u1ebfp v\u1edbi c\u00e1c n\u00fat c\u1ee5m.<\/p>\n<p><strong>PRIVATE_HOST_NAME_PREFIX<\/strong><\/p>\n<p>M\u1ed7i Linode trong c\u1ee5m \u0111\u01b0\u1ee3c c\u1ea5p m\u1ed9t&nbsp;<em>t\u00ean m\u00e1y ch\u1ee7 ri\u00eang<\/em>&nbsp;ph\u00e2n gi\u1ea3i th\u00e0nh \u0111\u1ecba ch\u1ec9 IP ri\u00eang c\u1ee7a n\u00f3. T\u00ean m\u00e1y ch\u1ee7 ri\u00eang c\u1ee7a m\u1ed7i n\u00fat s\u1ebd s\u1eed d\u1ee5ng gi\u00e1 tr\u1ecb n\u00e0y theo sau l\u00e0 m\u1ed9t s\u1ed1 (v\u00ed d\u1ee5: private-host1, private-host2, v.v.). T\u1ea5t c\u1ea3 c\u00e1c n\u00fat c\u1ee7a c\u1ee5m giao ti\u1ebfp v\u1edbi nhau th\u00f4ng qua t\u00ean m\u00e1y ch\u1ee7 ri\u00eang c\u1ee7a ch\u00fang. \u0110\u00e2y c\u0169ng l\u00e0 t\u00ean m\u00e1y ch\u1ee7 th\u1ef1c t\u1ebf \u0111\u01b0\u1ee3c \u0111\u1eb7t cho n\u00fat b\u1eb1ng&nbsp;<code>hostname<\/code>l\u1ec7nh c\u1ee7a m\u00e1y ch\u1ee7 v\u00e0 \u0111\u01b0\u1ee3c l\u01b0u trong&nbsp;<code>\/etc\/hostname<\/code>.<\/p>\n<p><code><strong>CLUSTER_MANAGER_USES_PUBLIC_IP<\/strong><\/code><\/p>\n<p>\u0110\u1eb7t gi\u00e1 tr\u1ecb n\u00e0y th\u00e0nh&nbsp;<code>false<\/code>n\u1ebfu n\u00fat qu\u1ea3n l\u00fd c\u1ee5m n\u1eb1m trong&nbsp;<em>c\u00f9ng m\u1ed9t<\/em>&nbsp;trung t\u00e2m d\u1eef li\u1ec7u Linode v\u1edbi c\u00e1c n\u00fat c\u1ee5m. \u0110\u00e2y l\u00e0 gi\u00e1 tr\u1ecb \u0111\u01b0\u1ee3c khuy\u1ebfn ngh\u1ecb.&nbsp;<code>true<\/code>&nbsp;<strong>Ch\u1ec9<\/strong>&nbsp;thay \u0111\u1ed5i th\u00e0nh n\u1ebfu n\u00fat qu\u1ea3n l\u00fd c\u1ee5m n\u1eb1m trong m\u1ed9t trung t\u00e2m d\u1eef li\u1ec7u Linode&nbsp;<em>kh\u00e1c<\/em>&nbsp;v\u1edbi c\u00e1c n\u00fat c\u1ee5m.<\/p>\n<p class=\"has-background\" style=\"background-color:#f32a2a33\">Quan tr\u1ecdng: \u0110i\u1ec1u quan tr\u1ecdng l\u00e0 ph\u1ea3i thi\u1ebft l\u1eadp ch\u00ednh x\u00e1c \u0111\u1ec3 tr\u00e1nh l\u1ed7i t\u1ea1o c\u1ee5m nghi\u00eam tr\u1ecdng.<\/p>\n<p><code><strong>ZOOKEEPER_LEADER_CONNECTION_PORT<\/strong><\/code><\/p>\n<p>C\u1ed5ng \u0111\u01b0\u1ee3c n\u00fat Zookeeper s\u1eed d\u1ee5ng \u0111\u1ec3 k\u1ebft n\u1ed1i nh\u1eefng ng\u01b0\u1eddi theo d\u00f5i v\u1edbi ng\u01b0\u1eddi l\u00e3nh \u0111\u1ea1o. Khi m\u1ed9t ng\u01b0\u1eddi l\u00e3nh \u0111\u1ea1o m\u1edbi \u0111\u01b0\u1ee3c b\u1ea7u, m\u1ed7i ng\u01b0\u1eddi theo d\u00f5i s\u1ebd m\u1edf m\u1ed9t k\u1ebft n\u1ed1i TCP v\u1edbi ng\u01b0\u1eddi l\u00e3nh \u0111\u1ea1o t\u1ea1i c\u1ed5ng n\u00e0y. Kh\u00f4ng c\u1ea7n ph\u1ea3i thay \u0111\u1ed5i \u0111i\u1ec1u n\u00e0y tr\u1eeb khi b\u1ea1n c\u00f3 k\u1ebf ho\u1ea1ch t\u00f9y ch\u1ec9nh t\u01b0\u1eddng l\u1eeda.<\/p>\n<p><strong>ZOOKEEPER_LEADER_ELECTION_PORT<\/strong><\/p>\n<p>C\u1ed5ng \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 b\u1ea7u ch\u1ecdn ng\u01b0\u1eddi l\u00e3nh \u0111\u1ea1o Zookeeper trong th\u1eddi gian \u0111\u1ee7 s\u1ed1 l\u01b0\u1ee3ng. Kh\u00f4ng c\u1ea7n ph\u1ea3i thay \u0111\u1ed5i \u0111i\u1ec1u n\u00e0y, tr\u1eeb khi b\u1ea1n c\u00f3 k\u1ebf ho\u1ea1ch t\u00f9y ch\u1ec9nh t\u01b0\u1eddng l\u1eeda.<\/p>\n<p><code><strong>IPTABLES_V4_RULES_TEMPLATE<\/strong><\/code><\/p>\n<p>\u0110\u01b0\u1eddng d\u1eabn tuy\u1ec7t \u0111\u1ed1i ho\u1eb7c t\u01b0\u01a1ng \u0111\u1ed1i c\u1ee7a t\u1ec7p quy t\u1eafc t\u01b0\u1eddng l\u1eeda IPv4 iptables. S\u1eeda \u0111\u1ed5i \u0111i\u1ec1u n\u00e0y n\u1ebfu b\u1ea1n c\u00f3 k\u1ebf ho\u1ea1ch t\u00f9y ch\u1ec9nh c\u1ea5u h\u00ecnh t\u01b0\u1eddng l\u1eeda.<\/p>\n<p><code><strong>IPTABLES_V6_RULES_TEMPLATE<\/strong><\/code><\/p>\n<p>\u0110\u01b0\u1eddng d\u1eabn tuy\u1ec7t \u0111\u1ed1i ho\u1eb7c t\u01b0\u01a1ng \u0111\u1ed1i c\u1ee7a t\u1ec7p quy t\u1eafc t\u01b0\u1eddng l\u1eeda IPv6 iptables. IPv6 b\u1ecb v\u00f4 hi\u1ec7u h\u00f3a ho\u00e0n to\u00e0n tr\u00ean t\u1ea5t c\u1ea3 c\u00e1c n\u00fat v\u00e0 kh\u00f4ng c\u00f3 d\u1ecbch v\u1ee5 n\u00e0o l\u1eafng nghe tr\u00ean \u0111\u1ecba ch\u1ec9 IPv6. S\u1eeda \u0111\u1ed5i \u0111i\u1ec1u n\u00e0y n\u1ebfu b\u1ea1n c\u00f3 k\u1ebf ho\u1ea1ch t\u00f9y ch\u1ec9nh c\u1ea5u h\u00ecnh t\u01b0\u1eddng l\u1eeda.<\/p>\n<p>Khi b\u1ea1n ho\u00e0n t\u1ea5t vi\u1ec7c th\u1ef1c hi\u1ec7n thay \u0111\u1ed5i, h\u00e3y l\u01b0u v\u00e0 \u0111\u00f3ng tr\u00ecnh ch\u1ec9nh s\u1eeda.<\/p>\n<p>4.T\u1ea1o c\u1ee5m b\u1eb1ng&nbsp;<code>create<\/code>l\u1ec7nh:<\/p>\n<pre class=\"wp-block-code\"><code><code>.\/zookeeper-cluster-linode.sh create zk-cluster1 api_env_linode.conf <\/code><\/code><\/pre>\n<p>N\u1ebfu c\u1ee5m \u0111\u01b0\u1ee3c t\u1ea1o th\u00e0nh c\u00f4ng, th\u00f4ng b\u00e1o th\u00e0nh c\u00f4ng s\u1ebd \u0111\u01b0\u1ee3c in ra:<\/p>\n<pre class=\"wp-block-code\"><code><code>Zookeeper cluster successfully created <\/code><\/code><\/pre>\n<p>C\u00f3 th\u1ec3 xem chi ti\u1ebft v\u1ec1 c\u1ee5m \u0111\u00e3 t\u1ea1o b\u1eb1ng l\u1ec7nh&nbsp;<code>describe<\/code>:<\/p>\n<pre class=\"wp-block-code\"><code><code>.\/zookeeper-cluster-linode.sh describe zk-cluster1 <\/code><\/code><\/pre>\n<p>C\u00e1c n\u00fat c\u1ee5m s\u1ebd b\u1ecb t\u1eaft ngay sau khi t\u1ea1o. Ch\u00fang ch\u1ec9 \u0111\u01b0\u1ee3c kh\u1edfi \u0111\u1ed9ng khi b\u1ea5t k\u1ef3 c\u1ee5m Storm n\u00e0o kh\u1edfi \u0111\u1ed9ng.<\/p>\n<h3 id=\"create-a-storm-image\">T\u1ea1o h\u00ecnh \u1ea3nh c\u01a1n b\u00e3o<a href=\"https:\/\/www.linode.com\/docs\/guides\/big-data-in-the-linode-cloud-streaming-data-processing-with-apache-storm\/#create-a-storm-image\"><\/a><\/h3>\n<p>M\u1ed9t&nbsp;<em>h\u00ecnh \u1ea3nh Storm<\/em>&nbsp;l\u00e0 m\u1ed9t \u0111\u0129a ch\u00ednh v\u1edbi t\u1ea5t c\u1ea3 c\u00e1c ph\u1ea7n m\u1ec1m v\u00e0 th\u01b0 vi\u1ec7n Storm c\u1ea7n thi\u1ebft \u0111\u01b0\u1ee3c t\u1ea3i xu\u1ed1ng v\u00e0 c\u00e0i \u0111\u1eb7t. Nh\u1eefng l\u1ee3i \u00edch c\u1ee7a vi\u1ec7c t\u1ea1o m\u1ed9t h\u00ecnh \u1ea3nh Storm bao g\u1ed3m:<\/p>\n<p>T\u1ea1o nhanh m\u1ed9t c\u1ee5m Storm b\u1eb1ng c\u00e1ch ch\u1ec9 c\u1ea7n sao ch\u00e9p n\u00f3 \u0111\u1ec3 t\u1ea1o ra nhi\u1ec1u n\u00fat t\u00f9y theo y\u00eau c\u1ea7u, m\u1ed7i n\u00fat l\u00e0 m\u1ed9t b\u1ea3n sao ho\u00e0n h\u1ea3o c\u1ee7a h\u00ecnh \u1ea3nh<\/p>\n<p>C\u00e1c g\u00f3i ph\u00e2n ph\u1ed1i v\u00e0 c\u00e1c g\u00f3i ph\u1ea7n m\u1ec1m c\u1ee7a b\u00ean th\u1ee9 ba gi\u1ed1ng h\u1ec7t nhau tr\u00ean t\u1ea5t c\u1ea3 c\u00e1c n\u00fat v\u00e0 ng\u0103n ng\u1eeba l\u1ed7i kh\u00f4ng kh\u1edbp phi\u00ean b\u1ea3n<\/p>\n<p>Gi\u1ea3m m\u1ee9c s\u1eed d\u1ee5ng m\u1ea1ng, v\u00ec vi\u1ec7c t\u1ea3i xu\u1ed1ng v\u00e0 c\u1eadp nh\u1eadt ch\u1ec9 \u0111\u01b0\u1ee3c th\u1ef1c hi\u1ec7n m\u1ed9t l\u1ea7n khi chu\u1ea9n b\u1ecb h\u00ecnh \u1ea3nh, thay v\u00ec l\u1eb7p l\u1ea1i ch\u00fang tr\u00ean m\u1ed7i n\u00fat<\/p>\n<p class=\"has-background\" style=\"background-color:#74f78c33\">Ghi ch\u00fa: N\u1ebfu \u0111\u00e3 c\u00f3 h\u00ecnh \u1ea3nh Storm, b\u01b0\u1edbc n\u00e0y kh\u00f4ng b\u1eaft bu\u1ed9c. Nhi\u1ec1u c\u1ee5m Storm c\u00f3 th\u1ec3 chia s\u1ebb c\u00f9ng m\u1ed9t h\u00ecnh \u1ea3nh Zookeeper. Tr\u00ean th\u1ef1c t\u1ebf, b\u1ea1n n\u00ean gi\u1eef s\u1ed1 l\u01b0\u1ee3ng h\u00ecnh \u1ea3nh \u1edf m\u1ee9c th\u1ea5p v\u00ec dung l\u01b0\u1ee3ng l\u01b0u tr\u1eef h\u00ecnh \u1ea3nh b\u1ecb gi\u1edbi h\u1ea1n \u1edf m\u1ee9c 10GB. Khi t\u1ea1o h\u00ecnh \u1ea3nh, b\u1ea1n ph\u1ea3i c\u00f3&nbsp;<code>clustermgr<\/code>quy\u1ec1n \u0111\u1ed1i v\u1edbi Cluster Manager Linode.<\/p>\n<p>1.\u0110\u0103ng nh\u1eadp v\u00e0o Cluster Manager Linode v\u1edbi t\u00ean ng\u01b0\u1eddi d\u00f9ng&nbsp;<code>clustermgr<\/code>v\u00e0 \u0111i\u1ec1u h\u01b0\u1edbng \u0111\u1ebfn&nbsp;<code>storm-linode<\/code>th\u01b0 m\u1ee5c:<\/p>\n<pre class=\"wp-block-code\"><code>ssh -i ~\/.ssh\/clustermgr clustermgr@PUBLIC-IP-OF-CLUSTER-MANAGER-LINODE\ncd storm-linode<\/code><\/pre>\n<p>2.Ch\u1ecdn m\u1ed9t t\u00ean duy nh\u1ea5t cho h\u00ecnh \u1ea3nh c\u1ee7a b\u1ea1n v\u00e0 t\u1ea1o m\u1ed9t th\u01b0 m\u1ee5c c\u1ea5u h\u00ecnh cho h\u00ecnh \u1ea3nh m\u1edbi b\u1eb1ng&nbsp;<code>new-image-conf<\/code>l\u1ec7nh. Trong v\u00ed d\u1ee5 n\u00e0y, ch\u00fang ta s\u1ebd g\u1ecdi h\u00ecnh \u1ea3nh m\u1edbi c\u1ee7a m\u00ecnh&nbsp;<code>storm-image1<\/code>l\u00e0:<\/p>\n<pre class=\"wp-block-code\"><code>.\/storm-cluster-linode.sh new-image-conf storm-image1\n<\/code><\/pre>\n<p>Thao t\u00e1c n\u00e0y s\u1ebd t\u1ea1o ra m\u1ed9t th\u01b0 m\u1ee5c c\u00f3 t\u00ean&nbsp;<code>storm-image1<\/code>ch\u1ee9a c\u00e1c t\u1eadp tin t\u1ea1o n\u00ean c\u1ea5u h\u00ecnh h\u00ecnh \u1ea3nh:<\/p>\n<ul>\n<li><strong>storm-image1.conf<\/strong>&nbsp;&#8211; \u0110\u00e2y l\u00e0 t\u1ec7p c\u1ea5u h\u00ecnh h\u00ecnh \u1ea3nh ch\u00ednh v\u00e0 l\u00e0 t\u1ec7p b\u1ea1n s\u1ebd s\u1eeda \u0111\u1ed5i nhi\u1ec1u nh\u1ea5t. Thu\u1ed9c t\u00ednh c\u1ee7a t\u1ec7p n\u00e0y \u0111\u01b0\u1ee3c m\u00f4 t\u1ea3 trong c\u00e1c b\u01b0\u1edbc sau.<\/li>\n<\/ul>\n<p>C\u00e1c t\u1ec7p kh\u00e1c l\u00e0 c\u00e1c t\u1ec7p c\u1ea5u h\u00ecnh th\u1ee9 c\u1ea5p. Ch\u00fang ch\u1ee9a c\u00e1c gi\u00e1 tr\u1ecb m\u1eb7c \u0111\u1ecbnh h\u1ee3p l\u00fd, nh\u01b0ng b\u1ea1n lu\u00f4n c\u00f3 th\u1ec3 m\u1edf ch\u00fang trong tr\u00ecnh ch\u1ec9nh s\u1eeda v\u00e0 s\u1eeda \u0111\u1ed5i ch\u00fang cho ph\u00f9 h\u1ee3p v\u1edbi nhu c\u1ea7u c\u1ee7a m\u00ecnh:<\/p>\n<ul>\n<li><strong>template-storm.yaml<\/strong>&nbsp;&#8211; T\u1ec7p c\u1ea5u h\u00ecnh Storm. Xem t\u00e0i li\u1ec7u&nbsp;<a href=\"http:\/\/storm.apache.org\/documentation\/Configuration.html\" target=\"_blank\" rel=\"noreferrer noopener\">C\u1ea5u h\u00ecnh Storm<\/a>&nbsp;ch\u00ednh th\u1ee9c \u0111\u1ec3 bi\u1ebft chi ti\u1ebft v\u1ec1 c\u00e1c tham s\u1ed1 c\u00f3 th\u1ec3 t\u00f9y ch\u1ec9nh.<\/li>\n<li><strong>template-storm-supervisord.conf<\/strong>&nbsp;&#8211; Storm daemon \u0111\u01b0\u1ee3c ch\u1ea1y d\u01b0\u1edbi s\u1ef1 gi\u00e1m s\u00e1t \u0111\u1ec3 n\u1ebfu n\u00f3 t\u1eaft \u0111\u1ed9t ng\u1ed9t, n\u00f3 s\u1ebd t\u1ef1 \u0111\u1ed9ng \u0111\u01b0\u1ee3c Supervisord kh\u1edfi \u0111\u1ed9ng l\u1ea1i. Kh\u00f4ng c\u00f3 nhi\u1ec1u th\u1ee9 \u0111\u1ec3 t\u00f9y ch\u1ec9nh \u1edf \u0111\u00e2y, nh\u01b0ng h\u00e3y xem l\u1ea1i&nbsp;<a href=\"http:\/\/supervisord.org\/configuration.html\" target=\"_blank\" rel=\"noreferrer noopener\">t\u00e0i li\u1ec7u C\u1ea5u h\u00ecnh Supervisord<\/a>&nbsp;n\u1ebfu b\u1ea1n mu\u1ed1n t\u00f9y ch\u1ec9nh.<\/li>\n<\/ul>\n<p>4.M\u1edf t\u1ec7p c\u1ea5u h\u00ecnh h\u00ecnh \u1ea3nh (trong v\u00ed d\u1ee5 n\u00e0y l\u00e0&nbsp;<code>~\/storm-linode\/storm-image1\/storm-image1.conf<\/code>) trong tr\u00ecnh so\u1ea1n th\u1ea3o v\u0103n b\u1ea3n. Nh\u1eadp ho\u1eb7c ch\u1ec9nh s\u1eeda c\u00e1c gi\u00e1 tr\u1ecb c\u1ee7a thu\u1ed9c t\u00ednh c\u1ea5u h\u00ecnh theo y\u00eau c\u1ea7u. C\u00e1c thu\u1ed9c t\u00ednh ph\u1ea3i \u0111\u01b0\u1ee3c nh\u1eadp ho\u1eb7c thay \u0111\u1ed5i t\u1eeb gi\u00e1 tr\u1ecb m\u1eb7c \u0111\u1ecbnh c\u1ee7a ch\u00fang \u0111\u01b0\u1ee3c \u0111\u00e1nh d\u1ea5u l\u00e0&nbsp;<strong>B\u1eaeT BU\u1ed8C<\/strong>&nbsp;:<\/p>\n<p><code><strong>DISTRIBUTION_FOR_IMAGE<\/strong><\/code><\/p>\n<p>Ch\u1ec9 \u0111\u1ecbnh Ubuntu 14.04 ho\u1eb7c Debian 8 \u0111\u1ec3 s\u1eed d\u1ee5ng cho h\u00ecnh \u1ea3nh n\u00e0y. H\u01b0\u1edbng d\u1eabn n\u00e0y ch\u01b0a&nbsp;<em>\u0111\u01b0\u1ee3c<\/em>&nbsp;th\u1eed nghi\u1ec7m tr\u00ean b\u1ea5t k\u1ef3 phi\u00ean b\u1ea3n ho\u1eb7c b\u1ea3n ph\u00e2n ph\u1ed1i n\u00e0o kh\u00e1c.<\/p>\n<p>T\u1ea5t c\u1ea3 c\u00e1c n\u00fat c\u1ee7a t\u1ea5t c\u1ea3 c\u00e1c c\u1ee5m \u0111\u01b0\u1ee3c t\u1ea1o t\u1eeb h\u00ecnh \u1ea3nh n\u00e0y s\u1ebd c\u00f3 b\u1ea3n ph\u00e2n ph\u1ed1i n\u00e0y. Gi\u00e1 tr\u1ecb m\u1eb7c \u0111\u1ecbnh t\u01b0\u01a1ng&nbsp;<code>124<\/code>\u1ee9ng v\u1edbi Ubuntu 14.04 LTS 64-bit. \u0110\u1ed1i v\u1edbi Debian 8 64-bit, h\u00e3y thay \u0111\u1ed5i gi\u00e1 tr\u1ecb n\u00e0y th\u00e0nh&nbsp;<code>140<\/code>.<\/p>\n<p class=\"has-background\" style=\"background-color:#74f78c33\">Ghi ch\u00fa: C\u00e1c gi\u00e1 tr\u1ecb \u0111\u01b0\u1ee3c th\u1ec3 hi\u1ec7n trong h\u01b0\u1edbng d\u1eabn n\u00e0y l\u00e0 gi\u00e1 tr\u1ecb hi\u1ec7n t\u1ea1i t\u00ednh \u0111\u1ebfn th\u1eddi \u0111i\u1ec3m xu\u1ea5t b\u1ea3n, nh\u01b0ng c\u00f3 th\u1ec3 thay \u0111\u1ed5i trong t\u01b0\u01a1ng lai. B\u1ea1n c\u00f3 th\u1ec3 ch\u1ea1y&nbsp;<code>~\/storm-linode\/linode_api.py distributions<\/code>\u0111\u1ec3 xem danh s\u00e1ch t\u1ea5t c\u1ea3 c\u00e1c b\u1ea3n ph\u00e2n ph\u1ed1i kh\u1ea3 d\u1ee5ng v\u00e0 gi\u00e1 tr\u1ecb c\u1ee7a ch\u00fang trong API.<\/p>\n<p><strong>LABEL_FOR_IMAGE<\/strong><\/p>\n<p>Nh\u00e3n gi\u00fap b\u1ea1n ph\u00e2n bi\u1ec7t h\u00ecnh \u1ea3nh n\u00e0y v\u1edbi c\u00e1c h\u00ecnh \u1ea3nh kh\u00e1c. T\u00ean n\u00e0y s\u1ebd \u0111\u01b0\u1ee3c hi\u1ec3n th\u1ecb n\u1ebfu b\u1ea1n ch\u1ec9nh s\u1eeda ho\u1eb7c xem h\u00ecnh \u1ea3nh c\u1ee7a m\u00ecnh trong Linode Manager.<\/p>\n<p><code><strong>KERNEL_FOR_IMAGE<\/strong><\/code><\/p>\n<p>Phi\u00ean b\u1ea3n kernel do Linode cung c\u1ea5p \u0111\u1ec3 s\u1eed d\u1ee5ng trong h\u00ecnh \u1ea3nh n\u00e0y. Gi\u00e1 tr\u1ecb m\u1eb7c \u0111\u1ecbnh t\u01b0\u01a1ng&nbsp;<code>138<\/code>\u1ee9ng v\u1edbi kernel 64-bit m\u1edbi nh\u1ea5t do Linode cung c\u1ea5p. B\u1ea1n n\u00ean \u0111\u1ec3 \u0111\u00e2y l\u00e0 c\u00e0i \u0111\u1eb7t m\u1eb7c \u0111\u1ecbnh.<\/p>\n<p><code><strong>DATACENTER_FOR_IMAGE<\/strong><\/code><\/p>\n<p>Trung t\u00e2m d\u1eef li\u1ec7u Linode n\u01a1i h\u00ecnh \u1ea3nh n\u00e0y s\u1ebd \u0111\u01b0\u1ee3c t\u1ea1o. \u0110\u00e2y c\u00f3 th\u1ec3 l\u00e0 b\u1ea5t k\u1ef3 trung t\u00e2m d\u1eef li\u1ec7u Linode n\u00e0o, nh\u01b0ng vi\u1ec7c t\u1ea1o c\u1ee5m s\u1ebd nhanh h\u01a1n n\u1ebfu h\u00ecnh \u1ea3nh \u0111\u01b0\u1ee3c t\u1ea1o trong c\u00f9ng m\u1ed9t trung t\u00e2m d\u1eef li\u1ec7u n\u01a1i c\u1ee5m s\u1ebd \u0111\u01b0\u1ee3c t\u1ea1o. B\u1ea1n c\u0169ng n\u00ean t\u1ea1o h\u00ecnh \u1ea3nh trong c\u00f9ng m\u1ed9t trung t\u00e2m d\u1eef li\u1ec7u v\u1edbi Cluster Manager Linode. Ch\u1ecdn m\u1ed9t trung t\u00e2m d\u1eef li\u1ec7u g\u1ea7n b\u1ea1n v\u1ec1 m\u1eb7t \u0111\u1ecba l\u00fd \u0111\u1ec3 gi\u1ea3m \u0111\u1ed9 tr\u1ec5 m\u1ea1ng.<\/p>\n<p>Gi\u00e1 tr\u1ecb n\u00e0y c\u00f3 th\u1ec3 l\u00e0 ID ho\u1eb7c v\u1ecb tr\u00ed ho\u1eb7c t\u00ean vi\u1ebft t\u1eaft c\u1ee7a trung t\u00e2m d\u1eef li\u1ec7u. \u0110\u1ec3 xem danh s\u00e1ch t\u1ea5t c\u1ea3 c\u00e1c trung t\u00e2m d\u1eef li\u1ec7u:<\/p>\n<pre class=\"wp-block-code\"><code> .\/zookeeper-cluster-linode.sh datacenters api_env_linode.conf\n<\/code><\/pre>\n<p><strong><code>IMAGE_ROOT_PASSWORD<\/code>&#8211;&nbsp;Y\u00caU C\u1ea6U<\/strong><\/p>\n<p>M\u1eadt kh\u1ea9u ng\u01b0\u1eddi d\u00f9ng g\u1ed1c m\u1eb7c \u0111\u1ecbnh cho h\u00ecnh \u1ea3nh. T\u1ea5t c\u1ea3 c\u00e1c n\u00fat c\u1ee7a b\u1ea5t k\u1ef3 c\u1ee5m n\u00e0o \u0111\u01b0\u1ee3c t\u1ea1o t\u1eeb h\u00ecnh \u1ea3nh n\u00e0y s\u1ebd c\u00f3 m\u1eadt kh\u1ea9u n\u00e0y l\u00e0m m\u1eadt kh\u1ea9u g\u1ed1c, tr\u1eeb khi n\u00f3 \u0111\u01b0\u1ee3c ghi \u0111\u00e8 trong t\u1ec7p c\u1ea5u h\u00ecnh c\u1ee7a c\u1ee5m.<\/p>\n<p><strong><code>IMAGE_ROOT_SSH_PUBLIC_KEY<\/code>V\u00e0<code>IMAGE_ROOT_SSH_PRIVATE_KEY<\/code><\/strong><\/p>\n<p>C\u00e1c t\u1ec7p c\u1eb7p kh\u00f3a \u0111\u1ec3 x\u00e1c th\u1ef1c kh\u00f3a c\u00f4ng khai SSH v\u1edbi t\u01b0 c\u00e1ch l\u00e0 ng\u01b0\u1eddi d\u00f9ng root. B\u1ea5t k\u1ef3 ng\u01b0\u1eddi d\u00f9ng n\u00e0o \u0111\u0103ng nh\u1eadp b\u1eb1ng kh\u00f3a ri\u00eang n\u00e0y \u0111\u1ec1u c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c x\u00e1c th\u1ef1c v\u1edbi t\u01b0 c\u00e1ch l\u00e0 root.<\/p>\n<p>Theo m\u1eb7c \u0111\u1ecbnh,&nbsp;<code>cluster_manager.sh<\/code>thi\u1ebft l\u1eadp \u0111\u00e3 t\u1ea1o m\u1ed9t c\u1eb7p kh\u00f3a c\u00f3 t\u00ean&nbsp;<code>clusterroot<\/code>v\u00e0&nbsp;<code>clusterroot.pub<\/code>n\u1eb1m trong&nbsp;<code>~\/.ssh\/<\/code>. N\u1ebfu b\u1ea1n mu\u1ed1n thay th\u1ebf ch\u00fang b\u1eb1ng c\u1eb7p kh\u00f3a c\u1ee7a ri\u00eang m\u00ecnh, b\u1ea1n c\u00f3 th\u1ec3 t\u1ea1o kh\u00f3a c\u1ee7a ri\u00eang m\u00ecnh v\u00e0 \u0111\u1eb7t \u0111\u01b0\u1eddng d\u1eabn \u0111\u1ea7y \u0111\u1ee7 c\u1ee7a ch\u00fang t\u1ea1i \u0111\u00e2y.<\/p>\n<p><code><strong>IMAGE_DISABLE_SSH_PASSWORD_AUTHENTICATION<\/strong><\/code><\/p>\n<p>\u0110i\u1ec1u n\u00e0y v\u00f4 hi\u1ec7u h\u00f3a x\u00e1c th\u1ef1c m\u1eadt kh\u1ea9u SSH v\u00e0 ch\u1ec9 cho ph\u00e9p x\u00e1c th\u1ef1c SSH d\u1ef1a tr\u00ean kh\u00f3a cho c\u00e1c n\u00fat c\u1ee5m. X\u00e1c th\u1ef1c m\u1eadt kh\u1ea9u \u0111\u01b0\u1ee3c coi l\u00e0 k\u00e9m an to\u00e0n h\u01a1n v\u00e0 do \u0111\u00f3 b\u1ecb v\u00f4 hi\u1ec7u h\u00f3a theo m\u1eb7c \u0111\u1ecbnh. \u0110\u1ec3 b\u1eadt x\u00e1c th\u1ef1c m\u1eadt kh\u1ea9u, b\u1ea1n c\u00f3 th\u1ec3 thay \u0111\u1ed5i gi\u00e1 tr\u1ecb n\u00e0y th\u00e0nh&nbsp;<code>no<\/code>.<\/p>\n<p><code><strong>IMAGE_ADMIN_USER<\/strong><\/code><\/p>\n<p>Ng\u01b0\u1eddi qu\u1ea3n tr\u1ecb ho\u1eb7c nh\u00e0 ph\u00e1t tri\u1ec3n c\u00f3 th\u1ec3 ph\u1ea3i \u0111\u0103ng nh\u1eadp v\u00e0o c\u00e1c n\u00fat c\u1ee5m \u0111\u1ec3 b\u1ea3o tr\u00ec. Thay v\u00ec \u0111\u0103ng nh\u1eadp v\u1edbi t\u01b0 c\u00e1ch l\u00e0 ng\u01b0\u1eddi d\u00f9ng root, t\u1ed1t h\u01a1n l\u00e0 \u0111\u0103ng nh\u1eadp v\u1edbi t\u01b0 c\u00e1ch l\u00e0 ng\u01b0\u1eddi d\u00f9ng kh\u00f4ng ph\u1ea3i root c\u00f3 \u0111\u1eb7c quy\u1ec1n. T\u1eadp l\u1ec7nh t\u1ea1o m\u1ed9t ng\u01b0\u1eddi d\u00f9ng c\u00f3 \u0111\u1eb7c quy\u1ec1n v\u1edbi t\u00ean n\u00e0y trong h\u00ecnh \u1ea3nh (v\u00e0 trong t\u1ea5t c\u1ea3 c\u00e1c n\u00fat c\u1ee5m d\u1ef1a tr\u00ean h\u00ecnh \u1ea3nh n\u00e0y).<\/p>\n<p><strong><code>IMAGE_ADMIN_PASSWORD<\/code>&#8211;&nbsp;Y\u00caU C\u1ea6U<\/strong><\/p>\n<p>\u0110\u1eb7t m\u1eadt kh\u1ea9u cho&nbsp;<code>IMAGE_ADMIN_USER<\/code>.<\/p>\n<p><code><strong>IMAGE_ADMIN_SSH_AUTHORIZED_KEYS<\/strong><\/code><\/p>\n<p>T\u1ec7p ch\u1ee9a kh\u00f3a c\u00f4ng khai c\u1ee7a t\u1ea5t c\u1ea3 nh\u00e2n vi\u00ean \u0111\u01b0\u1ee3c ph\u00e9p \u0111\u0103ng nh\u1eadp v\u00e0o c\u00e1c n\u00fat c\u1ee5m d\u01b0\u1edbi d\u1ea1ng&nbsp;<code>IMAGE_ADMIN_USER<\/code>. T\u1ec7p n\u00e0y ph\u1ea3i c\u00f3 c\u00f9ng \u0111\u1ecbnh d\u1ea1ng v\u1edbi t\u1ec7p&nbsp;<em>authorized_keys<\/em>&nbsp;SSH chu\u1ea9n . T\u1ea5t c\u1ea3 c\u00e1c m\u1ee5c trong t\u1ec7p n\u00e0y \u0111\u01b0\u1ee3c th\u00eam v\u00e0o&nbsp;<code>authorized_keys<\/code>t\u1ec7p c\u1ee7a h\u00ecnh \u1ea3nh v\u00e0 \u0111\u01b0\u1ee3c k\u1ebf th\u1eeba v\u00e0o t\u1ea5t c\u1ea3 c\u00e1c n\u00fat d\u1ef1a tr\u00ean h\u00ecnh \u1ea3nh n\u00e0y.<\/p>\n<p>Theo m\u1eb7c \u0111\u1ecbnh,&nbsp;<code>cluster_manager.sh<\/code>thi\u1ebft l\u1eadp t\u1ea1o m\u1ed9t&nbsp;<code>clusteradmin<\/code>c\u1eb7p kh\u00f3a m\u1edbi v\u00e0 bi\u1ebfn n\u00e0y \u0111\u01b0\u1ee3c \u0111\u1eb7t th\u00e0nh \u0111\u01b0\u1eddng d\u1eabn c\u1ee7a kh\u00f3a c\u00f4ng khai. B\u1ea1n c\u00f3 th\u1ec3 gi\u1eef l\u1ea1i c\u1eb7p kh\u00f3a \u0111\u00e3 t\u1ea1o n\u00e0y v\u00e0 ph\u00e2n ph\u1ed1i t\u1ec7p kh\u00f3a ri\u00eang \u0111\u00e3 t\u1ea1o&nbsp;<code>~\/.ssh\/clusteradmin<\/code>cho nh\u00e2n vi\u00ean \u0111\u01b0\u1ee3c \u1ee7y quy\u1ec1n. Ngo\u00e0i ra, b\u1ea1n c\u00f3 th\u1ec3 thu th\u1eadp kh\u00f3a c\u00f4ng khai c\u1ee7a nh\u00e2n vi\u00ean \u0111\u01b0\u1ee3c \u1ee7y quy\u1ec1n v\u00e0 th\u00eam ch\u00fang v\u00e0o&nbsp;<code>~\/.ssh\/clusteradmin.pub<\/code>.<\/p>\n<p><code><strong>IMAGE_DISK_SIZE<\/strong><\/code><\/p>\n<p>K\u00edch th\u01b0\u1edbc c\u1ee7a \u0111\u0129a \u1ea3nh t\u00ednh b\u1eb1ng MB. Gi\u00e1 tr\u1ecb m\u1eb7c \u0111\u1ecbnh l\u00e0 5000MB th\u01b0\u1eddng l\u00e0 \u0111\u1ee7, v\u00ec qu\u00e1 tr\u00ecnh c\u00e0i \u0111\u1eb7t ch\u1ec9 bao g\u1ed3m h\u1ec7 \u0111i\u1ec1u h\u00e0nh c\u00f3 c\u00e0i \u0111\u1eb7t ph\u1ea7n m\u1ec1m Java v\u00e0 Storm.<\/p>\n<p><code><strong>UPGRADE_OS<\/strong><\/code><\/p>\n<p>N\u1ebfu&nbsp;<code>yes<\/code>, c\u00e1c g\u00f3i ph\u00e2n ph\u1ed1i \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt v\u00e0 n\u00e2ng c\u1ea5p tr\u01b0\u1edbc khi c\u00e0i \u0111\u1eb7t b\u1ea5t k\u1ef3 ph\u1ea7n m\u1ec1m n\u00e0o. N\u00ean \u0111\u1ec3 nguy\u00ean c\u00e0i \u0111\u1eb7t m\u1eb7c \u0111\u1ecbnh \u0111\u1ec3 tr\u00e1nh m\u1ecdi s\u1ef1 c\u1ed1 c\u00e0i \u0111\u1eb7t ho\u1eb7c ph\u1ee5 thu\u1ed9c.<\/p>\n<p><code><strong>INSTALL_STORM_DISTRIBUTION<\/strong><\/code><\/p>\n<p>Phi\u00ean b\u1ea3n Storm \u0111\u1ec3 c\u00e0i \u0111\u1eb7t. Theo m\u1eb7c \u0111\u1ecbnh,&nbsp;<code>cluster_manager.sh<\/code>thi\u1ebft l\u1eadp \u0111\u00e3 t\u1ea3i xu\u1ed1ng phi\u00ean b\u1ea3n 0.9.5. N\u1ebfu b\u1ea1n mu\u1ed1n c\u00e0i \u0111\u1eb7t phi\u00ean b\u1ea3n kh\u00e1c, h\u00e3y t\u1ea3i xu\u1ed1ng th\u1ee7 c\u00f4ng v\u00e0 thay \u0111\u1ed5i bi\u1ebfn n\u00e0y. Tuy nhi\u00ean, b\u1ea1n n\u00ean \u0111\u1ec3 nguy\u00ean gi\u00e1 tr\u1ecb m\u1eb7c \u0111\u1ecbnh v\u00ec h\u01b0\u1edbng d\u1eabn n\u00e0y ch\u01b0a \u0111\u01b0\u1ee3c th\u1eed nghi\u1ec7m v\u1edbi c\u00e1c phi\u00ean b\u1ea3n kh\u00e1c.<\/p>\n<p><code><strong>STORM_INSTALL_DIRECTORY<\/strong><\/code><\/p>\n<p>Th\u01b0 m\u1ee5c n\u01a1i Storm s\u1ebd \u0111\u01b0\u1ee3c c\u00e0i \u0111\u1eb7t tr\u00ean h\u00ecnh \u1ea3nh (v\u00e0 tr\u00ean t\u1ea5t c\u1ea3 c\u00e1c n\u00fat c\u1ee5m \u0111\u01b0\u1ee3c t\u1ea1o t\u1eeb h\u00ecnh \u1ea3nh n\u00e0y).<\/p>\n<p><code><strong>STORM_YAML_TEMPLATE<\/strong><\/code><\/p>\n<p>\u0110\u01b0\u1eddng d\u1eabn c\u1ee7a&nbsp;<code>storm.yaml<\/code>t\u1ec7p c\u1ea5u h\u00ecnh m\u1eabu \u0111\u1ec3 c\u00e0i \u0111\u1eb7t trong \u1ea3nh. Theo m\u1eb7c \u0111\u1ecbnh, n\u00f3 tr\u1ecf \u0111\u1ebfn&nbsp;<code>template-storm.yaml<\/code>t\u1ec7p trong th\u01b0 m\u1ee5c \u1ea3nh. Ng\u01b0\u1eddi qu\u1ea3n tr\u1ecb c\u00f3 th\u1ec3 t\u00f9y ch\u1ec9nh t\u1ec7p YAML n\u00e0y tr\u01b0\u1edbc khi t\u1ea1o \u1ea3nh ho\u1eb7c \u0111\u1eb7t bi\u1ebfn n\u00e0y \u0111\u1ec3 tr\u1ecf \u0111\u1ebfn t\u1ec7p kh\u00e1c&nbsp;<code>storm.yaml<\/code>theo l\u1ef1a ch\u1ecdn c\u1ee7a h\u1ecd.<\/p>\n<p><code><strong>STORM_USER<\/strong><\/code><\/p>\n<p>T\u00ean ng\u01b0\u1eddi d\u00f9ng m\u00e0 daemon Storm ch\u1ea1y. \u0110\u00e2y l\u00e0 t\u00ednh n\u0103ng b\u1ea3o m\u1eadt \u0111\u1ec3 tr\u00e1nh leo thang \u0111\u1eb7c quy\u1ec1n b\u1eb1ng c\u00e1ch khai th\u00e1c m\u1ed9t s\u1ed1 l\u1ed7 h\u1ed5ng trong daemon Storm.<\/p>\n<p><code><strong>SUPERVISORD_TEMPLATE_CONF<\/strong><\/code><\/p>\n<p>\u0110\u01b0\u1eddng d\u1eabn c\u1ee7a t\u1ec7p c\u1ea5u h\u00ecnh gi\u00e1m s\u00e1t m\u1eabu \u0111\u1ec3 c\u00e0i \u0111\u1eb7t trong \u1ea3nh. Theo m\u1eb7c \u0111\u1ecbnh, n\u00f3 tr\u1ecf \u0111\u1ebfn t\u1ec7p&nbsp;<code>template-storm-supervisord.conf<\/code>trong th\u01b0 m\u1ee5c \u1ea3nh Storm. Ng\u01b0\u1eddi qu\u1ea3n tr\u1ecb c\u00f3 th\u1ec3 s\u1eeda \u0111\u1ed5i t\u1ec7p n\u00e0y tr\u01b0\u1edbc khi t\u1ea1o \u1ea3nh ho\u1eb7c \u0111\u1eb7t bi\u1ebfn n\u00e0y \u0111\u1ec3 tr\u1ecf \u0111\u1ebfn b\u1ea5t k\u1ef3&nbsp;<code>storm-supervisord.conf<\/code>t\u1ec7p n\u00e0o kh\u00e1c m\u00e0 h\u1ecd ch\u1ecdn.<\/p>\n<p>Sau khi th\u1ef1c hi\u1ec7n thay \u0111\u1ed5i, h\u00e3y l\u01b0u v\u00e0 \u0111\u00f3ng tr\u00ecnh ch\u1ec9nh s\u1eeda.<\/p>\n<p>4.T\u1ea1o h\u00ecnh \u1ea3nh b\u1eb1ng l\u1ec7nh&nbsp;<code>create-image<\/code>, ch\u1ec9 \u0111\u1ecbnh t\u00ean c\u1ee7a h\u00ecnh \u1ea3nh m\u1edbi t\u1ea1o v\u00e0 t\u1ec7p m\u00f4i tr\u01b0\u1eddng API:<\/p>\n<pre class=\"wp-block-code\"><code>.\/storm-cluster-linode.sh create-image storm-image1 api_env_linode.conf\n<\/code><\/pre>\n<p>N\u1ebfu h\u00ecnh \u1ea3nh \u0111\u01b0\u1ee3c t\u1ea1o th\u00e0nh c\u00f4ng, k\u1ebft qu\u1ea3 \u0111\u1ea7u ra s\u1ebd tr\u00f4ng gi\u1ed1ng nh\u01b0 th\u1ebf n\u00e0y v\u00e0o cu\u1ed1i:<\/p>\n<pre class=\"wp-block-code\"><code>....\nDeleting the temporary linode xxxxxx\n\nFinished creating Storm template image yyyyyy\n<\/code><\/pre>\n<p>N\u1ebfu quy tr\u00ecnh kh\u00f4ng th\u00e0nh c\u00f4ng, h\u00e3y \u0111\u1ea3m b\u1ea3o r\u1eb1ng b\u1ea1n kh\u00f4ng c\u00f3 h\u00ecnh \u1ea3nh Storm hi\u1ec7n c\u00f3 c\u00f9ng t\u00ean trong Linode Manager. N\u1ebfu c\u00f3, h\u00e3y x\u00f3a h\u00ecnh \u1ea3nh \u0111\u00f3 v\u00e0 ch\u1ea1y l\u1ea1i l\u1ec7nh ho\u1eb7c t\u1ea1o l\u1ea1i h\u00ecnh \u1ea3nh n\u00e0y v\u1edbi t\u00ean kh\u00e1c.<\/p>\n<p class=\"has-background\" style=\"background-color:#74f78c33\">Ghi ch\u00fa: Trong qu\u00e1 tr\u00ecnh n\u00e0y, m\u1ed9t Linode 2GB t\u1ed3n t\u1ea1i trong th\u1eddi gian ng\u1eafn s\u1ebd \u0111\u01b0\u1ee3c t\u1ea1o v\u00e0 x\u00f3a. \u0110i\u1ec1u n\u00e0y s\u1ebd k\u00e9o theo m\u1ed9t kho\u1ea3n chi ph\u00ed nh\u1ecf trong h\u00f3a \u0111\u01a1n h\u00e0ng th\u00e1ng v\u00e0 k\u00edch ho\u1ea1t email th\u00f4ng b\u00e1o s\u1ef1 ki\u1ec7n \u0111\u01b0\u1ee3c g\u1eedi \u0111\u1ebfn \u0111\u1ecba ch\u1ec9 b\u1ea1n \u0111\u00e3 \u0111\u0103ng k\u00fd v\u1edbi Linode. \u0110\u00e2y l\u00e0 h\u00e0nh vi d\u1ef1 ki\u1ebfn.<\/p>\n<h3 id=\"create-a-storm-cluster-1\">T\u1ea1o m\u1ed9t c\u1ee5m b\u00e3o<a href=\"https:\/\/www.linode.com\/docs\/guides\/big-data-in-the-linode-cloud-streaming-data-processing-with-apache-storm\/#create-a-storm-cluster-1\"><\/a><\/h3>\n<p>Trong ph\u1ea7n n\u00e0y, b\u1ea1n s\u1ebd h\u1ecdc c\u00e1ch t\u1ea1o m\u1ed9t c\u1ee5m Storm m\u1edbi trong \u0111\u00f3 m\u1ed7i n\u00fat l\u00e0 b\u1ea3n sao c\u1ee7a m\u1ed9t h\u00ecnh \u1ea3nh Storm hi\u1ec7n c\u00f3. N\u1ebfu b\u1ea1n ch\u01b0a t\u1ea1o b\u1ea5t k\u1ef3 h\u00ecnh \u1ea3nh Storm n\u00e0o, h\u00e3y th\u1ef1c hi\u1ec7n tr\u01b0\u1edbc b\u1eb1ng c\u00e1ch l\u00e0m theo&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/guides\/big-data-in-the-linode-cloud-streaming-data-processing-with-apache-storm\/#create-a-storm-image\">T\u1ea1o h\u00ecnh \u1ea3nh Storm<\/a>&nbsp;.<\/p>\n<p>1.\u0110\u0103ng nh\u1eadp v\u00e0o Cluster Manager Linode v\u1edbi t\u00ean ng\u01b0\u1eddi d\u00f9ng&nbsp;<code>clustermgr<\/code>v\u00e0 \u0111i\u1ec1u h\u01b0\u1edbng \u0111\u1ebfn&nbsp;<code>storm-linode<\/code>th\u01b0 m\u1ee5c:<\/p>\n<pre class=\"wp-block-code\"><code>ssh -i ~\/.ssh\/clustermgr clustermgr@PUBLIC-IP-OF-CLUSTER-MANAGER-LINODE\ncd storm-linode<\/code><\/pre>\n<p>2.Ch\u1ecdn m\u1ed9t t\u00ean duy nh\u1ea5t cho c\u1ee5m c\u1ee7a b\u1ea1n v\u00e0 t\u1ea1o m\u1ed9t th\u01b0 m\u1ee5c c\u1ea5u h\u00ecnh b\u1eb1ng l\u1ec7nh&nbsp;<code>new-cluster-conf<\/code>. Trong v\u00ed d\u1ee5 n\u00e0y, ch\u00fang ta s\u1ebd g\u1ecdi c\u1ea5u h\u00ecnh c\u1ee5m m\u1edbi c\u1ee7a m\u00ecnh&nbsp;<code>storm-cluster1<\/code>l\u00e0:<\/p>\n<pre class=\"wp-block-code\"><code>.\/storm-cluster-linode.sh new-cluster-conf storm-cluster1<\/code><\/pre>\n<p>Thao t\u00e1c n\u00e0y t\u1ea1o ra m\u1ed9t th\u01b0 m\u1ee5c c\u00f3 t\u00ean&nbsp;<code>storm-cluster1<\/code>ch\u1ee9a t\u1ec7p c\u1ea5u h\u00ecnh ch\u00ednh,&nbsp;<code>storm-cluster1.conf<\/code>, s\u1ebd \u0111\u01b0\u1ee3c m\u00f4 t\u1ea3 trong b\u01b0\u1edbc ti\u1ebfp theo. N\u1ebfu b\u1ea1n ch\u1ecdn t\u00ean kh\u00e1c khi ch\u1ea1y l\u1ec7nh tr\u01b0\u1edbc \u0111\u00f3, th\u01b0 m\u1ee5c v\u00e0 t\u1ec7p c\u1ea5u h\u00ecnh c\u1ee7a b\u1ea1n s\u1ebd \u0111\u01b0\u1ee3c \u0111\u1eb7t t\u00ean t\u01b0\u01a1ng \u1ee9ng.<\/p>\n<p>3.M\u1edf t\u1ec7p m\u1edbi t\u1ea1o&nbsp;<code>storm-cluster1.conf<\/code>v\u00e0 th\u1ef1c hi\u1ec7n thay \u0111\u1ed5i nh\u01b0 m\u00f4 t\u1ea3 b\u00ean d\u01b0\u1edbi. C\u00e1c thu\u1ed9c t\u00ednh ph\u1ea3i \u0111\u01b0\u1ee3c nh\u1eadp ho\u1eb7c thay \u0111\u1ed5i t\u1eeb gi\u00e1 tr\u1ecb m\u1eb7c \u0111\u1ecbnh c\u1ee7a ch\u00fang \u0111\u01b0\u1ee3c \u0111\u00e1nh d\u1ea5u l\u00e0&nbsp;<strong>B\u1eaeT BU\u1ed8C<\/strong>&nbsp;:<\/p>\n<p><strong>DATACENTER_FOR_CLUSTER<\/strong><\/p>\n<p>Trung t\u00e2m d\u1eef li\u1ec7u Linode n\u01a1i c\u00e1c n\u00fat c\u1ee7a c\u1ee5m n\u00e0y s\u1ebd \u0111\u01b0\u1ee3c t\u1ea1o. T\u1ea5t c\u1ea3 c\u00e1c n\u00fat c\u1ee7a c\u1ee5m ph\u1ea3i n\u1eb1m trong c\u00f9ng m\u1ed9t trung t\u00e2m d\u1eef li\u1ec7u; ch\u00fang kh\u00f4ng th\u1ec3 tr\u1ea3i r\u1ed9ng tr\u00ean nhi\u1ec1u trung t\u00e2m d\u1eef li\u1ec7u v\u00ec ch\u00fang s\u1ebd s\u1eed d\u1ee5ng l\u01b0u l\u01b0\u1ee3ng m\u1ea1ng ri\u00eang \u0111\u1ec3 giao ti\u1ebfp.<\/p>\n<p>\u0110\u00e2y c\u00f3 th\u1ec3 l\u00e0 b\u1ea5t k\u1ef3 trung t\u00e2m d\u1eef li\u1ec7u Linode n\u00e0o, nh\u01b0ng vi\u1ec7c t\u1ea1o c\u1ee5m c\u00f3 th\u1ec3 nhanh h\u01a1n n\u1ebfu n\u00f3 \u0111\u01b0\u1ee3c t\u1ea1o trong c\u00f9ng m\u1ed9t trung t\u00e2m d\u1eef li\u1ec7u n\u01a1i h\u00ecnh \u1ea3nh v\u00e0 Tr\u00ecnh qu\u1ea3n l\u00fd c\u1ee5m Linode \u0111\u01b0\u1ee3c t\u1ea1o. N\u00ean ch\u1ecdn m\u1ed9t trung t\u00e2m d\u1eef li\u1ec7u g\u1ea7n v\u1ec1 m\u1eb7t \u0111\u1ecba l\u00fd v\u1edbi c\u01a1 s\u1edf c\u1ee7a b\u1ea1n \u0111\u1ec3 gi\u1ea3m \u0111\u1ed9 tr\u1ec5 m\u1ea1ng.<\/p>\n<p>Gi\u00e1 tr\u1ecb n\u00e0y c\u00f3 th\u1ec3 l\u00e0 ID ho\u1eb7c v\u1ecb tr\u00ed ho\u1eb7c t\u00ean vi\u1ebft t\u1eaft c\u1ee7a trung t\u00e2m d\u1eef li\u1ec7u. \u0110\u1ec3 xem danh s\u00e1ch t\u1ea5t c\u1ea3 c\u00e1c trung t\u00e2m d\u1eef li\u1ec7u:<\/p>\n<pre class=\"wp-block-code\"><code> .\/zookeeper-cluster-linode.sh datacenters api_env_linode.conf\n<\/code><\/pre>\n<p><strong>NIMBUS_NODE<\/strong><\/p>\n<p>Ph\u1ea7n n\u00e0y ch\u1ec9 \u0111\u1ecbnh g\u00f3i Linode s\u1ebd s\u1eed d\u1ee5ng cho n\u00fat Nimbus, n\u00fat n\u00e0y ch\u1ecbu tr\u00e1ch nhi\u1ec7m ph\u00e2n ph\u1ed1i v\u00e0 ph\u1ed1i h\u1ee3p c\u1ea5u tr\u00fac Storm cho c\u00e1c n\u00fat gi\u00e1m s\u00e1t.<\/p>\n<p>N\u00f3 ph\u1ea3i l\u00e0 m\u1ed9t trong&nbsp;<code>2GB | 4GB | ... | 120GB<\/code>(xem&nbsp;<a href=\"https:\/\/www.linode.com\/pricing\" target=\"_blank\" rel=\"noreferrer noopener\">c\u00e1c g\u00f3i Linode<\/a>&nbsp;cho t\u1ea5t c\u1ea3 c\u00e1c g\u00f3i). K\u00edch th\u01b0\u1edbc m\u1eb7c \u0111\u1ecbnh l\u00e0 2GB, nh\u01b0ng ch\u00fang t\u00f4i khuy\u1ebfn ngh\u1ecb n\u00ean d\u00f9ng g\u00f3i l\u1edbn h\u01a1n cho n\u00fat Nimbus.<\/p>\n<p><code><strong>SUPERVISOR_NODES<\/strong><\/code><\/p>\n<p>C\u00e1c n\u00fat gi\u00e1m s\u00e1t l\u00e0 nh\u1eefng con ng\u1ef1a th\u1ed3 th\u1ef1c hi\u1ec7n c\u00e1c v\u00f2i v\u00e0 bu l\u00f4ng t\u1ea1o n\u00ean c\u1ea5u tr\u00fac Storm.<\/p>\n<p>K\u00edch th\u01b0\u1edbc v\u00e0 s\u1ed1 l\u01b0\u1ee3ng c\u00e1c n\u00fat gi\u00e1m s\u00e1t ph\u1ea3i \u0111\u01b0\u1ee3c quy\u1ebft \u0111\u1ecbnh d\u1ef1a tr\u00ean s\u1ed1 l\u01b0\u1ee3ng c\u00e1c c\u1ea5u tr\u00fac m\u00e0 c\u1ee5m ph\u1ea3i ch\u1ea1y \u0111\u1ed3ng th\u1eddi v\u00e0 \u0111\u1ed9 ph\u1ee9c t\u1ea1p t\u00ednh to\u00e1n c\u1ee7a c\u00e1c v\u00f2i v\u00e0 bu l\u00f4ng c\u1ee7a ch\u00fang. C\u00fa ph\u00e1p l\u00e0:<\/p>\n<p><code>plan:count plan:count ...<\/code><\/p>\n<p>A&nbsp;<code>plan<\/code>l\u00e0 m\u1ed9t trong&nbsp;<code>2GB | 4GB| ....| 120GB<\/code>(xem&nbsp;<a href=\"https:\/\/www.linode.com\/pricing\" target=\"_blank\" rel=\"noreferrer noopener\">c\u00e1c k\u1ebf ho\u1ea1ch Linode<\/a>&nbsp;cho t\u1ea5t c\u1ea3 c\u00e1c k\u1ebf ho\u1ea1ch) v\u00e0&nbsp;<code>count<\/code>l\u00e0 s\u1ed1 l\u01b0\u1ee3ng c\u00e1c n\u00fat gi\u00e1m s\u00e1t v\u1edbi k\u1ebf ho\u1ea1ch \u0111\u00f3. M\u1eb7c d\u00f9 m\u1ed9t c\u1ee5m c\u00f3 th\u1ec3 c\u00f3 c\u00e1c n\u00fat gi\u00e1m s\u00e1t c\u00f3 k\u00edch th\u01b0\u1edbc kh\u00e1c nhau, nh\u01b0ng n\u00ean s\u1eed d\u1ee5ng c\u00f9ng m\u1ed9t k\u1ebf ho\u1ea1ch cho t\u1ea5t c\u1ea3 c\u00e1c n\u00fat.<\/p>\n<p>S\u1ed1 l\u01b0\u1ee3ng n\u00fat gi\u00e1m s\u00e1t c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c t\u0103ng l\u00ean sau n\u00e0y b\u1eb1ng c\u00e1ch s\u1eed d\u1ee5ng&nbsp;<code>add-nodes<\/code>l\u1ec7nh (xem&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/guides\/big-data-in-the-linode-cloud-streaming-data-processing-with-apache-storm\/#expand-a-storm-cluster\">M\u1edf r\u1ed9ng c\u1ee5m<\/a>&nbsp;).<\/p>\n<p>V\u00ed d\u1ee5:<\/p>\n<ul>\n<li>T\u1ea1o ba n\u00fat 4GB:<code>SUPERVISOR_NODES=\"4GB:3\"<\/code><\/li>\n<li>T\u1ea1o s\u00e1u n\u00fat v\u1edbi ba k\u1ebf ho\u1ea1ch kh\u00e1c nhau:<code>SUPERVISOR_NODES=\"2GB:2 4GB:2 8GB:2\"<\/code><\/li>\n<\/ul>\n<p><strong>CLIENT_NODE<\/strong><\/p>\n<p>N\u00fat m\u00e1y kh\u00e1ch c\u1ee7a c\u1ee5m \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 g\u1eedi c\u1ea5u tr\u00fac \u0111\u1ebfn c\u1ee5m v\u00e0 gi\u00e1m s\u00e1t c\u1ee5m. \u0110\u00e2y ph\u1ea3i l\u00e0 m\u1ed9t trong&nbsp;<code>2GB | 4GB | ... | 120GB<\/code>(xem&nbsp;<a href=\"https:\/\/www.linode.com\/pricing\" target=\"_blank\" rel=\"noreferrer noopener\">c\u00e1c g\u00f3i Linode<\/a>&nbsp;cho t\u1ea5t c\u1ea3 c\u00e1c g\u00f3i). Gi\u00e1 tr\u1ecb m\u1eb7c \u0111\u1ecbnh l\u00e0 2GB l\u00e0 \u0111\u1ee7 cho h\u1ea7u h\u1ebft c\u00e1c tr\u01b0\u1eddng h\u1ee3p s\u1eed d\u1ee5ng.<\/p>\n<p><strong><code>STORM_IMAGE_CONF<\/code>&#8211;&nbsp;Y\u00caU C\u1ea6U<\/strong><\/p>\n<p>\u0110\u01b0\u1eddng d\u1eabn c\u1ee7a th\u01b0 m\u1ee5c h\u00ecnh \u1ea3nh Storm ho\u1eb7c t\u1ec7p c\u1ea5u h\u00ecnh \u0111\u1ec3 s\u1eed d\u1ee5ng l\u00e0m m\u1eabu \u0111\u1ec3 t\u1ea1o c\u00e1c n\u00fat c\u1ee7a c\u1ee5m n\u00e0y. \u0110\u0129a c\u1ee7a m\u1ed7i n\u00fat s\u1ebd l\u00e0 b\u1ea3n sao c\u1ee7a h\u00ecnh \u1ea3nh n\u00e0y.<\/p>\n<p>\u0110\u01b0\u1eddng d\u1eabn c\u00f3 th\u1ec3 l\u00e0 \u0111\u01b0\u1eddng d\u1eabn tuy\u1ec7t \u0111\u1ed1i ho\u1eb7c \u0111\u01b0\u1eddng d\u1eabn t\u01b0\u01a1ng \u0111\u1ed1i v\u1edbi th\u01b0 m\u1ee5c c\u1ea5u h\u00ecnh c\u1ee5m n\u00e0y. S\u1eed d\u1ee5ng v\u00ed d\u1ee5 c\u1ee7a ch\u00fang t\u00f4i, \u0111\u01b0\u1eddng d\u1eabn tuy\u1ec7t \u0111\u1ed1i s\u1ebd l\u00e0&nbsp;<code>\/home\/clustermgr\/storm-linode\/storm-image1<\/code>v\u00e0 \u0111\u01b0\u1eddng d\u1eabn t\u01b0\u01a1ng \u0111\u1ed1i s\u1ebd l\u00e0&nbsp;<code>..\/storm-image1<\/code>.<\/p>\n<p><code><strong>NODE_DISK_SIZE<\/strong><\/code><\/p>\n<p>K\u00edch th\u01b0\u1edbc \u0111\u0129a c\u1ee7a m\u1ed7i n\u00fat t\u00ednh b\u1eb1ng MB. K\u00edch th\u01b0\u1edbc n\u00e0y ph\u1ea3i l\u1edbn \u00edt nh\u1ea5t b\u1eb1ng k\u00edch th\u01b0\u1edbc \u0111\u0129a c\u1ee7a h\u00ecnh \u1ea3nh \u0111\u01b0\u1ee3c ch\u1ecdn, n\u1ebfu kh\u00f4ng h\u00ecnh \u1ea3nh s\u1ebd kh\u00f4ng sao ch\u00e9p \u0111\u00fang c\u00e1ch.<\/p>\n<p><strong>NODE_ROOT_PASSWORD<\/strong><\/p>\n<p>T\u00f9y ch\u1ecdn, b\u1ea1n c\u00f3 th\u1ec3 ch\u1ec9 \u0111\u1ecbnh m\u1eadt kh\u1ea9u g\u1ed1c cho c\u00e1c n\u00fat. N\u1ebfu m\u1ee5c n\u00e0y tr\u1ed1ng, m\u1eadt kh\u1ea9u g\u1ed1c s\u1ebd n\u1eb1m&nbsp;<code>IMAGE_ROOT_PASSWORD<\/code>trong t\u1ec7p c\u1ea5u h\u00ecnh h\u00ecnh \u1ea3nh.<\/p>\n<p><strong><code>NODE_ROOT_SSH_PUBLIC_KEY<\/code>V\u00e0<code>NODE_ROOT_SSH_PRIVATE_KEY<\/code><\/strong><\/p>\n<p>T\u00f9y ch\u1ecdn, b\u1ea1n c\u00f3 th\u1ec3 ch\u1ec9 \u0111\u1ecbnh t\u1ec7p kh\u00f3a c\u00f4ng khai SSH t\u00f9y ch\u1ec9nh v\u00e0 t\u1ec7p kh\u00f3a ri\u00eang t\u01b0 \u0111\u1ec3 x\u00e1c th\u1ef1c ng\u01b0\u1eddi d\u00f9ng root. N\u1ebfu t\u1ec7p n\u00e0y tr\u1ed1ng, c\u00e1c kh\u00f3a s\u1ebd l\u00e0 c\u00e1c kh\u00f3a \u0111\u01b0\u1ee3c ch\u1ec9 \u0111\u1ecbnh trong t\u1ec7p c\u1ea5u h\u00ecnh h\u00ecnh \u1ea3nh.<\/p>\n<p>N\u1ebfu b\u1ea1n mu\u1ed1n ch\u1ec9 \u0111\u1ecbnh c\u1eb7p kh\u00f3a c\u1ee7a ri\u00eang m\u00ecnh, h\u00e3y ch\u1ecdn t\u00ean t\u1ec7p m\u00f4 t\u1ea3 cho c\u1eb7p kh\u00f3a m\u1edbi n\u00e0y (v\u00ed d\u1ee5:&nbsp;<em>zkcluster1root<\/em>&nbsp;), t\u1ea1o ch\u00fang b\u1eb1ng c\u00e1ch s\u1eed d\u1ee5ng&nbsp;<code>ssh-keygen<\/code>v\u00e0 \u0111\u1eb7t \u0111\u01b0\u1eddng d\u1eabn \u0111\u1ea7y \u0111\u1ee7 c\u1ee7a ch\u00fang t\u1ea1i \u0111\u00e2y.<\/p>\n<p><strong><code>NIMBUS_NODE_PUBLIC_HOSTNAME<\/code>,&nbsp;<code>SUPERVISOR_NODES_PUBLIC_HOSTNAME_PREFIX<\/code>V\u00e0<code>CLIENT_NODES_PUBLIC_HOSTNAME_PREFIX<\/code><\/strong><\/p>\n<p>M\u1ed7i Linode trong c\u1ee5m \u0111\u1ec1u c\u00f3 m\u1ed9t&nbsp;<em>\u0111\u1ecba ch\u1ec9 IP c\u00f4ng khai<\/em>&nbsp;, c\u00f3 th\u1ec3 truy c\u1eadp t\u1eeb b\u1ea5t k\u1ef3 \u0111\u00e2u tr\u00ean Internet v\u00e0 m\u1ed9t&nbsp;<em>\u0111\u1ecba ch\u1ec9 IP ri\u00eang<\/em>&nbsp;, ch\u1ec9 c\u00f3 th\u1ec3 truy c\u1eadp t\u1eeb c\u00e1c n\u00fat kh\u00e1c c\u1ee7a c\u00f9ng m\u1ed9t ng\u01b0\u1eddi d\u00f9ng b\u00ean trong c\u00f9ng m\u1ed9t trung t\u00e2m d\u1eef li\u1ec7u.<\/p>\n<p>Theo \u0111\u00f3, m\u1ed7i n\u00fat \u0111\u01b0\u1ee3c c\u1ea5p m\u1ed9t&nbsp;<em>t\u00ean m\u00e1y ch\u1ee7 c\u00f4ng khai<\/em>&nbsp;ph\u00e2n gi\u1ea3i th\u00e0nh \u0111\u1ecba ch\u1ec9 IP c\u00f4ng khai c\u1ee7a n\u00f3. T\u00ean m\u00e1y ch\u1ee7 c\u00f4ng khai c\u1ee7a m\u1ed7i n\u00fat s\u1ebd s\u1eed d\u1ee5ng gi\u00e1 tr\u1ecb n\u00e0y theo sau l\u00e0 m\u1ed9t s\u1ed1 (v\u00ed d\u1ee5:&nbsp;<code>public-host1<\/code>,&nbsp;<code>public-host2<\/code>, v.v.). N\u1ebfu n\u00fat qu\u1ea3n l\u00fd c\u1ee5m n\u1eb1m trong m\u1ed9t trung t\u00e2m d\u1eef li\u1ec7u Linode kh\u00e1c v\u1edbi c\u00e1c n\u00fat c\u1ee5m, n\u00f3 s\u1ebd s\u1eed d\u1ee5ng t\u00ean m\u00e1y ch\u1ee7 c\u00f4ng khai v\u00e0 \u0111\u1ecba ch\u1ec9 IP c\u00f4ng khai \u0111\u1ec3 giao ti\u1ebfp v\u1edbi c\u00e1c n\u00fat c\u1ee5m.<\/p>\n<p><strong><code>NIMBUS_NODE_PRIVATE_HOSTNAME<\/code>,&nbsp;<code>SUPERVISOR_NODES_PRIVATE_HOSTNAME_PREFIX<\/code>V\u00e0<code>CLIENT_NODES_PRIVATE_HOSTNAME_PREFIX<\/code><\/strong><\/p>\n<p>M\u1ed7i Linode trong c\u1ee5m \u0111\u01b0\u1ee3c c\u1ea5p m\u1ed9t&nbsp;<em>t\u00ean m\u00e1y ch\u1ee7 ri\u00eang<\/em>&nbsp;ph\u00e2n gi\u1ea3i th\u00e0nh \u0111\u1ecba ch\u1ec9 IP ri\u00eang c\u1ee7a n\u00f3. T\u00ean m\u00e1y ch\u1ee7 ri\u00eang c\u1ee7a m\u1ed7i n\u00fat s\u1ebd s\u1eed d\u1ee5ng gi\u00e1 tr\u1ecb n\u00e0y theo sau l\u00e0 m\u1ed9t s\u1ed1 (v\u00ed d\u1ee5: private-host1, private-host2, v.v.). T\u1ea5t c\u1ea3 c\u00e1c n\u00fat c\u1ee7a c\u1ee5m giao ti\u1ebfp v\u1edbi nhau th\u00f4ng qua t\u00ean m\u00e1y ch\u1ee7 ri\u00eang c\u1ee7a ch\u00fang. \u0110\u00e2y c\u0169ng l\u00e0 t\u00ean m\u00e1y ch\u1ee7 th\u1ef1c t\u1ebf \u0111\u01b0\u1ee3c \u0111\u1eb7t cho n\u00fat b\u1eb1ng&nbsp;<code>hostname<\/code>l\u1ec7nh c\u1ee7a m\u00e1y ch\u1ee7 v\u00e0 \u0111\u01b0\u1ee3c l\u01b0u trong&nbsp;<code>\/etc\/hostname<\/code>.<\/p>\n<p><strong>CLUSTER_MANAGER_USES_PUBLIC_IP<\/strong><\/p>\n<p>\u0110\u1eb7t gi\u00e1 tr\u1ecb n\u00e0y th\u00e0nh&nbsp;<code>false<\/code>n\u1ebfu n\u00fat qu\u1ea3n l\u00fd c\u1ee5m n\u1eb1m trong&nbsp;<em>c\u00f9ng m\u1ed9t<\/em>&nbsp;trung t\u00e2m d\u1eef li\u1ec7u Linode v\u1edbi c\u00e1c n\u00fat c\u1ee5m. \u0110\u00e2y l\u00e0 gi\u00e1 tr\u1ecb \u0111\u01b0\u1ee3c khuy\u1ebfn ngh\u1ecb v\u00e0 c\u0169ng l\u00e0 gi\u00e1 tr\u1ecb m\u1eb7c \u0111\u1ecbnh.&nbsp;<code>true<\/code>&nbsp;<strong>Ch\u1ec9<\/strong>&nbsp;thay \u0111\u1ed5i th\u00e0nh n\u1ebfu n\u00fat qu\u1ea3n l\u00fd c\u1ee5m n\u1eb1m trong m\u1ed9t trung t\u00e2m d\u1eef li\u1ec7u Linode&nbsp;<em>kh\u00e1c<\/em>&nbsp;v\u1edbi c\u00e1c n\u00fat c\u1ee5m.<\/p>\n<p class=\"has-background\" style=\"background-color:#f32a2a33\">Quan tr\u1ecdng: \u0110i\u1ec1u quan tr\u1ecdng l\u00e0 ph\u1ea3i thi\u1ebft l\u1eadp ch\u00ednh x\u00e1c \u0111\u1ec3 tr\u00e1nh l\u1ed7i t\u1ea1o c\u1ee5m nghi\u00eam tr\u1ecdng.<\/p>\n<p><strong><code>ZOOKEEPER_CLUSTER<\/code>&#8211;&nbsp;Y\u00caU C\u1ea6U<\/strong><\/p>\n<p>\u0110\u01b0\u1eddng d\u1eabn \u0111\u1ebfn th\u01b0 m\u1ee5c c\u1ee5m Zookeeper s\u1ebd \u0111\u01b0\u1ee3c c\u1ee5m Storm n\u00e0y s\u1eed d\u1ee5ng.\u0110\u00e2y c\u00f3 th\u1ec3 l\u00e0 \u0111\u01b0\u1eddng d\u1eabn tuy\u1ec7t \u0111\u1ed1i ho\u1eb7c \u0111\u01b0\u1eddng d\u1eabn t\u01b0\u01a1ng \u0111\u1ed1i li\u00ean quan \u0111\u1ebfn th\u01b0 m\u1ee5c c\u1ea5u h\u00ecnh c\u1ee5m Storm n\u00e0y. S\u1eed d\u1ee5ng v\u00ed d\u1ee5 c\u1ee7a ch\u00fang t\u00f4i, \u0111\u01b0\u1eddng d\u1eabn tuy\u1ec7t \u0111\u1ed1i s\u1ebd l\u00e0&nbsp;<code>\/home\/clustermgr\/storm-linode\/zk-cluster1<\/code>, v\u00e0 \u0111\u01b0\u1eddng d\u1eabn t\u01b0\u01a1ng \u0111\u1ed1i s\u1ebd l\u00e0&nbsp;<code>..\/zk-cluster1<\/code>.<\/p>\n<p><code><strong>IPTABLES_V4_RULES_TEMPLATE<\/strong><\/code><\/p>\n<p>\u0110\u01b0\u1eddng d\u1eabn tuy\u1ec7t \u0111\u1ed1i ho\u1eb7c t\u01b0\u01a1ng \u0111\u1ed1i c\u1ee7a t\u1ec7p quy t\u1eafc t\u01b0\u1eddng l\u1eeda IPv4 iptables \u0111\u01b0\u1ee3c \u00e1p d\u1ee5ng cho c\u00e1c n\u00fat Nimbus v\u00e0 Supervisor. S\u1eeda \u0111\u1ed5i \u0111i\u1ec1u n\u00e0y n\u1ebfu b\u1ea1n c\u00f3 k\u1ebf ho\u1ea1ch t\u00f9y ch\u1ec9nh c\u1ea5u h\u00ecnh t\u01b0\u1eddng l\u1eeda c\u1ee7a ch\u00fang.<\/p>\n<p><code><strong>IPTABLES_CLIENT_V4_RULES_TEMPLATE<\/strong><\/code><\/p>\n<p>\u0110\u01b0\u1eddng d\u1eabn tuy\u1ec7t \u0111\u1ed1i ho\u1eb7c t\u01b0\u01a1ng \u0111\u1ed1i c\u1ee7a t\u1ec7p quy t\u1eafc t\u01b0\u1eddng l\u1eeda IPv4 iptables \u0111\u01b0\u1ee3c \u00e1p d\u1ee5ng cho n\u00fat Clien<\/p>\n<p>t. V\u00ec n\u00fat client l\u01b0u tr\u1eef m\u00e1y ch\u1ee7 web gi\u00e1m s\u00e1t c\u1ee5m v\u00e0 c\u00f3 th\u1ec3 truy c\u1eadp \u0111\u01b0\u1ee3c \u0111\u1ed1i v\u1edbi qu\u1ea3n tr\u1ecb vi\u00ean v\u00e0 nh\u00e0 ph\u00e1t tri\u1ec3n, n\u00ean c\u00e1c quy t\u1eafc c\u1ee7a n\u00fat n\u00e0y kh\u00e1c v\u1edbi c\u00e1c quy t\u1eafc c\u1ee7a c\u00e1c n\u00fat kh\u00e1c. S\u1eeda \u0111\u1ed5i \u0111i\u1ec1u n\u00e0y n\u1ebfu b\u1ea1n c\u00f3 k\u1ebf ho\u1ea1ch t\u00f9y ch\u1ec9nh c\u1ea5u h\u00ecnh t\u01b0\u1eddng l\u1eeda c\u1ee7a n\u00fat n\u00e0y.M\u1eb7c \u0111\u1ecbnh:<code>..\/template-storm-client-iptables-rules.v4<\/code><\/p>\n<p><code><strong>IPTABLES_V6_RULES_TEMPLATE<\/strong><\/code><\/p>\n<p>\u0110\u01b0\u1eddng d\u1eabn tuy\u1ec7t \u0111\u1ed1i ho\u1eb7c t\u01b0\u01a1ng \u0111\u1ed1i c\u1ee7a t\u1ec7p quy t\u1eafc t\u01b0\u1eddng l\u1eeda IPv6 iptables \u0111\u01b0\u1ee3c theo d\u00f5i cho t\u1ea5t c\u1ea3 c\u00e1c n\u00fat, bao g\u1ed3m c\u1ea3 n\u00fat m\u00e1y kh\u00e1ch. IPv6 b\u1ecb v\u00f4 hi\u1ec7u h\u00f3a ho\u00e0n to\u00e0n tr\u00ean t\u1ea5t c\u1ea3 c\u00e1c n\u00fat v\u00e0 kh\u00f4ng c\u00f3 d\u1ecbch v\u1ee5 n\u00e0o l\u1eafng nghe tr\u00ean c\u00e1c \u0111\u1ecba ch\u1ec9 IPv6. S\u1eeda \u0111\u1ed5i \u0111i\u1ec1u n\u00e0y n\u1ebfu b\u1ea1n c\u00f3 k\u1ebf ho\u1ea1ch t\u00f9y ch\u1ec9nh c\u1ea5u h\u00ecnh t\u01b0\u1eddng l\u1eeda.<\/p>\n<p>Khi b\u1ea1n ho\u00e0n t\u1ea5t vi\u1ec7c th\u1ef1c hi\u1ec7n thay \u0111\u1ed5i, h\u00e3y l\u01b0u v\u00e0 \u0111\u00f3ng tr\u00ecnh ch\u1ec9nh s\u1eeda.<\/p>\n<p>4.T\u1ea1o c\u1ee5m b\u1eb1ng&nbsp;<code>create<\/code>l\u1ec7nh:<\/p>\n<pre class=\"wp-block-code\"><code><code>.\/storm-cluster-linode.sh create storm-cluster1 api_env_linode.conf<\/code><\/code><\/pre>\n<p>N\u1ebfu c\u1ee5m \u0111\u01b0\u1ee3c t\u1ea1o th\u00e0nh c\u00f4ng, th\u00f4ng b\u00e1o th\u00e0nh c\u00f4ng s\u1ebd \u0111\u01b0\u1ee3c in ra:<\/p>\n<pre class=\"wp-block-code\"><code>Storm cluster successfully created<\/code><\/pre>\n<p>C\u00f3 th\u1ec3 xem chi ti\u1ebft v\u1ec1 c\u1ee5m \u0111\u00e3 t\u1ea1o b\u1eb1ng l\u1ec7nh&nbsp;<code>describe<\/code>:<\/p>\n<pre class=\"wp-block-code\"><code><code>.\/storm-cluster-linode.sh describe storm-cluster1 <\/code><\/code><\/pre>\n<p>C\u00e1c n\u00fat c\u1ee5m s\u1ebd b\u1ecb t\u1eaft ngay sau khi \u0111\u01b0\u1ee3c t\u1ea1o.<\/p>\n<h2 id=\"start-a-storm-cluster\">B\u1eaft \u0111\u1ea7u m\u1ed9t c\u1ee5m b\u00e3o<a href=\"https:\/\/www.linode.com\/docs\/guides\/big-data-in-the-linode-cloud-streaming-data-processing-with-apache-storm\/#start-a-storm-cluster\"><\/a><\/h2>\n<p>Ph\u1ea7n n\u00e0y s\u1ebd gi\u1ea3i th\u00edch c\u00e1ch b\u1eaft \u0111\u1ea7u m\u1ed9t c\u1ee5m Storm. L\u00e0m nh\u01b0 v\u1eady c\u0169ng s\u1ebd b\u1eaft \u0111\u1ea7u b\u1ea5t k\u1ef3 c\u1ee5m Zookeeper n\u00e0o m\u00e0 n\u00f3 ph\u1ee5 thu\u1ed9c, do \u0111\u00f3 kh\u00f4ng c\u1ea7n ph\u1ea3i b\u1eaft \u0111\u1ea7u ri\u00eang r\u1ebd.<\/p>\n<p class=\"has-background\" style=\"background-color:#74f78c33\">Ghi ch\u00fa: Khi b\u1eaft \u0111\u1ea7u m\u1ed9t c\u1ee5m, b\u1ea1n ph\u1ea3i c\u00f3&nbsp;<code>clustermgr<\/code>quy\u1ec1n \u0111\u1ed1i v\u1edbi Tr\u00ecnh qu\u1ea3n l\u00fd c\u1ee5m Linode.<\/p>\n<p>1.\u0110\u0103ng nh\u1eadp v\u00e0o Cluster Manager Linode v\u1edbi t\u00ean ng\u01b0\u1eddi d\u00f9ng&nbsp;<code>clustermgr<\/code>v\u00e0 \u0111i\u1ec1u h\u01b0\u1edbng \u0111\u1ebfn&nbsp;<code>storm-linode<\/code>th\u01b0 m\u1ee5c:<\/p>\n<pre class=\"wp-block-code\"><code>ssh -i ~\/.ssh\/clustermgr clustermgr@PUBLIC-IP-OF-CLUSTER-MANAGER-LINODE \n\ncd storm-linode<\/code><\/pre>\n<p>2.B\u1eaft \u0111\u1ea7u c\u1ee5m Storm b\u1eb1ng&nbsp;<code>start<\/code>l\u1ec7nh. V\u00ed d\u1ee5 n\u00e0y s\u1eed d\u1ee5ng&nbsp;<code>storm-cluster1<\/code>quy \u01b0\u1edbc \u0111\u1eb7t t\u00ean \u1edf tr\u00ean, nh\u01b0ng n\u1ebfu b\u1ea1n ch\u1ecdn t\u00ean kh\u00e1c, b\u1ea1n n\u00ean thay th\u1ebf n\u00f3 trong l\u1ec7nh:<\/p>\n<pre class=\"wp-block-code\"><code><code>.\/storm-cluster-linode.sh start storm-cluster1 api_env_linode.conf<\/code><\/code><\/pre>\n<p>3.N\u1ebfu c\u1ee5m \u0111\u01b0\u1ee3c kh\u1edfi \u0111\u1ed9ng l\u1ea7n \u0111\u1ea7u ti\u00ean, h\u00e3y xem ph\u1ea7n ti\u1ebfp theo \u0111\u1ec3 bi\u1ebft c\u00e1ch&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/guides\/big-data-in-the-linode-cloud-streaming-data-processing-with-apache-storm\/#monitor-a-storm-cluster\">\u1ee7y quy\u1ec1n cho ng\u01b0\u1eddi d\u00f9ng gi\u00e1m s\u00e1t c\u1ee5m Storm<\/a>&nbsp;.<\/p>\n<h2 id=\"monitor-a-storm-cluster\">Theo d\u00f5i c\u1ee5m b\u00e3o<a href=\"https:\/\/www.linode.com\/docs\/guides\/big-data-in-the-linode-cloud-streaming-data-processing-with-apache-storm\/#monitor-a-storm-cluster\"><\/a><\/h2>\n<p>M\u1ed7i n\u00fat m\u00e1y kh\u00e1ch c\u1ee7a c\u1ee5m Storm \u0111\u1ec1u ch\u1ea1y \u1ee9ng d\u1ee5ng web Storm UI \u0111\u1ec3 gi\u00e1m s\u00e1t c\u1ee5m \u0111\u00f3, nh\u01b0ng ch\u1ec9 c\u00f3 th\u1ec3 truy c\u1eadp t\u1eeb c\u00e1c m\u00e1y tr\u1ea1m \u0111\u01b0\u1ee3c ph\u00e9p.<\/p>\n<p>Hai ph\u1ea7n ti\u1ebfp theo gi\u1ea3i th\u00edch c\u00e1ch cho ph\u00e9p c\u00e1c m\u00e1y tr\u1ea1m v\u00e0 gi\u00e1m s\u00e1t c\u1ee5m t\u1eeb giao di\u1ec7n web.<\/p>\n<h3 id=\"allow-workstations-to-monitor-a-storm-cluster\">Cho ph\u00e9p c\u00e1c m\u00e1y tr\u1ea1m gi\u00e1m s\u00e1t c\u1ee5m b\u00e3o<a href=\"https:\/\/www.linode.com\/docs\/guides\/big-data-in-the-linode-cloud-streaming-data-processing-with-apache-storm\/#allow-workstations-to-monitor-a-storm-cluster\"><\/a><\/h3>\n<p>Khi th\u1ef1c hi\u1ec7n c\u00e1c b\u01b0\u1edbc trong ph\u1ea7n n\u00e0y, b\u1ea1n ph\u1ea3i c\u00f3&nbsp;<code>clustermgr<\/code>quy\u1ec1n \u0111\u1ed1i v\u1edbi Cluster Manager Linode.<\/p>\n<p>1.\u0110\u0103ng nh\u1eadp v\u00e0o Cluster Manager Linode v\u1edbi t\u00ean ng\u01b0\u1eddi d\u00f9ng&nbsp;<code>clustermgr<\/code>v\u00e0 \u0111i\u1ec1u h\u01b0\u1edbng \u0111\u1ebfn&nbsp;<code>storm-linode<\/code>th\u01b0 m\u1ee5c:<\/p>\n<pre class=\"wp-block-code\"><code>ssh -i ~\/.ssh\/clustermgr clustermgr@PUBLIC-IP-OF-CLUSTER-MANAGER-LINODE\ncd storm-linode<\/code><\/pre>\n<p>2.M\u1edf\u00a0<code>your-cluster\/your-cluster-client-user-whitelist.ipsets<\/code>t\u1ec7p (s\u1eed d\u1ee5ng v\u00ed d\u1ee5 \u1edf tr\u00ean,\u00a0<code>storm-cluster1\/storm-cluster1-client-user-whitelist.ipsets<\/code>) trong tr\u00ecnh so\u1ea1n th\u1ea3o v\u0103n b\u1ea3n.T\u1ec7p n\u00e0y l\u00e0 danh s\u00e1ch\u00a0<a href=\"http:\/\/ipset.netfilter.org\/ipset.man.html\" target=\"_blank\" rel=\"noreferrer noopener\">ipsets<\/a>\u00a0c\u00e1c \u0111\u1ecba ch\u1ec9 IP \u0111\u01b0\u1ee3c ph\u00e9p. T\u1ec7p n\u00e0y bao g\u1ed3m m\u1ed9t ipset ch\u00ednh v\u00e0 nhi\u1ec1u ipset con li\u1ec7t k\u00ea c\u00e1c m\u00e1y \u0111\u01b0\u1ee3c ph\u00e9p theo \u0111\u1ecba ch\u1ec9 IP ho\u1eb7c c\u00e1c thu\u1ed9c t\u00ednh kh\u00e1c nh\u01b0 MAC ID.Ipset ch\u00ednh \u0111\u01b0\u1ee3c \u0111\u1eb7t t\u00ean l\u00e0\u00a0<em>your-cluster-uwls<\/em>\u00a0. Theo m\u1eb7c \u0111\u1ecbnh, n\u00f3 ho\u00e0n to\u00e0n tr\u1ed1ng r\u1ed7ng, ngh\u0129a l\u00e0 kh\u00f4ng ai \u0111\u01b0\u1ee3c ph\u00e9p.<img decoding=\"async\" src=\"https:\/\/www.linode.com\/docs\/guides\/big-data-in-the-linode-cloud-streaming-data-processing-with-apache-storm\/storm-user-whitelist-1_hu89efde608cec4fbaa39fd92b01949919_36054_1388x0_resize_q71_bgfafafc_catmullrom_3.jpg\" alt=\"ipset ch\u00ednh\">3.\u0110\u1ec3 cho ph\u00e9p \u0111\u1ecba ch\u1ec9 IP:<\/p>\n<ul>\n<li>B\u1ecf ghi ch\u00fa d\u00f2ng t\u1ea1o ra\u00a0ipset\u00a0<em>your-cluster-ipwl<\/em>Th\u00eam \u0111\u1ecba ch\u1ec9 IP b\u00ean d\u01b0\u1edbi n\u00f3Th\u00eam\u00a0<em>your-cluster-ipwl<\/em>\u00a0v\u00e0o ipset ch\u00ednh\u00a0<em>your-cluster-uwls<\/em><\/li>\n<\/ul>\n<p>Nh\u1eefng b\u1ed5 sung n\u00e0y \u0111\u01b0\u1ee3c n\u00eau b\u1eadt d\u01b0\u1edbi \u0111\u00e2y:<img decoding=\"async\" src=\"https:\/\/www.linode.com\/docs\/guides\/big-data-in-the-linode-cloud-streaming-data-processing-with-apache-storm\/storm-user-whitelist-2_huc6f8bcae33bfd46d0eb282f3487ba427_36413_1388x0_resize_q71_bgfafafc_catmullrom_3.jpg\" alt=\"C\u00e1c m\u1ee5c nh\u1eadp danh s\u00e1ch tr\u1eafng\"><\/p>\n<p>4.C\u00f3 th\u1ec3 t\u1ea1o b\u1ea5t k\u1ef3 s\u1ed1 l\u01b0\u1ee3ng ho\u1eb7c lo\u1ea1i ipset b\u1ed5 sung n\u00e0o, mi\u1ec5n l\u00e0 ch\u00fang \u0111\u01b0\u1ee3c th\u00eam v\u00e0o ipset ch\u00ednh.Xem&nbsp;ph\u1ea7n&nbsp;<strong>Set Types trong&nbsp;<\/strong><a href=\"http:\/\/ipset.netfilter.org\/ipset.man.html#lbAS\" target=\"_blank\" rel=\"noreferrer noopener\">h\u01b0\u1edbng d\u1eabn s\u1eed d\u1ee5ng ipset<\/a>&nbsp;\u0111\u1ec3 bi\u1ebft c\u00e1c lo\u1ea1i ipset kh\u1ea3 d\u1ee5ng. L\u01b0u \u00fd r\u1eb1ng m\u1ed9t s\u1ed1 lo\u1ea1i \u0111\u01b0\u1ee3c li\u1ec7t k\u00ea trong h\u01b0\u1edbng d\u1eabn s\u1eed d\u1ee5ng c\u00f3 th\u1ec3 kh\u00f4ng kh\u1ea3 d\u1ee5ng tr\u00ean n\u00fat m\u00e1y kh\u00e1ch v\u00ec phi\u00ean b\u1ea3n ipset \u0111\u01b0\u1ee3c c\u00e0i \u0111\u1eb7t tr\u00ean \u0111\u00f3 b\u1eb1ng tr\u00ecnh qu\u1ea3n l\u00fd g\u00f3i Ubuntu ho\u1eb7c Debian c\u00f3 th\u1ec3 l\u00e0 phi\u00ean b\u1ea3n c\u0169 h\u01a1n.<\/p>\n<p>5.Nh\u1eadp t\u1ea5t c\u1ea3 c\u00e1c ipset c\u1ea7n thi\u1ebft, l\u01b0u t\u1ec7p v\u00e0 \u0111\u00f3ng tr\u00ecnh so\u1ea1n th\u1ea3o.<\/p>\n<p>6.K\u00edch ho\u1ea1t ipsets m\u1edbi b\u1eb1ng&nbsp;<code>update-user-whitelist<\/code>l\u1ec7nh:<\/p>\n<pre class=\"wp-block-code\"><code><code>.\/storm-cluster-linode.sh update-user-whitelist storm-cluster1<\/code><\/code><\/pre>\n<p>7.\u0110\u0103ng nh\u1eadp v\u00e0o n\u00fat m\u00e1y kh\u00e1ch t\u1eeb Cluster Manager Linode:<\/p>\n<pre class=\"wp-block-code\"><code><code>ssh -i ~\/.ssh\/clusterroot root@storm-cluster1-private-client1 <\/code><\/code><\/pre>\n<p>Ki\u1ec3m tra xem ipset m\u1edbi \u0111\u00e3 \u0111\u01b0\u1ee3c c\u1ea5u h\u00ecnh \u0111\u00fang ch\u01b0a:<\/p>\n<p><code>ipset list <\/code><\/p>\n<p>B\u1ea1n s\u1ebd th\u1ea5y \u0111\u1ea7u ra t\u01b0\u01a1ng t\u1ef1 nh\u01b0 sau (ngo\u00e0i c\u00e1c ipset t\u00f9y ch\u1ec9nh n\u1ebfu b\u1ea1n \u0111\u00e3 th\u00eam ch\u00fang v\u00e0 c\u00e1c ipset cho c\u00e1c n\u00fat c\u1ee5m Storm v\u00e0 Zookeeper):<\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/www.linode.com\/docs\/guides\/big-data-in-the-linode-cloud-streaming-data-processing-with-apache-storm\/storm-user-whitelist-3.png\" alt=\"\u0111\u1ea7u ra ipset\" title=\"\u0111\u1ea7u ra ipset\"\/><\/figure>\n<p>Ng\u1eaft k\u1ebft n\u1ed1i kh\u1ecfi n\u00fat m\u00e1y kh\u00e1ch v\u00e0 \u0111i\u1ec1u h\u01b0\u1edbng tr\u1edf l\u1ea1i&nbsp;<code>storm-linode<\/code>th\u01b0 m\u1ee5c tr\u00ean n\u00fat qu\u1ea3n l\u00fd c\u1ee5m:<\/p>\n<pre class=\"wp-block-code\"><code>exit<\/code><\/pre>\n<p>8.T\u1eeb n\u00fat qu\u1ea3n l\u00fd c\u1ee5m, l\u1ea5y \u0111\u1ecba ch\u1ec9 IP c\u00f4ng khai c\u1ee7a n\u00fat m\u00e1y kh\u00e1ch. \u0110\u1ecba ch\u1ec9 IP n\u00e0y ph\u1ea3i \u0111\u01b0\u1ee3c cung c\u1ea5p cho ng\u01b0\u1eddi d\u00f9ng \u0111\u01b0\u1ee3c ph\u00e9p truy c\u1eadp \u1ee9ng d\u1ee5ng web gi\u00e1m s\u00e1t Storm UI. \u0110\u1ec3 hi\u1ec3n th\u1ecb \u0111\u1ecba ch\u1ec9 IP, h\u00e3y s\u1eed d\u1ee5ng l\u1ec7nh&nbsp;<code>describe<\/code>:<\/p>\n<pre class=\"wp-block-code\"><code><code>.\/storm-cluster-linode.sh describe storm-cluster1<\/code><\/code><\/pre>\n<p>9.Cu\u1ed1i c\u00f9ng, h\u00e3y x\u00e1c minh r\u1eb1ng \u1ee9ng d\u1ee5ng web Storm UI c\u00f3 th\u1ec3 truy c\u1eadp \u0111\u01b0\u1ee3c b\u1eb1ng c\u00e1ch m\u1edf&nbsp;<code>http:\/\/public-IP-of-client-node<\/code>trong tr\u00ecnh duy\u1ec7t web tr\u00ean m\u1ed7i m\u00e1y tr\u1ea1m \u0111\u01b0\u1ee3c li\u1ec7t k\u00ea tr\u1eafng. B\u1ea1n s\u1ebd th\u1ea5y \u1ee9ng d\u1ee5ng web Storm UI tr\u00f4ng nh\u01b0 th\u1ebf n\u00e0y:<img decoding=\"async\" src=\"https:\/\/www.linode.com\/docs\/guides\/big-data-in-the-linode-cloud-streaming-data-processing-with-apache-storm\/storm-ui-large_huc70f2e8c96d8184963ca925428ec1d45_61154_1388x0_resize_q71_bgfafafc_catmullrom_3.jpg\" alt=\"Storm UI\">Giao di\u1ec7n ng\u01b0\u1eddi d\u00f9ng Storm hi\u1ec3n th\u1ecb danh s\u00e1ch c\u00e1c c\u1ea5u tr\u00fac m\u1ea1ng v\u00e0 danh s\u00e1ch c\u00e1c gi\u00e1m s\u00e1t vi\u00ean th\u1ef1c thi ch\u00fang:<img decoding=\"async\" src=\"https:\/\/www.linode.com\/docs\/guides\/big-data-in-the-linode-cloud-streaming-data-processing-with-apache-storm\/storm-ui-monitor_hu936e708c550332abab4ad89b08def9a1_67326_1388x0_resize_q71_bgfafafc_catmullrom_3.jpg\" alt=\"Storm UI monitoring\">N\u1ebfu c\u1ee5m \u0111ang th\u1ef1c hi\u1ec7n b\u1ea5t k\u1ef3 c\u1ea5u tr\u00fac n\u00e0o, ch\u00fang s\u1ebd \u0111\u01b0\u1ee3c li\u1ec7t k\u00ea trong ph\u1ea7n&nbsp;<strong>T\u00f3m t\u1eaft c\u1ea5u tr\u00fac<\/strong>&nbsp;. Nh\u1ea5p v\u00e0o c\u1ea5u tr\u00fac \u0111\u1ec3 truy c\u1eadp s\u1ed1 li\u1ec7u th\u1ed1ng k\u00ea, nh\u1eadt k\u00fd n\u00fat gi\u00e1m s\u00e1t ho\u1eb7c c\u00e1c h\u00e0nh \u0111\u1ed9ng nh\u01b0 h\u1ee7y c\u1ea5u tr\u00fac \u0111\u00f3.<\/p>\n<h2 id=\"test-a-new-storm-cluster\">Ki\u1ec3m tra c\u1ee5m b\u00e3o m\u1edbi<a href=\"https:\/\/www.linode.com\/docs\/guides\/big-data-in-the-linode-cloud-streaming-data-processing-with-apache-storm\/#test-a-new-storm-cluster\"><\/a><\/h2>\n<p>1.\u0110\u0103ng nh\u1eadp v\u00e0o Cluster Manager Linode v\u1edbi t\u00ean ng\u01b0\u1eddi d\u00f9ng&nbsp;<code>clustermgr<\/code>v\u00e0 \u0111i\u1ec1u h\u01b0\u1edbng \u0111\u1ebfn&nbsp;<code>storm-linode<\/code>th\u01b0 m\u1ee5c:<\/p>\n<pre class=\"wp-block-code\"><code>ssh -i ~\/.ssh\/clustermgr clustermgr@PUBLIC-IP-OF-CLUSTER-MANAGER-LINODE \n\ncd storm-linode<\/code><\/pre>\n<p>2.L\u1ea5y \u0111\u1ecba ch\u1ec9 IP ri\u00eang c\u1ee7a n\u00fat m\u00e1y kh\u00e1ch c\u1ee7a c\u1ee5m m\u1ee5c ti\u00eau. \u0110i\u1ec1u n\u00e0y \u0111\u01b0\u1ee3c \u01b0u ti\u00ean v\u00ec l\u00fd do b\u1ea3o m\u1eadt v\u00e0 gi\u1ea3m thi\u1ec3u t\u00e1c \u0111\u1ed9ng \u0111\u1ebfn h\u1ea1n ng\u1ea1ch truy\u1ec1n d\u1eef li\u1ec7u, nh\u01b0ng \u0111\u1ecba ch\u1ec9 IP c\u00f4ng khai c\u0169ng ho\u1ea1t \u0111\u1ed9ng t\u1ed1t:<\/p>\n<pre class=\"wp-block-code\"><code><code>.\/storm-cluster-linode.sh describe storm-cluster1<\/code><\/code><\/pre>\n<p>3.\u0110\u0103ng nh\u1eadp v\u00e0o n\u00fat m\u00e1y kh\u00e1ch v\u1edbi t\u01b0 c\u00e1ch l\u00e0&nbsp;<code>IMAGE_ADMIN_USER<\/code>ng\u01b0\u1eddi d\u00f9ng (m\u1eb7c \u0111\u1ecbnh l\u00e0&nbsp;<code>clusteradmin<\/code>, \u0111\u01b0\u1ee3c c\u1ea5u h\u00ecnh trong t\u1ec7p c\u1ea5u h\u00ecnh h\u00ecnh \u1ea3nh Storm) qua SSH b\u1eb1ng kh\u00f3a ri\u00eang \u0111\u01b0\u1ee3c \u1ee7y quy\u1ec1n:<\/p>\n<pre class=\"wp-block-code\"><code><code>ssh -i ~\/.ssh\/clusterdmin clusteradmin@192.168.42.13<\/code><\/code><\/pre>\n<p>4.Ch\u1ea1y c\u00e1c l\u1ec7nh sau \u0111\u1ec3 b\u1eaft \u0111\u1ea7u v\u00ed d\u1ee5 v\u1ec1 s\u1ed1 l\u01b0\u1ee3ng t\u1eeb \u0111\u01b0\u1ee3c c\u00e0i \u0111\u1eb7t s\u1eb5n:<\/p>\n<p><code>cd \/opt\/apache-storm-0.9.5\/bin .\/storm jar ..\/examples\/storm-starter\/storm-starter-topologies-0.9.5.jar storm.starter.WordCountTopology \"wordcount\"<\/code><\/p>\n<p>5.M\u1ed9t b\u00e0i n\u1ed9p th\u00e0nh c\u00f4ng s\u1ebd cho ra k\u1ebft qu\u1ea3 t\u01b0\u01a1ng t\u1ef1 nh\u01b0 sau:<\/p>\n<pre class=\"wp-block-code\"><code>Running: java -client -Dstorm.options= -Dstorm.home=\/opt\/apache-storm-0.9.5 -Dstorm.log.dir=\/var\/log\/storm -Djava.library.path=\/usr\/local\/lib:\/opt\/local\/lib:\/usr\/lib -Dstorm.conf.file= -cp \/opt\/apache-storm-0.9.5\/lib\/disruptor-2.10.1.jar:\/opt\/apache-storm-0.9.5\/lib\/minlog-1.2.jar:\/opt\/apache-storm-0.9.5\/lib\/commons-io-2.4.jar:\/opt\/apache-storm-0.9.5\/lib\/clj-time-0.4.1.jar:\/opt\/apache-storm-0.9.5\/lib\/clout-1.0.1.jar:\/opt\/apache-storm-0.9.5\/lib\/ring-devel-0.3.11.jar:\/opt\/apache-storm-0.9.5\/lib\/tools.macro-0.1.0.jar:\/opt\/apache-storm-0.9.5\/lib\/ring-jetty-adapter-0.3.11.jar:\/opt\/apache-storm-0.9.5\/lib\/jetty-util-6.1.26.jar:\/opt\/apache-storm-0.9.5\/lib\/commons-exec-1.1.jar:\/opt\/apache-storm-0.9.5\/lib\/tools.cli-0.2.4.jar:\/opt\/apache-storm-0.9.5\/lib\/objenesis-1.2.jar:\/opt\/apache-storm-0.9.5\/lib\/jetty-6.1.26.jar:\/opt\/apache-storm-0.9.5\/lib\/ring-servlet-0.3.11.jar:\/opt\/apache-storm-0.9.5\/lib\/storm-core-0.9.5.jar:\/opt\/apache-storm-0.9.5\/lib\/hiccup-0.3.6.jar:\/opt\/apache-storm-0.9.5\/lib\/clojure-1.5.1.jar:\/opt\/apache-storm-0.9.5\/lib\/commons-codec-1.6.jar:\/opt\/apache-storm-0.9.5\/lib\/servlet-api-2.5.jar:\/opt\/apache-storm-0.9.5\/lib\/compojure-1.1.3.jar:\/opt\/apache-storm-0.9.5\/lib\/json-simple-1.1.jar:\/opt\/apache-storm-0.9.5\/lib\/commons-logging-1.1.3.jar:\/opt\/apache-storm-0.9.5\/lib\/math.numeric-tower-0.0.1.jar:\/opt\/apache-storm-0.9.5\/lib\/asm-4.0.jar:\/opt\/apache-storm-0.9.5\/lib\/commons-lang-2.5.jar:\/opt\/apache-storm-0.9.5\/lib\/clj-stacktrace-0.2.2.jar:\/opt\/apache-storm-0.9.5\/lib\/kryo-2.21.jar:\/opt\/apache-storm-0.9.5\/lib\/logback-classic-1.0.13.jar:\/opt\/apache-storm-0.9.5\/lib\/slf4j-api-1.7.5.jar:\/opt\/apache-storm-0.9.5\/lib\/reflectasm-1.07-shaded.jar:\/opt\/apache-storm-0.9.5\/lib\/ring-core-1.1.5.jar:\/opt\/apache-storm-0.9.5\/lib\/joda-time-2.0.jar:\/opt\/apache-storm-0.9.5\/lib\/logback-core-1.0.13.jar:\/opt\/apache-storm-0.9.5\/lib\/snakeyaml-1.11.jar:\/opt\/apache-storm-0.9.5\/lib\/carbonite-1.4.0.jar:\/opt\/apache-storm-0.9.5\/lib\/tools.logging-0.2.3.jar:\/opt\/apache-storm-0.9.5\/lib\/core.incubator-0.1.0.jar:\/opt\/apache-storm-0.9.5\/lib\/chill-java-0.3.5.jar:\/opt\/apache-storm-0.9.5\/lib\/jgrapht-core-0.9.0.jar:\/opt\/apache-storm-0.9.5\/lib\/jline-2.11.jar:\/opt\/apache-storm-0.9.5\/lib\/commons-fileupload-1.2.1.jar:\/opt\/apache-storm-0.9.5\/lib\/log4j-over-slf4j-1.6.6.jar:..\/examples\/storm-starter\/storm-starter-topologies-0.9.5.jar:\/opt\/apache-storm-0.9.5\/conf:\/opt\/apache-storm-0.9.5\/bin -Dstorm.jar=..\/examples\/storm-starter\/storm-starter-topologies-0.9.5.jar storm.starter.WordCountTopology wordcount 1038 &#91;main] INFO backtype.storm.StormSubmitter - Jar not uploaded to master yet. Submitting jar... 1061 &#91;main] INFO backtype.storm.StormSubmitter - Uploading topology jar ..\/examples\/storm-starter\/storm-starter-topologies-0.9.5.jar to assigned location: \/var\/lib\/storm\/nimbus\/inbox\/stormjar-3a9e3c47-88c3-44c2-9084-046f31e57668.jar Start uploading file '..\/examples\/storm-starter\/storm-starter-topologies-0.9.5.jar' to '\/var\/lib\/storm\/nimbus\/inbox\/stormjar-3a9e3c47-88c3-44c2-9084-046f31e57668.jar' (3248678 bytes) &#91;==================================================] 3248678 \/ 3248678 File '..\/examples\/storm-starter\/storm-starter-topologies-0.9.5.jar' uploaded to '\/var\/lib\/storm\/nimbus\/inbox\/stormjar-3a9e3c47-88c3-44c2-9084-046f31e57668.jar' (3248678 bytes) 1260 &#91;main] INFO backtype.storm.StormSubmitter - Successfully uploaded topology jar to assigned location: \/var\/lib\/storm\/nimbus\/inbox\/stormjar-3a9e3c47-88c3-44c2-9084-046f31e57668.jar 1261 &#91;main] INFO backtype.storm.StormSubmitter - Submitting topology wordcount in distributed mode with conf {\"topology.workers\":3,\"topology.debug\":true} 2076 &#91;main] INFO backtype.storm.StormSubmitter - Finished submitting topology: wordcount<\/code><\/pre>\n<p>X\u00e1c minh r\u1eb1ng c\u1ea5u tr\u00fac \u0111ang ch\u1ea1y \u0111\u00fang b\u1eb1ng c\u00e1ch m\u1edf Storm UI trong tr\u00ecnh duy\u1ec7t web. C\u1ea5u tr\u00fac &#8220;wordcount&#8221; s\u1ebd hi\u1ec3n th\u1ecb trong ph\u1ea7n&nbsp;<strong>T\u00f3m t\u1eaft c\u1ea5u tr\u00fac<\/strong>&nbsp;.<\/p>\n<p>C\u00e1c h\u01b0\u1edbng d\u1eabn \u1edf tr\u00ean s\u1ebd s\u1eed d\u1ee5ng c\u1ea5u tr\u00fac &#8220;wordcount&#8221; m\u1eabu, kh\u00f4ng cung c\u1ea5p \u0111\u1ea7u ra c\u00f3 th\u1ec3 nh\u00ecn th\u1ea5y \u0111\u1ec3 hi\u1ec3n th\u1ecb k\u1ebft qu\u1ea3 c\u1ee7a c\u00e1c thao t\u00e1c \u0111ang ch\u1ea1y. Tuy nhi\u00ean, c\u1ea5u tr\u00fac n\u00e0y ch\u1ec9 \u0111\u1ebfm c\u00e1c t\u1eeb trong c\u00e1c c\u00e2u \u0111\u01b0\u1ee3c t\u1ea1o ra, do \u0111\u00f3, s\u1ed1 b\u00ean d\u01b0\u1edbi &#8220;Emitted&#8221; l\u00e0 s\u1ed1 t\u1eeb th\u1ef1c t\u1ebf.<\/p>\n<p>\u0110\u1ec3 c\u00f3 b\u00e0i ki\u1ec3m tra th\u1ef1c t\u1ebf h\u01a1n, h\u00e3y tho\u1ea3i m\u00e1i t\u1ea3i xu\u1ed1ng m\u1ed9t c\u1ea5u tr\u00fac li\u00ean k\u1ebft kh\u00e1c, ch\u1eb3ng h\u1ea1n nh\u01b0&nbsp;<a href=\"https:\/\/github.com\/pathbreak\/reddit-sentiment-storm\" target=\"_blank\" rel=\"noreferrer noopener\">Reddit Comment Sentiment Analysis Topology<\/a>&nbsp;, c\u00f4ng c\u1ee5 n\u00e0y \u0111\u01b0a ra danh s\u00e1ch c\u01a1 b\u1ea3n c\u00e1c ch\u1ee7 \u0111\u1ec1 trong c\u00e1c subreddit nh\u1ea5t \u0111\u1ecbnh, d\u1ef1a tr\u00ean \u0111\u00f3 c\u00f3 nhi\u1ec1u b\u00ecnh lu\u1eadn t\u00edch c\u1ef1c v\u00e0 ti\u00eau c\u1ef1c nh\u1ea5t theo th\u1eddi gian. N\u1ebfu b\u1ea1n ch\u1ecdn t\u1ea3i xu\u1ed1ng c\u1ea5u tr\u00fac li\u00ean k\u1ebft c\u1ee7a b\u00ean th\u1ee9 ba, h\u00e3y \u0111\u1ea3m b\u1ea3o r\u1eb1ng \u0111\u00f3 l\u00e0 t\u1eeb m\u1ed9t ngu\u1ed3n \u0111\u00e1ng tin c\u1eady v\u00e0 b\u1ea1n t\u1ea3i xu\u1ed1ng \u0111\u00fang th\u01b0 m\u1ee5c.<\/p>\n<h2 id=\"start-a-new-topology\">B\u1eaft \u0111\u1ea7u m\u1ed9t Topology m\u1edbi<a href=\"https:\/\/www.linode.com\/docs\/guides\/big-data-in-the-linode-cloud-streaming-data-processing-with-apache-storm\/#start-a-new-topology\"><\/a><\/h2>\n<p>N\u1ebfu b\u1ea1n ho\u1eb7c nh\u00e0 ph\u00e1t tri\u1ec3n \u0111\u00e3 t\u1ea1o c\u1ea5u tr\u00fac m\u1ea1ng, h\u00e3y th\u1ef1c hi\u1ec7n c\u00e1c b\u01b0\u1edbc sau \u0111\u1ec3 b\u1eaft \u0111\u1ea7u c\u1ea5u tr\u00fac m\u1ea1ng m\u1edbi tr\u00ean m\u1ed9t trong c\u00e1c c\u1ee5m Linode Storm c\u1ee7a b\u1ea1n:Ghi ch\u00fa<\/p>\n<p>Nh\u00e0 ph\u00e1t tri\u1ec3n ph\u1ea3i c\u00f3&nbsp;<code>clusteradmin<\/code>(ho\u1eb7c&nbsp;<code>clusterroot<\/code>) quy\u1ec1n \u0111\u0103ng nh\u1eadp v\u00e0o n\u00fat m\u00e1y kh\u00e1ch c\u1ee7a c\u1ee5m Storm m\u1ee5c ti\u00eau.<\/p>\n<p>T\u00f9y ch\u1ecdn, \u0111\u1ec3 l\u1ea5y \u0111\u1ecba ch\u1ec9 IP c\u1ee7a n\u00fat m\u00e1y kh\u00e1ch, nh\u00e0 ph\u00e1t tri\u1ec3n ph\u1ea3i c\u00f3&nbsp;<code>clustermgrguest<\/code>(ho\u1eb7c&nbsp;<code>clustermgrroot<\/code>) quy\u1ec1n \u0111\u0103ng nh\u1eadp v\u00e0o Cluster Manager Linode. N\u1ebfu \u0111\u1ecba ch\u1ec9 IP \u0111\u01b0\u1ee3c bi\u1ebft \u0111\u1ebfn b\u1eb1ng c\u00e1c ph\u01b0\u01a1ng ph\u00e1p kh\u00e1c, th\u00ec kh\u00f4ng c\u1ea7n quy\u1ec1n n\u00e0y.<\/p>\n<ol>\n<li>\u0110\u00f3ng g\u00f3i c\u1ea5u tr\u00fac m\u1ea1ng c\u1ee7a b\u1ea1n c\u00f9ng v\u1edbi t\u1ea5t c\u1ea3 c\u00e1c l\u1edbp c\u1ee7a b\u00ean th\u1ee9 ba m\u00e0 ch\u00fang ph\u1ee5 thu\u1ed9c v\u00e0o th\u00e0nh m\u1ed9t t\u1ec7p JAR (Java Archive) duy nh\u1ea5t.<\/li>\n<li>N\u1ebfu tri\u1ec3n khai nhi\u1ec1u c\u1ee5m, h\u00e3y ch\u1ecdn c\u1ee5m Storm m\u1ee5c ti\u00eau \u0111\u1ec3 ch\u1ea1y c\u1ea5u tr\u00fac m\u1ea1ng. L\u1ea5y \u0111\u1ecba ch\u1ec9 IP c\u00f4ng khai c\u1ee7a n\u00fat m\u00e1y kh\u00e1ch c\u1ee7a c\u1ee5m m\u1ee5c ti\u00eau. Xem&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/guides\/big-data-in-the-linode-cloud-streaming-data-processing-with-apache-storm\/#describe-a-storm-cluster\">m\u00f4 t\u1ea3 c\u1ee5m<\/a>&nbsp;\u0111\u1ec3 bi\u1ebft chi ti\u1ebft v\u1ec1 c\u00e1ch th\u1ef1c hi\u1ec7n vi\u1ec7c n\u00e0y.<\/li>\n<li>Chuy\u1ec3n JAR c\u1ea5u tr\u00fac t\u1eeb m\u00e1y tr\u1ea1m c\u1ee5c b\u1ed9 c\u1ee7a b\u1ea1n sang n\u00fat m\u00e1y kh\u00e1ch:<code>scp -i ~\/.ssh\/private-key local-topology-path clusteradmin@public-ip-of-client-node:topology-jar <\/code>Thay th\u1ebf&nbsp;<code>private-key<\/code>cho kh\u00f3a ri\u00eang c\u1ee7a m\u00e1y kh\u00e1ch Storm,&nbsp;<code>local-topology-path<\/code>cho \u0111\u01b0\u1eddng d\u1eabn t\u1ec7p c\u1ee5c b\u1ed9 c\u1ee7a t\u1ec7p JAR,&nbsp;<code>PUBLIC-IP-OF-CLIENT-NODE<\/code>cho \u0111\u1ecba ch\u1ec9 IP c\u1ee7a m\u00e1y kh\u00e1ch Storm v\u00e0&nbsp;<code>topology-jar<\/code>cho \u0111\u01b0\u1eddng d\u1eabn t\u1ec7p m\u00e0 b\u1ea1n mu\u1ed1n s\u1eed d\u1ee5ng \u0111\u1ec3 l\u01b0u tr\u1eef c\u1ea5u tr\u00fac tr\u00ean n\u00fat m\u00e1y kh\u00e1ch.<\/li>\n<li>\u0110\u0103ng nh\u1eadp v\u00e0o n\u00fat m\u00e1y kh\u00e1ch v\u1edbi t\u01b0 c\u00e1ch l\u00e0&nbsp;<code>clusteradmin<\/code>, thay th\u1ebf c\u00e1c gi\u00e1 tr\u1ecb th\u00edch h\u1ee3p:<code>ssh -i ~\/.ssh\/private-key clusteradmin@PUBLIC-IP-OF-CLIENT-NODE<\/code><\/li>\n<li>G\u1eedi c\u1ea5u tr\u00fac m\u1ea1ng t\u1edbi c\u1ee5m:<code>cd \/opt\/apache-storm-0.9.5\/bin .\/storm jar topology-jar.jar main-class arguments-for-topology <\/code>Thay th\u1ebf&nbsp;<code>topology-jar.jar<\/code>\u0111\u01b0\u1eddng d\u1eabn \u0111\u1ebfn t\u1ec7p JAR m\u00e0 b\u1ea1n mu\u1ed1n g\u1eedi,&nbsp;<code>main-class<\/code>b\u1eb1ng l\u1edbp ch\u00ednh c\u1ee7a c\u1ea5u tr\u00fac m\u1ea1ng v\u00e0&nbsp;<code>arguments-for-topology<\/code>c\u00e1c \u0111\u1ed1i s\u1ed1 \u0111\u01b0\u1ee3c l\u1edbp ch\u00ednh c\u1ee7a c\u1ea5u tr\u00fac m\u1ea1ng ch\u1ea5p nh\u1eadn.<\/li>\n<li><a href=\"https:\/\/www.linode.com\/docs\/guides\/big-data-in-the-linode-cloud-streaming-data-processing-with-apache-storm\/#monitor-a-storm-cluster\">Theo d\u00f5i vi\u1ec7c th\u1ef1c hi\u1ec7n c\u1ea5u tr\u00fac m\u1ea1ng m\u1edbi.<\/a><\/li>\n<\/ol>\n<p>Ghi ch\u00faGiao di\u1ec7n ng\u01b0\u1eddi d\u00f9ng Storm s\u1ebd ch\u1ec9 hi\u1ec3n th\u1ecb th\u00f4ng tin v\u1ec1 qu\u00e1 tr\u00ecnh th\u1ef1c thi c\u1ee7a c\u1ea5u tr\u00fac, kh\u00f4ng ph\u1ea3i d\u1eef li\u1ec7u th\u1ef1c t\u1ebf m\u00e0 n\u00f3 \u0111ang x\u1eed l\u00fd. D\u1eef li\u1ec7u, bao g\u1ed3m c\u1ea3 \u0111\u00edch \u0111\u1ea7u ra c\u1ee7a n\u00f3, \u0111\u01b0\u1ee3c x\u1eed l\u00fd trong c\u00e1c t\u1ec7p JAR c\u1ee7a c\u1ea5u tr\u00fac.<\/p>\n<h2 id=\"other-storm-cluster-operations\">C\u00e1c ho\u1ea1t \u0111\u1ed9ng c\u1ee5m b\u00e3o kh\u00e1c<a href=\"https:\/\/www.linode.com\/docs\/guides\/big-data-in-the-linode-cloud-streaming-data-processing-with-apache-storm\/#other-storm-cluster-operations\"><\/a><\/h2>\n<p>Trong ph\u1ea7n n\u00e0y, ch\u00fang t\u00f4i s\u1ebd \u0111\u1ec1 c\u1eadp \u0111\u1ebfn c\u00e1c ho\u1ea1t \u0111\u1ed9ng b\u1ed5 sung \u0111\u1ec3 qu\u1ea3n l\u00fd c\u1ee5m Storm c\u1ee7a b\u1ea1n sau khi c\u1ee5m n\u00e0y \u0111\u00e3 ho\u1ea1t \u0111\u1ed9ng.<\/p>\n<p>T\u1ea5t c\u1ea3 c\u00e1c l\u1ec7nh trong ph\u1ea7n n\u00e0y ph\u1ea3i \u0111\u01b0\u1ee3c th\u1ef1c hi\u1ec7n t\u1eeb&nbsp;<code>storm-linode<\/code>th\u01b0 m\u1ee5c tr\u00ean tr\u00ecnh qu\u1ea3n l\u00fd c\u1ee5m Linode. B\u1ea1n s\u1ebd c\u1ea7n&nbsp;<code>clustermgr<\/code>c\u00e1c \u0111\u1eb7c quy\u1ec1n tr\u1eeb khi \u0111\u01b0\u1ee3c ch\u1ec9 \u0111\u1ecbnh kh\u00e1c.<\/p>\n<h3 id=\"expand-a-storm-cluster\">M\u1edf r\u1ed9ng c\u1ee5m b\u00e3o<a href=\"https:\/\/www.linode.com\/docs\/guides\/big-data-in-the-linode-cloud-streaming-data-processing-with-apache-storm\/#expand-a-storm-cluster\"><\/a><\/h3>\n<p>N\u1ebfu c\u00e1c n\u00fat gi\u00e1m s\u00e1t c\u1ee7a c\u1ee5m Storm b\u1ecb qu\u00e1 t\u1ea3i v\u1edbi qu\u00e1 nhi\u1ec1u c\u1ea5u tr\u00fac m\u1ea1ng ho\u1eb7c c\u00e1c c\u00f4ng vi\u1ec7c kh\u00e1c \u0111\u00f2i h\u1ecfi nhi\u1ec1u CPU, vi\u1ec7c th\u00eam nhi\u1ec1u n\u00fat gi\u00e1m s\u00e1t h\u01a1n c\u00f3 th\u1ec3 gi\u00fap gi\u1ea3m b\u1edbt m\u1ed9t s\u1ed1 t\u1ea3i.<\/p>\n<p>M\u1edf r\u1ed9ng c\u1ee5m b\u1eb1ng l\u1ec7nh&nbsp;<code>add-nodes<\/code>, ch\u1ec9 \u0111\u1ecbnh c\u00e1c k\u1ebf ho\u1ea1ch v\u00e0 s\u1ed1 l\u01b0\u1ee3ng cho c\u00e1c n\u00fat m\u1edbi. V\u00ed d\u1ee5, \u0111\u1ec3 th\u00eam ba n\u00fat gi\u00e1m s\u00e1t 4GB m\u1edbi v\u00e0o c\u1ee5m c\u00f3 t\u00ean&nbsp;<code>storm-cluster1<\/code>:<\/p>\n<pre class=\"wp-block-code\"><code>.\/storm-cluster-linode.sh add-nodes storm-cluster1 api_env_linode.conf \"4GB:3\"\n<\/code><\/pre>\n<p>Ho\u1eb7c, \u0111\u1ec3 th\u00eam m\u1ed9t n\u00fat gi\u00e1m s\u00e1t 2GB v\u00e0 hai n\u00fat gi\u00e1m s\u00e1t 4GB v\u00e0o&nbsp;<code>storm-cluster1<\/code>:<\/p>\n<pre class=\"wp-block-code\"><code>.\/storm-cluster-linode.sh add-nodes storm-cluster1 api_env_linode.conf \"2GB:1 4GB:2\"\n<\/code><\/pre>\n<p>C\u00fa ph\u00e1p n\u00e0y c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 th\u00eam s\u1ed1 l\u01b0\u1ee3ng n\u00fat kh\u00e1c nhau t\u00f9y \u00fd v\u00e0o c\u1ee5m hi\u1ec7n c\u00f3.<\/p>\n<h3 id=\"describe-a-storm-cluster\">M\u00f4 t\u1ea3 m\u1ed9t c\u1ee5m b\u00e3o<a href=\"https:\/\/www.linode.com\/docs\/guides\/big-data-in-the-linode-cloud-streaming-data-processing-with-apache-storm\/#describe-a-storm-cluster\"><\/a><\/h3>\n<p>Ng\u01b0\u1eddi d\u00f9ng c\u00f3&nbsp;<code>clustermgr<\/code>th\u1ea9m quy\u1ec1n c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng&nbsp;<code>describe<\/code>l\u1ec7nh \u0111\u1ec3 m\u00f4 t\u1ea3 c\u1ee5m Storm:<\/p>\n<pre class=\"wp-block-code\"><code>.\/storm-cluster-linode.sh describe storm-cluster1\n<\/code><\/pre>\n<p>Ng\u01b0\u1eddi d\u00f9ng ch\u1ec9 c\u00f3&nbsp;<code>clustermgrguest<\/code>quy\u1ec1n c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng&nbsp;<code>cluster_info.sh<\/code>\u0111\u1ec3 m\u00f4 t\u1ea3 c\u1ee5m Storm b\u1eb1ng c\u00e1ch s\u1eed d\u1ee5ng&nbsp;<code>list<\/code>\u0111\u1ec3 l\u1ea5y danh s\u00e1ch t\u00ean c\u1ee7a t\u1ea5t c\u1ea3 c\u00e1c c\u1ee5m v\u00e0 l\u1ec7nh&nbsp;<code>info<\/code>\u0111\u1ec3 m\u00f4 t\u1ea3 c\u1ee5m \u0111\u00e3 cho. Khi s\u1eed d\u1ee5ng&nbsp;<code>info<\/code>l\u1ec7nh, b\u1ea1n c\u0169ng ph\u1ea3i ch\u1ec9 \u0111\u1ecbnh t\u00ean c\u1ee5m:<\/p>\n<pre class=\"wp-block-code\"><code>.\/cluster_info.sh list\n.\/cluster_info.sh info storm-cluster1\n<\/code><\/pre>\n<h3 id=\"stop-a-storm-cluster\">Ng\u0103n ch\u1eb7n m\u1ed9t c\u1ee5m b\u00e3o<a href=\"https:\/\/www.linode.com\/docs\/guides\/big-data-in-the-linode-cloud-streaming-data-processing-with-apache-storm\/#stop-a-storm-cluster\"><\/a><\/h3>\n<p>Vi\u1ec7c d\u1eebng c\u1ee5m Storm s\u1ebd d\u1eebng m\u1ecdi c\u1ea5u tr\u00fac \u0111ang th\u1ef1c thi tr\u00ean c\u1ee5m \u0111\u00f3, d\u1eebng Storm daemon tr\u00ean m\u1ecdi n\u00fat v\u00e0 t\u1eaft m\u1ecdi n\u00fat. C\u1ee5m c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c kh\u1edfi \u0111\u1ed9ng l\u1ea1i sau. L\u01b0u \u00fd r\u1eb1ng c\u00e1c n\u00fat v\u1eabn&nbsp;<strong>s\u1ebd<\/strong>&nbsp;ph\u1ea3i ch\u1ecbu ph\u00ed theo gi\u1edd ngay c\u1ea3 khi \u0111\u00e3 d\u1eebng.<\/p>\n<p>\u0110\u1ec3 d\u1eebng c\u1ee5m Storm, h\u00e3y s\u1eed d\u1ee5ng&nbsp;<code>stop<\/code>l\u1ec7nh:<\/p>\n<pre class=\"wp-block-code\"><code>.\/storm-cluster-linode.sh stop storm-cluster1 api_env_linode.conf\n<\/code><\/pre>\n<h3 id=\"destroy-a-storm-cluster\">Ph\u00e1 h\u1ee7y m\u1ed9t c\u1ee5m b\u00e3o<a href=\"https:\/\/www.linode.com\/docs\/guides\/big-data-in-the-linode-cloud-streaming-data-processing-with-apache-storm\/#destroy-a-storm-cluster\"><\/a><\/h3>\n<p>Vi\u1ec7c ph\u00e1 h\u1ee7y m\u1ed9t c\u1ee5m Storm s\u1ebd x\u00f3a v\u0129nh vi\u1ec5n t\u1ea5t c\u1ea3 c\u00e1c n\u00fat c\u1ee7a c\u1ee5m \u0111\u00f3&nbsp;<em>v\u00e0 d\u1eef li\u1ec7u c\u1ee7a ch\u00fang<\/em>&nbsp;. Ch\u00fang s\u1ebd kh\u00f4ng c\u00f2n ph\u1ea3i ch\u1ecbu ph\u00ed theo gi\u1edd n\u1eefa.<\/p>\n<p>\u0110\u1ec3 ph\u00e1 h\u1ee7y c\u1ee5m Storm, h\u00e3y s\u1eed d\u1ee5ng&nbsp;<code>destroy<\/code>l\u1ec7nh:<\/p>\n<pre class=\"wp-block-code\"><code>.\/storm-cluster-linode.sh destroy storm-cluster1 api_env_linode.conf\n<\/code><\/pre>\n<h3 id=\"run-a-command-on-all-nodes-of-a-storm-cluster\">Ch\u1ea1y l\u1ec7nh tr\u00ean t\u1ea5t c\u1ea3 c\u00e1c n\u00fat c\u1ee7a c\u1ee5m Storm<a href=\"https:\/\/www.linode.com\/docs\/guides\/big-data-in-the-linode-cloud-streaming-data-processing-with-apache-storm\/#run-a-command-on-all-nodes-of-a-storm-cluster\"><\/a><\/h3>\n<p>B\u1ea1n c\u00f3 th\u1ec3 ch\u1ea1y l\u1ec7nh (v\u00ed d\u1ee5, \u0111\u1ec3 c\u00e0i \u0111\u1eb7t g\u00f3i ho\u1eb7c t\u1ea3i xu\u1ed1ng t\u00e0i nguy\u00ean) tr\u00ean t\u1ea5t c\u1ea3 c\u00e1c n\u00fat c\u1ee7a c\u1ee5m Storm. \u0110i\u1ec1u n\u00e0y c\u0169ng h\u1eefu \u00edch khi c\u1eadp nh\u1eadt v\u00e0 n\u00e2ng c\u1ea5p ph\u1ea7n m\u1ec1m ho\u1eb7c thay \u0111\u1ed5i quy\u1ec1n t\u1ec7p. L\u01b0u \u00fd r\u1eb1ng khi s\u1eed d\u1ee5ng ph\u01b0\u01a1ng ph\u00e1p n\u00e0y, l\u1ec7nh s\u1ebd \u0111\u01b0\u1ee3c th\u1ef1c thi nh\u01b0&nbsp;<code>root<\/code>tr\u00ean m\u1ed7i n\u00fat.<\/p>\n<p>\u0110\u1ec3 th\u1ef1c hi\u1ec7n l\u1ec7nh tr\u00ean t\u1ea5t c\u1ea3 c\u00e1c n\u00fat, h\u00e3y s\u1eed d\u1ee5ng l\u1ec7nh&nbsp;<code>run<\/code>, ch\u1ec9 \u0111\u1ecbnh t\u00ean c\u1ee5m v\u00e0 c\u00e1c l\u1ec7nh s\u1ebd ch\u1ea1y. V\u00ed d\u1ee5: \u0111\u1ec3 c\u1eadp nh\u1eadt kho l\u01b0u tr\u1eef g\u00f3i c\u1ee7a b\u1ea1n tr\u00ean t\u1ea5t c\u1ea3 c\u00e1c n\u00fat trong&nbsp;<code>storm-cluster1<\/code>:<\/p>\n<pre class=\"wp-block-code\"><code>.\/storm-cluster-linode.sh run storm-cluster1 \"apt-get update\"\n<\/code><\/pre>\n<h3 id=\"copy-files-to-all-nodes-of-a-storm-cluster\">Sao ch\u00e9p c\u00e1c t\u1eadp tin v\u00e0o t\u1ea5t c\u1ea3 c\u00e1c n\u00fat c\u1ee7a m\u1ed9t c\u1ee5m Storm<a href=\"https:\/\/www.linode.com\/docs\/guides\/big-data-in-the-linode-cloud-streaming-data-processing-with-apache-storm\/#copy-files-to-all-nodes-of-a-storm-cluster\"><\/a><\/h3>\n<p>B\u1ea1n c\u00f3 th\u1ec3 sao ch\u00e9p m\u1ed9t ho\u1eb7c nhi\u1ec1u t\u1ec7p t\u1eeb n\u00fat qu\u1ea3n l\u00fd c\u1ee5m \u0111\u1ebfn t\u1ea5t c\u1ea3 c\u00e1c n\u00fat c\u1ee7a c\u1ee5m Storm. C\u00e1c t\u1ec7p s\u1ebd \u0111\u01b0\u1ee3c sao ch\u00e9p d\u01b0\u1edbi d\u1ea1ng ng\u01b0\u1eddi&nbsp;<code>root<\/code>d\u00f9ng tr\u00ean m\u1ed7i n\u00fat, v\u00ec v\u1eady h\u00e3y ghi nh\u1edb \u0111i\u1ec1u n\u00e0y khi sao ch\u00e9p c\u00e1c t\u1ec7p c\u1ea7n quy\u1ec1n c\u1ee5 th\u1ec3.<\/p>\n<ol>\n<li>N\u1ebfu c\u00e1c t\u1ec7p ch\u01b0a c\u00f3 tr\u00ean n\u00fat qu\u1ea3n l\u00fd c\u1ee5m c\u1ee7a b\u1ea1n, tr\u01b0\u1edbc ti\u00ean b\u1ea1n c\u1ea7n sao ch\u00e9p ch\u00fang t\u1eeb m\u00e1y tr\u1ea1m c\u1ee7a m\u00ecnh. Thay th\u1ebf&nbsp;<code>local-file<\/code>cho t\u00ean ho\u1eb7c \u0111\u01b0\u1eddng d\u1eabn c\u1ee7a t\u1ec7p tr\u00ean m\u00e1y c\u1ee5c b\u1ed9 c\u1ee7a b\u1ea1n v\u00e0&nbsp;<code>PUBLIC-IP-OF-CLUSTER-MANAGER-LINODE<\/code>cho \u0111\u1ecba ch\u1ec9 IP c\u1ee7a n\u00fat qu\u1ea3n l\u00fd c\u1ee5m. B\u1ea1n c\u0169ng c\u00f3 th\u1ec3 ch\u1ec9 \u0111\u1ecbnh m\u1ed9t \u0111\u01b0\u1eddng d\u1eabn t\u1ec7p kh\u00e1c v\u00e0 thay th\u1ebf n\u00f3 b\u1eb1ng&nbsp;<code>~<\/code>:<code>scp -i ~\/.ssh\/clustermgr local-files clustermgr@PUBLIC-IP-OF-CLUSTER-MANAGER-LINODE:~<\/code><\/li>\n<li>\u0110\u0103ng nh\u1eadp v\u00e0o Cluster Manager Linode v\u1edbi t\u00ean ng\u01b0\u1eddi d\u00f9ng&nbsp;<code>clustermgr<\/code>v\u00e0 \u0111i\u1ec1u h\u01b0\u1edbng \u0111\u1ebfn&nbsp;<code>storm-linode<\/code>th\u01b0 m\u1ee5c:<code>ssh -i ~\/.ssh\/clustermgr clustermgr@PUBLIC-IP-OF-CLUSTER-MANAGER-LINODE cd storm-linode<\/code><\/li>\n<li>Th\u1ef1c hi\u1ec7n&nbsp;<code>cp<\/code>l\u1ec7nh, ch\u1ec9 \u0111\u1ecbnh th\u01b0 m\u1ee5c \u0111\u00edch tr\u00ean m\u1ed7i n\u00fat v\u00e0 danh s\u00e1ch c\u00e1c t\u1ec7p c\u1ee5c b\u1ed9 c\u1ea7n sao ch\u00e9p:<code>.\/storm-cluster-linode.sh cp target-cluster-name \"target-directory\" \"local-files\" <\/code>H\u00e3y nh\u1edb ch\u1ec9 \u0111\u1ecbnh th\u01b0 m\u1ee5c \u0111\u00edch&nbsp;<em>tr\u01b0\u1edbc<\/em>&nbsp;danh s\u00e1ch c\u00e1c t\u1ec7p ngu\u1ed3n (\u0111\u00e2y l\u00e0 l\u1ec7nh ng\u01b0\u1ee3c l\u1ea1i v\u1edbi l\u1ec7nh th\u00f4ng th\u01b0\u1eddng&nbsp;<code>cp<\/code>)&nbsp;<code>scp<\/code>.V\u00ed d\u1ee5, n\u1ebfu c\u1ea5u tr\u00fac c\u1ee7a b\u1ea1n y\u00eau c\u1ea7u c\u00e1c t\u1ec7p d\u1eef li\u1ec7u c\u00f3 t\u00ean \u201c*.data\u201d \u0111\u1ec3 x\u1eed l\u00fd, b\u1ea1n c\u00f3 th\u1ec3 sao ch\u00e9p ch\u00fang v\u00e0o&nbsp;<code>root<\/code>th\u01b0 m\u1ee5c g\u1ed1c c\u1ee7a ng\u01b0\u1eddi d\u00f9ng tr\u00ean t\u1ea5t c\u1ea3 c\u00e1c n\u00fat c\u1ee5m b\u1eb1ng c\u00e1ch:<code>.\/storm-cluster-linode.sh cp storm-cluster1 \"~\" \"~\/*.data\"<\/code><\/li>\n<\/ol>\n<h3 id=\"delete-a-storm-image\">X\u00f3a h\u00ecnh \u1ea3nh c\u01a1n b\u00e3o<a href=\"https:\/\/www.linode.com\/docs\/guides\/big-data-in-the-linode-cloud-streaming-data-processing-with-apache-storm\/#delete-a-storm-image\"><\/a><\/h3>\n<p>\u0110\u1ec3 x\u00f3a h\u00ecnh \u1ea3nh Storm, h\u00e3y s\u1eed d\u1ee5ng&nbsp;<code>delete-image<\/code>l\u1ec7nh:<\/p>\n<pre class=\"wp-block-code\"><code>.\/storm-cluster-linode.sh delete-image storm-image1 api_env_linode.conf\n<\/code><\/pre>\n<p>L\u01b0u \u00fd r\u1eb1ng l\u1ec7nh n\u00e0y s\u1ebd x\u00f3a h\u00ecnh \u1ea3nh nh\u01b0ng kh\u00f4ng x\u00f3a b\u1ea5t k\u1ef3 c\u1ee5m n\u00e0o \u0111\u01b0\u1ee3c t\u1ea1o t\u1eeb h\u00ecnh \u1ea3nh \u0111\u00f3.<\/p>\n<h2 id=\"zookeeper-cluster-operations\">Ho\u1ea1t \u0111\u1ed9ng c\u1ee7a c\u1ee5m Zookeeper<a href=\"https:\/\/www.linode.com\/docs\/guides\/big-data-in-the-linode-cloud-streaming-data-processing-with-apache-storm\/#zookeeper-cluster-operations\"><\/a><\/h2>\n<p>Trong ph\u1ea7n n\u00e0y, ch\u00fang t\u00f4i s\u1ebd \u0111\u1ec1 c\u1eadp \u0111\u1ebfn c\u00e1c ho\u1ea1t \u0111\u1ed9ng b\u1ed5 sung \u0111\u1ec3 qu\u1ea3n l\u00fd c\u1ee5m Zookeeper c\u1ee7a b\u1ea1n sau khi c\u1ee5m n\u00e0y \u0111\u00e3 ho\u1ea1t \u0111\u1ed9ng.<\/p>\n<p>T\u1ea5t c\u1ea3 c\u00e1c l\u1ec7nh trong ph\u1ea7n n\u00e0y ph\u1ea3i \u0111\u01b0\u1ee3c th\u1ef1c hi\u1ec7n t\u1eeb&nbsp;<code>storm-linode<\/code>th\u01b0 m\u1ee5c tr\u00ean tr\u00ecnh qu\u1ea3n l\u00fd c\u1ee5m Linode. B\u1ea1n s\u1ebd c\u1ea7n&nbsp;<code>clustermgr<\/code>c\u00e1c \u0111\u1eb7c quy\u1ec1n tr\u1eeb khi \u0111\u01b0\u1ee3c ch\u1ec9 \u0111\u1ecbnh kh\u00e1c.<\/p>\n<h3 id=\"describe-a-zookeeper-cluster\">M\u00f4 t\u1ea3 m\u1ed9t c\u1ee5m ng\u01b0\u1eddi tr\u00f4ng coi s\u1edf th\u00fa<a href=\"https:\/\/www.linode.com\/docs\/guides\/big-data-in-the-linode-cloud-streaming-data-processing-with-apache-storm\/#describe-a-zookeeper-cluster\"><\/a><\/h3>\n<p>Ng\u01b0\u1eddi d\u00f9ng c\u00f3&nbsp;<code>clustermgr<\/code>th\u1ea9m quy\u1ec1n c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng&nbsp;<code>describe<\/code>l\u1ec7nh \u0111\u1ec3 m\u00f4 t\u1ea3 c\u1ee5m Zookeeper:<\/p>\n<pre class=\"wp-block-code\"><code>.\/zookeepercluster-linode.sh describe zk-cluster1\n<\/code><\/pre>\n<p>Ng\u01b0\u1eddi d\u00f9ng ch\u1ec9 c\u00f3&nbsp;<code>clustermgrguest<\/code>quy\u1ec1n c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng&nbsp;<code>cluster_info.sh<\/code>\u0111\u1ec3 m\u00f4 t\u1ea3 c\u1ee5m Zookeeper b\u1eb1ng c\u00e1ch s\u1eed d\u1ee5ng&nbsp;<code>list<\/code>\u0111\u1ec3 l\u1ea5y danh s\u00e1ch t\u00ean c\u1ee7a t\u1ea5t c\u1ea3 c\u00e1c c\u1ee5m v\u00e0 l\u1ec7nh&nbsp;<code>info<\/code>\u0111\u1ec3 m\u00f4 t\u1ea3 c\u1ee5m \u0111\u00e3 cho. Khi s\u1eed d\u1ee5ng&nbsp;<code>info<\/code>l\u1ec7nh, b\u1ea1n ph\u1ea3i ch\u1ec9 \u0111\u1ecbnh t\u00ean c\u1ee5m:<\/p>\n<pre class=\"wp-block-code\"><code>.\/cluster_info.sh list\n.\/cluster_info.sh info zk-cluster1\n<\/code><\/pre>\n<h3 id=\"stop-a-zookeeper-cluster\">Ng\u0103n ch\u1eb7n m\u1ed9t c\u1ee5m ng\u01b0\u1eddi tr\u00f4ng coi s\u1edf th\u00fa<a href=\"https:\/\/www.linode.com\/docs\/guides\/big-data-in-the-linode-cloud-streaming-data-processing-with-apache-storm\/#stop-a-zookeeper-cluster\"><\/a><\/h3>\n<p>Vi\u1ec7c d\u1eebng c\u1ee5m Zookeeper s\u1ebd d\u1eebng s\u1ea1ch s\u1ebd tr\u00ecnh n\u1ec1n Zookeeper tr\u00ean t\u1ea5t c\u1ea3 c\u00e1c n\u00fat v\u00e0 t\u1eaft t\u1ea5t c\u1ea3 c\u00e1c n\u00fat. C\u1ee5m c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c kh\u1edfi \u0111\u1ed9ng l\u1ea1i sau. L\u01b0u \u00fd r\u1eb1ng c\u00e1c n\u00fat v\u1eabn&nbsp;<strong>s\u1ebd<\/strong>&nbsp;ph\u1ea3i ch\u1ecbu ph\u00ed theo gi\u1edd c\u1ee7a Linode khi d\u1eebng.Quan tr\u1ecdngKh\u00f4ng d\u1eebng c\u1ee5m Zookeeper trong khi b\u1ea5t k\u1ef3 c\u1ee5m Storm n\u00e0o ph\u1ee5 thu\u1ed9c v\u00e0o n\u00f3 \u0111ang ch\u1ea1y. \u0110i\u1ec1u n\u00e0y c\u00f3 th\u1ec3 d\u1eabn \u0111\u1ebfn m\u1ea5t d\u1eef li\u1ec7u.<\/p>\n<p>\u0110\u1ec3 d\u1eebng m\u1ed9t c\u1ee5m, h\u00e3y s\u1eed d\u1ee5ng&nbsp;<code>stop<\/code>l\u1ec7nh:<\/p>\n<pre class=\"wp-block-code\"><code>.\/zookeeper-cluster-linode.sh stop zk-cluster1 api_env_linode.conf\n<\/code><\/pre>\n<h3 id=\"destroy-a-zookeeper-cluster\">Ph\u00e1 h\u1ee7y m\u1ed9t c\u1ee5m Zookeeper<a href=\"https:\/\/www.linode.com\/docs\/guides\/big-data-in-the-linode-cloud-streaming-data-processing-with-apache-storm\/#destroy-a-zookeeper-cluster\"><\/a><\/h3>\n<p>Vi\u1ec7c ph\u00e1 h\u1ee7y m\u1ed9t c\u1ee5m Zookeeper s\u1ebd x\u00f3a v\u0129nh vi\u1ec5n t\u1ea5t c\u1ea3 c\u00e1c n\u00fat c\u1ee7a c\u1ee5m \u0111\u00f3 v\u00e0 d\u1eef li\u1ec7u c\u1ee7a ch\u00fang. Kh\u00f4ng gi\u1ed1ng nh\u01b0 Linode ch\u1ec9 b\u1ecb t\u1eaft, b\u1ecb ph\u00e1 h\u1ee7y ho\u1eb7c x\u00f3a, Linode kh\u00f4ng c\u00f2n ph\u1ea3i ch\u1ecbu ph\u00ed theo gi\u1edd n\u1eefa.Quan tr\u1ecdngKh\u00f4ng \u0111\u01b0\u1ee3c h\u1ee7y c\u1ee5m Zookeeper khi b\u1ea5t k\u1ef3 c\u1ee5m Storm n\u00e0o ph\u1ee5 thu\u1ed9c v\u00e0o n\u00f3 \u0111ang ch\u1ea1y. \u0110i\u1ec1u n\u00e0y c\u00f3 th\u1ec3 d\u1eabn \u0111\u1ebfn m\u1ea5t d\u1eef li\u1ec7u.<\/p>\n<p>\u0110\u1ec3 ph\u00e1 h\u1ee7y m\u1ed9t c\u1ee5m, h\u00e3y s\u1eed d\u1ee5ng&nbsp;<code>destroy<\/code>l\u1ec7nh:<\/p>\n<pre class=\"wp-block-code\"><code>.\/zookeeper-cluster-linode.sh destroy zk-cluster1 api_env_linode.conf\n<\/code><\/pre>\n<h3 id=\"run-a-command-on-all-nodes-of-a-zookeeper-cluster\">Ch\u1ea1y l\u1ec7nh tr\u00ean t\u1ea5t c\u1ea3 c\u00e1c n\u00fat c\u1ee7a c\u1ee5m Zookeeper<a href=\"https:\/\/www.linode.com\/docs\/guides\/big-data-in-the-linode-cloud-streaming-data-processing-with-apache-storm\/#run-a-command-on-all-nodes-of-a-zookeeper-cluster\"><\/a><\/h3>\n<p>B\u1ea1n c\u00f3 th\u1ec3 ch\u1ea1y l\u1ec7nh tr\u00ean t\u1ea5t c\u1ea3 c\u00e1c n\u00fat c\u1ee7a c\u1ee5m Zookeeper c\u00f9ng m\u1ed9t l\u00fac. \u0110i\u1ec1u n\u00e0y c\u00f3 th\u1ec3 h\u1eefu \u00edch khi c\u1eadp nh\u1eadt v\u00e0 n\u00e2ng c\u1ea5p ph\u1ea7n m\u1ec1m, t\u1ea3i xu\u1ed1ng t\u00e0i nguy\u00ean ho\u1eb7c thay \u0111\u1ed5i quy\u1ec1n tr\u00ean c\u00e1c t\u1ec7p m\u1edbi. L\u01b0u \u00fd r\u1eb1ng khi s\u1eed d\u1ee5ng ph\u01b0\u01a1ng ph\u00e1p n\u00e0y, l\u1ec7nh s\u1ebd \u0111\u01b0\u1ee3c th\u1ef1c thi nh\u01b0&nbsp;<code>root<\/code>tr\u00ean m\u1ed7i n\u00fat.<\/p>\n<p>\u0110\u1ec3 th\u1ef1c hi\u1ec7n l\u1ec7nh tr\u00ean t\u1ea5t c\u1ea3 c\u00e1c n\u00fat, h\u00e3y s\u1eed d\u1ee5ng l\u1ec7nh&nbsp;<code>run<\/code>, ch\u1ec9 \u0111\u1ecbnh t\u00ean c\u1ee5m v\u00e0 c\u00e1c l\u1ec7nh s\u1ebd ch\u1ea1y. V\u00ed d\u1ee5: \u0111\u1ec3 c\u1eadp nh\u1eadt kho l\u01b0u tr\u1eef g\u00f3i c\u1ee7a b\u1ea1n tr\u00ean t\u1ea5t c\u1ea3 c\u00e1c n\u00fat:<\/p>\n<pre class=\"wp-block-code\"><code>.\/zookeeper-cluster-linode.sh run zk-cluster1 \"apt-get update\"\n<\/code><\/pre>\n<h3 id=\"copy-files-to-all-nodes-of-a-zookeeper-cluster\">Sao ch\u00e9p c\u00e1c t\u1eadp tin v\u00e0o t\u1ea5t c\u1ea3 c\u00e1c n\u00fat c\u1ee7a m\u1ed9t c\u1ee5m Zookeeper<a href=\"https:\/\/www.linode.com\/docs\/guides\/big-data-in-the-linode-cloud-streaming-data-processing-with-apache-storm\/#copy-files-to-all-nodes-of-a-zookeeper-cluster\"><\/a><\/h3>\n<p>B\u1ea1n c\u00f3 th\u1ec3 sao ch\u00e9p m\u1ed9t ho\u1eb7c nhi\u1ec1u t\u1ec7p t\u1eeb n\u00fat qu\u1ea3n l\u00fd c\u1ee5m \u0111\u1ebfn t\u1ea5t c\u1ea3 c\u00e1c n\u00fat c\u1ee7a c\u1ee5m Storm. C\u00e1c t\u1ec7p s\u1ebd \u0111\u01b0\u1ee3c sao ch\u00e9p d\u01b0\u1edbi d\u1ea1ng ng\u01b0\u1eddi&nbsp;<code>root<\/code>d\u00f9ng tr\u00ean m\u1ed7i n\u00fat, v\u00ec v\u1eady h\u00e3y ghi nh\u1edb \u0111i\u1ec1u n\u00e0y khi sao ch\u00e9p c\u00e1c t\u1ec7p c\u1ea7n quy\u1ec1n c\u1ee5 th\u1ec3.<\/p>\n<ol>\n<li>N\u1ebfu c\u00e1c t\u1ec7p ch\u01b0a c\u00f3 tr\u00ean n\u00fat qu\u1ea3n l\u00fd c\u1ee5m c\u1ee7a b\u1ea1n, tr\u01b0\u1edbc ti\u00ean b\u1ea1n c\u1ea7n sao ch\u00e9p ch\u00fang t\u1eeb m\u00e1y tr\u1ea1m c\u1ee7a m\u00ecnh. Thay th\u1ebf&nbsp;<code>local-file<\/code>cho t\u00ean ho\u1eb7c \u0111\u01b0\u1eddng d\u1eabn c\u1ee7a t\u1ec7p tr\u00ean m\u00e1y c\u1ee5c b\u1ed9 c\u1ee7a b\u1ea1n v\u00e0&nbsp;<code>cluster-manager-IP<\/code>cho \u0111\u1ecba ch\u1ec9 IP c\u1ee7a n\u00fat qu\u1ea3n l\u00fd c\u1ee5m. B\u1ea1n c\u0169ng c\u00f3 th\u1ec3 ch\u1ec9 \u0111\u1ecbnh m\u1ed9t \u0111\u01b0\u1eddng d\u1eabn t\u1ec7p kh\u00e1c v\u00e0 thay th\u1ebf n\u00f3 b\u1eb1ng&nbsp;<code>~<\/code>:<code>scp -i ~\/.ssh\/clustermgr local-files clustermgr@cluster-manager-IP:~<\/code><\/li>\n<li>\u0110\u0103ng nh\u1eadp v\u00e0o Cluster Manager Linode v\u1edbi t\u00ean ng\u01b0\u1eddi d\u00f9ng&nbsp;<code>clustermgr<\/code>v\u00e0 \u0111i\u1ec1u h\u01b0\u1edbng \u0111\u1ebfn&nbsp;<code>storm-linode<\/code>th\u01b0 m\u1ee5c:<code>ssh -i ~\/.ssh\/clustermgr clustermgr@PUBLIC-IP-OF-CLUSTER-MANAGER-LINODE cd storm-linode<\/code><\/li>\n<li>Th\u1ef1c hi\u1ec7n&nbsp;<code>cp<\/code>l\u1ec7nh, ch\u1ec9 \u0111\u1ecbnh th\u01b0 m\u1ee5c \u0111\u00edch tr\u00ean m\u1ed7i n\u00fat v\u00e0 danh s\u00e1ch c\u00e1c t\u1ec7p c\u1ee5c b\u1ed9 c\u1ea7n sao ch\u00e9p:<code>.\/zookeeper-cluster-linode.sh cp target-cluster-name \"target-directory\" \"local-files\" <\/code>H\u00e3y nh\u1edb ch\u1ec9 \u0111\u1ecbnh th\u01b0 m\u1ee5c \u0111\u00edch&nbsp;<em>tr\u01b0\u1edbc<\/em>&nbsp;danh s\u00e1ch c\u00e1c t\u1ec7p ngu\u1ed3n (\u0111\u00e2y l\u00e0 l\u1ec7nh ng\u01b0\u1ee3c l\u1ea1i v\u1edbi l\u1ec7nh th\u00f4ng th\u01b0\u1eddng&nbsp;<code>cp<\/code>)&nbsp;<code>scp<\/code>.V\u00ed d\u1ee5, n\u1ebfu c\u1ee5m c\u1ee7a b\u1ea1n y\u00eau c\u1ea7u c\u00e1c t\u1ec7p d\u1eef li\u1ec7u c\u00f3 t\u00ean \u201c*.data\u201d \u0111\u1ec3 x\u1eed l\u00fd, b\u1ea1n c\u00f3 th\u1ec3 sao ch\u00e9p ch\u00fang v\u00e0o&nbsp;<code>root<\/code>th\u01b0 m\u1ee5c g\u1ed1c c\u1ee7a ng\u01b0\u1eddi d\u00f9ng tr\u00ean t\u1ea5t c\u1ea3 c\u00e1c n\u00fat c\u1ee5m b\u1eb1ng c\u00e1ch:<code>.\/zookeeper-cluster-linode.sh cp zk-cluster1 \"~\" \"~\/*.data\"<\/code><\/li>\n<\/ol>\n<h3 id=\"delete-a-zookeeper-image\">X\u00f3a h\u00ecnh \u1ea3nh c\u1ee7a ng\u01b0\u1eddi tr\u00f4ng coi s\u1edf th\u00fa<a href=\"https:\/\/www.linode.com\/docs\/guides\/big-data-in-the-linode-cloud-streaming-data-processing-with-apache-storm\/#delete-a-zookeeper-image\"><\/a><\/h3>\n<p>\u0110\u1ec3 x\u00f3a h\u00ecnh \u1ea3nh Zookeeper, h\u00e3y th\u1ef1c hi\u1ec7n&nbsp;<code>delete-image<\/code>l\u1ec7nh:<\/p>\n<pre class=\"wp-block-code\"><code>.\/zookeeper-cluster-linode.sh delete-image zk-image1 api_env_linode.conf\n<\/code><\/pre>\n<p>L\u01b0u \u00fd r\u1eb1ng l\u1ec7nh n\u00e0y s\u1ebd x\u00f3a h\u00ecnh \u1ea3nh nh\u01b0ng kh\u00f4ng x\u00f3a b\u1ea5t k\u1ef3 c\u1ee5m n\u00e0o \u0111\u01b0\u1ee3c t\u1ea1o t\u1eeb h\u00ecnh \u1ea3nh \u0111\u00f3.<\/p>\n<h2 id=\"more-information\">Th\u00f4ng tin th\u00eam<\/h2>\n<p>B\u1ea1n c\u00f3 th\u1ec3 mu\u1ed1n tham kh\u1ea3o c\u00e1c ngu\u1ed3n sau \u0111\u1ec3 bi\u1ebft th\u00eam th\u00f4ng tin v\u1ec1 ch\u1ee7 \u0111\u1ec1 n\u00e0y. M\u1eb7c d\u00f9 ch\u00fang t\u00f4i cung c\u1ea5p v\u1edbi hy v\u1ecdng r\u1eb1ng ch\u00fang s\u1ebd h\u1eefu \u00edch, nh\u01b0ng xin l\u01b0u \u00fd r\u1eb1ng ch\u00fang t\u00f4i kh\u00f4ng th\u1ec3 \u0111\u1ea3m b\u1ea3o t\u00ednh ch\u00ednh x\u00e1c ho\u1eb7c t\u00ednh k\u1ecbp th\u1eddi c\u1ee7a c\u00e1c t\u00e0i li\u1ec7u \u0111\u01b0\u1ee3c l\u01b0u tr\u1eef b\u00ean ngo\u00e0i.<\/p>\n<ul>\n<li><a href=\"http:\/\/storm.apache.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">Trang web d\u1ef1 \u00e1n Apache Storm<\/a><\/li>\n<li><a href=\"https:\/\/storm.apache.org\/releases\/current\/index.html\" target=\"_blank\" rel=\"noreferrer noopener\">T\u00e0i li\u1ec7u Apache Storm<\/a><\/li>\n<li><a href=\"http:\/\/www.infoq.com\/presentations\/Storm-Introduction\" target=\"_blank\" rel=\"noreferrer noopener\">Storm &#8211; Ph\u00e2n t\u00e1n v\u00e0 t\u00ednh to\u00e1n th\u1eddi gian th\u1ef1c c\u00f3 kh\u1ea3 n\u0103ng ch\u1ecbu l\u1ed7i<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Apache Storm&nbsp;l\u00e0 c\u00f4ng ngh\u1ec7 d\u1eef li\u1ec7u l\u1edbn cho ph\u00e9p c\u00e1c k\u1ef9 s\u01b0 ph\u1ea7n m\u1ec1m, d\u1eef li\u1ec7u v\u00e0 c\u01a1 s\u1edf h\u1ea1 t\u1ea7ng x\u1eed l\u00fd d\u1eef li\u1ec7u t\u1ed1c \u0111\u1ed9 cao, kh\u1ed1i l\u01b0\u1ee3ng l\u1edbn theo th\u1eddi gian th\u1ef1c v\u00e0 tr\u00edch xu\u1ea5t th\u00f4ng tin h\u1eefu \u00edch. B\u1ea5t k\u1ef3 d\u1ef1 \u00e1n n\u00e0o li\u00ean quan \u0111\u1ebfn vi\u1ec7c x\u1eed l\u00fd lu\u1ed3ng d\u1eef<\/p>\n","protected":false},"author":1,"featured_media":35513,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[101],"tags":[],"class_list":["post-34879","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-big-data"],"_links":{"self":[{"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/posts\/34879","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/comments?post=34879"}],"version-history":[{"count":1,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/posts\/34879\/revisions"}],"predecessor-version":[{"id":35514,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/posts\/34879\/revisions\/35514"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/media\/35513"}],"wp:attachment":[{"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/media?parent=34879"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/categories?post=34879"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/tags?post=34879"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}