mongodb高可用读写分离

首先是配置方案:


环境准备:

[html]  view plain  copy
  1. #启动时需要使用非root用户,所有创建一个chiansun用户:  
  2. useradd chiansun  
  3. #为hadoop用户添加密码:  
  4. echo 123456 | passwd --stdin chiansun  
  5. #将chiansun添加到sudoers  
  6. echo "chiansun ALL = (root) NOPASSWD:ALL" | tee /etc/sudoers.d/chiansun  
  7. chmod 0440 /etc/sudoers.d/chiansun  
  8. #解决sudo: sorry, you must have a tty to run sudo问题,在/etc/sudoer注释掉 Default requiretty 一行  
  9. sudo sed -i 's/Defaults    requiretty/Defaults:chiansun !requiretty/' /etc/sudoers  
  10.   
  11.   
  12. #创建一个mongo目录  
  13. mkdir /mongo  
  14. #给相应的目录添加权限  
  15. chown -R chiansun:chiansun /mongo  
  16.   
  17.   
  18. #配置mongo的yum源  
  19. cat >> /etc/yum.repos.d/mongodb-org-3.4.repo << EOF  
  20. [mongodb-org-3.4]  
  21. name=MongoDB Repository  
  22. baseurl=https://repo.mongodb.org/yum/redhat/\$releasever/mongodb-org/3.4/x86_64/  
  23. gpgcheck=1  
  24. enabled=1  
  25. gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc  
  26. EOF  
  27.   
  28.   
  29. #关闭selinux  
  30. sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config  
  31.   
  32.   
  33. #重新启动  
  34. reboot  

部署配置

