我们的网站流量相对较低(每天约 1K 页面浏览量),托管在一台服务器上,预计未来几年将大幅增长。
我正在考虑转移到 Rackspace CloudServer 或 EC2 并启动 3 个节点(全部在 CentOS 上):
- 2 x Web(Apache)-带有负载均衡器
- 1 x MySQL(用于 Wordpress 支持的部分)
问题是现在该把 Cassandra 放在哪里......
它应该位于每个 Web 节点上,还是 MySQL 节点上?
我现在的想法是将其放在 Web 节点上。据我所知,Cassandra 具有容错优势(即,如果我们关闭一个节点,该站点仍可运行)。因此,即使只有 2 个节点,我们也能获得这种优势,而不是仅仅将其放在 MySQL 节点上。
此外,当我们扩展并添加另一个节点时,cassandra实例可以随之出现,并且php始终可以在本地主机上运行其查询。这是一个好主意吗?
答案1
一种观察方法是确定每个应用程序消耗的资源,并在各个节点之间平衡它们的使用。
- MySQL:内存、磁盘 I/O、CPU
- Apache:内存、CPU
- Cassandra:内存、磁盘 I/O
从上面的“香烟包背面”开始,我将以 Cassandra 和 Apache 共享、MySQL 独享为前提,然后从该起点挑选漏洞并改进该方法。
答案2
需要记住的是,如果您运行 Cassandra,您需要决定是将所有内容保留在 JVM 内部并根据需要增加它,还是放弃 JNA 并允许您的行缓存驻留在系统内存中。
目前的最佳做法是使用 JNA 运行,因为它还允许您拍摄没有内存占用的快照(因为 JNA 允许 java 设置硬链接),但是一旦您开始在 cassandra 和其他应用程序之间共享非 JVM 系统内存,您很可能会在不经意间开始默默哭泣。如果可以,请考虑在单独的机器上运行 cassandra。
但如果不是这样——只有当您拥有多个节点并且您的复制因子和读写一致性级别经过正确计算时,您才能在 Cassandra 中获得容错能力。对于三节点环,如果您主要关注的是容错能力/数据可用性,我会将复制因子设置为 3,并将您的读写一致性级别设置为 ONE。