database.sh 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. #!/bin/bash
  2. #
  3. # Configures the database server for TFB
  4. #
  5. # Note: This is not used for Travis-CI. See run-ci.py to see
  6. # how databases are configured for Travis.
  7. #
  8. # Note on Compatibility: TFB *only* supports Ubuntu 14.04 64bit
  9. # (e.g. trusty64). However, it's nice to retain 12.04 support
  10. # where possible, as it's still heavily used.
  11. #
  12. # Database setup is one core area where we can help ensure TFB
  13. # works on 12.04 with minimal frustration. In some cases we
  14. # manually install the DB version that's expected, instead of the
  15. # 12.04 default. In other cases we can use a 12.04 specific
  16. # configuration file. These patches are not intended to enable
  17. # benchmarking (e.g. there are no guarantees that
  18. # the databases will be tuned for performance correctly), but
  19. # they do allow users on 12.04 to install and run most TFB tests.
  20. # Some tests internally have 12.04 incompatibilities, we make no
  21. # concentrated effort to address these cases, but PR's for specific
  22. # problems are welcome
  23. export DB_HOST={database_host}
  24. set -x
  25. export DEBIAN_FRONTEND=noninteractive
  26. source /etc/lsb-release
  27. export TFB_DISTRIB_ID=$DISTRIB_ID
  28. export TFB_DISTRIB_RELEASE=$DISTRIB_RELEASE
  29. export TFB_DISTRIB_CODENAME=$DISTRIB_CODENAME
  30. export TFB_DISTRIB_DESCRIPTION=$DISTRIB_DESCRIPTION
  31. ##############################
  32. # Prerequisites
  33. ##############################
  34. sudo apt-get -y update
  35. # WARNING: DONT PUT A SPACE AFTER ANY BACKSLASH OR APT WILL BREAK
  36. # Dpkg::Options avoid hangs on Travis-CI, don't affect clean systems
  37. sudo apt-get -y install -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" \
  38. build-essential \
  39. git \
  40. libev-dev \
  41. libpq-dev \
  42. libreadline6-dev \
  43. postgresql `# Installs 9.1 or 9.3, based on Ubuntu version` \
  44. redis-server `# Installs 2.4 or 2.6, based on Ubuntu version` \
  45. lsb-core `# Ensure that lsb_release can be used`
  46. sudo sh -c "echo '* - nofile 65535' >> /etc/security/limits.conf"
  47. # Create a user-owned directory for our databases
  48. sudo mkdir -p /ssd
  49. sudo mkdir -p /ssd/log
  50. sudo chown -R $USER:$USER /ssd
  51. # Additional user account (only use if required)
  52. sudo useradd benchmarkdbuser -p benchmarkdbpass
  53. ##############################
  54. # MySQL
  55. ##############################
  56. echo "Setting up MySQL database"
  57. sudo sh -c "echo mysql-server mysql-server/root_password_again select secret | debconf-set-selections"
  58. sudo sh -c "echo mysql-server mysql-server/root_password select secret | debconf-set-selections"
  59. sudo apt-get -y install mysql-server
  60. sudo stop mysql
  61. # disable checking of disk size
  62. sudo mv mysql /etc/init.d/mysql
  63. sudo chmod +x /etc/init.d/mysql
  64. sudo mv mysql.conf /etc/init/mysql.conf
  65. # use the my.cnf file to overwrite /etc/mysql/my.cnf
  66. sudo mv /etc/mysql/my.cnf /etc/mysql/my.cnf.orig
  67. sudo mv my.cnf /etc/mysql/my.cnf
  68. sudo rm -rf /ssd/mysql
  69. sudo rm -rf /ssd/log/mysql
  70. sudo cp -R -p /var/lib/mysql /ssd/
  71. sudo cp -R -p /var/log/mysql /ssd/log
  72. sudo cp usr.sbin.mysqld /etc/apparmor.d/
  73. sudo /etc/init.d/apparmor reload
  74. sudo start mysql
  75. # Insert data
  76. mysql -uroot -psecret < create.sql
  77. rm create.sql
  78. ##############################
  79. # Postgres
  80. ##############################
  81. echo "Setting up Postgres database"
  82. if [ "$TFB_DISTRIB_CODENAME" == "precise" ]; then
  83. echo "WARNING: Force upgrading Postgres for Ubuntu 12.04"
  84. sudo apt-get remove -y postgresql postgresql-9.1 postgresql-client-9.1
  85. echo "deb http://apt.postgresql.org/pub/repos/apt/ precise-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list
  86. wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
  87. sudo apt-get update
  88. sudo apt-get install -y postgresql-9.3 postgresql-client-9.3
  89. sudo /etc/init.d/postgresql start
  90. fi
  91. sudo /etc/init.d/postgresql stop
  92. sudo mv postgresql.conf /etc/postgresql/9.3/main/postgresql.conf
  93. sudo mv pg_hba.conf /etc/postgresql/9.3/main/pg_hba.conf
  94. sudo rm -rf /ssd/postgresql
  95. sudo cp -R -p /var/lib/postgresql/9.3/main /ssd/postgresql
  96. sudo mv 60-postgresql-shm.conf /etc/sysctl.d/60-postgresql-shm.conf
  97. sudo /etc/init.d/postgresql start
  98. sudo -u postgres psql template1 < create-postgres-database.sql
  99. sudo -u benchmarkdbuser psql hello_world < create-postgres.sql
  100. rm create-postgres-database.sql create-postgres.sql
  101. sudo /etc/init.d/postgresql restart
  102. ##############################
  103. # MongoDB
  104. #
  105. # Note for 12.04: Using mongodb.org ensures 2.6 is installed
  106. ##############################
  107. echo "Setting up MongoDB database"
  108. sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10
  109. echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | sudo tee /etc/apt/sources.list.d/mongodb.list
  110. sudo apt-get -y update
  111. sudo apt-get -y remove mongodb-clients
  112. sudo apt-get -y install mongodb-org
  113. sudo service mongod stop
  114. sudo mv /etc/mongodb.conf /etc/mongodb.conf.orig
  115. sudo cp mongodb.conf /etc/mongodb.conf
  116. sudo mv mongodb.conf /etc/mongod.conf
  117. sudo rm -rf /ssd/mongodb
  118. sudo rm -rf /ssd/log/mongodb
  119. sudo cp -R -p /var/lib/mongodb /ssd/
  120. sudo cp -R -p /var/log/mongodb /ssd/log/
  121. sudo service mongod start
  122. until nc -z localhost 27017 ; do echo Waiting for MongoDB; sleep 1; done
  123. mongo < create.js
  124. rm create.js
  125. mongod --version
  126. ##############################
  127. # Apache Cassandra
  128. ##############################
  129. echo "Setting up Apache Cassandra database"
  130. sudo apt-get install -qqy openjdk-7-jdk
  131. export CASS_V=2.0.7
  132. wget -nv http://archive.apache.org/dist/cassandra/$CASS_V/apache-cassandra-$CASS_V-bin.tar.gz
  133. tar xzf apache-cassandra-$CASS_V-bin.tar.gz
  134. rm -rf /ssd/cassandra /ssd/log/cassandra
  135. mkdir -p /ssd/cassandra /ssd/log/cassandra
  136. sed -i "s/^.*seeds:.*/ - seeds: \"$DB_HOST\"/" cassandra/cassandra.yaml
  137. sed -i "s/^listen_address:.*/listen_address: $DB_HOST/" cassandra/cassandra.yaml
  138. sed -i "s/^rpc_address:.*/rpc_address: $DB_HOST/" cassandra/cassandra.yaml
  139. mv cassandra/cassandra.yaml apache-cassandra-$CASS_V/conf
  140. mv cassandra/log4j-server.properties apache-cassandra-$CASS_V/conf
  141. nohup apache-cassandra-$CASS_V/bin/cassandra -p c.pid > cassandra.log
  142. until nc -z $DB_HOST 9160 ; do echo Waiting for Cassandra; sleep 1; done
  143. cat cassandra/cleanup-keyspace.cql | apache-cassandra-$CASS_V/bin/cqlsh $DB_HOST
  144. python cassandra/db-data-gen.py > cassandra/tfb-data.cql
  145. apache-cassandra-$CASS_V/bin/cqlsh -f cassandra/create-keyspace.cql $DB_HOST
  146. apache-cassandra-$CASS_V/bin/cqlsh -f cassandra/tfb-data.cql $DB_HOST
  147. rm -rf apache-cassandra-*-bin.tar.gz cassandra
  148. ##############################
  149. # Redis
  150. ##############################
  151. echo "Setting up Redis database"
  152. if [ "$TFB_DISTRIB_CODENAME" == "precise" ]; then
  153. echo "WARNING: Downgrading Redis configuration for Ubuntu 12.04"
  154. # On 12.04, Redis 2.4 is installed. It doesn't support
  155. # some of the 2.6 options, so we have to remove or comment
  156. # those
  157. sed -i 's/tcp-keepalive/# tcp-keepalive/' redis.conf
  158. sed -i 's/stop-writes-on-bgsave-error/# stop-writes-on-bgsave-error/' redis.conf
  159. sed -i 's/rdbchecksum/# rdbchecksum/' redis.conf
  160. sed -i 's/slave-read-only/# slave-read-only/' redis.conf
  161. sed -i 's/repl-disable-tcp-nodelay/# repl-disable-tcp-nodelay/' redis.conf
  162. sed -i 's/slave-priority/# slave-priority/' redis.conf
  163. sed -i 's/auto-aof-rewrite-percentage/# auto-aof-rewrite-percentage/' redis.conf
  164. sed -i 's/auto-aof-rewrite-min-size/# auto-aof-rewrite-min-size/' redis.conf
  165. sed -i 's/lua-time-limit/# lua-time-limit/' redis.conf
  166. sed -i 's/notify-keyspace-events/# notify-keyspace-events/' redis.conf
  167. sed -i 's/hash-max-ziplist-entries/# hash-max-ziplist-entries/' redis.conf
  168. sed -i 's/hash-max-ziplist-value/# hash-max-ziplist-value/' redis.conf
  169. sed -i 's/zset-max-ziplist-entries/# zset-max-ziplist-entries/' redis.conf
  170. sed -i 's/zset-max-ziplist-value/# zset-max-ziplist-value/' redis.conf
  171. sed -i 's/client-output-buffer-limit/# client-output-buffer-limit/' redis.conf
  172. sed -i 's/hz 10/# hz 10/' redis.conf
  173. sed -i 's/aof-rewrite-incremental-fsync/# aof-rewrite-incremental-fsync/' redis.conf
  174. fi
  175. sudo service redis-server stop
  176. sudo mv redis.conf /etc/redis/redis.conf
  177. sudo service redis-server start
  178. bash create-redis.sh
  179. rm create-redis.sh