[html]  view plain  copy
  1. #分别在多台机器上使用chiansun用户登录  
  2. sudo yum install -y mongodb-org  
  3.   
  4. node-1    node-2       node-3  
  5.   
  6. mongos    mongos       mongos     路由服务器,寻址  
  7. config    config       config     配置服务器,保存配置  
  8. shard1主  shard2主     shard3主   分片:保存数据  
  9. shard2从  shard3从     shard1从   副本集:备份数据,可以配置读写分离(主负责写,从负责同步数据和读)  
  10. shard3从  shard1从     shard2从  
  11.   
  12. #分别在多台机器上创建mongo config server对应的目录  
  13. mkdir -p /mongo/config/{log,data,run}  
  14.   
  15. #分别在多台机器上修改config server的配置文件  
  16. cat >> /mongo/config/mongod.conf << EOF  
  17. systemLog:  
  18.   destination: file  
  19.   logAppend: true  
  20.   path: /mongo/config/log/mongod.log  
  21. storage:  
  22.   dbPath: /mongo/config/data  
  23.   journal:  
  24.     enabled: true  
  25. processManagement:  
  26.   fork: true  
  27.   pidFilePath: /mongo/config/run/mongod.pid  
  28. net:  
  29.   port: 27100  
  30. replication:  
  31.   replSetName: config  
  32. sharding:  
  33.   clusterRole: configsvr  
  34. EOF  
  35.   
  36. #启动所有的mongo config server服务  
  37. mongod --config /mongo/config/mongod.conf  
  38.   
  39. #登录任意一台配置服务器,初始化配置副本集  
  40. mongo --port 27100  
  41.   
  42. #创建配置  
  43. config = {  
  44.  #id名要和replSetName名保持一致  
  45.    _id : "config",  
  46.     members : [  
  47.         {_id : 0, host : "192.168.1.11:27100" },  
  48.         {_id : 1, host : "192.168.1.12:27100" },  
  49.         {_id : 2, host : "192.168.1.13:27100" }  
  50.     ]  
  51. }  
  52.   
  53. #初始化副本集配置  
  54. rs.initiate(config)  
  55.   
  56. #查看分区状态  
  57. rs.status()  
  58.   
  59. #注意:其中,"_id" : "config"应与配置文件中配置的 replicaction.replSetName 一致,"members" 中的 "host" 为三个节点的ip和port  
  60.   
  61. ------------------------------------------------------------------------------------------------  
  62. ------------------------------------------------------------------------------------------------  
  63.   
  64. #配置第一个分片和副本集  
  65. #修改mongo shard1 server的配置文件  
  66. mkdir -p /mongo/shard1/{log,data,run}  
  67.   
  68. #分别在多台机器上修改shard1 server的配置文件  
  69. cat >> /mongo/shard1/mongod.conf << EOF  
  70. systemLog:  
  71.   destination: file  
  72.   logAppend: true  
  73.   path: /mongo/shard1/log/mongod.log  
  74. storage:  
  75.   dbPath: /mongo/shard1/data  
  76.   journal:  
  77.     enabled: true  
  78. processManagement:  
  79.   fork: true  
  80.   pidFilePath: /mongo/shard1/run/mongod.pid  
  81. net:  
  82.   port: 27001  
  83. replication:  
  84.   replSetName: shard1  
  85. sharding:  
  86.   clusterRole: shardsvr  
  87. EOF  
  88.   
  89. #启动所有的shard1 server  
  90. mongod --config /mongo/shard1/mongod.conf  
  91.   
  92. #登陆任意一台shard1服务器,初始化副本集  
  93. mongo --port 27001  
  94. #使用admin数据库  
  95. use admin  
  96. #定义副本集配置  
  97. config = {  
  98.    _id : "shard1",  
  99.     members : [  
  100.         {_id : 0, host : "192.168.1.11:27001" },  
  101.         {_id : 1, host : "192.168.1.12:27001" },  
  102.         {_id : 2, host : "192.168.1.13:27001" }  
  103.     ]  
  104. }  
  105. #初始化副本集配置  
  106. rs.initiate(config);  
  107.   
  108. #查看分区状态  
  109. rs.status()  
  110.   
  111. ------------------------------------------------------------------------------------------------  
  112. ------------------------------------------------------------------------------------------------  
  113.   
  114. #配置第二个分片和副本集  
  115. #修改mongo shard2 server的配置文件  
  116. mkdir -p /mongo/shard2/{log,data,run}  
  117.   
  118. #分别在多台机器上修改shard2 server的配置文件  
  119. cat >> /mongo/shard2/mongod.conf << EOF  
  120. systemLog:  
  121.   destination: file  
  122.   logAppend: true  
  123.   path: /mongo/shard2/log/mongod.log  
  124. storage:  
  125.   dbPath: /mongo/shard2/data  
  126.   journal:  
  127.     enabled: true  
  128. processManagement:  
  129.   fork: true  
  130.   pidFilePath: /mongo/shard2/run/mongod.pid  
  131. net:  
  132.   port: 27002  
  133. replication:  
  134.   replSetName: shard2  
  135. sharding:  
  136.   clusterRole: shardsvr  
  137. EOF  
  138.   
  139. #启动所有的shard2 server  
  140. mongod --config /mongo/shard2/mongod.conf  
  141.   
  142. #登陆任意一台shard2服务器,初始化副本集  
  143. mongo --port 27002  
  144. #使用admin数据库  
  145. use admin  
  146. #定义副本集配置  
  147. config = {  
  148.    _id : "shard2",  
  149.     members : [  
  150.         {_id : 0, host : "192.168.1.12:27002" },  
  151.         {_id : 1, host : "192.168.1.13:27002" },  
  152.         {_id : 2, host : "192.168.1.11:27002" }  
  153.     ]  
  154. }  
  155. #初始化副本集配置  
  156. rs.initiate(config)  
  157.   
  158. #查看分区状态  
  159. rs.status()  
  160.   
  161. ------------------------------------------------------------------------------------------------  
  162. ------------------------------------------------------------------------------------------------  
  163.   
  164. #配置第三个分片和副本集  
  165. #修改mongo shard3 server的配置文件  
  166. mkdir -p /mongo/shard3/{log,data,run}  
  167.   
  168. #分别在多台机器上修改shard3 server的配置文件  
  169. cat >> /mongo/shard3/mongod.conf << EOF  
  170. systemLog:  
  171.   destination: file  
  172.   logAppend: true  
  173.   path: /mongo/shard3/log/mongod.log  
  174. storage:  
  175.   dbPath: /mongo/shard3/data  
  176.   journal:  
  177.     enabled: true  
  178. processManagement:  
  179.   fork: true  
  180.   pidFilePath: /mongo/shard3/run/mongod.pid  
  181. net:  
  182.   port: 27003  
  183. replication:  
  184.   replSetName: shard3  
  185. sharding:  
  186.   clusterRole: shardsvr  
  187. EOF  
  188.   
  189. #启动所有的shard3 server  
  190. mongod --config /mongo/shard3/mongod.conf  
  191.   
  192. #登陆192.168.1.13的shard3服务器,初始化副本集  
  193. mongo --port 27003  
  194. #使用admin数据库  
  195. use admin  
  196. #定义副本集配置  
  197. config = {  
  198.    _id : "shard3",  
  199.     members : [  
  200.         {_id : 0, host : "192.168.1.13:27003" },  
  201.         {_id : 1, host : "192.168.1.11:27003" },  
  202.         {_id : 2, host : "192.168.1.12:27003" }  
  203.     ]  
  204. }  
  205. #初始化副本集配置  
  206. rs.initiate(config)  
  207.   
  208. #查看分区状态  
  209. rs.status()  
  210.   
  211. ------------------------------------------------------------------------------------------------  
  212. ------------------------------------------------------------------------------------------------  
  213.   
  214.   
  215. ------------------------------------------------------------------------------------------------  
  216. ######注意:启动mongos是守候进程是因为/mongo/mongos/mongod.conf缺少了fork: true这个配置#######  
  217. ------------------------------------------------------------------------------------------------  
  218. mkdir -p /mongo/mongos/{log,data,run}  
  219.   
  220. #添加mongs的配置文件  
  221. cat >> /mongo/mongos/mongod.conf << EOF  
  222. systemLog:  
  223.   destination: file  
  224.   logAppend: true  
  225.   path: /mongo/mongos/log/mongod.log  
  226. processManagement:  
  227.   fork: true  
  228.   pidFilePath: /mongo/mongos/run/mongod.pid  
  229. net:  
  230.   port: 27200  
  231. sharding:  
  232.   configDB: config/192.168.1.111:27100,192.168.1.12:27100,192.168.1.13:27100  
  233. EOF  
  234.   
  235. #注意,这里configDB后面的config要与配置服务器的_id保持一致  
  236.   
  237. #启动路由服务器  
  238. mongos --config /mongo/mongos/mongod.conf  
  239.   
  240. #登录其中的一台路由节点,手动启用分片  
  241. mongo --port 27200  
  242.   
  243. #添加分片到mongos  
  244. sh.addShard("shard1/192.168.1.11:27001,192.168.1.12:27001,192.168.1.13:27001")  
  245. sh.addShard("shard2/192.168.1.12:27002,192.168.1.13:27002,192.168.1.11:27002")  
  246. sh.addShard("shard3/192.168.1.13:27003,192.168.1.11:27003,192.168.1.12:27003")  
  247.   
  248. #设置slave可读  
  249. rs.slaveOk()  
  250.   
  251. ------------------------------------------------------------------------------------------------  
  252. ####没有分片是因为没有开启分片规则####################  
  253. ------------------------------------------------------------------------------------------------  
  254. #对bike这个数据库开启分片功能  
  255. db.runCommand({"enablesharding":"bike"})   
  256.   
  257. ##对bike数据库下的users集合按id的hash进行分片  
  258. db.runCommand({"shardcollection":"bike.users","key":{_id:'hashed'}})  
  259.   
  260.   
  261. #启动所有的config server  
  262. mongod --config /mongo/config/mongod.conf  
  263. #启动所有的shard1  
  264. mongod --config /mongo/shard1/mongod.conf  
  265. #启动所有的shard2  
  266. mongod --config /mongo/shard2/mongod.conf  
  267. #启动所有的shard3  
  268. mongod --config /mongo/shard3/mongod.conf  
  269. #启动所有的mongos  
  270. mongos --config /mongo/mongos/mongod.conf  
  271.   
  272.   
  273. #关闭服务  
  274. mongod --shutdown --dbpath /mongo/shard3/data  
  275. mongod --shutdown --dbpath /mongo/shard2/data  
  276. mongod --shutdown --dbpath /mongo/shard1/data  
  277. mongod --shutdown --dbpath /mongo/config/data  
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REaDME.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值