main.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package main
  2. import (
  3. "log"
  4. "os"
  5. "igit.com/xbase/raft"
  6. "igit.com/xbase/raft/example/basic/common"
  7. )
  8. func main() {
  9. // Configuration
  10. nodeID := "node2"
  11. addr := "127.0.0.1:9501" // Raft Port
  12. httpAddr := ":8501" // HTTP API Port
  13. dataDir := "../data/node2"
  14. // Cluster configuration
  15. clusterNodes := map[string]string{
  16. "node1": "127.0.0.1:9500",
  17. "node2": "127.0.0.1:9501",
  18. }
  19. config := raft.DefaultConfig()
  20. config.NodeID = nodeID
  21. config.ListenAddr = addr
  22. config.DataDir = dataDir
  23. config.ClusterNodes = clusterNodes
  24. // Enable HTTP API for WebHooks
  25. config.HTTPAddr = httpAddr
  26. // Console Logger
  27. config.Logger = raft.NewConsoleLogger(nodeID, 3) // Error level only (Quiet mode)
  28. // Ensure data directory exists
  29. if err := os.MkdirAll(dataDir, 0755); err != nil {
  30. log.Fatalf("Failed to create data directory: %v", err)
  31. }
  32. // Create KV Server
  33. server, err := raft.NewKVServer(config)
  34. if err != nil {
  35. log.Fatalf("Failed to create server: %v", err)
  36. }
  37. // Register demo commands
  38. common.RegisterDemoCommands(server.CLI)
  39. // Start server
  40. if err := server.Start(); err != nil {
  41. log.Fatalf("Failed to start server: %v", err)
  42. }
  43. log.Printf("Raft Node %s started at %s", nodeID, addr)
  44. log.Printf("HTTP API started at %s", httpAddr)
  45. defer server.Stop()
  46. // Keep main thread running
  47. select {}
  48. }